OmniAICreator/Qiita-1.07M huggingface dataset:
Sikuri 1.1.4でコマンドバーが表示されない。

Sikuri1.1.4についてMacBookにインストールしたところ、コマンドバーが表示されなかった。
ちょっと触ってみるにはコマンドバーが欲しいので対処方法を記載する。

#コマンドバーってどれのこと
画面左側のGUIで部品を選択できる欄のこと。
公式で*Command-Bar*と表現されている。

![SikulixIDE_113.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43031/00e35052-f9c0-e427-2105-1ae95ac55aa2.jpeg)

#前提
本記事を記載している2019/5/3時点ではSikuri1.1.4でコマンドバーがバグ対処のため意図的に無効にされている。バグ修正後将来のリリースで復帰するとのことだ。

> ・IDE: Command-Bar (optional left side clickable list of basic features) is switched off. Will come back in a more general form asap bug

引用元 Project Sikulix 
[Version 1.1.4 - Bugs, known Problems, requests and possible workarounds
](https://sikulix-2014.readthedocs.io/en/latest/newsbugs.html#newsbugs)

#対処
上記の通りSikuri1.1.4ではそもそもコマンドバーが無効となっている。
設定画面でも表示/非表示のオプションが表示されていないため、使用することはできない。
そこで、Support対象からは外れているが、Sikuri1.1.3を入れることとした。
以下順番にSikuri1.1.4とSikuri1.1.3のダウンロードについて記載する。それぞれインストールの手順は他の記事に依る。

#Sikuri 1.1.4ダウンロード

インストールについてはこちらの記事を参考させていただいた。

[Qiita:MacへのSikuriXの導入@dzzds氏
](https://qiita.com/dzzds/items/728ff14a42bd9f0f8513)


Java実行環境は要件を満たしていたのでいきなりダウンロードから実施した。
スクリプトはJythonとJrubyが利用できる。
Jythonを利用したいので以下のサイトよりIDEとJythonをダウンロードする。

[SikuliX1 Downloads]
(https://raiman.github.io/SikuliX1/downloads.html)

- The Jython interpreter 2.7.1 for python scripting (the default)
- Download the ready to use sikulix.jar (SikuliX IDE)

上記を同じディレクトリに保存し、sikulix.jarを起動すれば画面が起動し操作可能となる。


#Sikuri 1.1.3ダウンロード
[SikuliX1 Downloads]
(https://raiman.github.io/SikuliX1/downloads.html)

ページ下部の*Download SikuliX 1.1.3 setup*のリンクからダウンロードページへ遷移するので以下のファイルをダウンロードする。

Sikulixsetup-1.1.3.jar

1.1.4のインストールで使用したJythonのjarファイルを同じディレクトリに保存した上で起動すればよい。
こちらはsetupと名がつく通りインストーラーの体をなしている。インストールの詳細な手順はこちらの記事を参考にさせていただいた。私は他のIDEでの開発は行わないので、Pack1のみ選択してインストールした。


[masuoのブログ:SikuliをRPAに使う－[2]セットアップ(SikuliX1.1.3まで)](http://masuo.doorblog.jp/archives/51800961.html)

ちなみに1.1.3では設定よりコマンドバーの表示、非表示を切り替えることができる。

#まとめ
どのバージョンでコマンドバーが復帰するのか不明だが、新しいバージョンのリリースの際に試してみる。
packet, package どう違う ? 英語(9) 

packetもpackageも小包という訳がある。

じゃ、どう違うんだろう。

packageは荷物。

packetの方が、小さいという感じ。

語源を調べようと思ったら、いきなり出てきた。

pack / packet / package / packaging / packing / parcelの違い
https://talking-english.net/pack-packet-package-parcel/

疑問に思う人はいるんですね。じゃ、全部語源を調べましょう。

最初は、packetとpackageの違いじゃ、１つの記事にならないと思いながら書き始めました。
いきなり、これは記事になると。

# pack
pack
https://www.etymonline.com/search?q=pack

# packet
packet
https://www.etymonline.com/search?q=packet
>bundle" (see pack (n.)) + diminutive suffix -et;
et＝指小辞　小さい

# package
package
https://www.etymonline.com/search?q=package

# packaging

# packing

# parcel
parcel
https://eigogen.com/word/parcel/
http://gogen-wisdom.hatenablog.com/search?q=parcel
pars = a part(部分),
cle＝指小辞　小さい

# 疑問
packetとparcelの違い
packagingとpackingの違い
がわからなくなった

# 動名詞ing
大西泰斗 ハートで感じる英文法　決定版 NHK
https://www.amazon.co.jp/dp/B07HM7GHQC/
![51PXBuaV-BL.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/2f24a15d-bc15-8969-b4c5-e10387391300.jpeg)
>LESSON 6 すべての-ing は躍動する

# tea bag か tea packか
ティーバッグとティーパックはどちらが正しい？英単語のbagとpackのもともとの意味の違い
https://information-station.xyz/4497.html

# 参考資料(reference)
プログラマが知っているとよい英単語の語源
https://qiita.com/kaizen_nagoya/items/9de6d47c47e2c211222b

英語学習お勧め
https://qiita.com/kaizen_nagoya/items/23541e0a455ac9ad75a2

プログラマが英語で報告・質問する時のいくつかの事例・方法
https://qiita.com/kaizen_nagoya/items/9cf2ba858e52e9795b67

英語で読み解くAutomotive SPICE研究会(書きかけ)
https://qiita.com/kaizen_nagoya/items/a52c619ac41c030ec0b7

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
# 文書履歴(document history)
ver. 0.01 初稿 20190502 朝
ver. 0.02 ありがとう追記 　 20230529
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
独学ではじめてWEBサービスを作って身についた、プログラミング言語技術以外のこと

曲がりなりにもWEBサービスを公開した中で、いわゆるプログラミング言語技術以外で身についたんじゃないかなーということを書きたいと思います。
##対象読者
駆け出しエンジニア
インプットが大好きな人
##総論
とにかく手を動かさないと身につかない！し、動かしてたら身につくよ。
#身についたこと
##Gitでのバージョン管理
今まで切った貼ったで適当に上書き保存をしたり、別名で保存したり、気になった箇所を条件反射で修正したりしていましたが、今回意識してGitを使ってみるととても便利、というか気が楽になりました。
###GitHub Flowはモチベーションを保つのに良い
導入が簡単そうだったのでGitHub Flowを参考にしました。
GitHubを中心にして管理するわけですが、シンプルで分かりやすいというのと、草が生えるのはモチベーション的にとても助かりました。
###タスクごとにブランチを切る
タスクごとにブランチを切ることで今すべきことに集中できました。ブランチ名をタスクに沿った名前にするとターミナル上に表示されて意識しやすく良かったです。
###コンフリクトは怖くない
コンフリクトは今までどう対処したらいいのかが分からなくて、コンフリクトが起きる前までとにかく戻ってなかった事にする、みたいなことしかできていなかったんですが、VSCodeを使うととてもわかり易く対処できました。
###VSCodeをちゃんと使う
今回Git周りではVSCodeにかなり助けられてます。
VSCodeの組み込みのGit画面も便利で、常に表示しておくとこまめに労なくコミットができました。今までが疲れたらまとめてコミットみたいなひどい状態だったので、幾分かましになったんじゃないかと思います。
###使わない(かもしれない)コードを気兼ねなく消せる
新しい実装を思いついた時に今までは古い実装部分をコメントアウトをして残していました。
特に気にしていなかったんですが、コメントアウト部分を思い切って消してしまうとコード上がとてもすっきりし、こんなに散らかったところでコード書いてたんだなぁと、机を掃除したような気分になりました。
Gitをちゃんと使ってると、もし必要になってもまたすぐ戻せるってのは安心できるもんですね。
##プログラミングの組み立て方
###小さく、簡単なものをまずは動かす。

これはプログラミングの学習においてどこでも言われることかと思いますが、やっとできてきたように思います。

実際のコード上で新しいことを試すのではなく、ダンドboxとして別のファイルを作ってそこで試してみると、原因の究明や仕組みの理解がしやすかったです。

今まではライブラリの設定など、本番と同じ環境にするのが面倒くさかったり理解できてなかったため、本番のソースコード上で新しいこと試してました。そうすると影響の範囲が広くて全然理解できないんですよね。その上進捗も無いので自信も無くなるという悪循環。
###テスト駆動的に作る
厳密なテスト駆動とは違うんですが、console.logで希望する返り値を横に書いとくと便利でした。
`console.log(tagging()) //"TAKI183"`
`console.log(tagging(pubkey)) //"CSDM398"`
のように実装する前に先に書いとくって感じです。

本当はJest等の自動テストツールを使ってちゃんと作りたかったんですが、これでも割と助かりました。

上から作るか下から作るかみたいな話だと思うんですが、今までは最初からロジックを組み立ててました。

そうじゃなくて、上から、というか関数を作ってとりあえず欲しい返り値をreturnしちゃう。文字列なのか数値なのか、オブジェクトならどんなパラメータがあるのか。consoleで先に出してはっきりさせとくと、返り値の定義もしやすくロジックも作りやすかったです。
###技術のこだわりを一旦捨てる
Qiitaはめちゃくちゃ読んでます。だからなのか最新の技術はこれ！どうせやるならこの技術！といった最先端病とても言うような思考に陥っていました。

一番効率的な技術、最先端の環境にばかり興味が言って、技術調査でどんどん時間が溶ける…

最先端病から脱せたのは締切を作ったことと、完成を第一にしたのが良かったんだと思います。

最初はVue CLIを使って単一コンポーネントで作り、ScopedCSSで効率的に！とか思ってたんですが、最終的にはCDN版のVueになりました。
それでも愚直に動くものを作ることを第一にすることで、やっとひとつ完成させる事ができました。
###自分で実装してみないと結局わからん
上記とも関連しますが、Qiitaやはてブロ、書籍など、情報はたくさんあふれています。スマホでどこでも情報を読めます。

でもそれでできる気になってしまっていたのがはっきりわかりました。やっぱり自分で動かして、実装してみないとちゃんとは理解できないもんですね。

今回ですと、WebSocketやPromise周りが全然理解できてなかったです。正直今でも怪しいんですが、ちゃんと理解が怪しいと自覚できたのも収穫です。
##やってよかったこと
###サービスの周辺知識を広く調べる
今回作ったサービスはストリートグラフィティをモチーフにしました。

とにかくコードを書き実装をしたかったので、ストリートグラフィティについては画像を検索し、なんとなくの知識で作り始めました。が、いまいちかっこよくならない。

そんな行き詰まった時に改めてストリートグラフィティの歴史から意味、書き方を調べてみると、今まで実装方法だけでしか考えていなかったものが、血が通ったアイデアが湧いてきました。今考えるとUXデザイン的なことなのかも知れません。

ここ最近プログラミングの事ばかりQiitaやら本やらで調べていたので、全然違う勉強が単純に楽しかったのもあります:)

プログラミングの勉強だけじゃなく、そのサービス自体の知識を直接関係ないかもしれない周りのことまで知ると、実際のサービスにもとても良い影響があると思います。


##まとめ
独学で勉強している方、プログラミングの学習方法について不安も多いかと思います。僕も独学でやっているので、本を読み漁り、Qiitaに張り付き、「一番のやり方」をずっと求めてしまっています。

でも「一番のやり方」を探すよりも、手を動かすとホントに意外と身につくってのがここ最近の一番の収穫です。

それこそ、この記事を読んでもプログラミングが速くなるわけでも、ソースコードが綺麗になるわけでもありませんが（笑）この記事を読んで下さった方の、少しでも励みになれば嬉しいです。
electronでMain/Renderer間で通信するときに毎回作りたいクラス

# プロセス間通信の基本

## Main 受信

```ts

import { ipcMain } from 'electron'
ipcMain.on(key, (event, data) => {
})
```

## Main 送信

```ts
import { BrowserWindow } from 'electron'
let mainWindow = new BrowserWindow({
    height: 563,
    useContentSize: true,
    width: 1500,
    icon: __dirname + '../../icons/mac/app.icns',
    webPreferences: {
      webSecurity: false
    }
  })
mainWindow.webContents.send(key);
```

## Renderer 送信・受信

```ts
import { ipcRenderer } from 'electron'
ipcRequest (key: string, data: any) : Promise<any>{
      return new Promise( resolve => {
        ipcRenderer.send(key, data)
        ipcRenderer.on(key, (_, data) => {
          console.log('ipcRequest', data)
        })  
      })
    },
```

# IPCをAPIのように使う

## Renderer にmixinで関数を生やす

aync/awaitを使って、送信・受信して結果を受け取れるようにする。

```mixin.ts
import { ipcRenderer } from 'electron'
import * as Keys from '../ipcKeys'

export const Mixin = {
  methods: {
    ipcRequest (key: string, data: any) : Promise<any>{
      return new Promise( resolve => {
        ipcRenderer.send(key, data)
        ipcRenderer.on(key, (_, data) => {
          resolve(data)
          console.log('ipcRequest', data)
        })  
      })
    },
    // this.setting = await this.fetchSetting() こんな感じで呼ぶ
    async fetchSetting () {
      let result = await this.ipcRequest(Keys.IPC_KEY_FETCH_SETTING, null)
      return result
    }
  }
}

```

## 共通 Key管理

送信にも受信にも同じキーが必要なので管理するクラスを用意しましょう

```ipcKeys.ts
export const IPC_KEY_FETCH_ENCODE_FILES = "IPC_KEY_FETCH_ENCODE_FILES"
```

## Main 受信・送信

```ipcMonitor.ts
import { EventEmitter } from "events"
import { ipcMain } from 'electron'
import * as Keys from '../../ipcKeys'

export default class IpcMonitor extends EventEmitter {

  constructor(){
    super()
    this.monitor()
  }

  private monitor() {
    ipcMain.on(Keys.IPC_KEY_FETCH_SETTING, (event, _) => {
      this.emit(Keys.IPC_KEY_FETCH_SETTING)
    })
  }
}
```

呼び出し

```ts
  ipcMonitor.on(Keys.IPC_KEY_FETCH_SETTING , async () => {
    const setting = await fileMonitor.fetchSetting()
    mainWindow.webContents.send(Keys.IPC_KEY_FETCH_SETTING, setting);
  })
```

ただ注意として `コールされて実行されるわけじゃない`ので、不用意に`webContents.send`だけ読んじゃう意図せず受信しちゃうことがある。データの更新などは共通で監視したほうがいいかも。

# なぜこんなものが必要な

Main Processからじゃないと呼べないいくつかのメソッドがある。

- メディアをダウンロードする
- ffmpegでエンコードする
- 設定ファイルを保存したりする
- fsやfsextraを使いたい
- webじゃできないローカルのフォルダの絶対パスを取得する

などなど。その結果を渡すのを同期的にやる必要がある。
英語学習お勧め資料3。書籍、CD.DVD英語(7)

日本語は英語Nativeの人から習わなきゃとずっと思ってた。

小学生の頃は、宣教師のアメリカ人の配偶者の方から習った。
大人になってからは、スペイン語をアルゼンチン人の南山大学の先生の配偶者の方から習った。

その後、言語処理関係の仕事をしていくなかで、英日機械翻訳ソフトの開発の時、
言語研究家の方とお会いする機会が増え、
日本人でも英語のことを深く勉強して、わかりやすく説明してくれる人がいることを知った。

# 矢吹眞康
"yet"が表している像とは何か　矢吹眞康 第二回Lace研究会, 1997
「thatの原義と表現構造の過程」矢吹眞康 第四回Lace研究会, 1999
「宮下英語学が切り開いたもの（1）＜関係代名詞＞の論理構造」矢吹眞康 第七回Lace研究会, 2002
https://researchmap.jp/jov1bp0k3-45644/#_45644

資料が散逸していて整理中。毎回、一つの言葉の意味を一つの単語の一つの意味から、
話者の視点の違いによる展開で説明していた。最初お会いした当時は中学校の先生だった。
もし、中学校時代にこの先生に教わったら、きっと言語学の専門家になったと思った。

# 大西泰斗 
NHKのテレビを注意深く見るようになった。2006年頃に、大西泰斗 ハートで感じる英文法を拝見した。

ハートで感じる英文法　決定版,大西泰斗, NHK, 2018
https://www.amazon.co.jp/dp/B07HM7GHQC/
![51PXBuaV-BL.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/2f24a15d-bc15-8969-b4c5-e10387391300.jpeg)

>ネイティブスピーカーが持つ英語の「感覚」を、厳選された24のトピックで解説。「本当はこんな感覚だったのか！」と驚きをともなって納得できる“目からウロコの英文法”。
LESSON 1 「イメージでつかむ」前置詞の世界
LESSON 2 the は「1つに決まる」
LESSON 3 「導く」that のキモチ
LESSON 4 「迫ってくる」現在完了
LESSON 5 「躍動する」進行形
LESSON 6 すべての-ing は躍動する
LESSON 7 未来形なんてない
LESSON 8 助動詞のDNA
LESSON 9 過去形が「過去じゃない」とき
LESSON 10 仮定法を乗り越えろ
LESSON 11 英単語もイメージだ
LESSON 12 「文の形」にも感覚がある
LESSON 1 to 不定詞 ―ことばをつくす―
LESSON 2 if ―プレッシャ―をかける―
LESSON 3 知覚構文 ―なめらかに語る―
LESSON 4 倒置 ―感情を乗せる―
LESSON 5 否定 ―オブラ―トにつつむ―
LESSON 6 時制の一致 ―感じたままに報告する―
LESSON 7 「とき」の感覚 ―臨場感を与える― 
LESSON 8 some & any ―正確にあらわす―
LESSON 9 可算・不可算 ―繊細に表現する―
LESSON 10 疑問詞・関係詞 ―的確に質問する―
LESSON 11 使役構文 ―人間関係をふまえる―
LESSON 12 up & down ―自分の感性に従う―

# 投野由紀夫
スーパーコーパス練習帳 (語学シリーズ―NHK100語でスタート!英会話)
https://www.amazon.co.jp/dp/4141892416/
![51dOa+kaqvL._SX354_BO1,204,203,200_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/9177514f-ced2-f172-7210-507510199ec8.jpeg)

# 参考資料(reference)

プログラマが知っているとよい英単語の語源
https://qiita.com/kaizen_nagoya/items/9de6d47c47e2c211222b

プログラマが英語で報告・質問する時のいくつかの事例・方法
https://qiita.com/kaizen_nagoya/items/9cf2ba858e52e9795b67

英語で読み解くAutomotive SPICE研究会(書きかけ)
https://qiita.com/kaizen_nagoya/items/a52c619ac41c030ec0b7

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
# 文書履歴(document history)
ver. 0.01 初稿 20190503早朝
ver. 0.02 参考資料追記 20190503 朝
ver. 0.03 経緯追記 20190508
ver. 0.04 ありがとう追記 　 20230529
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
今年の言語はRust その４８

# 今年の言語はRust その４８

Rustを学びます

Rustの日本語ドキュメント 2nd Edition
https://doc.rust-jp.rs/book/second-edition/

オリジナル(英語)
https://doc.rust-lang.org/book/


## 実行環境

```sh
$ cargo -V
cargo 1.33.0 (f099fe94b 2019-02-12)

$ rustup -V
rustup 1.17.0 (069c88ed6 2019-03-05)

$ rustc --version
rustc 1.33.0 (2aa4c46cf 2019-02-28)

$  cat /proc/version
Linux version 4.14.97-74.72.amzn1.x86_64 (mockbuild@gobi-build-64002) 
(gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC)) 
#1 SMP Tue Feb 5 20:59:30 UTC 2019

$ uname -a
Linux ip-10-100-0-8 4.14.97-74.72.amzn1.x86_64 
#1 SMP Tue Feb 5 20:59:30 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/\*release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2018.03

```

## 16 恐れるな！並行性

__並行性__

- 並行プログラミング => プログラムの異なる部分が'独立'して実行
- 並列プログラミング => プログラムの異なる部分が'同時'に実行

### 16.3 状態共有並行性

#### ミューテックスを使用して一度に一つのスレッドからデータにアクセス

__Mutex__ + __Mutex.lock()__ を使用することで, __メモリを共有__ できる

```rust
use std::sync::Mutex;

fn main() {

  let m = Mutex::new(5);

  {
    let mut num = m.lock().unwrap();
    *num = 6;
  }

  println!("m= {:?}", m);
}
```

>Arc<T>を使用してMutex<T>をラップし、所有権を複数のスレッド間で共有できるようにする

```rust

use std::sync::Mutex;
use std::sync::Arc;
use std::thread;

fn main() {
  let counter = Arc::new(Mutex::new(0));
  let mut handles = vec![];

  for _ in 0..10 {
    
    let counter = Arc::clone(&counter);
    
    let handle = thread::spawn(move || {

      let mut num = counter.lock().unwrap();
      
      *num += 1;

    });

    handles.push(handle);
  }

  for handle in handles {
    handle.join().unwrap();
  }

  println!("m = {:?}", *counter.lock().unwrap());
}
```

これだけ！？


イエス！
芸術より技芸(Craft over art)について

![image.png](https://qiita-image-store.s3.amazonaws.com/0/257568/431158d1-720f-34ce-65d7-c8d8eb67c723.png)

こちらの本を読んでパターンを1つずつまとめ
個人的に実践可能そうなものから

## アプレンティスシップ・パターンとは
アプレンティスシップとは徒弟制度のことで、よく起きる問題への共通の解決策に実際なっているものをパターン化したもの

### アプレンティスであるということは
**今まで行ったことや今やっていることをより良く、さらに賢く、もっと速く行う方法が常にあるという態度を基本的に持つこと**

## 前提
- あなたの曖昧で暗黙の知識を他の人々が共有できると、安易に思い込まない事
- パターン同士は結びついているので、あるパターンを既に知っているという事は未知のパターンを辿る事ができる
- 優れたプログラマになる方法を教えるのではなく、優れたプログラマになるための学び方を教える

## 芸術より技芸(Craft over art)とは
有用性と芸術性がトレードオフなシーンでは有用性を取れということ

## 傾向
顧客へソリューションを提供するためのソフトウェア構築に、給与が支払われている

## 問題
顧客の問題は芸術的表現を行う機会でもある

## 解決方法
自身の利益より顧客に価値を提供することに注力する

## ポイント
- プログラミングは一種の芸術だが美術作品ではない
- [長い道のり](https://qiita.com/dich1/items/92f27ed4e829ca0dab17)を歩むとはこれらのバランスを取るということ
- 有用性と芸術性は相反するものではなく依存するものである

## 行動
- 次の24時間でトレードオフなシーンを探してみる
- そのシーンで有用性を認識した上で選択する
- 過去のトレードオフなシーンで芸術性を選択した時の状況を振り返ってみる

## 関連パターン
- [長い道のり(The Long Road)](https://qiita.com/dich1/items/92f27ed4e829ca0dab17)

## 書籍情報
Dave H. Hoover (著), Adewale Oshineye (著), 柴田 芳樹 (翻訳), アプレンティスシップ・パターン
https://amzn.to/2UCKF9D

## 雑感
設けられた時間との兼ね合いで判断指標が動くので、その時間でどこまでできるかの把握が前提として大事そう
[手順書]できるだけシンプルなGit入門

#Gitが使いたいのに、なにからしたらいいかわからない
なんかみんなGitを使っている。私も使いたい。
でも職場はSVN。なにが何だかよくわかりません、お手上げです。
…となっている過去の私やあなたへ。
非常にざっくりとした理解ですが、以下の手順でやればとりあえず導入できます。

#概要
Git/GitHubをとりあえずつかってみる。
ローカル環境とリモートの環境構築と、簡単な使用方法

##Gitとは
バージョン管理ソフト。
変更履歴を確認したり過去のバージョンに差し替えたりできます。

##環境構築
###Git for windows をダウンロード
macはもともと付属しているようです。
Windowsの方はググってダウンロードしましょう。

###GitBushの設定
コマンドプロンプトでもgitコマンドは通ったので、これでもいいかもしれないのですが、Unixコマンドを使いたいため、以下ではGitBushを使用します。

**1. Gitコマンドが使えるか確認**

```
$git --version
```
GITのバージョンが返ってくればOK



**2. ユーザー名とメールアドレス登録**

```
$git config --grobal user.name "TanakaTaro"
$git config --grobal user.email "TanakaTaro@tmp.com"
```
名前とメールアドレスは各々置き換えること
設定が反映されているかは```$git config --list```で確認できます。

**3. SSHのカギを作りましょう**

```
$ssh-keygen -t rsa -b 4096 -C TanakaTaro@tmp.com
```
メールアドレスは各々置き換えること
フォルダをどこに配置するかとか、パスワードの設定とか聞かれますが、適当に対応する。
(nullで良かったと思います)

**4. SSHのconfig設定**

```
$vim ~/.ssh/config
Host github
 HostName github.com
 User git
 IdentityFile ~/.ssh/id_rsa(デフォルト名の場合/秘密鍵のパスを入力）
```
Vimが苦手な方用：
入力から保存などのコマンドへ移行するには```esc```を押すと切り替わります。```esc```+```:wq```です。

###WebでGitHubアカウント作成
アカウント作成はgithub.comからどうぞ
アカウントを作成したら公開鍵を登録します。
拡張子が.pubのほうのファイル```id_rsa.pub```です。パブリックの意味です。
*GitHub右上のアイコン>アカウントメニューから「Settings」>左側メニュー「SSH and GPG keys」>「New SSH key」>公開鍵を登録*
から登録できます。

###リポジトリ作成
[リポジトリとは](https://wa3.i-3-i.info/word15664.html)、ファイルなどの変更履歴として格納する場所のことです。
このWebブラウザから作れちゃうのでそのまま作っちゃいましょう。
名前は何でもいいです。Sampleとかtestとか、なんでも。

###SSH接続確認

```
$ssh github
```

これで通信が成功すればとりあえず次に進めます。
（今回は躓かないことを目標としているのでこれで良しとしましょう）

##使ってみる
使わなきゃどうしようもないので使いましょう。
###作業ディレクトリをつくる
```
$mkdir git_work
$cd git_work
```

この時エラーを吐いたら、とりあえずDesktopとかに移動してリトライしてみること。

###GitHubからクローンする
リポジトリの内容をローカル環境にコピーしましょう

```
$git clone git@github.com:***********/test.git
```

`git@github.com…`はブラウザからGitHubにアクセスして緑色の`Clone or Download`のところから持ってくる。

この時エラーを吐いたら、とりあえず上で作ったフォルダに移動してリトライしてみる

###作業用ブランチを切る
```
$git branch test_branch
$git checkout test_branch
```

ブランチを切るときはクローンしたフォルダに移動してからやりましょう。
`git branch`で今あるブランチを確認することができます。

###作業したらコミットする
```
$git status
$git add 追加ファイル名
$git commit -a
```

コミットはローカルレポジトリに変更を反映させる作業です。
`status`で確認、`add`で追加して、`commit`で変更を記録
この時コメントが書けるのでどんな変更をしたかをコメントしましょう


###PUSH！
```
$git push origin test_branch
```

PUSHはローカルリポジトリの変更をリモートリポジトリへ反映させます
この後github(WEBのやつ)でプルリクエスト(masterにマージしてください)を送ったりする。


###マージしよう
```
$git checkout master
$git merge test_branch
$git push origin
```
github上でマージするほうが主流なのかもしれないです。
###ローカルを最新状態にする
```
$git pull
```

PULLはリモートリポジトリの変更をローカルリポジトリへ反映させる

#Tips
#####更新が競合したときは、手元のブランチにマスターをマージする
=git pull

```
$git pull test_branch
```

#####最終コミット時点に戻る

```
$git reset --hard HEAD
```

#####使い終わったブランチを消す

```
$ git branch -d test_branch
```
#####コミットを取り消したいとき

```
git reset --soft HEAD^
```

#Note
ここではSSH keyのchmodの設定にも言及してないです。ちゃんと設定したほうがいいです。
そして、恥ずかしいほど初歩的な質問をしてしまったにもかかわらず、快くご回答いただいたteratailの回答者様には深く感謝申し上げます。
備忘として：[<GIT>Permission deniedで作業ができません](https://teratail.com/questions/187462)
今回はGITに躓かないように、ということを重視して書きました。
Rails6 のちょい足しな新機能を試す10（year_format（令和ネタ）編）

# はじめに

Rails 6 に追加されそうな新機能を試す第10段。 今回のちょい足し機能は、 `date_select の year_format` 編です。
datetime_select, date_select で year_format オプションを指定することで、年の書式を指定できるようになりました。

記載時点では、Rails は 6.0.0.rc1 です。　`gem install rails --prerelease` でインストールできます。

今回は、せっかくなので、[「令和」に対応した Ruby 2.6.3](https://www.ruby-lang.org/ja/news/2019/04/17/ruby-2-6-3-released/) を使ってます。

```shell
$  rails --version
Rails 6.0.0.rc1
```

# プロジェクトを作成する

rails プロジェクトを作成します。

```shell
$ rails new sandbox6_0_0rc1
```

# scaffold で CRUD を作成する

```shell
$ cd sandbox6_0_0rc1
$ bin/rails g scaffold User name birth_at:datetime
$ bin/rails db:create db:migrate
```

# `app/views/users/_form.html.erb` を編集する

`:year_format` オプションを追加して年の書式を変更してみます。

```erb:app/views/users/_form.html.erb
  ...
  <%= form.datetime_select :barth_at, year_format: ->year { "#{Date.new(year, 12, 31).jisx0301.split('.').first}(#{year})" } %>
```

# 登録画面を表示

User の登録画面を表示してみると、年の書式が変わっていることがわかります。
![year_fmt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209941/24d0435e-3cae-7418-5592-8457e84dfcaf.png)



# 参考情報
* [What is new in Rails 6.0](https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html)
* [Add `use_year_names` option to date_select tag](https://github.com/rails/rails/pull/32190)
HTML＆SEOまとめ

基本的にプログラムをいじいじする私にとっては、フロントエンド、特にHTMLとSEOはひとまとめで認識しているので、ひとまとめにメモっておきます。

## 基礎

基礎的な事のまとめ。

<a href="https://qiita.com/rorensu2236/items/a2cd209af4dda59557a5" target="_blank">【2017年度版】Webエンジニアでも最低限押さえておきたい、SEO施策のまとめと実装 - Qiita</a>

<a href="https://qiita.com/taiyop/items/050c6749fb693dae8f82" target="_blank">SEO嫌いにお送りするSEO策。これでもうSEOについてしばらく考えなくて良いぜ！！ - Qiita</a>

## HTML5

気を抜くとdivだらけになって何がなにやらわからなくなるやつ

<a href="https://creive.me/archives/8814/" target="_blank">SEO対策として最低限押さえておきたいHTML/HTML5マークアップの大事な6つのポイント | creive【クリーブ】</a>

## JSON-LD

基本的にはJSON-LDで構造化していくのが良いっぽい。まとめて記述できるので、個人的にもこちらが楽かしらかしら。

Microdataは、必要なデータのためにタグを沢山書かなくては行けないことも多かったので大変助かる。

<a href="https://developers.google.com/search/docs/guides/intro-structured-data?visit_id=636924275282165416-305958425&hl=ja&rd=1" target="_blank">構造化データの仕組みについて  |  検索  |  Google Developers</a>

<a href="https://haniwaman.com/construction/" target="_blank">【具体例あり】構造化データ「microdata」「JSON-LD」「RDFa」の違いとメリット・デメリット | HPcode</a>

<a href="https://qiita.com/narumana/items/b66969b80cce848b2ddf" target="_blank">Google推奨「JSON-LD」で構造化マークアップ - Qiita</a>
今年の言語はRust その４８

# 今年の言語はRust その４８

Rustを学びます

Rustの日本語ドキュメント 2nd Edition
https://doc.rust-jp.rs/book/second-edition/

オリジナル(英語)
https://doc.rust-lang.org/book/


## 実行環境

```sh
$ cargo -V
cargo 1.33.0 (f099fe94b 2019-02-12)

$ rustup -V
rustup 1.17.0 (069c88ed6 2019-03-05)

$ rustc --version
rustc 1.33.0 (2aa4c46cf 2019-02-28)

$  cat /proc/version
Linux version 4.14.97-74.72.amzn1.x86_64 (mockbuild@gobi-build-64002) 
(gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC)) 
#1 SMP Tue Feb 5 20:59:30 UTC 2019

$ uname -a
Linux ip-10-100-0-8 4.14.97-74.72.amzn1.x86_64 
#1 SMP Tue Feb 5 20:59:30 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/\*release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2018.03

```

## 16 恐れるな！並行性

__並行性__

- 並行プログラミング => プログラムの異なる部分が'独立'して実行
- 並列プログラミング => プログラムの異なる部分が'同時'に実行

### 16.2 メッセージ受け渡しを使ってスレッド間でデータを転送する

```rust
use std::thread;
use std::sync::mpsc;

fn main() {

  let (tx, rx) = mpsc::channel();

  thread::spawn(move || {
    let val = String::from("Hi");
    tx.send(val).unwrap();

    println!("val is {:?}", val); // valの借用兼を奪われているのでエラー
  });

  let received = rx.recv().unwrap();

  println!("Got: {:?}", received);
}
```

#### 複数の値を送信し、受信側が待機するのを確かめる

```rust
use std::thread;
use std::time::Duration;
use std::sync::mpsc;

fn main() {

  let (tx, rx) = mpsc::channel();

  thread::spawn(move || {

    let vals = vec![
      String::from("hi"),
      String::from("from"),
      String::from("the"),
      String::from("thread"),
    ];

    for val in vals{
      tx.send(val).unwrap();
      thread::sleep(Duration::from_secs(1));

    }

  });

  for received in rx {
    println!("Got: {:?}", received);
  }

}

```

#### 転送気をクローンして複数の生成器を作成する

```rust
use std::thread;
use std::time::Duration;
use std::sync::mpsc;

fn main() {

  let (tx, rx) = mpsc::channel();
  let tx1 = mpsc::Sender::clone(&tx);

  thread::spawn(move || {

    let vals = vec![
      String::from("hi"),
      String::from("from"),
      String::from("the"),
      String::from("thread"),
    ];

    for val in vals{
      tx1.send(val).unwrap();
      thread::sleep(Duration::from_secs(1));

    }

  });


  thread::spawn(move || {

    let vals = vec![
      String::from("more"),
      String::from("messages"),
      String::from("for"),
      String::from("you"),
    ];

    for val in vals {
      tx.send(val).unwrap();
      thread::sleep(Duration::from_secs(1));
    }

  });



  for received in rx {
    println!("Got: {:?}", received);
  }

}
```

複数のスレッドからデータを送ってもらえた！



イエス！
SwiftでTesseract-OCR-iOSを使ってみる


画像認識のアプリを作成しようと思い、Tesseractを使ってわかったことをまとめておきたいと思います。

##開発環境
iOS 12
Swift 5
Xcode 10.2.1
TesseractOCRiOS 5.0.0

##Tesseractの導入で参考になったサイト

この人の記事がよくまとまっているので、参考にさせてもらいました。
[【Swift】文字認識ライブラリ、TesseractOCR for iOSを試してみた](https://qiita.com/ktanaka117/items/8dfb6912780c468011d1)

ただ、こちらの記事は2015年の記事なので少し古く「4.BridgingHeaderを用意する」のHeaderの作成は必要内容です。
- [gali8/Tesseract-OCR-iOS](https://github.com/gali8/Tesseract-OCR-iOS)
- [Installation](https://github.com/gali8/Tesseract-OCR-iOS/wiki/Installation)

###チュートリアル
海外のチュートリアルでアプリのベースも無料で配布されています。
[Tesseract OCR Tutorial for iOS](https://www.raywenderlich.com/306-tesseract-ocr-tutorial-for-ios)

このチュートリアルでTesseractの制限が書いてあります。

- Unlike some OCR engines (like those used by the U.S. Postal Service to sort mail), Tesseract is unable to recognize handwriting. In fact, it’s limited to about 64 fonts in total.
- Tesseract’s performance can improve with image pre-processing. You may need to scale images, increase color contrast, and horizontally-align the text for optimal results.
- Finally, Tesseract OCR only works on Linux, Windows, and Mac OS X.


この方法でやられている方がこちら[
Tesseract-OCR を iPhone で使ってみる](https://www.paraches.com/archives/6706)

こちらの方の内容も結構充実しています。
[Xcode 7.0 + Swift2 でTesseract-OCR-iOSを使う（追記あり）](https://a244.hateblo.jp/entry/2015/10/13/011846)

この人の動画がわかりやすいです。
https://www.youtube.com/watch?v=DTQ1z_8KXZo

###文字データのバージョンがポイント
文字の解析に使う文字情報のバージョンによってエラーが発生してしまい、なかなかうまくいかない様です。

こちらのデータリストからダウンロードしたものは使えました。
https://github.com/tesseract-ocr/tessdata.

##まとめ
単純にカメラで撮影した画像を認識させようと思うと文字が化けるので、画像の加工が必要になるっぽい。ただ、どの様にTesseractが認識しているのかを調べる必要があるかもしれない。
[Tesseract OCR iOSで認識させた文字の情報を取得する](https://ndanah.hatenablog.com/entry/2018/04/16/235639)

##補足
[TesseractとKrakenのレビュー(英語)](https://medium.com/datadriveninvestor/review-for-tesseract-and-kraken-ocr-for-text-recognition-2e63c2adedd0)

日本語の文字認識の精度があまりよろしくないので、他のOCRも試してみたいと思う。
https://www.isoroot.jp/blog/1025/
【Rails5.2.1】credentials.ymlを使用してアプリをHerokuにデプロイできなかった話

credentials.ymlを使用してアプリをHerokuにデプロイしようとしたら下記エラーが発生した。

```
NoMethodError: undefined method `[]' for nil:NilClass
```

# 解決策
下記コマンドを実行したらデプロイできた。

```
heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
```
Ruby 範囲と配列についてもっと〜チェリー本４章〜

#Ruby 範囲と配列についてもっと〜チェリー本４章〜#
**※この記事は初心者の私がチェリー本で学習するにあたって新しく知ったことや考えたことアウトプットするための場として書いています。**
この記事は以下の情報を参考にして記述し、一部引用しています。
[プロを目指す人のためのRuby入門](http://gihyo.jp/book/2017/978-4-7741-9397-7)
[配列の便利メソッドあれこれ](https://qiita.com/jnchito/items/118cca7ac2f01e1ca6a0)
###範囲から値が連続する配列を作成する###
```
(1...4).to_a
=> [1, 2, 3]

 [*'x'..'z']
=> ["x", "y", "z"]
```
`.to_a`メソッドで配列化することができます。
２つ目は[]の中に`*`を範囲の頭につけても配列化することができます。

---

###配列の要素を取得するメソッド###
```
a = [1, 2, 3, 4, 5]

a.values_at(0,1,3)
=> [1, 2, 4]

a[-1]
=> 5

a.last(3)
=> [3, 4, 5]

a.first(2)
=> [1, 2]
```

配列の添字から要素を複数指定して取得するときは`value_at`メソッドを使用します。
要素を１つ指定したい場合は`配列[]`で指定します。
配列の前後から複数指定する場合は`.last`、`.first`メソッドを使用します。

配列のメソッドについては[配列の便利メソッドあれこれ](https://qiita.com/jnchito/items/118cca7ac2f01e1ca6a0)がとても参考になります！

---

###配列に初期値を設定する場合の注意点-4.7.13より引用###
```
 a = Array.new(5, 'default')
=> ["default", "default", "default", "default", "default"]
str = a[0].upcase!
=> "DEFAULT"
a　=> ["DEFAULT", "DEFAULT", "DEFAULT", "DEFAULT", "DEFAULT"]

a = Array.new(5){'default'}
=> ["default", "default", "default", "default", "default"]
str = a[0].upcase!
a　=> ["DEFAULT", "default", "default", "default", "default"]
```
上のコードは同じ参照値の要素が同時に作られるため、１つ変更すると５つとも変更されてしまいます。
下のコードはブロックによって一つずつ別のオブジェクトの要素が作成されるため１つ変更してもその他の要素には影響を与えません。

---

##あとがき##
今日は[@jnchito](https://qiita.com/jnchito)さんの[Qiitaで記事を公開するときに気を付けるべきマナーについて 〜無断でネットや書籍の内容を丸写しするのはやめよう〜](https://qiita.com/jnchito/items/215c2d51599eb29adabc)という記事を読んで少なからず当てはまる点があるのでは無いかと思い、記事の書き方を改めるのと過去の記事に注釈を追記しました。

先程の記事内でもリンクが貼ってあった[”ブログに技術書の内容を丸写しする問題点と、オリジナルなコンテンツを書くためのアイデア”](https://blog.jnito.com/entry/2018/01/23/075856)がとても参考になりました！

最近コードを写経とは別に実際に書く機会が無いとQiitaなどに記事を上げるだけではアウトプットの質が低いなと思えて来ました...(何かコードの問題集みたいなのないかな)
Python3で日本語扱ったらエラーが出る時にすること


細かい理屈は置いといて，Python3で日本語を扱おうとしたらエラーが出る時の応急処置をメモ．

**環境**
ubuntu 17.10

# ファイルに書き出すときにUnicodeEncodeError

```jpntxt-output.py
# -*- coding: utf-8 -*-

with open("hoge.txt", "w") as f:
	f.write("あいうえお")
```
**結果**
`UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)`


**解決法**
`encoding="utf-8"`を指定すればok．

```jpntxt-output.py
# -*- coding: utf-8 -*-

with open("hoge.txt", "w", encoding="utf-8") as f:
	f.write("あいうえお")
```

# print()でUnicodeEncodeError
print()などでターミナルに日本語を標準出力するときは別の処置が必要なようである．

```jpntxt-print.py
# -*- coding: utf-8 -*-
print("あいうえお")
```
**結果**
`UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)`

**解決法**
おまじないを唱えるとよい
`sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`


```jpntxt-print.py
# -*- coding: utf-8 -*-

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

print("あいうえお")
```

かわりに実行時に下のようにしてもいい

```
$ PYTHONIOENCODING=utf-8 python3 jpntxt-print.py
```
Sass基礎

# Sassとは
Syntactically Awesome StyleSheet(文法的に格好良いスタイルシート)の略。
CSSを拡張した言語というか表記法。
変数や階層や関数を使えるように拡張されている。
CSSの肥大化が辛くて死にそうになった人が、プログラマブルにCSSを記載したくなり編み出したらしい。
実際使うときはコンパイラを通してCSSに変換して使う必要がある。
また、表記法としてもSASSとSCSSの2通りの書式がある。各々の所感は以下。

**SASS**
最初に作られたのはこちらの記法らしい。流行ってない。ファイルの拡張子は.sass
括弧やセミコロンを省略、予約語も記号等で表現したりする。
記載量を削減させようと規約ベースで頑張ってるイメージ。
初めてJavaプログラマがPython見たときの感想に近い。慣れれば早く書けるんだと思う。多分。

**SCSS**
後発で作られたのがこちら。主流はこちら。ファイルの拡張子は.scss
CSSの記法に寄せてあり、とっつきやすい。そして主流であるが故ネット上に情報も多い。
個人的に仕事で書くソースは誰もが読めるということが大事なので、こっちだけやればいいと思う。

# SCSSの記載方法

### 変数定義
頭に$をつけると変数として扱われる。
CSS同様上から順に読まれるので先頭とかで定義することになる。
あと、スコープも効くので注意。

```scss
$aaaa: #ffffff;
.prof {
  background-color: $aaaa;
}
```

### 階層化
入れ子ができる。視覚的にまとまるし、親のclass名変わった時とかに便利。

```scss
.prof {
  background-color: #ffffff;
	.info {
	  color:#aaaaaa;
	}
	p {
	  color:#2b546a;
	}
}
```
### 階層化(hoverやaction等の擬似クラス)
&が親を指す。以下みたいに書くと有効になる。

```scss
.prof {
  background-color: #ffffff;
	&:hover{
	  color:#aaaaaa;
	}
}
```

### 関数化
@ mixinのように書くと関数として宣言できる。使うときは@ includeで展開される。

```scss
@mixin layout-image {
  padding: 40px 28px;
  margin: 16px 8px;
  background-color: #ffffff;
}

.prof {
  @include layout-image;
}
```

### 関数化(引数あり)
関数に引数も取れる。これ便利。
あと四則演算も使える。

```scss
@mixin layout-image($padding, $color) {
  padding: $padding $padding / 2;
  margin: 16px 8px;
  background-color: $color;
}

.prof {
  @include layout-image(20px, #ffffff);
}
```

### 別SCSSファイルのインポート
読み込み対象のscssファイルは頭にアンダースコア、末尾に拡張子が必要。
_XXXXXX.scssというファイルを読み込む前提だと以下。

```scss
@import XXXXXX;
```


# その他関数
SASSで定義されている関数がある模様。
全量はググってね。

| 関数名|概要|利用例|
|:---------------------------|:----------------|:---|
| darken(色, パーセンテージ)   | 色を暗くする| color: darken(#ffe400, 20%) |
| lighten(色, パーセンテージ) | 色を明るくする| color: lighten(#ffe400, 20%) |
| rgba(色, 透過値) | 透過値変更| color: lighten(#ffe400, 0.5) |

# SCSSをCSSにビルドする
せっかくなので動かしたい。
preprosというツールがよさそう。
Rubyも含めてインストールしてくれるので、インストーラたたくだけ。
[prepros](https://prepros.io/)
イテレータでインデックスを取ってみる

## 前提
Rubyのバージョン： 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18]

## インデックス取れないの？ -> 取れた！

「たのしいRuby」でお勉強中。
26ページの繰り返しにtimesメソッドの記載がありました。

```Ruby:iterator_sample.rb
5.times do
    print '(☝︎ ՞ਊ ՞)☝︎'
end

#=> (☝︎ ՞ਊ ՞)☝︎(☝︎ ՞ਊ ՞)☝︎(☝︎ ՞ਊ ՞)☝︎(☝︎ ՞ਊ ՞)☝︎(☝︎ ՞ਊ ՞)☝︎
```

これを書きながらふと「これのインデックス取れんの？」と疑問に思ったわけですな。

## doの後ろで取ろう

doの後ろに変数を置いてあげると勝手にブチこんでくれます。
(下記例では「i」)

```Ruby:index_hosii.rb
5.times do |i|
    print i
end

#=> 01234
```

## おまけ

2つ目を指定してもなんにもでません。

```Ruby:j_missing.rb
5.times do |i, j|
    print j
end

#=> #何も出ない。ひたすらに虚無。
```
Web リクエストがエラーになったときのレスポンスボディを取得する (.NET)

# Web リクエストがエラーになったときのレスポンスボディを取得する (.NET)

特に Web API 呼び出しだと、エラー応答に修正に重要な情報が載っていることが多いので.
例外に Response オブジェクトが入っていて、後は正常時と同様に GetResponseStream を呼べば OK.

```csharp
catch (WebException e)
{
    using (var rs = new StreamReader(e.Response.GetResponseStream())) {
        Console.WriteLine(rs.ReadToEnd());
    }
}
```
LDAPで快適Linux環境 #4 LDAPアカウントでログイン

[前回](https://qiita.com/uuu_n/items/9a0ba8823180de3b3ab6)はアカウント情報をLDAPサーバーに登録しました。今回は、クライアントからサーバー上のアカウントにログインしてみます。

ここからはクライアントでの作業です。
まず、必要なパッケージをインストールします。

```bash
root@deb:~# apt install libnss-ldap libpam-ldap ldap-utils nscd nslcd
```

すると、自動設定が走ります。
親切なことに案内が日本語なので、それに従って設定していきます。
再設定したいときは、```dpkg-reconfigure```を走らせます。

設定ファイルをいじっていきます。

```conf:/etc/nsswitch.conf
#追記
passwd:     compat ldap
group:     compat ldap
shadow:     compat ldap
```
```conf:/etc/pam.d/common-password
#26行目"use_authtok"を削除する
password     [success=1 user_unknown=ignore default=die]     pam_ldap.so try_first_pass 
```

そして運命の再起動。
設定ミスがあるとログインで無限ループします。レスキューモードで頑張りましょう。
うまくいっていると、ログイン画面が出てきます。ここでLDAPアカウントにログインしようとしてできないのは正常です。ホームディレクトリが存在しないからです。
ローカルユーザーでログインして、```su -```でログインしてみましょう。または、GUIでなくCUIでならいきなりLDAPアカウントにログインできます。
ホームディレクトリが無いので"HOME=/"でログインされますがそれで成功です。

[次回](https://qiita.com/zawanume/items/2327c590b983ad454937)は、NFSサーバーの設定をしていきます。
TweepyでTwitterに投稿する

#はじめに
1. tweepyモジュールをインストールしておきましょう. 
<font color="Red">pip install tweepy</font> でインストールできます. 

2. [Twitter Application Management](https://developer.twitter.com/en/apps) へアクセスして必要な情報をゲットします. 
    3. 使用するアカウントと電話番号を紐付けしておきます.  
    4. Create an app をクリックして新しいアプリケーションを作成します.アプリ名の登録など諸々を進めます.  
    5.  Keys and tokensタブで<font color="Red">Consumer API keys</font>と<font color="Red">Access token & access token secret</font>についての情報をゲットします. 

以上で準備完了です. 

#簡単にツイート
先ほど獲得した各種キーを下記コードに当てはめて実行すれば簡単なツイートはできます. 

```python
import tweepy

# 先ほど取得した各種キーを代入する
CK="Consumer Key"
CS="Consumer Secret"
AT="Access Token"
AS="Access Token Secret"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)

# 好きな言葉をツイート
api.update_status("Pythonから投稿!")
```

実際に投稿できていました!
<img width="589" alt="スクリーンショット 2019-05-03 1.37.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319132/f75cebf9-96da-6300-2cd9-bf9519bed315.png">

同じ内容を何度も投稿すると, エラーになるので注意してください. 僕も下のようなエラーになりました. 

```
raise TweepError(error_msg, resp, api_code=api_error_code)
tweepy.error.TweepError: [{'code': 187, 'message': 'Status is a duplicate.'}]
```
#画像付きツイート
ほぼ先ほどと一緒です. 
最後の一文のfilenameで画像ファイルを指定してください. 

```python
import tweepy

# 先ほど取得した各種キーを代入する
CK="Consumer Key"
CS="Consumer Secret"
AT="Access Token"
AS="Access Token Secret"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)

api = tweepy.API(auth)

#画像付きツイート
api.update_with_media(status = '画像付きツイートテスト', filename = '')
```
画像付きツイートも成功していました. 
<img width="585" alt="スクリーンショット 2019-05-03 2.06.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319132/b05f6d7d-8667-86de-259b-296f888c851f.png">
#関連記事
[TweepyでTwitterのタイムラインを取得する](https://qiita.com/pontyo4/items/a7284330cd79ad48589f)
[TweepyでTwitterの検索, いいね, リツイート](https://qiita.com/pontyo4/items/4ef6c9cb8e15a01a3129)

#参考サイト
[Tweepyで雑にTwitter botを作ってみた](https://qiita.com/tsc343/items/e51f412480ea8bf5619a)
最低限の勉強で受ける基本情報処理技術者試験

# 勉強前のスペック

- 論理学
 大学受験レベル。論理記号はそこそこ使い慣れていた。

- プログラミング
 大学(非情報系)の授業でC言語を少し。基本情報処理技術者試験(以後FE)では表計算を選択した。

- その他コンピュータ関連
 Linuxの教科書という本を一時期読んでいたものの「HDDってメモリとちがうのー？」ってレベル。

# 学習内容

勉強を始めたのは受験する3ヶ月前。自動車免許も英検漢検も持ってないから履歴書に書ける資格が欲しいなーという不純な動機。精神を病んで母国語の日本語すら頭に入らなくなったりなんだり他にも動機は色々あったけど省略。

使った教材は
・キタミ式イラストIT塾(以下「参考書」)
https://www.amazon.co.jp/dp/4297102110/ref=cm_sw_r_cp_api_i_qvXYCbCJVYGVR

・かんたん合格 基本問題集(以下「問題集」)
https://www.amazon.co.jp/dp/429500510X/ref=cm_sw_r_cp_api_i_hzXYCbQQJBW2P

・一問一答の無料アプリ(以下「一問一答」)
https://itunes.apple.com/jp/app/2019%E5%B9%B4%E6%98%A5%E7%89%88-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E5%95%8F%E9%A1%8C%E9%9B%86-%E5%85%A8%E5%95%8F%E8%A7%A3%E8%AA%AC%E4%BB%98/id1211959354?l=en&mt=8

総勉強時間は約50時間(同時に受験する先輩後輩と焼肉を食べる時間なども含む)。

1. まず参考書を1周通読。

2. 問題集午前の部を解く。間違えたところは該当箇所を参考書で探して仕組みを理解する。見返せるように、書き込むなり付箋を貼るなりメモを取るなりする。

3. 床から起きられなくても出来ることがある。そう！スマホでお勉強！！一問一答(僕はこれに13時間費やしました)をやり込むもよし。問題集についてくる「でる順200」を叩き込むもよし。午前の部は8割がた「でる順200」から出ます。試験終わった瞬間出る順もっとちゃんとやればよかったって思いました。

上のAmazonリンクから飛んでも僕には1銭も入りませんので気兼ねなく飛んでください。

# ポイント

- 午前
時間余るので、計算とか論理とか時間かけてしっかり取る。わからない単語は考えてもわからないので適当に塗っておく。

- 午後
頭脳戦。最低限の知識さえあればなんとかなる。ただし時間はカツカツ。
__冊子の一番後ろに各コマンドの意味や使い方が載っているので適宜参照すること。__

# 後書
聞きたいことがあればお気軽にどうぞ。
御武運を祈ります。


#追記(2019.11)
文学部卒、未経験SE半年目の知人は出る語句200を5時間やって受かったようです。
【Ruby】caseでFizzBuzzを解いてみよう！

# FizzBuzzとは
### 1から100の数字に対して、以下の制御を行うアルゴリズムです。
1. 3で割り切れる場合は、「Fizz」と表示
2. 5で割り切れる場合は、「Buzz」と表示
3. 15で割り切れる場合は、「FizzBuzz」と表示
4. それ以外の場合は、その数値を表示

シンプルにifを使って書くのがオーソドックスかと思います。
今回は、別解としてcaseを使って表現してみます。

まずは、結果から。

```rb
(1..100).each do |num|
  puts case 0
    when num % 15 then :FizzBuzz
    when num % 3  then :Fizz
    when num % 5  then :Buzz
    else num
  end
end
```

## ポイント１：「case 式」「when 式」という構造
caseでは、「case 式」と「when 式」という形を取り、それぞれの式の結果が等しいかどうかを判定して制御を行っています。
ここで、「式」とは「num % 15」のような計算式以外にも「0」や「"AAA"」のようなオブジェクトも含まれます。
したがって、**caseの隣には必ずしも「num % 15」のような計算式を、whenの隣には「0」のような値を記載するとは限りません。**


```rb
case "AAA"
  # whenに計算式を書くのもアリ
  when "AA" + "A" then puts "same"
  else puts "different"
end

# => same
``` 
上記の例では、
「"AAA" === "AA" + "A"」という比較を行った結果、等しいと判定して
「puts "same"」の処理が実行されています。

## ポイント２：caseは該当のwhenに対するthen以降の値を返す
判定の結果、該当のwhen(else)のthen以降の結果をcaseの返り値として扱います。
試しに、putsをpメソッドに変えてみると、
それぞれ「:Fizz」、「:Buzz」、「:FizzBuzz」が表示されていることが確認できます。
以下の記述でも同様の結果が得られますが、少し冗長ですよね。

```rb
(1..100).each do |num|
  case 0
    # 判定ごとにputsを記載
    when num % 15 then puts :FizzBuzz
    when num % 3  then puts :Fizz
    when num % 5  then puts :Buzz
    else puts num
  end
end
```

## ポイント３：whenの記載順に注意！（上から順に判定）
if同様に、判定は上から順に行い、該当したところで値を返します。
したがって、仮に以下の順にした場合は、「FizzBuzz」は表示されません。
（15の倍数は先に「num % 3」に該当してしまうため「Fizz」が表示される）

```rb
(1..100).each do |num|
  puts case 0
    # 15の倍数はここに該当してしまう
    when num % 3  then :Fizz
    when num % 5  then :Buzz
    when num % 15 then :FizzBuzz
    else num
  end
end
```

本記事があなたのcaseの理解に少しでも貢献できれば幸いです。
Unityで綺麗な映像を作る環境作り（Unity2019.1編）

#自己紹介
こんにちはゆずです。@Yuzu_Unity

#はじめに
今回はLWRPやHDRPではなく標準設定の通常レンダーパイプラインでの設定です。
HDRPは奇麗なのですがトゥーンシェーダーとは相性が悪いですね…
影を入れるととくに動作は重いので、ある程度のスペックのPCで行います。

#初期設定
Edit→ProjectSettingsを開きます。
Playerタブを開きColorSpaceをLinerに設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308905/95845dc3-8a81-164b-950e-455178bc76b1.png)

次にQualityタブを開き
LevelsをUltla
AntiAliasingを上げます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308905/206d26dc-6287-67d3-9ad0-212c422f14f2.png)

Window→Lightning→LightmapのAutoGenerateを外しましょう
（作業中にライトマップ焼かれるのは厄介なので…）
またLightmapSize等の項目もお好みで…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308905/30c9d138-5aef-d5b2-ae08-4c61ac56feb1.png)

ゲームビューにレンダリング解像度を設定しておきます。
今回は1920×1080
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308905/14385fb2-50ad-afc8-f874-3095b743872c.png)

シーンビューの右上のカメラマークを押しFOVの設定をカメラの画角に合わせます。(Unity2019以降)
40から60程度かな？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308905/81aa406c-d820-1c71-202d-e4d68ca43004.png)
Unity2019以外は以下のEditor拡張より
https://github.com/t-mat/UnitySceneViewFovControl/blob/master/README.ja.md


次にWindow→PackageManagerを開き
PostProcessingとChinemachineをインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308905/07b5dd16-ee52-2045-7736-7461ef87fbf3.png)

#Unityのライティングについて
DirectionalLightについて
初期設定ではColorが黄色になっているので白に戻します。
Strengthをいじると影色が薄くなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308905/03efc5bb-319a-5e47-c752-9702a6977e5d.png)

シャドウマップの解像度を直接指定します。
DirectionalLightに対しこのスクリプトをアタッチします。
これを行うと影のディテールが上がります。（重いので注意）
(HDRPだと直接指定できるのですが通常レンダリングパイプラインではないので直接指定)

```c#:SetShadowResoliution
using UnityEngine;

public class SetShadowResoliution : MonoBehaviour {

    public int resolution=4096;
	
	void Start () {
                //ライトマップの解像度を指定する
        	GetComponent<Light>().shadowCustomResolution = resolution;
	}
}
```

##Unityのライティングベイク機能(Staticオブジェクトのみ)

* LightMap ライトをベイク
* ReflectionProbe　反射をベイク(PBR)
* LightProbe　GIをベイク 

この3つを行えば背景がかなり綺麗になるので覚えておいたほうがいいかも…

##レンダリング状況を確認する
Window→Analysis→FrameDebuggerにてレンダリング状況をデバックできます。
レンダーパイプラインによって違うので面白いですｗ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308905/d41507b5-30c3-82fe-0ee5-42f2bc1780d2.png)

以上です。
他にもアセットで色々あったりしますが今回はここまでです。
ActiveRecordで行値式で検索する方法

以下のように複数カラムをつかってINで検索することを`行値式`や`行値構成子`と呼ぶそうです。

```SQL
SELECT * FROM table
WHERE (column1, column2) IN (
  (value1, value2),
  (value3, value4)
);
```

これをRailsで使用する方法がなさそうだったので、実現する方法を考えました。
`ActiveRecord.where`は

```rb
Hoge.where('id = ? OR id = ?', 1, 2)
=> SELECT  `hoges`.* FROM `hoges` WHERE (id = 1 OR id = 2)
```
のように文字列でWHERE文を使用しつつ、プレースホルダも使えるので、これを利用します。

pluckなどで取得した値をそのまま使えるようにしたかったので、
第1引数にカラム名の配列
第2引数に値の配列
を指定してwhereに渡す値を生成するメソッドを定義します。

```rb
# @param [Array] columns 検索に使用するカラム名の配列 ex. [:id, :name]
# @param [Array] values 検索に使用する値の2重配列 ex. [[1, 'hoge'], [2, 'piyo']]
# @return [Array] ActiveRecord.whereで使用できるWHERE句と検索値を持った配列
def row_constructor(columns, values)
  # 1レコード分のプレースホルダを作成
  # ex. [:id, :name] => (?,?)
  placeholder = "(#{(['?'] * columns.size).join(',')})"
  # 検索数分のプレースホルダを作成
  # ex. [[1, 'hoge'], [2, 'piyo']] => (?,?),(?,?)
  placeholders = ([placeholder] * values.size).join(',')
  # 行値式のWHERE句を作成
  # ex. (id,name) IN ((?,?),(?,?))
  sql = "(#{columns.join(',')}) IN (#{placeholders})"
  # ActiveRecord.whereには可変長引数で渡すので2重配列を平坦にして、先頭にクエリ文字列を追加
  values.flatten.unshift(sql)
end
```

上記のメソッドを以下のように使用します。

```rb
columns = [:id, :name]
values = [[1, 'hoge'], [2, 'piyo']]
Hoge.where(*row_constructor(columns, values))
=> SELECT  `hoges`.* FROM `hoges` WHERE ((id,name) IN ((1,'hoge'),(2,'piyo')))
```

そもそもActiveRecordにメソッドが用意されていたり、
gemがあったら教えてください。
登録ワードで Bing News を一括検索する Go 製 CLI ツールを作った

先日の Ruby 会議 2019 で音楽好きの同志 [あらたま(@ar_tama)さん](https://twitter.com/ar_tama) が Ruby でニュース検索 Slack Bot を作った話で LT をしていました。

[快適なミュージックライフを支える小さなBotの話](https://speakerdeck.com/ar_tama/a-small-bot-which-supports-my-confortable-music-life)

好きなアーティストの来日公演を見逃さないために”いい感じに”情報 push してくれる Bot が欲しかったという話で、僕も公演情報を見逃して涙することがあり共感しかありません。（現状、常に手動巡回） 

せっかくなので真似して手を動かしながら対策を考えたかったのと、ニュース検索 Bot が GW の素振りによさそうだったので定期実行はひとまず無しにして、Go で Bing News Search API を叩いて返す CLI ツールをざっくり作ってみた。

こんな感じ。

![render1556812069556.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/752/42449401-903c-24b8-fb3a-efdea9b3551a.gif)

検索対象単語を登録・削除し、 Bing News Search API を叩いて整形して出力する単純な CLI ツール。これで一瞬で欲しいニュースが一覧で見られて捗るってもんです。（てか、ロイ・エアーズの緊急搬送これで知った。大丈夫かロイじいさん！）

LT で紹介されていた Bing News Search API は今まで使ったことがなかったので試してみたけれど、3,000 無料トランザクション/月で、API Key を含めて REST API を叩くだけの簡単なもので、参考実装も Ruby, Go, C#, Java, PHP, Python, Node.js のサンプルコードがありパパッと組み込めるのが良かった。別に SDK もあるらしい。

このCLIをベースにサーバーレスで動かす実装を追加して Slack Bot 化していきます。

ところで、WEB 開発の素振りネタに悩むことが時々あったけれど、登録単語で 検索系 API を叩いて表示するツールは TODO アプリと同様にコンパクトで出力先も多数考えることができるし、実装も色々幅が考えられるので今後も素振りに使っていきたい。

おすすめでやんす。

コードはこちら
[kzkick2nd/gonews-cli: Find articles from Bing News with registered keywords.](https://github.com/kzkick2nd/gonews-cli)

### Bing News Search API
- [Bing News Search API | Microsoft Azure](https://azure.microsoft.com/ja-jp/services/cognitive-services/bing-news-search-api/)
- [Bing News Search API Documentation - Tutorials, quickstarts, API references - Azure Cognitive Services | Microsoft Docs](https://docs.microsoft.com/en-us/azure/cognitive-services/bing-news-search/)
Jetbot製作メモ(wifiドングル編)

# Jetson nanoのwifiドングルについて

Jetbotのお勧め無線LAN子機が「Intel Dual Band Wireless-Ac 8265」か「Edimax EW-7811Un(RTL8192U chipset)」でいずれも入手しにくいため、Raspberry piで使っていたものや定番のWifiドングルを新たに買って実験をしてみた。



## 実験内容

- WinSCPを使って、PCからJetson nanoにファイル(2.16GB)を送信する。
- ドングルとUSBポートの間に、簡易USB電圧・電流測定器(RT-USBVAC4QC)を挟み、電流値と積算電流値を測定する。
- また、SFTPで転送している時間も測定する。

## 結果

|      | メーカー名 | 型番         | チップセット  | 累積電流値(mAh) | 転送時間 |
| ---- | ---------- | ------------ | ------------- | --------------- | -------- |
| A    | Logitec    | LAN-W150N/U2 | Ralink RT8070 | 38              | 14.04    |
| B    | Buffalo    | WLI-UC-GNM2  | Ralink RT8070 | 47              | 16:25    |
| C    | I/Oデータ  | WN-G150UM    | RTL8192CU     | 16              | 12:48    |
| D    | Planex     | GW-US-NANO2  | RTL8188CUS    | 17              | 14:39    |

- USBポートに挿すことにより、全てのWifiドングルがそれぞれに認識することを確認しましたが、「認識＝うまく使えている」というわけにはいかず、スローダウンが発生したり、ネットワークが切れたりするようである。

- RT8070は特にそのまま使えたが、消費電力も大きくドングルが熱くなる。

- RTL8xxx系では、NVIDIA DEVELOPER Forumでも「Jetson nano wifi」というスレッドが立ち、不具合が報告されているようである。そのため、以下のサイトの４番目の手順でドライバを入れなおした。

  [ubuntu 18.04 LTSを試す]: wwwb.pikara.ne.jp/arakangolf/ubuntu.html

- ドライバ入替により、GW-US-NANO2はうまく転送できたが、WN-G150UMは転送速度が若干速いが途中で転送エラーがでて不安定な感じであった。

## 今後

WLI-UC-GNM2をずっと使っていて電源さえ気をつけておけば特に問題がなかったが、ドングルが熱くなるため、別なものに変えて運用してみようかと思っている。

実際にいろいろと使ってみないと本当にうまく使えるかどうか分からない点もあるが、令和の先発投手は、「GW-US-NANO2」で行く予定。
ウイルスバスター コーポレートエディション 11SP1　パッチ適用


#段階パッチ
SP1
↓
Critical Patch build 4665 
↓
Patch 1 リパック版 Build: 6245.00
↓
Patch1 Critical Patch (ビルド 6598) 

#Critical Patch build 4665 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/cedd25d0-f871-5645-fbed-62deaa041bd8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/9d08b4b4-b643-e2cd-90c0-40691e348042.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/dd53ec31-7351-91de-60e4-a9780c259544.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/51fe2c07-7b33-20d7-841f-95609e10cd94.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/c92e09c5-5ce9-8416-e586-824685cd3217.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/0c9cbdc6-faa6-0512-1f99-c55b2a5def5f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/4d757aab-432e-4d69-916b-b9bc32f523aa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/427fe813-52f4-1701-1cac-170589a8e2ec.png)
～再起動～


#Patch 1 リパック版 Build: 6245.00
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/3b9053dd-a7be-04dd-ddfd-5728416d0edc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/6ecc814d-e5ea-dce0-295b-65967f0a1520.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/ccdb1417-a1d6-c40f-de32-29437c4a8c4f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/ed3ab925-8b6e-f59b-e550-8256ffdfcff8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/b4d2a966-ed48-c00a-07ea-bde5e9f6c1b7.png)
～再起動不要～


#Patch1 Critical Patch (ビルド 6598) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/dc80cb29-cec2-5375-8240-6ce17672bb2e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/49fec6a3-f304-f901-9231-8c1407b56482.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/778f41bb-4c42-f03f-cec8-b494e804a38f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/7d865aec-396b-cda1-6dfb-ebb5b1bb52c8.png)
～再起動不要～



#クライアントからの見え方

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/fc89c26d-ff15-b640-d130-3abfbce51063.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/98e679f4-5d0b-6b25-f0a4-6b6518338644.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/6ea85ec0-ec6a-02c7-829a-c3323cc6604c.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/7660ba75-0800-b145-58be-13efc2f22ecf.png)
デザイナーがフロントまで出来れば貴重な人材になれそうな3つの理由

## デザイナーがフロントまで出来れば貴重な人材になれそうな3つの理由
最近、WebやUnityでデザイナーの方のデザインをフロントで組む機会がありました。
その中で、デザイナーがフロントまで出来れば貴重な人材になれそうな3つの理由を見つけました。

・工数をイメージしてデザインできるためスケジュールが正確になる。
・デザイナーとフロント側のコミュニケーションコストが0。
・雇う側も、1人雇えば良いので安く済む。
いかがでしょうか。ぜひコメントをお待ちしています。

P.S 自分がデザインを勉強するのもありですね。
## 終わりに
私は現在、Web3のサービスの開発をしています。詳しくはこちらの記事をご覧下さい。
        [無料でイーサリアムが当たる、Web3時代の寄付サイトを作った話](https://note.com/kenroda/n/n814347fbdcd7)