OmniAICreator/Qiita-1.07M huggingface dataset:
えっ？ SystemVerilog って、新しくなったんです？

# HDL 関係の日本語の文献が少ないぞー！！
FPGA/CPLD の開発言語には、大きく分けて VHDL と Veriog HDL があります。
製本された日本語の文献を探していると、この2種類の内のほぼ何れかになり、最近はあまり出ていない様な印象です。この状態で日本の産業はいいのかぁ～！って思わないでしょうか。

言っても仕方が無いのですが。。。

## 英語の文献もあたってみる。
最新の文献を当たろうとすると SystemVerilog という言語が目にとまるので、調べていくと、IEEE 1800-2012 が最新版らしい。
原典が規格関係か。。。 高いんだろうなぁ。。。と逃げ腰になっていると、どうやら無料でダウンロード出来る模様。一方。数少ない日本語の文献を発行していた機関( 株式会社　半導体理工学研究センター http://www.starc.jp/ )は既に無く、国力の違いを見せつけられた思いを感じながら、ポチポチとクリック。

- URL: https://standards.ieee.org/getieee/1800/download/1800-2012.pdf
- おうふ。。。　404　でした。

### ところで IEEE GET Program って何？
URL: https://ieeexplore.ieee.org/browse/standards/get-program/page/series?id=80 を見ると、『スポンサーの御陰で無料でダウンロード出来るやで。欲しかったらIEEEアカウント作ってやー。』
とあり、無料で入手出来る規格も蒼々たる顔ぶれ。因みに、以下の通り。
- 1666-2011 - IEEE Standard for Standard SystemC Language Reference Manual
- 1666.1-2016 - IEEE Standard for Standard SystemC(R) Analog/Mixed-Signal Extensions Language Reference Manual
- 1685-2014 - IEEE Standard for IP-XACT, Standard Structure for Packaging, Integrating, and Reusing IP within Tool Flows
- 1735-2014 - IEEE Recommended Practice for Encryption and Management of Electronic Design Intellectual Property (IP)
- 1800-2017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language
- 1800.2-2017 - IEEE Standard for Universal Verification Methodology Language Reference Manual
欲しいものもあるので、IEEEのアカウントを作って、ダウンロードします。

## IEEE 1800 を読む。
お正月に読むつもりでしたが、分量に圧倒されて挫折しました。。。。（吐血）
日本語で書かれたページを探して、写経を続けるしかないかしらね。。。

## (追記) あの VHDL は・・・
URL: https://ieeexplore.ieee.org/document/4772740/figures にあります。
- 1076-2008 - IEEE Standard VHDL Language Reference Manual
ですが、こちらは有償の模様。。。
ユーザー属性考察。Qiitaでいいねが付かないように努力しているとある変態ユーザーのTIPS 。

# いいねが付きやすいユーザー属性、ストーリー

- 著名人、本を出しているような既にプログラミング界で成功している人
- 別分野で突出した人、ProductManagerやSEOや就職業界でのレアな高凝縮情報をoutputしてくれる人
- 若手、はじめてプログラミングに触れたりしたにもかかわらず、素晴らしいアプリケーションを生み出してしまった人など

もちろんユーザー属性だけで記事が成功するわけではない

# その逆は？

- プロフィール欄で素性を明かしていない、そもそも会社名も書いていない、どこの骨の馬か分からない
- 常駐ユーザーで、わりと人目に触れる機会は多めのはずだが、なんかよく分からないが大量ポストしている人
- ひとの専門分野がない、何やってるかよく分からない、itemsの円グラフでetcが一番多い、

![image](https://user-images.githubusercontent.com/13635059/50573153-a65f3100-0e11-11e9-9c39-01e88e16e927.png)

![image](https://user-images.githubusercontent.com/13635059/50573158-bd9e1e80-0e11-11e9-94f6-e0253dc3fefc.png)

# 教訓

- いいねをつけないためにはひとつの分野に突出してはいけない、尖ってはいけない
- いいねをつけないためには｢一撃必殺｣であってはいけない、だらだらと中品質ぐらいの記事を書き続けた方が良い
- いいねをつけないためには若手であってはいけない、人が感動しやすいユーザーストーリーを提示してはいけない

あ、ちなみにこの記事わりと楽しんで書いてます 😎

---

https://github.com/YumaInaura/YumaInaura/issues

https://github.com/YumaInaura/YumaInaura/issues/145








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
m3u8 ファイルをffmpeg で　mp4へ変換する

# m3u8ファイルをmp4へ変換します。

### ffmpeg をインストール

```bash
$ brew install ffmpeg
$ ffmpeg 
ffmpeg version 4.0.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.0.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma
  libavutil      56. 14.100 / 56. 14.100
  libavcodec     58. 18.100 / 58. 18.100
  libavformat    58. 12.100 / 58. 12.100
  libavdevice    58.  3.100 / 58.  3.100
  libavfilter     7. 16.100 /  7. 16.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  1.100 /  5.  1.100
  libswresample   3.  1.100 /  3.  1.100
  libpostproc    55.  1.100 / 55.  1.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'
```

```bash
ffmpeg -protocol_whitelist file,http,https,tcp,tls -i 【m3u8 ファイル名】.m3u8 -movflags faststart -c copy 【生成したいファイル名】.mp4
```

上記のコマンドで変換できます。
netrwを気持ちよく使いたい

あけましておめでとうございました。年末くらいから[vim-jp](https://vim-jp.org)のslackに忍び込んで読書会に参加したりしてモチベーションが高かったのでスクリプトが出来ました。

## netrwのブックマーク先にダイレクトに移動するスクリプト

とりあえずソースから

```vim:netrwbook.vim
function! netrwBook#open(...) abort
	if a:0 > 0 && a:1 != 0
		echo a:1
		let selectIdx = a:1
	else
		let idx = 1
		for n in g:netrw_bookmarklist
			echo printf('%3d: %s',idx,n)
			let idx += 1
		endfor
		let selectIdx = input('番号と<Enter>を入力して下さい (空でキャンセル): ')
	endif
	try
		if selectIdx <= 0
			throw 'E684'
		endif
		execute 'silent Explore '.g:netrw_bookmarklist[selectIdx-1]
	catch /E684/
		if selectIdx != ''
			echo "\rブックマークのインデックスが範囲を超えています。"
		endif
	endtry
endfunction
```

### なにこれ

vimのノーマルモードのキーマップ``gb``が空いていて、netrwと共通なので``noremap gb :<C-u>netrwBook#open(v:count)``とかで登録しておくとノーマルモードから直にnetrwのブックマークを開けます。引数がなければ入力待ち、netrwの仕様どおり``3gb``で3番目のブックマークも出来る様になっています。

## 最近覚えたこと

### v:countの使い方

vim-jpのslackで教えてもらいました。``<C-u>``でコマンドのカウントを無視して、変数``v:count``を使ってコマンド内にカウントの数値を使うことが可能なんだけど、変数展開に気をつけること。デフォ値を1にしたい時は``v:count1``が使える。

### printf()がある

全然気がついてなかった…
2019年の目標

2019年目標を立てようと思って書いた。
##1.  spring家族のものを使いこなせる
##2.  ~~漢検準2級を合格する~~ 応用情報技術試験
##3.  5冊の本を読む(読む習慣がないので、少なめ)
#####1.エンジニアの知的生産術
##4  ~~個人のwebサービスを作る~~
Raspberry Pi 3 Compute Module 3へのRaspbianのセットアップ

# Raspberry Pi 3 Compute Moduleとは

[こちらの記事](https://qiita.com/dandan001/items/4e04211869e809699d25)を参照してください。
なお、この記事では、以降CM3と略します。

# Rasbian のインストール
CM3にはRaspberry Pi 3同様にRaspbianがインストールできます。ただし、eMMCが4GBしか無いため、Lite版のインストールをおすすめします。
今回は、Raspbian Stretch Lite November 2018をインストールしました。

1. CM3を別のPCからマウントする
　Raspberry Piでは、MicroSDカードにRaspbianを書き込みますが、CM3では、eMMCに書き込むので、CM3をOSインストールに使用するPC(ホストPC)にマウントする必要があります。以下、Windowsでの手順となります。

　公式ドキュメント：https://www.raspberrypi.org/documentation/hardware/computemodule/cm-emmc-flashing.md
2. マウントするためのツールを、https://github.com/raspberrypi/usbboot/raw/master/win32/rpiboot_setup.exe よりダウンロードしてインストールします。実行ファイルに署名がない為Windows Defenderの警告が出ます。"詳細情報"をクリックした後に"実行"ボタンを押してインストールを進めます。
3. IO Board上にある、J4を、EN側にセットします。
4. 電源とPCを接続します。USB Micro Bコネクタは2つ有りますが、それぞれ繋ぐコネクタが異なりますので注意しましょう。![image.png](https://qiita-image-store.s3.amazonaws.com/0/81274/e4973d25-dc67-4741-30ab-3c02fe407762.png)
5. RPiBoot.exeを実行します。"rpiboot"というキーワードでスタートメニューを検索すると実行できます。
6. コマンドプロンプトが開きプログラムが実行します。しばらくすると、コマンドプロンプトが自動的に閉じて、USBドライブとして認識されます。
7. 通常のRaspberry PiでのOSインストール同様に、[Win32 Disk Imager](https://sourceforge.net/projects/win32diskimager/)を利用してOSイメージの書き込みを行います。デバイスには、6.の段階で認識したドライブを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/81274/1be881ea-4374-2fa8-471f-82262b34d205.png)
8. 書き込みが完了するとセットアップ終了です。

# CM3の起動
PCと繋がっているUSBケーブル(USB SLAVEコネクタに接続されているもの)を外して電源を入れると起動します。
CM3には、有線LANが搭載されていないので、有線LANで接続する場合、USB-LANアダプタを使用する必要があります。
今回は、IOデータの、[ETX3-US2](https://www.iodata.jp/product/lan/lanadapter/etx3-us2/)を使用しました。
USBが1口しかない為、USBハブはほぼ必須と言えます。電源が不安定になることによるトラブルを防ぐ為に、セルフパワー(ACアダプタを使用するタイプ)のUSBハブの使用をおすすめします。今回は、ELECOMの、[U2H-TZS420SBK](https://www2.elecom.co.jp/products/U2H-TZS420SBK.html)を利用しています。
以降は、通常のRaspberry Pi 3のように使用できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/81274/31963ec2-2e11-df69-005d-5f00b118bc87.png)
Raspberry Pi 3 Compute Module 3とは

# Raspberry Pi 3 Compute Module 3 とは?

組込機器向けにRaspberry Piを搭載するためのモジュールボードです。
Raspberry Pi 3と同じSoCであるBCM2873を搭載しており、メモリも、Raspberry Pi 3同様の1GBです。

https://www.raspberrypi.org/products/compute-module-3/

# Raspbery Pi 3との違い

1番大きな違いは、外部機器と接続するための、各種コネクタ(LAN, HDMI, USB, Audio Jack）が搭載されていないことです。
MicroSDスロットも搭載されていません。また、電源供給用のMicroUSBコネクタや、センサなどを接続する為のヘッダピンもありません

# Compute Module 3と、Compute Module 3 Liteの違い

前述の通り、MicroSDスロットがないのですが、Raspbian等をインストールするにはストレージが必要です。
Compute Module 3では、ストレージとして、4GBのeMMCが搭載されています。eMMCとは、embedded Multi Media Cardの略称で、組込機器などの基板上に搭載する為のマルチメディアカードです。
つまり、Compute Moduleには、多少の語弊はありますが、4GBのSDカードが内蔵されている事になります。
左側の基板が、Compute Module 3 Lite、右が、Compute Moduleです。赤枠の部分に搭載されているのが、eMMCとなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/81274/5d34b4c2-70f8-6207-bae4-97eddc76ae26.png)

# Compute Module 3の外部機器との接続方法

開発時に、外部機器と接続する為に、Compute Module IO Board V3が別途発売されています。なお、実際の製品開発時には、専用の基板を設計して搭載することになります。
Compute Moduleだけでは何も出来ないので、開発時にはIo Boardもセットで使う事がほとんどかと思います。開発用に、Compute ModuleとIO Boardがセットになった、「**Raspberry Pi Compute Module 3 Development Kit**」というものが発売されています。
Raspberry Piを扱っている、RSコンポーネントなどからでも購入できるほか、日本では、IOデータでも取り扱いがあります。
https://www.iodata.jp/product/pc/raspberrypi/ud-rpcm3dk/

# Compute Module 3を使用した機器の例

**産業用Raspberry PiのREVOLUTION PI RevPi Core3**
https://revolution.kunbus.com/
工場等で利用されている制御盤で使用する事を想定されたRaspberry Piです。
DINレールという、制御盤に機器を固定する上でよく使用されている金属製のレールに取り付ける事もできます。

**サイネージ機器**
NEC Display Solutions Europeが提供しているサイネージ向けディスプレイに使用する事が発表されています。
https://www.nec-display-solutions.com/p/hq/en/news/dp/Products/Shared/News/2016/PressReleases/Company/RaspberryPi/RaspberryPi.xhtml

# Compute Module 3のセットアップ

Raspberry Pi 3と若干異なる点があります。以下の記事を参照してください。

https://qiita.com/dandan001/items/6fcdb60e0f1c02a58bfc
爆速で効果的なアウトプットを量産するための３つの心得

## はじめに
### この記事を書こうと思った経緯
どうすれば「爆速で効果的なアウトプットを量産できるか」のヒントを得たく、[こちらの本](https://www.amazon.co.jp/%E5%AD%A6%E3%81%B3%E3%82%92%E7%B5%90%E6%9E%9C%E3%81%AB%E5%A4%89%E3%81%88%E3%82%8B%E3%82%A2%E3%82%A6%E3%83%88%E3%83%97%E3%83%83%E3%83%88%E5%A4%A7%E5%85%A8-Sanctuary-books-%E6%A8%BA%E6%B2%A2%E7%B4%AB%E8%8B%91/dp/4801400558/ref=sr_1_1?ie=UTF8&qid=1546324077&sr=8-1&keywords=%E3%82%A2%E3%82%A6%E3%83%88%E3%83%97%E3%83%83%E3%83%88%E5%A4%A7%E5%85%A8)を読みました。そこで得たことと、自分はどうしていこうと考えたのかをアウトプットしておこうと思い、本記事を書くことにしました。

### 誰のための記事か
主に自分のための備忘録、あるいは2019年の抱負的なノリで書いています。後述している自分の課題と同じ課題意識をお持ちの方には少し役立つかもしれません。

### 自分は今何が課題でこれからどうなりたいか
自分は今以下のような課題を抱えています。

- **インプットが多い割にアウトプットが少ない**
  勉強会・研修・カンファレンスへの参加や、勉強・読書などは結構している方だが、それを成果に活かせている実感がない、もしくは活かせていない。

- **アウトプットするのに時間がかかる**
最初から完璧を求めてしまい、完成までにすごく時間をかけてしまう。


これらの課題を克服し、以下のようになりたいと考えています。

- **インプットしたことをアウトプットに繋げ、自己成長を続けている**
- **毎日アウトプットしている**
- **爆速でアウトプットしている**

### なぜ「３つ」の心得なのか
覚えやすい、パッと思い出しやすい数が「３つ」だと思ったからです。ここに書いた３つ以外にも大事なことや役立つことはあると思います。ここでは「爆速で効果的なアウトプットを量産するため」にあくまで自分が特に意識していこうと思った３つをピックアップしています。

## ３つの心得
私が特に意識していくことにした心得は以下の３つです。

1. インプットしたら**「気付き」**と**「ToDo」**を**書き出す**
2. まずは**30%の出来**の**完成品を作る**
3. **先を考えすぎず今やることに集中**し、小さな目標・タスクに落とし込む

### インプットしたら「気付き」と「ToDo」を書き出す
- 「気付き」は学んだこと、「ToDo」はそれを実践するための具体的な行動
- **書き出す**ことが大事（できれば紙に書く）
- 書き出すことで**頭の中を整理**する
- アウトプットする**癖**をつける（書き出すこともアウトプット）
- アウトプットする**ネタ**を常に用意しておく
  
### まずは30%の出来の完成品を作る
- まずは**何かを完成させる**ことが大事
- 形にするまでの**スピードを上げる**
- 形を作った後、**ブラッシュアップを繰り返し**て完成度を上げていけば良い
- **心のハードルを下げる**

### 先を考えすぎず今やることに集中し、小さな目標・タスクに落とし込む
- やることを具体的にすることで**取り掛かりやすくする**
- **心のハードルを下げる**
- 成果が**見えやすい**
- **続けやすい**

## まとめ
2019年はこれらを意識・実践して、爆速で効果的なアウトプットを量産していきたいと思います。
この記事を書くきっかけになった以下の本には、他にもいろいろなアウトプットに役立つことが書かれています。それらは仕事だけでなく育児、勉強、コミュニケーションなどにも活かせる内容です。興味ある方は是非読んでみてください。

- [学びを結果に変えるアウトプット大全 - 樺沢紫苑  (著)](https://www.amazon.co.jp/%E5%AD%A6%E3%81%B3%E3%82%92%E7%B5%90%E6%9E%9C%E3%81%AB%E5%A4%89%E3%81%88%E3%82%8B%E3%82%A2%E3%82%A6%E3%83%88%E3%83%97%E3%83%83%E3%83%88%E5%A4%A7%E5%85%A8-Sanctuary-books-%E6%A8%BA%E6%B2%A2%E7%B4%AB%E8%8B%91/dp/4801400558/ref=sr_1_1?ie=UTF8&qid=1546324077&sr=8-1&keywords=%E3%82%A2%E3%82%A6%E3%83%88%E3%83%97%E3%83%83%E3%83%88%E5%A4%A7%E5%85%A8)
【Spring Boot】エラーメッセージ用プロパティファイルで使用可能なバリデーションルール一覧

どうも、チームCPR所属のミケです。
今回は、SpringBootでの、エラーメッセージ用プロパティファイルで使用可能なバリデーションのルールを一覧にまとめてみました。

SpringBootでは、プロパティファイルに設定をしておくことで、画面からの入力に対してバリデーションエラーを簡単に実装することが出来ます。使えるバリデーションチェックの数が多いため、備忘録も兼ねて一覧にまとめてみました。

※プロパティファイルの作成と共に、アノテーションクラスとバリデータクラスの実装も必要となるがそれはまた別でまとめます。今回は、プロパティファイルに限定していることの留意。


<h3>ルールまとめ</h3>

・ファイル名や設置場所は以下となる。

<table>
<tr><th>ファイル名</th><th>ValidationMessages.properties</th></tr>
<tr><th>ファイル設置場所</th><th>src>main><b>resources</b></th></tr>
</table>

・プロパティファイルへの記入の仕方は、以下となる。
<b>使うバリデーションの指定　=　エラーメッセージ</b>

例1：org.hibernate.validator.constraints.NotBlank.message = 当項目の入力が必須です。
例2：javax.validation.constraints.Min.message = 当項目は{value}よりも大きい数値を入力してください。

・補足
{value}という書き方は、可変的な値に対して便利な書き方となります。言ってしまえば変数。
アノテーションの引数で渡してあげた値が、文字列として画面に表示されます。

<h3>バリデーションの種類一覧</h3>
<ul><li>org.hibernate.validator.constraints.CreditCardNumber.message
<li>org.hibernate.validator.constraints.EAN.message
<li>org.hibernate.validator.constraints.Email.message
<li>org.hibernate.validator.constraints.Length.message
<li>org.hibernate.validator.constraints.LuhnCheck.message
<li>org.hibernate.validator.constraints.Mod10Check.message
<li>org.hibernate.validator.constraints.Mod11Check.message
<li>org.hibernate.validator.constraints.ModCheck.message
<li>org.hibernate.validator.constraints.NotBlank.message
<li>org.hibernate.validator.constraints.NotEmpty.message
<li>org.hibernate.validator.constraints.ParametersScriptAssert.message
<li>org.hibernate.validator.constraints.Range.message
<li>org.hibernate.validator.constraints.SafeHtml.message
<li>org.hibernate.validator.constraints.ScriptAssert.message
<li>org.hibernate.validator.constraints.URL.message
<li>org.hibernate.validator.constraints.br.CNPJ.message
<li>org.hibernate.validator.constraints.br.CPF.message
<li>org.hibernate.validator.constraints.br.TituloEleitoral.message
<li>javax.validation.constraints.AssertFalse.message
<li>javax.validation.constraints.AssertTrue.message
<li>javax.validation.constraints.DecimalMax.message
<li>javax.validation.constraints.DecimalMin.message
<li>javax.validation.constraints.Digits.message
<li>javax.validation.constraints.Future.message
<li>javax.validation.constraints.Max.message
<li>javax.validation.constraints.Min.message
<li>javax.validation.constraints.NotNull.message
<li>javax.validation.constraints.Null.message
<li>javax.validation.constraints.Past.message
<li>javax.validation.constraints.Pattern.message
<li>javax.validation.constraints.Size.message</ul>
※messageの前のワードをアノテーションとして記述する。

<h3>まとめ</h3>
バリデーションチェックは数も多くなりやすいため、エラーメッセージ用プロパティファイルを活用することで大幅な工数削減に繋がりますし、何より管理やメンテナンスが楽になります。
良かったら試してみてください。



引用・参考書籍
掌田津耶乃著、２０１８年出版、「SpringBoot2プログラミング入門」　、秀和システム
v-calenderにて生成されるinputタグにclassとnameを指定してあげる

# 実現したいこと
Vueのライブラリにある[v-calender](https://docs.vcalendar.io/datepicker.html#date-picker)を使用したいけど、Bootstrap4のform-controlを適応したり、nameを指定することでPOSTでデータ処理したい。

#とりあえず出来たこと

```javascript:datepicker.component

<template>
    <v-date-picker
        mode='range'
        v-model='selectedDate'
        show-caps
        :input-props='{ name: this.nameProp, class: "input form-control", placeholder: "実施期間を入力するにはここをタップ"}'
    >
    </v-date-picker>
</template>


<script>
    import VCalendar from 'v-calendar'
    import 'v-calendar/lib/v-calendar.min.css'

    export default {
        data() {
            return {
                selectedDate: {
                    start: null,
                    end: null,
                }
            };
        },
        props : ['nameProp']
    };
</script>

<style scoped>

</style>
```
```html:form.blade.php
<div class="form-group">
 <label for="total_schedule">全体スケジュール</label>
 <date-picker id="total_schedule" name-prop="total_schedule"></date-picker>
</div>
```
## 補足
ライブラリのドキュメントを読むとどうやら、生成されるinputをいじりたいときは:input-propsをいじってくれとのこと
サンプルを多少いじり、クラスとかは普通に指定できた。

View（Blade）からnameを渡してあげる方法がわからず（Axiosとか使って裏で渡してあげるのは面倒だった）試行錯誤した結果とりあえず動くという段階にたどり着いたコードがこれ

## 学び
フォームは全部Vueにしとく方が、結局読みやすくて改修しやすくなりそうな予感
初心者が部分的に使ってみようとすると煩雑になりがち

##注意
このコードはあくまで初学者が、自分のプロジェクトにて部分的に使ってみた結果なんとか動いたというレベルのコードです。アンチパターンなのかもしれませんがとりあえず自分用の覚書も兼ねてメモしました。
nodeのconfigモジュール使い方メモ

# 読み込みファイルの場所
https://github.com/lorenwest/node-config/wiki/Configuration-Files

configはアプリケーションのルートから見て`./config`の場所のディレクトリの中にある設定ファイルを読み込みます。
この設定は環境変数`NODE_CONFIG_DIR`で上書き可能です。また、requireする前であればnodeプログラムの中でも指定する事が出来ます。

```
process.env["NODE_CONFIG_DIR"] = __dirname + "/configDir/";
const config = require("config");
```

#読み込みファイル名

設定ファイルの命名規則。

```
default.EXT
default-{instance}.EXT
{deployment}.EXT
{deployment}-{instance}.EXT
{short_hostname}.EXT
{short_hostname}-{instance}.EXT
{short_hostname}-{deployment}.EXT
{short_hostname}-{deployment}-{instance}.EXT
{full_hostname}.EXT
{full_hostname}-{instance}.EXT
{full_hostname}-{deployment}.EXT
{full_hostname}-{deployment}-{instance}.EXT
local.EXT
local-{instance}.EXT
local-{deployment}.EXT
local-{deployment}-{instance}.EXT
(任意のファイル名で上書き可能)
```
## ファイル名で使われる変数

- EXTは拡張子。.yml .yaml .xml .coffee .cson .properties .json .json5 .hjson .ts .js が設定可能
  - tsとpropertiesファイルの読み込みには、同名のモジュールが必要。モジュールなしでファイルがあると読み込みエラーが出るので注意。
  - 読み込み処理はこの辺。 https://github.com/lorenwest/node-config/blob/2f7a82e2a108c0245f1906e06a8248323df6577d/lib/config.js#L573
- instanceは設定`NODE_APP_INSTANCE`の値。これは環境変数か、コマンドラインオプションで指定できる
  - コマンドラインオプションは `--NODE_APP_INSTANCE=xxx`で指定出来る。 https://github.com/lorenwest/node-config/blob/2f7a82e2a108c0245f1906e06a8248323df6577d/lib/config.js#L1541 このあたりに書いてある
- deploymentは初期値は`development` この値を求めるロジックは以下の通り。`NODE_CONFIG_ENV`が指定されていたらそれを、指定されていなかったら`NODE_ENV`を。それも指定されていなかったら`development`という値が入る。また、入っていた値がカンマ区切りの場合はそれで複数指定出来る。以下のコードで、NODE_ENVは最終的に配列になる。URLはこのあたり https://github.com/lorenwest/node-config/blob/2f7a82e2a108c0245f1906e06a8248323df6577d/lib/config.js#L535

```
  NODE_ENV = util.initParam('NODE_ENV', 'development');
  NODE_ENV = util.initParam('NODE_CONFIG_ENV', NODE_ENV);
  NODE_ENV = NODE_ENV.split(',');
```
- short_hostnameとfull_hostnameのコードは以下の通り。設定osモジュールのhostname()、HOST設定、HOSTNAME設定から最初にあった値を取る。shortの方は、ピリオドで区切った一番最初。

```
HOST = util.initParam('HOST');
HOSTNAME = util.initParam('HOSTNAME');
var hostName = HOST || HOSTNAME;
if (!hostName) {
  var OS = require('os');
  hostName = OS.hostname();
}
var short_hostname = hostName.split('.')[0];
var full_hostname = hostName;
```

## localファイルの注意点

local ファイルはバージョンコントロールに入れるべきではありません との事。

## ファイルの中身(独自研究)

ファイルの中身はkey-value形式に展開される模様。
オブジェクトはマージされる。が、配列は置き換えされるので注意。

ファイルを読み込む時に`//`形式と`/* ... */`形式のコメントは削除されるので、通常この形式のコメントが使えないjsonでもコメントを書くことが出来ます。

バックスラッシュはpropertiesでもjsonでもエスケープ必須なので注意

# ファイルの読み込み

基本的な読み込み方法は以下の通り。

```
const config = require('config');
config.get("xxx")
```

戻り値に数字、nullが入る場合もある。json型の場合は数字か文字列型かを指定出来るが、properties型のファイルではそれを指定する事は出来ない？

`config.xxx`という指定も出来るが、これは互換性の為に残っているので使うべきではない。

`config.has("xxx")`で値の存在確認が出来る。

キーはあるけど値が無い。という場合はnullが帰ってくる。例えばproperties型のファイルでは、キーだけの定義が出来る。

# キーに使えない文字

https://github.com/lorenwest/node-config/wiki/Reserved-Words

`get has util`というキーは予約済みなので使えない。

# 環境変数で値を上書き

`NODE_CONFIG`という環境変数、もしくはコマンドライン引数でjson型の設定を渡すことが出来る。ダブルクオートを指定する方法がシェルによって異なるので注意。
WordPress から Typetalk に通知するプラグインを作った話

タイトルの通り、WordPress から Typetalk に通知するプラグインを作りました。

[is2ei/wp-typetalk](https://github.com/is2ei/wp-typetalk)

WordPress って何？という方は [こちら](https://wordpress.org/)
Typetalk って何？という方は [こちら](https://www.typetalk.com/)

基本的な使い方は [README](https://github.com/is2ei/wp-typetalk/blob/master/README.md) に書いてあります。

現在の最新版は v0.1.0 です。

スクリーンショット
<img width="1674" alt="screenshot-1.png" src="https://qiita-image-store.s3.amazonaws.com/0/27079/4ead0943-ae42-d3c7-03a8-1f556ff4a3c5.png">


フィードバック歓迎です :pray: 

---
なお、このプラグインを作成するに辺り、下記を非常に参考にさせていただきました。:bow:

[gedex/wp-slack](https://github.com/gedex/wp-slack)
[本気で作りたい人向け、WordPressプラグインの作成方法](https://oxynotes.com/?p=9321)
[WordPressプラグインを公式プラグインディレクトリへ追加する方法](https://oxynotes.com/?p=9436)
Qiita 1日100本トライアル 2019年元旦 今日の反省と今後の課題

# Input

- 英語を書くときのSuggestionが効いていないのでなんとか設定したい、MacBookAirで
- List入力、箇条書き入力するときのハイフンが大文字で出てきてしまって爆速の障壁になっている、GoogleIMEの設定が効いていない？見直しする
- MAcBookAir2018がついに今日届いたので、この快適なMacBookAir2015ともお別れかもしれない、どちらが入力しやすいinputtableなのかを試行錯誤する、すこし不安も感じる‥

# Body

- 1日の終わりに目の乾き、ぼんやり、目がかすむレベルが半端じゃなくて、目薬買わなきゃ、というか1記事書くごとに、1センテンス書くごとに目の運動をした方が良い気がする、それか完全ブラインドタッチで入力しながらも目を遊ばせる手法を身につけるとか
- まだinputting中に呼吸が止まっていることがある気がする、もっとアウトプットでキーボードを打ち鳴らしながら呼吸と遊ぶぐらいの感覚でやってみたい
- インターバル設定がまだ完成していない気がする、というかこれはbodyと関係ない、いや関係ある、20記事書いたら1インターバルで中程度の休憩を取る、そのやり方を模索する

# nits

- AlfredのSnippet登録でGithubへのリンクのやつの登録が気に入っていないので直したい
- GoogleImageSearchする時にマウスを使わず1ボタンで画像検索結果に飛びたい
- GoogleTranslateで日本語を英語変換してMEdiumに書くときの方法を試行錯誤したい、これはQiita関係ないけど

github signed by https://github.com/YumaInaura/YumaInaura/issues








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Qiita 1日100本投稿 トライアルに必要なもの Wi-fi 環境、エディタ代替手段、マインドフルネス、ずぼらヨガなど

# 快適なネットワーク環境 / つながらなくても代替手段

- 何はなくともこれ、Wi2 でもつながりにくくてイライラした、かなりのエネルギーロスト、Wi-maxを緊急用に持っておいて、契約解除はせずにおこうか
- 年末年始でいつもの最強スターバックスが閉まっていたので、ロストとした時間は大きい、行きつけのカフェ、Wi-fi環境最強店舗を見つけておくこと、自宅だと集中できないし、全然楽しい感じがしないからだめ
- 元旦にQiitaが落ちた、サービス側が落ちてOutputの手が止まるようじゃだめ、Qiitaの下書き機能を使わずにGithunのISsueをEditorとして使う、愛と信頼のGithub

# マインドフルネス、肉体、呼吸

- マインドフルネス的な全てのスキルを使って、爆速アウトプット中でも自分を客観視して意気揚々とキーボードを打ち鳴らす
- ゆるヨガ的に1本記事を書くごとに微妙に背中を伸ばしたり、姿勢を組み替える、何かやるきが起きない、モチベが上がらないと思ったら、それは心理現象ではなく肉体現象というのは真実
- 特に呼吸の乱れは疲労困憊につながるので、息が体の中を通るように通り道を作っておく

# 爆速 Not Backspace 的メソッド いかなる手戻り禁止！

- とにかくありとあらゆる編集コストを減らしていく、編集コストの高さをしみじみと感じながら、削れるものを見つけては圧倒的削減をおこなう
- たとえば Image Upload で「文章を書きたい順番と間違った」「画像の方を先に入れたい」と思っても、その誘惑をこられたりする、大して替わりのないこだわりであれば捨てる、それよりも爆速で前に進む
- 見出しをもとに戻って編集しなおすとか、さらにいうと、1文字1文字のキーボード入力でさえも戻って戻ってを繰り返すのが膨大なコストになる、絵文字入力の方法も数通り用紙いておいて、爆速入力出来るようにする

# ETC

ここでは語りきれないぐらいの数々のメソッドを使っていく

github signed by https://github.com/YumaInaura/YumaInaura/issues

https://github.com/YumaInaura/YumaInaura/issues/141








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
文字列に重複する文字があるかどうかの判定

```cpp
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
typedef unsigned int uint;
// O(N)
bool is_unique3(string line){
  uint size = line.size();
  if(size>256)return false;
  int flag=0;
  uint i;
  for(i=0;i<size;i++){
    int val = line[i]-'a';
    if(flag&(1<<val))return false;
    flag|=(1<<val);
  }
  return true;
}
// O(NlogN)
bool is_unique2(string line){
  sort(line.begin(),line.end());
  uint i;
  uint size=line.size();
  for(i=1;i<size;i++){
    if(line[i-1]==line[i]){
      return false;
    }
  }
  return true;
}
// O(N^2)
bool is_unique(string line){
  uint size=line.size();
  uint i,j;
  for(i=0;i<size;i++)
    for(j=i+1;j<size;j++)
      if(line[i]==line[j])return false;
  return true;
}
int main(){
  string line;
  cin>>line;
  if(is_unique3(line))cout<<"unique"<<endl;
  else cout<<"not unique"<<endl;
  return 0;
}
```
- 関数is_uniqueはある文字がそれ以降に出現するかどうかで判定。計算量はO(N^2)
- 関数is_unique2は文字列をソートして、i-1番目とi番目を比較して判定。計算量はO(NlogN)
- 関数is_unique3は出現した文字をビットベクトルで記録していって判定。計算量はO(N)
Ada言語 15日目 クラスっぽいもの (package)

#はじめに
C++のクラスを実現しようとしたのですが、パッケージだのなんだので、「それっぽいもの」が出来上がりました。
詳しいことはまだわかっておりませんが、一応メンバ関数のつもりが動いたのでよしとしました。
メンバ変数については、宣言と同時に初期化してしまっていますが、できたのでとりあえずは良しとしました。

それと、IDEのほうでもファイル分割ができました。
手順としては、

 - IDE上で`src`フォルダを右クリック
 - `New` -> `Ada Package`
 - 名前を決めて`OK`
 - メインファイルから`with` `use`で呼ぶ

で、いけました。

#ソースと結果
```main.adb
with zisaku_package1;
use zisaku_package1;

procedure main is
   
   hennsuu : Integer := 0;
   
   obuzyekuto : zisaku_package1.rekoudo;
   
begin
   
   hennsuu := zisaku_package1.mennba_function(20);
   
end main;
```

```zisaku_package1.adb
with Ada.Text_IO;
use Ada.Text_IO;

package body zisaku_package1 is
   
   function mennba_function(hikisuu : Integer) return Integer is
   
   begin
   
      Ada.Text_IO.Put_Line("member function 1");
      return (hikisuu + 100);
      
   end mennba_function;
   
end zisaku_package1;
```

```zisaku_package.ads
package zisaku_package1 is
   
   type rekoudo is private;
   
   function mennba_function(hikisuu : Integer) return Integer;
   
private
   
   type rekoudo is
      record
         mennba_hennsuu1 : Integer := 0;
         mennba_hennsuu2 : integer := 0;  
      end record;
   
end zisaku_package1;
```

`実行結果 : member function 1`

メンバ関数が値を返しているのですが、これを表示しようとしたのですが、忘れてしまいました。
記事を書いているときに気が付いたので、そのままにしておきます。

#最後に
年が明けました。
2019年もよろしくお願いします。

#日記一覧へ
[Ada言語を習得する日記一覧](https://qiita.com/C_Assembly/items/50a0f9d8542679d92ea8)
PowerPoint 2010のマクロでテキストボックスに入力した数値をグラフに反映する方法

Qiitaでの投稿、記念すべき第一回目です。
正直プログラム経験はまだまだ乏しいですが、何かしらお役に立てれば幸いです。

今回は、PowerPoint 2010のマクロ機能を用いた、グラフ自動修正のコードを紹介します。

#背景
PowerPointに入力されたテキストの情報をグラフに自動で反映させるべく、マクロを作ったことのない私はGoogleを頼りにその方法を調べてました。しかし、ExcelのVBAに関するページは多くても、PowerPointのVBAのページは少なく、難航しました。さらに、PowerPoint上の入力情報からグラフのエクセルを操作することを記載していたものが見当たらず、様々なページからソースコードを参考にしなければならず、初心者の私にとってハードルは高かったです。そこで、作成したコードをシェアしようと思いました。

#仕様
* テキストボックスに数値を入れてエンターを押すとグラフに動的に反映される。
* 数値以外を入力する、あるいは0~100以外の数値を入力すると、エラーメッセージが表示される。
* テキストボックスには3桁まで入力可能。

なお、作製したPowerPointの外観は以下の通りです（スライドは少々寂しい）。
![図表示_自動化.PNG](https://qiita-image-store.s3.amazonaws.com/0/334856/a9f6920b-7474-0e1d-8612-333da2b41bfd.png)


#前提条件
私の作成したPowerPointのスライドは以下のようになっています。

* 入力するテキストボックスは、PowerPointの「開発」タブ＞「コントロール」　の中にあるテキストボックスを使用。
* グラフは円グラフ。A、Bの二つの百分率を表示する（A + B = 100%）。
* グラフのBの百分率を表示する部分には、エクセル上で「= 100 - (Aを表示するセル) 」を埋め込む。
* テキストボックスの名前は"txtA"、円グラフの名前は"Chart 5"。
* "txtA"のプロパティのMaxLengthを3に設定。

#ソースコード
作製したソースコードです。

```vb:Slide&nbsp;1
'テキストボックスでエンターキーを押すと、内容を取得してグラフに自動反映する
Private Sub txtA_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        'KeyCodeの初期化
        KeyCode = 0
                
        'txtAの内容取得
        strTxtA = txtA.Text
        
        '数値型でなければエラー文を出力
        If Not (IsNumeric(strTxtA)) Then
            MsgBox "数値を入力してください。"
            Exit Sub
        End If
        
        'txtAの内容をInt型に変換
        intTxtA = CInt(strTxtA)
        
        '数値を0から100で入力していなければエラー文出力
        If intTxtA < 0 Or intTxtA > 100 Then
            MsgBox "数値は0から100の範囲で入力してください。"
            Exit Sub
        End If
        
        '円グラフの取得
        Set myDocument = ActivePresentation.Slides(1)
        Set pchart = myDocument.Shapes("Chart 5")
        
        '円グラフのデータの値を編集
        With pchart.Chart.ChartData
            .Activate
            .Workbook.Sheets(1).Range("B2").Value = intTxtA
            .Workbook.Close
        End With
        
    End If
End Sub
```

#最後に
マクロを作る際、ちょっとした参考になれば幸いです。
ここまで読んでいただき、ありがとうございました！
@Qiita の @メンション 返信先アカウントの補完は 2パターンに分かれることに気付いた #UI #UX

# @ の後に何も入力しない

![image](https://user-images.githubusercontent.com/13635059/50572467-b02e6780-0e04-11e9-86fb-8bb2894e63f8.png)

その記事にレスを付けた人だけから補完する

# @ のあとに文字を入力する

![image](https://user-images.githubusercontent.com/13635059/50572471-bf151a00-0e04-11e9-9146-c1bb6b7f4d9f.png)

全ユーザーから補完する

# Qiitaを3年やってて気づかなかった

- ユーザーの入力意図を正しく反映されられているか？
- ユーザーは アットマークのあとのアカウント文字列はだいたい、ぼやっと分かっているわけだから、全ユーザーからsuggestする必要はないかもしれない
- そもそもその記事にいない人にメンションを送りたいケースってどれぐらいあるんだろうか？

# Twitter比較

- Twitterのメンションも同じ仕様だった気がするな
- Twitterの場合はスレッドという概念が希薄なので、全ユーザーに対して横断的、分散的にメンションが送れて良い
- でもQiitaのように完全なスレッド式のフォーラムと全ユーザーからのsuggestは相性が悪いように思う


github signed by https://github.com/YumaInaura/YumaInaura/issues









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
D-Waveクライアントライブラリのログを出力する

たぶん公式ドキュメントにも載ってないと思うのでメモ。
環境変数 `DWAVE_LOG_LEVEL` に `DEBUG` もしくは `TRACE` を設定しておくと、 D-Wave のクライアントライブラリ `dwave-cloud-client` が D-Wave の REST API との通信ログ出力してくれて便利です。

# 実行例

環境変数設定して、

```python
import os
os.environ["DWAVE_LOG_LEVEL"] = "TRACE"
```

[EmbeddingComposite — dwave-system latest documentation](https://docs.ocean.dwavesys.com/projects/system/en/latest/reference/composites/embedding.html)
のサンプルコードを実行してみると、

```python
from dwave.system.samplers import DWaveSampler
from dwave.system.composites import EmbeddingComposite
sampler = EmbeddingComposite(DWaveSampler())
h = {'a': -1., 'b': 2}
J = {('a', 'b'): 1.5}
response = sampler.sample_ising(h, J)
```

こんな感じのログが吐かれます。

```
2018-12-31 23:32:40,492 dwave.cloud.client DEBUG Config loaded: {'token': ...
2018-12-31 23:32:40,494 dwave.cloud.client DEBUG Final config used for qpu.Client(): {'token': ...
2018-12-31 23:32:40,494 dwave.cloud.client DEBUG Creating a client for endpoint: 'https://cloud.dwavesys.com/sapi'
2018-12-31 23:32:40,497 dwave.cloud.client DEBUG Looking for solver with name=None or features=None
2018-12-31 23:24:13,312 dwave.cloud.solver TRACE Encoded sample request: {"solver": "DW_2000Q_2_1", "data": {"format": "qp", "lin": ...
2018-12-31 23:24:13,314 dwave.cloud.solver DEBUG Submitting new problem to: DW_2000Q_2_1
2018-12-31 23:24:13,315 dwave.cloud.client DEBUG Submitting 1 problems
2018-12-31 23:24:13,739 dwave.cloud.client DEBUG Finished submitting 1 problems
2018-12-31 23:24:13,740 dwave.cloud.client TRACE Handling response: {'status': 'PENDING', 'earliest_estimated_completion': '2018-12-31T14:24:13.681834Z', 'solver': 'DW_2000Q_2_1', 'submitted_on': '2018-12-31T14:24:13.674010Z', 'latest_estimated_completion': '2018-12-31T14:24:13.786675Z', 'type': 'qubo', 'id': ...
...
2018-12-31 23:24:14,056 dwave.cloud.client TRACE Handling response: {'status': 'COMPLETED', 'earliest_estimated_completion': '2018-12-31T14:24:13.681834Z', 'solved_on': '2018-12-31T14:24:13.845923Z', 'solver': 'DW_2000Q_2_1', 'submitted_on': '2018-12-31T14:24:13.674010Z', 'answer': {'num_variables': 2048, 'format': ...
...
```

# ライブラリの該当箇所

[dwave-cloud-client/dwave/cloud/\_\_init\_\_.py](https://github.com/dwavesystems/dwave-cloud-client/blob/0.4.16/dwave/cloud/__init__.py) で環境変数読んでいて、

```python
def _apply_loglevel_from_env(logger):
    name = os.getenv('DWAVE_LOG_LEVEL') or ''
    if not name:
        return
    levels = {'debug': logging.DEBUG, 'trace': logging.TRACE}
    requested_level = levels.get(name.lower())
    if requested_level:
        logger.setLevel(requested_level)
```

[dwave-cloud-client/dwave/cloud/solver.py](https://github.com/dwavesystems/dwave-cloud-client/blob/0.4.16/dwave/cloud/solver.py) などでロギングしています。

```python
        _LOGGER.trace("Encoded sample request: %s", body)
```

# 実行環境

```
$ python --version
Python 3.6.6

$ pip list | grep -e dwave-cloud-client -e dwave-system
dwave-cloud-client  0.4.16    
dwave-system        0.5.4     
```
javascriptで画像をスライド

#はじめに
javascriptで画像をスライドをさせる方法が分かったのでその忘備録


#方法

画像のdisplayを変えるだけ


次にどの画像を表示するかわかるようにするためにquerySelectorAllでスライドを配列で取得してあれこれする。

#実装

まずhtmlに

```html
    <div id="arrow-left" class="arrow"></div>
    <div id="arrow-right" class="arrow"></div>
    
    <div id="slider">
        <div class="slide slide1"></div>
        <div class="slide slide2"></div>
        <div class="slide slide3"></div>
    </div>
```

とかく

slide1,2,3のbackground-imageに画像を設定していきます。

div.arrowをクリックしたときに画像が移り変わる感じにする。


cssはとりあえずこんな感じ

```css
body,#slider{
    margin: 0;
    padding: 0;
    width: 100%;
}

.slide {
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    width: 100%;
    height: 500px;
}

.slide1 {
    background-image: url(image1.jpg);
}

.slide2 {
    background-image: url(image2.jpg);
}

.slide3 {
    background-image: url(image3.jpg);
}

```


次に矢印を作ります


cssはこれ

```css
.arrow{
    cursor: pointer;
    position: absolute;
    margin-top: 230px;
    width: 0;
    height: 0;
    border-style: solid;
}

#arrow-left{
    border-width: 20px 20px 20px 0;
    border-color: transparent gray transparent transparent;
    left: 0;
    margin-left: 30px;
}

#arrow-right{
    border-width: 20px 0 20px 20px;
    border-color: transparent transparent transparent gray;
    right: 0;
    margin-right: 30px;
}
```


画像のサイズによって表示はまちまちだと思うのでarrowのmargin-topは調整してください。


そうするとこんな感じになってると思います。


![slide.png](https://qiita-image-store.s3.amazonaws.com/0/207921/3987f06f-fe8a-f4f8-aebd-c901bb4e3ef5.png)



それで次に画像の処理をjsで書いていきます。

jsファイルに

```javascript

var sliderImages = document.querySelectorAll('.slide');
var arrowRight = document.getElementById('arrow-right');
var arrowLeft = document.getElementById('arrow-left');
var current = 0;

```


と書きます。

sliderImagesはslideの画像のdivを配列として取得していて
arrowRight,arrowLeftがclickされたときにsliderImagesの現在をdisplay:noneにして次の画像を表示させる感じにしていきます。

まずはcssで

```css
.slide1 {
    display: none; <= 追加
    background-image: url(image1.jpg);
}

.slide2 {
    display: none; <= 追加
    background-image: url(image2.jpg);
}

.slide3 {
    display: none; <= 追加
    background-image: url(image3.jpg);
}
```
として

```javascript

function startSlide(){
    sliderImages[0].style.display = 'block';
}

arrowRight.addEventListener('click', function() {
    sliderImages[current].style.display = 'none';
    if(current === sliderImages.length - 1){
        current = -1;
    }
    sliderImages[current + 1].style.display = 'block';
    current++;
})

arrowLeft.addEventListener('click', function() {
    sliderImages[current].style.display = 'none';
    if(current === 0){
        current = sliderImages.length;
    }
    sliderImages[current - 1].style.display = 'block';
    current--;
})

startSlide();
```

を書く。

arrowRightが押されたらcurrentを+1してarrowLeftが押されたらcurrentを-1していく。

だけど例えばcurrentがそのまま3,4,5,6と増えていったらこまるので

もしcurrentがsliderImages.length - 1より大きくなりそうならcurrent = -1をしている

なんで0ではなく-1なのかというとそのあとで
sliderImages[current + 1]としているからです。

arrowLeftでは反対のことをしています。


これで一応動くと思います。

おわり。
AWS Serverless Application Model (SAM)でCORS設定

# この記事は
SAMに従ったCloudformationテンプレにて、Api GatewayのCORSの設定方法がわからなかったのでメモします。

# 設定方法
こちらに書いてあります。
[serverless-application-model/2016-10-31.md at master · awslabs/serverless-application-model](https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration)

以下例のようにGlobal Sectionへ設定を書きます。例ではwww.example.comからのアクセスのみ許可します。

```
Globals:
  Api:
    Cors: "'www.example.com'"
```

少々トラップなのは、LambdaのEventとして設定しているApi Eventには設定できないようです。これで少しハマりました。

また、`Cors`に対応する値は"'hoge'"のように、**ダブルクォーテーションとシングルクォートの二重**にしないとAPIアクセス時エラーになります。
Ruby でワンライナーでズンドコキヨシ

[ブログ記事](http://secret-garden.hatenablog.com/entry/2018/12/30/115754)からの転載です。

## 元ネタ

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>&mdash; てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160?ref_src=twsrc%5Etfw">2016年3月9日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

元ネタが2年以上前でめちゃくちゃ今更なんですが、やってみた。
脳内で考えたコードがワンライナーでそのまま動作したのでちょっとうれしかった

## Ruby でズンドコキヨシ

```ruby
puts (1..).lazy.map { %w(ズン ドコ).sample }.each_cons(5).map(&method(:p)).find(&%w(ズン ズン ズン ズン ドコ).method(:==)).join
puts "キ・ヨ・シ！"
# =>
# ["ズン", "ドコ", "ズン", "ドコ", "ドコ"]
# ["ドコ", "ズン", "ドコ", "ドコ", "ズン"]
# ["ズン", "ドコ", "ドコ", "ズン", "ズン"]
# ["ドコ", "ドコ", "ズン", "ズン", "ドコ"]
# ["ドコ", "ズン", "ズン", "ドコ", "ズン"]
# ["ズン", "ズン", "ドコ", "ズン", "ズン"]
# ["ズン", "ドコ", "ズン", "ズン", "ドコ"]
# ["ドコ", "ズン", "ズン", "ドコ", "ズン"]
# ["ズン", "ズン", "ドコ", "ズン", "ズン"]
# ["ズン", "ドコ", "ズン", "ズン", "ドコ"]
# ["ドコ", "ズン", "ズン", "ドコ", "ドコ"]
# ["ズン", "ズン", "ドコ", "ドコ", "ズン"]
# ["ズン", "ドコ", "ドコ", "ズン", "ズン"]
# ["ドコ", "ドコ", "ズン", "ズン", "ズン"]
# ["ドコ", "ズン", "ズン", "ズン", "ズン"]
# ["ズン", "ズン", "ズン", "ズン", "ドコ"]
# ズンズンズンズンドコ
# キ・ヨ・シ！
```

ワンライナーで書いているのでちょっと複雑かもしれませんが、やっていることは至極単純で

```ruby
(1..)                           # Ruby 2.6 から入った (1..) で無限配列を生成
.lazy                           # 遅延処理するようにする
.map { %w(ズン ドコ).sample }   # ランダムな "ズン" "ドコ" な配列に変換
.each_cons(5)                   # 無限リストを5個ずつの配列に分割
.map(&method(:p))               # この時点で一旦出力
.find(&%w(ズン ズン ズン ズン ドコ).method(:==))  # ["ズン", "ズン", "ズン", "ズン", "ドコ"] の組み合わせを探す
.join                           # 結果を結合
```

無限リスト + `#lazy` を使って遅延処理しつつ、`#each_cons(5)` で分割して `["ズン", "ズン", "ズン", "ズン", "ドコ"]` という並びがあれば終了する、っていう処理です。
やってることは割と力技。
ちなみに `map(&%w(ズン ドコ).method(:sample))` と書きたかったんですが、`#sample` が引数を受け取ってしまうのでダメでした。
ラズパイのハイレゾオーディオDAC（ADRPM1801P）をカスタマイズする

# はじめに

この記事では、[ラズパイマガジン2018年4月号](https://trendy.nikkeibp.co.jp/atcl/pcmedia/181/022600026/)の記事で紹介されているハイレゾDACボードのプログラムのカスタマイズを行います。

## 下準備

とりあえず、SDカードに[dacboardのサイト](https://gogs.quake4.jp/yoneda/dacboard/wiki/%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%B8%E3%81%AE%E3%83%AA%E3%83%B3%E3%82%AF)から、2018年4月4日版をインストールする。イメージの焼き込みには、[balenaEtcher](https://www.balena.io/etcher/)を使うと楽です。

microSDをRaspberry Piに入れたら、sshでアクセスしてOSの更新をしましょう。（ユーザID:pi、パスワード：raspberry）

```ssh
sudo apt update
sudo apt upgrade
sudo rpi-update
```

## その１：ロケフリプレイヤーにする

まず、インターネット越しに家あるNASにアクセスして、実家にあるRaspberry Piにマウントさせます。SambaをNAT越しに使ったりしようとしましたが遅い上にセキュリティ上怪しいのでSFTPそのものをマウントさせることにしました。

当然のことながら、NASではssh（ここではSFTP）でアクセスできるようにしておく必要があります。

まずマウントさせる場所を設置します。そして、sshキーを読み込ませるために仮接続します。

```ssh
$ sudo mkdir /mnt/nas
$ sudo sshfs -p ポート -o password_stdin [ユーザ]@[NASのホスト]
```

すると、sshキーを信頼するかの確認画面が出ます。ここは[y]esにします。

次に、マウント用のスクリプトでマウントできることを確認してください。

```sh:mount.sh
#!/bin/sh
echo "Mounting NAS...\n"
echo '[パスワード]' | sudo sshfs -p ポート -o password_stdin -o allow_other [ユーザ]@[NASのホスト]
echo "\nDone.\n"
```

エラーなくDone.と表示されたら成功です。`ls /mnt/nas`でNASの内容が表示されることを確認してください。

最後に、mpdの走査ディレクトリを変更します。

```diff:/home/mpd/setting/mpd.conf
 #music_directory		"smb://yourserver/music"
 #music_directory		"/home/mpd/music
-music_directory		"/extSD"
+#music_directory		"/extSD"
+music_directory		"/mnt/nas"
```

あとは、このマウント用のコードを`/etc/rc.local`あたりに入れて自動マウントするようにしましょう。

## ２，GUIインターフェースのympdをmyMPDにする。

本題です。ympdはずいぶんと昔に更新が止まっています。そこで派生版の[myMPD](https://github.com/jcorporation/myMPD)をインストールしましょう。

まず、myMPDをインストールします。

```ssh
$ sudo apt install cmake 
$ git clone https://github.com/jcorporation/myMPD.git
$ cd myMPD
$ sudo ./mkrelease.sh
```

しばらくするとビルドが終わります。

次に、もともと入っているympdを止めます。

```ssh
$ sudo service ympd stop
$ sudo systemctl disable ympd
```

次にmyMPDの設定を行います。myMPDはデフォルトでSSL対応ですがここではSSLを無効にします。`/etc/mympd/mympd.conf`のsslをenableからdisableにしてください。

完了したら、サービスへの登録を行います。

```ssh
$ sudo cp /usr/share/mympd/mympd.service /etc/systemd/system/mympd.service
$ systemd enable mympd
$ service mympd start
```

完了したら`sudo reboot`で再起動してください。しばらくしてhttp://superdac.local/ にアクセスして、以下の画面が出たら成功です。

![mympd.png](https://qiita-image-store.s3.amazonaws.com/0/15020/2543efdd-12ae-7101-5a04-987b5f62a1c0.png)

あとは、左上のmyMPDにマウスオーバーしてUpdateをクリックしUpdate Databaseを選択するとデータベースが更新されます。
![mympd2.png](https://qiita-image-store.s3.amazonaws.com/0/15020/a48d34ed-661a-a237-72bb-bacccb4fd111.png)
日本語版RubyリファレンスマニュアルをVelocityで使う方法

[Dash](https://kapeli.com/dash)および[Velocity](https://velocity.silverlakesoftware.com/)ではRubyのリファレンスを公式からダウンロードできますが、英語版になってしまいます。日本語版RubyリファレンスマニュアルについてはDash用のものを用意していてくれている方がいます。

[rubydoc-ja-docsets by labocho](http://labocho.github.io/rubydoc-ja-docsets/)

上記はdash-feedのリンクになっており、Dashではそのまま登録が可能です。しかし、Velocityはdash-feedのリンクには対応しておらず、docsetを直接取り出して登録する必要があります。

まず、下記から対応したいバージョンのxmlを開きます。

[https://github.com/labocho/rubydoc-ja-docsets/tree/master/tarball](https://github.com/labocho/rubydoc-ja-docsets/tree/master/tarball)

urlタグで囲まれた部分のurlにあるtgzファイルをダウンロードします。"Ruby-2.x.0.tgz"というファイル名になっています。この圧縮形式はVelocityが読み込める形式と僅かに違いがあるため、そのままでは登録できません。

tarを使えるシェル環境[^1]でダウンロードしたファイルがあるディレクトリまで移動します。後は下記のように展開と圧縮をし直します。("2.x.0"部分はダウンロードしたバージョンによって異なりますので、実際のファイル名に読み替えてください。)

[^1]: Git for Windows の bash 等を使います。

```shell
tar xzf Ruby-2.x.0-ja.tgz
cd docsets
tar czf 'Ruby 2.x.0-ja.docset.tgz' 'Ruby 2.x.0-ja.docset'
```

Velocityの設定で、Add/Download -> Xcode の Import... から、作成された"Ruby 2.x.0-ja.docset.tgz"をインポートします。インポートが成功すればManageの一覧に現れるようになります。

アップデートは自動的に行われませんが、少し便利になりました。Velocityにはdash-feedリンクにも対応して欲しいです。というより、どっちかがどっちかを買収して統一して欲しいです。
Intel (Altera) Quartus Prime の 環境を変更する。

# Intel Qaurtus Prime の環境を変更する。
旧 Altera の Quartus は Ⅱの頃からその操作環境の使いにくさ（失礼）には辟易としてきました。
当時は Xilinx の ISE も似たり寄ったりの操作環境（失礼）だったので、Quartus を選択したのですが、最近 Xilinx のHPをのぞきに行ったら結構変わっている印象。。。なんか使いやすそう。。。（まだ入れてない）
でも会社の FPGA メーカーの方針は決めてしまったのでもう戻れない。。。
じゃあ、まだ FPGA の開発実績は少ないので今のうちに（私が考える使いやすい様に）環境を変えてしまおうか。的なノリで、このページを作成しました。

## やりたいことと出来なかった事。
- とっても使いにくい回路図入力をなんとかする。 →　無理でした。
- Code入力もなんだかなぁという感じなので、何とかする。　→　色々ありますが、Visual Studio Code を採用しました。
- ねぇねぇ、バージョン管理って言葉しってる？　→　Visual Studio Code に言われるがままに Git を入れることに。

## Intel Quartus Prime をインストールする。
- URL: https://www.intel.com/content/www/us/en/software/programmable/quartus-prime/download.html から、わたしは Lite Edition をダウンロードしてインストール。
- 2019-01-01: 時点では、18.1 が最新版。

## Visual Studio Code (以下、VSCode) をインストールする。
- URL: https://www.microsoft.com/ja-jp/dev/products/code-vs.aspx

### インストールする拡張機能
- Verilog HDL/SystemVerilog ・・・ Verilog の拡張機能は幾つかありましたが、導入数の多さから此方にしました。
    - URL: https://marketplace.visualstudio.com/items?itemName=mshr-h.VerilogHDL
- PrintCode ・・・ VSCode の環境で印刷できないのですが、これを用いると印刷が可能になります。会社の場合、セキュリティでポートが塞がれていると印刷できない場合があるかも知れません。
    - URL: https://marketplace.visualstudio.com/items?itemName=nobuhito.printcode

## Gitをインストールする
- URL: https://desktop.github.com/ からダウンロードして、インストールします。記事の下書きを書いてから Microsoft に買収されたりと推奨の開発環境が変わってしまったかも知れません。

## Editor を MS VSCode に変更する。
- Quratus Prime を起動して、
- Tools → Options... から
- Preferred Text Editor を選択し、テキストボックスに以下を入力　` "C:\Program Files\Microsoft VS Code\Code.exe"  --goto %f:%l ` して再起動すると、VSCode で作業が出来る様になります。オリジナルの方が良い場合は、この場所を戻せばokです。
python mysqlclientのインストールがエラーになる場合の対処（mac）

#pythonのmysqlclientがエラーになる場合の対処
python用MySQLコネクタのmysqlclientのインストール時にエラーが複数でて泣きそうになったので対処の記載です。

##環境
- macOS Mojave 10.14.2
- python 3.7.1
- pip 18.1
- mysqlclient 1.3.14

`pip install mysqlclient`
で複数のエラー発生

##invalid active developer path (/Library/Developer/CommandLineTools)

`xcode-select --install`
でCommandLineToolsを導入することで対処できます。
##'my_config.h' file not found

`brew install mysql-connector-c`　mysql-connector-cをインストール
`which mysql_config`　でmysql_configのパスを確認
`chmod 777 上記のパス`で権限を書込可能に変更
`vim 上記のパス`で
`libs="$libs -l"`を`libs="$libs -lmysqlclient -lssl -lcrypto"`に変更します。


##参考文献
https://stackoverflow.com/questions/50940302/installing-mysql-python-causes-command-clang-failed-with-exit-status-1-on-mac

https://github.com/PyMySQL/mysqlclient-python/issues/131
javascriptでモーダルウィンドウ

#初めに
javascriptでモーダルウィンドウのやり方がわかったので忘備録として

#とりあえず
モーダルウィンドウっていってもすることはボタンを押されたりしたらモーダルウィンドウを表示するだけ、要はdisplayをnoneにしたりblockにしたりするだけで実装できる。

#実装していく

モーダルウィンドウの部分を作っていく

```html
<div id="modal" class="modal">
  <div class="modal-content">
    <div class="modal-body">
      <h1>hello</h1>
    </div>
  </div>
</div>

```

```css
.modal {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
height: 100%;
width: 100%;
overflow: auto;
background-color: rgba(0,0,0,0.5);
}

.modal-content{
background-color: white;
width: 500px;
margin: 40% auto;
}
```


みたいにする

表示の確認をしたい場合はdisplay:noneをけしてみてください。


こんな感じに表示されると思います。

![modal.png](https://qiita-image-store.s3.amazonaws.com/0/207921/3f7bb910-d2f5-d191-06bc-a1e5c4f0ce1c.png)



それで次にボタンを作ります。

```html
<input type="button" id="btn" value='click me'>
```

そしてjsでこのボタンが押されたときにmodalのdisplayをblockにします。


jsファイルに


```javascript
var btn = document.getElementById('btn');
var modal = document.getElementById('modal');

btn.addEventListener('click', function() {
  modal.style.display = 'block';
}


```


こんな感じに書けばモーダルがない状態でボタンを押すとモーダルウィンドウが出てくると思います。


モーダルを消す機能を追加するために

さっきのhtmlを

```html
    <div id="modal" class="modal">
        <div class="modal-content">
            <div class="modal-body">
                <h1>hello</h1>
                <input type="button" id="closeBtn" value="close">  <= 追加
            </div>
        </div>
    </div>
```

こうします。

このcloseボタンが押された時にmodalのdisplayをnoneにします。

jsファイルに

```javascript


var closeBtn = document.getElementById('closeBtn');

closeBtn.addEventListener('click', function() {
  modal.style.display = 'none';
})
```


と書き加えます。

これでモーダルウィンドウの表示、非表示ができるようになりました。


またボタンではなく外側の黒い部分を押してもモーダルが消えるようにしたい場合は


```javascript

window.addEventListener('click', function(e) {
  if (e.target == modal) {
    modal.style.display = 'none';
  }
});

```

お加えればOK

後はデザインを適当に加えれば完成です。
【作成中】DjangoでWebアプリケーションを作ってみる



これに沿って作ってみる。
https://eiry.bitbucket.io/index.html


### 詰まったところ

##### Django アプリケーションを作ろう

https://eiry.bitbucket.io/tutorials/tutorial/application.html#django

>mysiteフォルダーの中にhelloフォルダーが作られます。

そうならなかったので、手動で「hello」フォルダをmysite配下に移動した。


##### ビュー関数とURLConfを書こう

https://eiry.bitbucket.io/tutorials/tutorial/views_and_urls.html#urlconf

hello.urls.pyの編集内容

サイトの通り実装すると次のエラーが発生する。

```
File "/Users/****/PycharmProjects/practice/mysite/mysite/urls.py", line 22, in <module>
    url(r'^hello/', include('hello.urls', namespace='hello')),
  File "/Users/****/wk_yuta/PycharmProjects/practice/venv/lib/python3.7/site-packages/django/urls/conf.py", line 39, in include
    'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.
```

これを解消するため、app_nameを記述する。

``` python
from django.conf.urls import url
from . import views

# このapp_nameを追加する
app_name = "hello"

urlpatterns = [
    url(r'^$', views.hello_world, name='hello_world'),
]
```

参考：https://teratail.com/questions/88819
VimAdventures レベル1～レベル3　攻略

# VimAdventuresとは

Vimの操作を段階的に覚えることができるゲーム。
しかし日本語版はなし。
URL:
https://vim-adventures.com/

##　日本語解説動画

https://youtu.be/4llyjXW9qNs 





##　レベル1
###　基本操作
「j」「k」「h」「l」しか使えない。
「:keybord」で使えるコマンドが確認できる。
「:help コマンド」でコマンドの効果を確認できる。（英語）

まず鍵を取り、扉を開ける。（宝箱は無視）⇒
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/71162/8d2f6f68-6ff4-de1d-32da-e007d5584b2b.png)
１に移動　⇒　「j」で下がる。⇒2に移動　⇒　「k」で下がる。⇒3に移動　⇒　「k」で下がる。

王様に話しかけてクリア。

##　レベル2
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/71162/901d0645-7d42-0eb5-04da-fc8f73186e27.png)

「w」を取得⇒「e」を取得⇒鍵を取得⇒「ｂ」を取得⇒残りの鍵を取得⇒扉を開け、王様に話しかけてクリア。

##　レベル3
「B」を取得⇒右に移動して「x」を取得⇒赤い文字を「x」で削除⇒鍵を取得⇒レベル1に宝箱を開ける
⇒レベル3に戻ってきて王様に話しかけてクリア


#ライセンス購入
無料版はここまで、
有料版はこちらから：
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/71162/4f8133e1-60f3-5668-e774-c8a73863c4dc.png)

### 購入するとできること
レベル4以降が遊べる
セーブ機能が使える
以下のコマンドを使う：
h j k l : w W e E b B x X r d dd D ~ 0 ^ $ f F t T ; , % z zt zz zb g gg G digits (1-9) * # n N p P " y yy Y resiters :reg "" "- "_ numbered-registers letter-registers i I a A c cc C s S o O { } ( ) [{ ]} [( ]) . text-objects H M L nu | / ? ` ' m :marks :delmarks u CTRL-R buffers (:b :ls) files (:w :e)



###個人で購入の場合
6か月　25ドル

###法人で購入
制作者と相談


twitter: https://twitter.com/omegala81

次回　レベル4、レベル5：　https://qiita.com/arufa/items/a364cb99310cdeecc19f
DevTools tips — day 12: 忍者ログ

この記事は[Tomek Sułkowski](https://medium.com/@tomsu)さんによる
フロントエンドエンジニア向けアドベントカレンダーの翻訳記事です。
とても勉強になったので許可を得て翻訳させていただきました。元記事は[こちら](https://medium.com/@tomsu/devtools-tips-day-12-the-ninja-logs-74b08b259c20)。
 
---

*休暇まであと24日です。私はこれからDevToolをより効果的に、そしてもっと楽しく使うためのコツを紹介する短い記事を書いていきたいと思います。[昨日](https://qiita.com/rena_m/items/a4f8c9f07282cb98fd60)のテーマはスタイルエディタでした。今日は私が「忍者コンソールログ」と呼んでいるテクニックをテーマにします。まずはじめに…*

# 33. 条件付きブレークポイント
ブレークポイントを設定すると、時々必要以上に頻繁に評価されてしまうことがあります。200以上の要素を通過するループがあるとして、110回目の試行、または値の組合せなどによる特殊な条件下のみに興味がある場合について考えてみてください。

こうした場合に、条件付きのブレークポイントを設定することができます。手順は以下の通りです。

行番号の上で右クリックをして`“Add conditional breakpoint…”`を選び、trueかfalseか判定したい式を入力してください。(ポップアップで出てくる説明とは少し異なるようですが、厳密にはtrue/falseでなくても構いません)ここで記述する内容においては、そのコードの場所で、例えばその行のスコープで利用可能なもの全てにアクセスすることができます。

これで与えられた条件が満たされる時のみブレークポイントでコードの評価が一時停止されるようになりました。

![1.gif](https://qiita-image-store.s3.amazonaws.com/0/318825/ca2265f8-e118-7b01-3f03-9bf7e7bb9072.gif)

# 34. 忍者コンソールログ
条件付きブレークポイントを活用したあるテクニックがあります。その仕組みをご説明しましょう。

ブレークポイントに与えられた条件はアプリケーションがその行に到達するたび評価、または実行されなければいけません。そしてfalseに相当する結果(undefinedなど)が返却された場合は一時停止されません。…そう、ここに`console.`メソッドを入れることができるのです！

`console.log / console.table / console.time`などのソースコードの色々な場所に仕込む代わりに、Sourcesタブから条件付きブレークポイントを利用してこうしたメソッドを加えることができるのです。メソッドが与えられたブレークポイントで止まることはありませんが、そのメソッドは毎回実行されます。必要なくなった時には、`Breakpoints`セクションで表示される一覧の中から該当のものを探し、2回クリックすればたくさんの忍者が一瞬にして消えるようにブレークポイントも無くなります。

![1.gif](https://qiita-image-store.s3.amazonaws.com/0/318825/2320ef22-2c56-7bdc-da22-5adf47410246.gif)

このテクニックはソースに`console.log`を埋め込むことができない本番環境でのデバッグにも活用することができます。

---
とても濃い内容でしたね！今日はここまでです 😀
いつも通り、**なにか新しいことを学べたらぜひ**
→ もっと多くの人の目に止まるように**拍手👏ボタンをお願いします！**
→ 他の投稿も見逃さないように**[Twitter (@sulco)をフォロー](https://twitter.com/sulco)**してください！