OmniAICreator/Qiita-1.07M huggingface dataset:
SkypeをUbuntuにインストールする方法

UbuntuにSkypeをインストールする方法についてまとめます。

#インストール方法
1. [Download Skype | Free calls | Chat app](https://www.skype.com/en/get-skype/)を開き、`Get Skype for Linux RPM`横のプルダウンをクリックします。
![Download Skype | Free calls | Chat app_065.png](https://qiita-image-store.s3.amazonaws.com/0/52291/260f550a-d09f-3435-c12a-50a911840d6e.png)
1. `Get Skype for Linux DEB`をクリックし、debパッケージをダウンロードします。 
![Download Skype | Free calls | Chat app_064.png](https://qiita-image-store.s3.amazonaws.com/0/52291/ac7bc0ab-5217-6116-9c8c-ed3d4400103d.png)
2. `sudo apt install ./skypeforlinux-64.deb`コマンドを実行し、Skypeをインストールします。

#アップデート時のエラーへの対処方法
インストール後、`sudo apt update`を実行した際に以下のエラーが出る場合があります (公開鍵の部分は`{key}`に変えてあります)。

```
W: GPG エラー: https://repo.skype.com/deb stable InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY {key}
E: リポジトリ https://repo.skype.com/deb stable InRelease は署名されていません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。
```

その場合、以下のコマンドを実行し、再度`sudo apt update`を実行します。

```bash
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys {key}
```

#参考文献
* [Skype その14 - Skype 5.0 β版がリリースされました・他OSへの1対1のビデオ通話に対応 - kledgeb](https://kledgeb.blogspot.jp/2017/03/skype-14-skype-50-os11.html)
* [apt-get で公開鍵エラー(NO_PUBKEY)が出た時の対処法 - あれこれ備忘録@はてなブログ](http://arekorebibouroku.hateblo.jp/entry/2015/11/03/150827)
* [【Linux FAQ】.debファイルをダウンロードしたのですが、どうやってインストールすればいいですか？ | Linux Fan](https://linuxfan.info/post-1881)
Python2.7で実行時引数を受け取る

# Python2.7で実行時引数を受け取る

スクリプトの実行時に渡した引数で処理を変える際に利用しました

## 動作環境
OS: Windows7
言語: Python 2.7.10

## やり方
`import sys`を行い`sys.argv`の配列内に格納される引数を取得します

### サンプルコード

```py:test.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

if __name__ == "__main__":
    count = 0
    for roop in sys.argv:
        print str(count) + '番目引数 : ' + str(roop)
        count += 1
```

### 実行例

`python test.py aiu e o 1 23`

### 実行結果
```
0番目引数 : test.py
1番目引数 : aiu
2番目引数 : e
3番目引数 : o
4番目引数 : 1
5番目引数 : 23
```

![Qiita用_引数.png](https://qiita-image-store.s3.amazonaws.com/0/139291/96e79a29-f362-a7c5-eb3d-62567b526560.png)
Visual Studio / WPF > コントロール > TabControl > デフォルトタブを設定する @ XAML

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.4609 / 9985
> TabControlは、以下のようなタブで切り替えて複数のコンテンツを表示するUIを提供するためのコントロールです。

試してみた。
デフォルトタブをどう切り替えるかは以下で見つけた。
http://stackoverflow.com/questions/20356239/tab-control-selecting-first-tab-by-default

```xml:XAML
<Window x:Class="_170426_t1020_tabControl.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170426_t1020_tabControl"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="133*"/>
            <RowDefinition Height="27*"/>
        </Grid.RowDefinitions>
        <TabControl Margin="0, 10" Grid.RowSpan="2" SelectedIndex="1">
            <TabItem Header="Next Generation">
                <TextBlock Text="Star Trek: The Next Generation"/>
            </TabItem>
            <TabItem Header="Voyager">
                <TextBlock Text="Star Trek: Voyager"/>
            </TabItem>
            <TabItem Header="Deep Space Nine">
                <TextBlock Text="Star Trek: Deep Space Nine"/>
            </TabItem>
        </TabControl>
    </Grid>
</Window>
```

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _170426_t1020_tabControl
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}
```

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/f12a0b20-1c41-5473-4d40-9fca05d8c6ee.png)
ローカルで利用していたgitを、「SourceTree」ソフトを使って途中からGitHubにプッシュする

<h2>GitHub側の操作</h2>
![gitgub-push0001.png](https://qiita-image-store.s3.amazonaws.com/0/111958/afc18758-dd65-c4c5-ce7a-1a253c4d4519.png)

<ol>
<li>「New repository」をクリック。</li>
<li>「Repository name」を入力。</li>
<li>「Public」または「Private」を選択。</li>
<li>「Initialize this repository with a README」にチェックを入れる。</li>
<li>「Create repository」をクリック。</li>
</ol>

![gitgub-push0002.png](https://qiita-image-store.s3.amazonaws.com/0/111958/8a542e65-12c2-d50f-82be-9523621408b4.png)

<ol>
<li>「Your profile」をクリック。</li>
<li>作成したリポジトリ名をクリック。</li>
</ol>

![gitgub-push0003.png](https://qiita-image-store.s3.amazonaws.com/0/111958/f8979bbb-f53f-64a9-489a-2b41bfefe7b9.png)

<ol>
<li>「Clone or download」をクリック。</li>
<li>アイコンをクリックしてURLをコピー。</li>
</ol>

<h2>「SourceTree」ソフト側の操作</h2>
![gitgub-push0008.png](https://qiita-image-store.s3.amazonaws.com/0/111958/ee97be65-87cf-3273-8e73-99032ddbd534.png)

<ol>
<li>「設定」アイコンをクリック。</li>
<li>「追加」をクリック。</li>
</ol>

![gitgub-push0006.png](https://qiita-image-store.s3.amazonaws.com/0/111958/a761cfee-8820-338a-7fd0-2416ab89cbb6.png)

<ol>
<li>リモート名：適当な名称を入力。</li>
<li>Githubで作成したリポジトリのURLを張り付ける。</li>
<li>「OK」をクリック。</li>
</ol>

![gitgub-push0007.png](https://qiita-image-store.s3.amazonaws.com/0/111958/677b0cc3-74e5-674c-a318-40b94cf4e7c1.png)

<ol>
<li>「OK」をクリック。</li>
</ol>

![gitgub-push0005.png](https://qiita-image-store.s3.amazonaws.com/0/111958/74b1b3b2-a2af-0a5a-05a4-e933b447fe57.png)

<ol>
<li>プッシュするプロジェクトを選択。</li>
<li>プッシュ先を選択。</li>
<li>プッシュ先のURLを確認。</li>
<li>プッシュする対象をチェック。</li>
<li>「プッシュ」をクリック。</li>
</ol>
<p>以上でGitHubへのプッシュが完了。</p>

<h3>リモートするリポジトリを追加</h3>
<p>リモートするリポジトリを追加する時は下記の操作を行います。</p>
![gitgub-push0004.png](https://qiita-image-store.s3.amazonaws.com/0/111958/74ca322a-7aa3-bf6c-0330-042ca2ed737b.png)

<ol>
<li>「設定」アイコンをクリック。</li>
<li>「追加」をクリック。</li>
<li>「名前」を入力。</li>
<li>Githubで作成したリポジトリのURLを張り付ける。</li>
<li>「OK」をクリック。</li>
</ol>
Excel 2013 (Ver.15) のデフォルトテーマを変更する

#Excel 2013 (Ver.15) のデフォルトテーマを変更する
Excelは、テーマの変更はできるが、新規ファイルを作った時に適用されるいわゆる「デフォルトテーマ」の変更ができない。
いつも「Office」という「ＭＳ Ｐゴシック」という劣悪なフォントを使ったテーマで新規ファイルが作られる。

デフォルトのフォントは「オプション」から指定できる。ここでフォントを指定すると、セルのフォントだけではなく、数式バーや列番号、行番号もそのフォントで表示される。
しかし、ここでフォントを指定すると、新規ファイルには当然このフォントが指定される。
OSにプリインストールされていないフォントを指定した時には、書類を他のPCに渡した時に気持ち悪い。
ということはテーマの「本文のフォント」を自分が指定するフォントにして切り替えるしかない。
しかし新規ファイルを開くたびにテーマを切り替えるのが面倒だ。
ということでググってみた。

【参考】[Word または Excel でテーマを変更して既定のテーマにする](https://support.office.com/ja-jp/article/Word-%E3%81%BE%E3%81%9F%E3%81%AF-Excel-%E3%81%A7%E3%83%86%E3%83%BC%E3%83%9E%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%A6%E6%97%A2%E5%AE%9A%E3%81%AE%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AB%E3%81%99%E3%82%8B-c846f997-968e-4daa-b2d4-42bd2afef904#__make_my_changes)

> ユーザー設定のテーマを空白のブックに適用し、Book.xltx という名前でテンプレートとして保存します。

となっています。

##どこにだよ！
とりあえず個人用のテンプレートフォルダーに保存してExcel再起動してみる。→失敗
そして再びググる。

【参考】[Excelのちょい効き!ワザ - 新規作成されるファイルの書式をいろいろとカスタマイズするには](http://news.mynavi.jp/articles/2012/08/17/exceltips/)

> 「%ProgramFiles%\Microsoft Office\Office14\XLSTART\Book.xltx］と入力して［保存］ボタンをクリックする。

とある。ふむふむ…しかしウチのはOffice15だ。Excelの保存ダイアログで「%ProgramFiles%\Microsoft Office\Office15\」を探してみる。
あるにはあったが、その中に「XLSTART」というフォルダーはない。仕方がないので「XLSTART」というフォルダーを作ってその中に保存…と思いきや「権限がないのでそこには保存できない」と怒られる。
しょうがなくデスクトップに保存し、エクスプローラーで移動してExcel再起動。→失敗

##もうググるのも面倒なんで自分で探す
で、見つけたのが**「C:\Program Files\Microsoft Office 15\root\office15\XLSTART」**
テーマ設定した「Book.xltx」をここに移動してExcel再起動。→やったね！成功！

##でもちょっと待て
これだとこのPCのユーザー全部に設定が反映されるんじゃないか？
まぁ、それでも良いんだけど、とりあえずもう一回探す。
するとこっちにもあった。
**「C:\Users\\*（ユーザー名）*\AppData\Roaming\Microsoft\Excel\XLSTART」**
ここに「Book.xltx」を移動してExcel再起動→成功！

##結論
1.　「オプション」の既定フォントに、数式バーや列番号、行番号で使いたいフォントを指定
2.　シートで使うフォントはテーマで「本文のフォント」として設定
3.　テーマ指定した空のブックを「Book.xltx」として「C:\Users\\*（ユーザー名）*\AppData\Roaming\Microsoft\Excel\XLSTART」に保存
4.　めでたしめでたし

これで、「数式バーは等幅フォントで、セルはプロポーショナルフォント」という設定も可能になる。
Visual Studio / WPF > コントロール > Slider > SmallChange, LargeChangeプロパティ

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.4550 / 9985
> 4.6.5.2 値の増減幅の設定

SmallChange, LargeChangeというプロパティを使うようだ。
使ってみた。

```xml:XAML
<Window x:Class="_170426_t0930_radioButton.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170426_t0930_radioButton"
        mc:Ignorable="d"
        Title="MainWindow" Height="400" Width="525">
    <Grid Margin="0,30,0,0">
        <StackPanel>
            <Slider x:Name="slider1" Margin="0, 10" 
                    Maximum="100"
                    SmallChange="5" LargeChange="20"
                    ValueChanged="slider1_ValueChanged"/>
            <Slider x:Name="slider2" Margin="0, 10"
                    Maximum="200"
                    />
            <Slider x:Name="slider3" Margin="0, 10"
                    Maximum="400"
                    />
            <Button Content="Turtle" Margin="0, 5" Click="Button_Click"/>
            <Button Content="Rabbit" Margin="0, 5" Click="Button_Click_1"/>
        </StackPanel>
    </Grid>
</Window>
```

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _170426_t0930_radioButton
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            slider2.Value = slider1.Value;
            slider3.Value = slider1.Value;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            slider1.Value += slider1.SmallChange;
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            slider1.Value += slider1.LargeChange;
        }
    }
}
```

ボタンによりSlider1の値をLargeChange, SmallChangeの値で変更する。
Turtle(小さい)、Rabbit(大きい）増加。

こういう使い方が正しいかは不明。



![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/763c8ac5-b10a-ca6e-a82c-6db5aedc0e5d.png)
ターミナルに毎回表示される長ったらしい表示を短くする

2020/01/28 追記
macOS Catalinaでの設定に対応しました。

----

macOSのターミナルでは、`$`マークの前にコンピューター名やユーザー名が表示されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/67884/a7ef989b-123e-e586-367f-37e1b83fee9a.png)

- 狭いディスプレイで少しでも広い領域でコマンドラインを使いたい
- 人前でコマンドラインの操作をするとき、コンピューター名やユーザー名を見られたくない
- コンピューター名を日本語にしていたら、変なローマ字が表示されるのが嫌だ

といった場合、この部分はカスタマイズして短くできます。

![](https://qiita-image-store.s3.amazonaws.com/0/67884/9cc75933-56df-b7c2-d446-447a3439f3d7.png)

▲ 現在ディレクトリと`$`のみ

![kemono2.gif](https://qiita-image-store.s3.amazonaws.com/0/67884/66f3ae6f-b2b3-b1b4-efd3-54a76411396a.gif)

▲ 絵文字の表示

# 設定方法（macOS Catalina以降）

`/Users/(ユーザー名)/`に、`.zshrc`があるかどうかをチェックします。もし`.zshrc`が存在しない場合は、新規テキストファイルとして作成します。`/Users/(ユーザー名)`に移動し、コマンドラインより下記を実行します。

```bash:コマンド
touch .zshrc
```

`.zshrc`をVisual Studio Code等で開き、次のように追記します。


```text:.zshrc
export PS1="%~ %n "
```

`PS1`はプロンプトの表示形式を定める環境変数、`%~`は作業ディレクトリ、`%n`はユーザー名のことです。

設定が完了したら、その設定を反映するために下記のコマンドを実行します。

```bash:コマンド
source ~/.zshrc
```

以上で完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67884/e4e28d6d-ba97-6611-73fe-2354dbf502cd.png)


# 設定方法（macOS Catalina以前）
`/Users/(ユーザー名)/`に、`.bash_profile`があるかどうかをチェックします。もし`.bash_profile`が存在しない場合は、新規テキストファイルとして作成します。`/Users/(ユーザー名)`に移動し、コマンドラインより下記を実行します。

```bash:コマンド
touch .bash_profile
```

`.bash_profile`をVisual Studio Code等で開き、次のように追記します。

```text:.bash_profile
export PS1="\W \$ "
```

`PS1`はプロンプトの表示形式を定める環境変数、`\W`は作業ディレクトリのことです。

設定が完了したら、その設定を反映するために下記のコマンドを実行します。

```bash:コマンド
source ~/.bash_profile
```

以上で完了です。

![](https://qiita-image-store.s3.amazonaws.com/0/67884/9cc75933-56df-b7c2-d446-447a3439f3d7.png)

## 表示形式は自由に設定可能

たとえば、`PS1="わーい🐱 すごーい🐷 $"`と設定し、任意の文字列を表示することが可能です。

![kemono2.gif](https://qiita-image-store.s3.amazonaws.com/0/67884/66f3ae6f-b2b3-b1b4-efd3-54a76411396a.gif)

表示形式には、「[bashのプロンプトを変更するには - @IT](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/002cngprmpt.html)」で紹介されているように、日付や改行、コマンド履歴番号等の特殊文字を表示することも可能です。

![image](https://qiita-image-store.s3.amazonaws.com/0/67884/ed200b97-cf44-8efc-66c8-ae693b79dd8b.png)

▲ 現在ディレクトリと絵文字（`PS1="\W にいるにゃ😸 "`)

![image](https://qiita-image-store.s3.amazonaws.com/0/67884/f83617db-f147-15b2-9159-d54a7c8901da.png)


▲ コマンド履歴、日付、現在ディレクトリの表示（`$PS1="\! \d\t @\W $"`）


## webツールで直感的に作成もできる
「[Easy Bash Prompt Generator](http://ezprompt.net/)」というジェネレーターを用いると、直感的に表示形式を設定できるので便利です。

![](https://qiita-image-store.s3.amazonaws.com/0/67884/b3f36f50-73d2-f48a-7a1a-bdb796a9b793.png)

# 快適なターミナルライフを
ターミナルにはデフォルトではコンピューター名やユーザー名が表示されていますが、個人的にはこれらの表示は不要で、画面を広く使いたいケースが多くありました。**現在のディレクトリと`$`さえあれば充分なので、普段は文中でも紹介した`PS1="%~ %n "`（macOS Catalina以前なら`PS1="\W \$ "`）を用いています**。是非試してみてください。
Visual Studio / WPF > コントロール > Slider > OnValueChanged()

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.4496 / 9985
> Sliderコントロールは、任意の範囲の数値から1つをユーザーに選択させるコントロールです。

試してみた。
MaximumプロパティをそれぞれのSliderに設定し、slider1を変更した時に他のSliderの値を変更するようにした。

このときにどういうイベントを使うかは初心者には分からない。
[API](https://msdn.microsoft.com/ja-jp/library/system.windows.controls.slider(v=vs.110).aspx)ドキュメントも「よく使うメソッド」の表示がないため、探すのに苦労する。
ドキュメントを作る側としてはそういう「やさしさ」の考慮も必要だろう。

地道に検索して、OnValueChanged()が該当するものだと気づいた。

```xml:XAML
<Window x:Class="_170426_t0930_radioButton.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170426_t0930_radioButton"
        mc:Ignorable="d"
        Title="MainWindow" Height="400" Width="525">
    <Grid Margin="0,30,0,0">
        <StackPanel>
            <Slider x:Name="slider1" Margin="0, 10" 
                    Maximum="100"
                    ValueChanged="slider1_ValueChanged"/>
            <Slider x:Name="slider2" Margin="0, 10"
                    Maximum="200"
                    />
            <Slider x:Name="slider3" Margin="0, 10"
                    Maximum="400"
                    />
        </StackPanel>
    </Grid>
</Window>
```

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _170426_t0930_radioButton
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            slider2.Value = slider1.Value;
            slider3.Value = slider1.Value;
        }
    }
}
```

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/0cfec0bd-ce90-26ae-fbda-0f68cdb36042.png)
Visual Studio / WPF > link > コントロール > RadioButton > 同じパネル上で複数のグループを作成する方法

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.4461 / 9985
> 4.6.4.1 同じパネル上で複数のグループを作成する方法

GroupNameを指定するとのこと。

１つのパネルに複数のグループが載ったUIを見やすいとは思わないが、将来そういう要望があった時に必要となるかもしれない。
Visual Studio / WPF > Error: オブジェクト 'GroupBox'には既に子があるため、'RadioButton'を追加できません。... > <StackPanel>を使う

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

```xml:XAML
<Window x:Class="_170426_t0930_radioButton.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170426_t0930_radioButton"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <GroupBox Header="Group1">
            <RadioButton Content="Radio1" Checked="RadioButton_Checked"/>
            <RadioButton Content="TV1" Checked="RadioButton_Checked"/>
        </GroupBox>
    </Grid>
</Window>
```

タイトルのエラーとなった。

何が問題か。

`<StackPanel>`で囲っていないということが問題のようだ。

以下ではエラーが出なくなった。

```xml:XAML
<Window x:Class="_170426_t0930_radioButton.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170426_t0930_radioButton"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <GroupBox Header="Group1">
            <StackPanel>
                <RadioButton Content="Radio1" Checked="RadioButton_Checked"/>
                <RadioButton Content="TV1" Checked="RadioButton_Checked"/>
                <RadioButton Content="WashingMachine1" Checked="RadioButton_Checked"/>
                <RadioButton Content="Refrigerator1" Checked="RadioButton_Checked"/>
            </StackPanel>
        </GroupBox>
    </Grid>
</Window>
```
ipytracerでヒストグラム作成をアニメーション表示

pythonのアルゴリズム可視化ツールipytracerで，ヒストグラム作成をアニメーション化してみた．

- ipytracer [https://github.com/sn0wle0pard/ipytracer](https://github.com/sn0wle0pard/ipytracer)
 - Algorithm Visualizerにインスパイアされたとのこと．[http://algo-visualizer.jasonpark.me](http://algo-visualizer.jasonpark.me)　でもこちらはjavascript?

# インストール
```bash:
$ pip install ipytracer
$ jupyter nbextension enable --py --sys-prefix ipytracer
```


# 使い方

jupyter notebookでやりましょう

```python:

import ipytracer
from IPython.display import display
import numpy as np
from time import sleep


def hist(img):
    h, w = img.shape

    im = ipytracer.List2DTracer(img.tolist())
    display(im)

    hist = ipytracer.ChartTracer(list(np.zeros(img.max()+1)))
    display(hist)
    for i in range(10):
        hist[i] = 0 # 一回目のアクセスがなぜか表示されないので，とりあえずここでアクセスしておく

    
    for y in range(h):
        for x in range(w):
            
            value = im[y][x]
            hist[value] += 1
#             sleep(1) # 表示が速すぎるときにはスリープ
  

im = np.random.randint(1, 30, size=(5, 10)) # 5x10ランダム画像生成
hist(im) # 画像のヒストグラム作成
```

# 結果

![histogram.gif](https://qiita-image-store.s3.amazonaws.com/0/44835/854898e0-3db4-31c0-2645-eacb78ec88d0.gif)
CentOSにgitリモートリポジトリを作成し、公開ディレクトリに公開するまで

#投稿経緯
やっと最近になって、gitを触るようになったので、自分の備忘録として書くことにした！

## 1-1.gitをインストールする
とりあえず、サーバにgitをインストールします

```.
$ sudo yum -y install git
```

##2-1.リモートリポジトリを作成する
CentOSにgit専用のユーザーアカウントを作成する
今回は、gitユーザを作成して、直下にリポジトリ(共有)を立てることにする

```.
$ useradd git
$ cd /home/git
$ mkdir 任意の名称.git
EX)↓
$ mkdir test.com.git
$ cd 任意の名称.git
$ git init --bare --shared
```
:point_up:POINT:point_up:
git init [--bare] [--shared[=\<permissions\>]] [--template=\<template_directory\>] [directory]
上記コマンドでGitリポジトリを初期化する
[directory]を指定しなかった場合は、そのディレクトリをGitリポジトリとして初期化する。
指定がない場合は、カレントディレクトリをGitリポジトリとして初期化する。

--bare:
ベアリポジトリを作成する。
ベアリポジトリは、作業ディレクトリを持たないリポジトリで、
外部に公開し、作業を中継するリポジトリとして使用。
共有リポジトリとして複数のユーザでリポジトリを共有するときに使用する。

--shared:
リポジトリを他のユーザと共有する場合に、利用する
permissionsにはUNIXのパーミッションを指定する。
例えば、0640でgit init を実行したユーザと同じグループからの読み込みを許可
0660で読み書きを許可、0664で同じグループのユーザから読み書きを許可し、
その他ユーザからも読み込みを許可する

--template:
作成するリポジトリ中に、指定したテンプレートディレクトリの中身をコピーする
リポジトリ共通のフックスクリプトを導入したいときに、利用する場合などに指定する

##3-1.所有者の変更を行う

```.
chown git.git . -R
```

##3-2.共有リポジトリにアクセスできるグループ権限をユーザに追加する

ユーザ: testの場合

```.
$ groups 確認したいユーザ
確認したいユーザ : 確認したいユーザID wheel
EX)↓
$ groups test
test : 確認したいユーザID wheel
```

上記の場合、gitグループがないので、グループに含める

```.
$ gpasswd -a 確認したいユーザ git
$ groups 確認したいユーザ
確認したいユーザ : 確認したいユーザ wheel git
EX)↓
$ gpasswd -a test git
$ groups test
test : test wheel git
```
gitグループが追加されたことを確認できたらOK

##4-1.ローカルにクローンする

sshで取得するケース

```.
ssh://IPアドレス/home/git/任意の名称.git
```

##4-2.公開ディレクトリ先にクローンする
公開ディレクトリ先は /var/www/html とする

```.
$ cd /var/www/html
$ git clone file:///home/git/任意の名称.git
```

以上です、お疲れ様でした！:fist:
Bug > Kindle Paper White 2012 + Amazon Cloud Reader > ハイライトが全部消えた

```txt:動作環境
Kindle Paper White 2012
Amazon Cloud Reader on Google Chrome
```

### 症状

ハイライトが全部消えた。
(これからは歩くのだ by 角田光代さん、につけたハイライト)

### 手順

1. Kndle Paper Whiteでハイライトをつける
   - 適宜、同期をしている
2. Amazon Cloud Readerで該当の本を開く
   - この時点でハイライトがひとつもない状態になっている
3. Kindle Paper Whiteで「同期」をする
   - ハイライトが全部消えた

他の本(Code Complete、The Art of Readable Code)のハイライトは今のところ、消えてない。

### 補足

3年ほど前にCode CompleteをKindle Paper Whiteで読んでハイライトをつけていた。
iPad mini2で見た時にはKindle Paper Whiteでつけたハイライトだけが見えていなかった。
その後、Kindle Paper White側のハイライトはそのまま残っていた。
( この現象は当時の担当者に連絡したが、結局解決はできてなかった。回答もおざなりの状態のまま放置された。)

これらのハイライト同期機構がうまく実装できていない感じがする。

担当者とやりとりしても問題解決に至っていない経験があるので、自己防衛としてどうするのがよいか。

最新のKindleはあまり魅力を感じないが、こういう不具合が**きちんと**対応されているのであれば、更新も検討しないといけないかもしれない。

(Note: Paper white 2012ではKindleストア上の検索機能が使えない。本を購入するには一度再起動しないといけない、などの不具合が現在ある)。
関連:http://qiita.com/7of9/items/f8107c0a515c9cf46bd3

電子書籍端末は数年ごとに使い捨てをすることになるのだろうか。

### 予防

Amazon Cloud Readerに起因するバグなのか、Paper Whiteに起因するバグなのか、切り分けはできていない。
当面、Amazon Cloud Readerを使わないということを切り分けのため実施する。
Visual Studio / WPF > Bug?: XAMLに追加したコントロールがC# スクリプト上でインテリセンスの候補に表示されない

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
  Version 15.1 (26403.7) Release
Sublime Text 2
```

VS2017にてXAMLファイルにListBoxなどを追加後、C# スクリプトにてそのListBoxの名前を入力しようとしてもインテリセンスに候補が挙がらない。
他のコントロールに関してもこういう現象に数回遭遇した。

そういう場合、ソリューションを一度閉じて、再度ソリューションを開きなおすとよい。

インテリセンス用のデータ構造にXAMLファイルの修正がいつ適用されるか不明だが、ソリューションを開きなおすと読み直すのだろう。

XAML変更のたびにソリューションを開きなおすのも面倒なので、もっと気軽に対応できる方法が見つかるとよい。
projectGenerator初回起動時Tips


新しいmacにopenFrameworksをダウンロードして
早速projectGeneratorで新しいプロジェクトを作成する矢先
こんな画面が出てきます。
<img width="532" alt="スクリーンショット 2017-04-24 11.47.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/136558/99eb242b-65fa-350c-aee7-8c3b5eb2e5e9.png">


[システム環境設定]アプリを開いて
セキュリティとプライバシー/このまま開く ボタンをクリック
<img width="780" alt="スクリーンショット 2017-04-24 11.47.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/136558/8899a82d-acc7-cba0-9f44-759d16350423.png">


その後projectGeneratorを開きこんな画面が。
虫眼鏡マークをクリック
<img width="612" alt="スクリーンショット 2017-04-24 11.48.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/136558/b4775f67-bf4f-dc91-89be-90f6cac9d2e6.png">

ダウンロードした「of_v0.9.8_osx_release」を選択
![スクリーンショット 2017-04-24 11.48.12.png](https://qiita-image-store.s3.amazonaws.com/0/136558/10feee92-c5c3-b80f-2b2a-b8826f99068c.png)



以上で設定完了
RxSwift関連の総オブジェクト数出力

元ネタはこちらです。
 http://qiita.com/ShingoFukuyama/items/20035171f9ec78efded7

RxSwift 3.0 version だとビルドできないようでしたので改めて記述しなおすと以下になります。

```

    let timer = Timer(timeInterval: 3.0, target: BlockOperation.init(block: {
        print("Resource count \(RxSwift.Resources.total)")
    }), selector: #selector(Operation.main), userInfo: nil, repeats: true)
    RunLoop.main.add(timer, forMode: .commonModes)


```

RxSwiftをデバッグビルドしていないと、RxSwift.Resources.total　の定義が無いよ、と怒られてビルド失敗します。
Carthageを使っている場合は
```
carthage bootstrap RxSwift --configuration Debug
```
と、Debugをつけてビルドする必要がありちょっと面倒です。
Visual Studio / WPF > コントロール > ListBox > SelectedItemsの表示

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.4387 / 9985
> ListBoxコントロールは、１つまたは複数の項目をユーザに選択させることが出来るコントロールです。

試してみた。
選択したリストボックス項目を表示するようにもしてみた。
参考: http://stackoverflow.com/questions/15003095/getting-value-of-selected-item-in-list-box-as-string

```xml:XAML
<Window x:Class="_170426_t0650_listbox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170426_t0650_listbox"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid Margin="0,1,0,-1">
        <StackPanel>
            <ListBox x:Name="listbox1" 
                     Height="250"
                     SelectionMode="Multiple">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
            <Button x:Name="button1"  Height="40" Width="200" Content="Button1" Click="Button_Click"/>
        </StackPanel>
    </Grid>
</Window>
```

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _170426_t0650_listbox
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var data = new List<myList>();
            data.Add(new myList { Name = "List1" });
            data.Add(new myList { Name = "List2" });
            data.Add(new myList { Name = "List3" });
            data.Add(new myList { Name = "List4" });
            data.Add(new myList { Name = "List5" });
            listbox1.ItemsSource = data;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string msg = "";
            foreach(var elem in listbox1.SelectedItems)
            {
                myList alist = (myList)elem;
                msg = msg + "\r\n" + alist.Name;
            }
            MessageBox.Show(msg);

        }
    }

    public class myList
    {
        public string Name { get; set; }
    }
}
```

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/e5f1304e-4b03-a05e-1115-4cc91372b6dc.png)

3->4->1と選択したら上記のようにSelectedItemsに格納された。
MySQLコマンド

# MySQLに接続
```
$ mysql -uroot -p
```

# データベース
## データベース一覧

```
show databases;
```

## データベース作成

```
create database dbname collate utf8_general_ci;
```
## データベース削除

```
drop database dbname;
```

## データベース名前変更

コマンドない

# テーブル
## テーブル作成

```
create table goods(id int not null auto_increment, name varchar(10), primary key (id));
```

## テーブル名変更

```
alter table table_name rename new_table_name;
```

## テーブルを空にする

```
truncate table table_name
```

## テーブル削除

```
drop table table_name;
```


# フィールド
## フィールド一覧

```
desc items;
show columns from items;
show full columns from items; //コメントも表示
```

## フィールド追加

```
alter table goods add stock int not null default 10 after name;
```

## フィールド変更

```
alter table goods modify hoge null;
```

## フィールド名変更

```
alter table items change price_type price_type_id int not null;
```

## フィールドの順番変更

```
alter table options modify unit varchar(5) not null after price;
```

## フィールド削除
```
alter table goods drop column stock;
```

## フィールドのコメント追加

```
alter table items modify price_type_id int not null comment 'コメント' after name;
```

# データ挿入・編集・削除
## データ挿入

```
insert into todos (title, created_at, updated_at) values ('ご飯を食べる', now(), now());
```
## データ変更

```
update table_name set user_id=3 where hoge=3;
```
## データ削除

```
delete from todos where id = 1;
```

# 全テーブルのデータ数を確認

```
select table_name, table_rows from information_schema.TABLES where table_schema = 'DB名';
```

# データを縦向きにみる

```
select * from users where id=1 \G;
```
# テーブルの状態をみる（次のautoincrementの値とか色々）

```
show table status where name="users" \G;
```

# エクスポート

```
mysqldump -uusername -p -r backup_file_name --single-transaction database_name
```

# インポート

```
mysql -uroot -p database_name < hoge.sql
```

# ユーザ
## ユーザ作成

```
create user 'user_name'@'localhost' identified by 'password'
```

## 権限付与

```
grant all on db_name.* to 'user_name'@'localhost'
```
流行りのモブプログラミングをやって分かった 個人の開発手法の違い


# 前提

僕は今の仕事では、アジャイル開発をやっている。
なので開発手法は、個人の裁量に任されるところが大きい。

(環境によっても話が違ってくるかもしれないんので、前提として書いておく)

# モブプログラミング実践

チームで最近、流行りのモブプログラミングというものをやってみた。

そこで、ある一人のメンバーの開発手法を見た。その方法とは。

- ドキュメントを読む
- 「これで動くんじゃない？」という予想を立てて、コード例を貼り付ける
- 動く

そのスピードがものすごく速いのだ。
「予想」→「実践」→「フィードバック」のループが超高速で回っている感じ。

僕は「え、それで動くんだ！」と驚きを感じた。
自分にはとてもできない芸当だ。

プログラミングの世界では、コピペコーディングはNGということになっているが、今回の問題はそこではない。
(とりあえず動くものを作って、理論は後から考えても良い)

それよりも、ドキュメントをさっと読んだだけで「各パーツが組み立てられた完成図」を、頭の中に描けているというのがすごいのだ。

# 自分の場合

ドキュメントを読みながら、分からないことに出会ったら、だいたい立ち止まってしまう。

「これってどういうことだろう？」と、例えごく短いコードでも、じっくりと読んでみたり、分からない行があれば、関連ドキュメントを調べてみたりする。
そこでまた分からないことが出てくるので、さらに関連情報を調べてみたりする。(そこで新しい発見もあるけれど)

果たして、

- 立ち止まらずに、手を動かすの(タイプA)
- 立ち止まって、考える(タイプB)

どちらが優れているのだろうか。

# 一長一短？

開発感覚を二つのタイプに分けてしまうのは極端だとは思うが、これは一長一短である。
少なくとも、全てのケースにおいてどちらかがどちらかより優れているということはないだろう。

実際に今のチームには「タイプB」でなおかつ「ものすごく出来る」メンバーがいる。

プログラミングのやり方においても、個人個人でかなり流儀に違いがある。
そして、例えどちらのタイプでも、優れた成果を出すことは可能だ。

# 長所を活かす

これは今までの人生において、どんなパラメータにポイントを割り振ってきたかによると思う。

「はやさ」にポイントを割り振ってきた人もいるし、「ちから」にポイントを振ってきた人もいる。

そして、今までに割り振ってきたポイントは、急には変えられない。ポイントのリセットはないのだ。
だから「今現在のパラメータ」で、最良の戦略を選ぶ必要がある。

もちろん、今後伸ばしていきたいパラメータがあれば、成長戦略を立て直せばいい。
(そういうことが出来るのならば)

# システム開発はRPG

少年の頃、僕らはひとつのRPGで遊ぶにしても、人によってまるでプレイ手法は違った。

- 何も恐れず、どんどん先に進む子供。
- アイテムを全て集めようとする子供。
- レベルを上げてからボスに挑もうとする子供。

だが、

- 最速クリアを目指す子供は、最速でボスに負けるかもしれない
- アイテムを全部集める子供は、ゴールドを浪費するかもしれない。
- レベルを上げてからボスに挑む子供は、クリアがすごく遅いかもしれない。

このように、それぞれに短所もある。

そもそもの目的は何か？
最速でゲームをクリアすることなのか、多くのアイテムを集めることなのか、安全にボスを倒すことなのか。

「出そうとする結果」によっても、プレイ手法の一長一短は変わってくる。

# 重要なのは多様性

上に書いた、個人的なゲームの遊び方と少し話が逸れるが、もうひとつ。

システム開発はチームプレイである。

- 勇者
- 戦士
- 僧侶
- 魔法使い

というように、バラエティに富んだ職業がいた方が良い。

# アンバランスなパーティー

RPGでも、

- 戦士
- 戦士
- 戦士
- 戦士

という組み合わせだと、回復が出来ない、魔法も使えない。
いつかパーティーは危機に陥るかもしれない。

これをシステム開発で言えば、

- スピーディーに開発するメンバーばかりだと、重要な仕様を見落とすかもしれない。
- じっくりと開発するメンバーばかりだと、なかなか開発速度が上がらないかもしれない。

という感じだ。


(ものすごく当たり前の話に落ち着いてしまったが)

# 最強パーティー？

ちなみに、

- 賢者
- 賢者
- 賢者
- 賢者

という組み合わせは最高かもしれないが、ルイーダの酒場に賢者はいない。



# まとめ

- 個々人のパラメータや、開発手法にバラツキがあるのは良い傾向だ。(それが有効に働く開発環境であれば)
- 個人の能力は、今まで成長に割り振ってきたパラメータに依存する。これを有効に活用しよう。(長所を活かそう)

# ところで

モブプログラミングでコードが上手く動いた時には、
「コロンビア〜！」と言いながら両腕を上げる掟です。本チームでは。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/f6529f02-bb53-a91f-f7ff-0ec654fda8ee.png)

# 関連記事

- [システムエンジニアの弱点を武器にする方法 - Qiita](http://qiita.com/YumaInaura/items/c9de45727f64c6a367fe)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
技術英語 > give it a quick once over / She skimmed through the book. / comb through

思い出したもの

> I just **gave it a quick once over**.

http://idioms.thefreedictionary.com/give+the+once-over
> give somebody/something the once-over
> to quickly look at someone or something in order to make a judgment 

- 本を買う (例: CUDA C プロフェッショナルプログラミング)。
- 最初から順番に読む
- 200ページくらいで気づく。これは今の自分には合っていない。
- 2か月、放置
- 今、ここ

本を買う前には内容をざっと見て、自分が本当に必要なものか判断することが大切。

「ざっと見て」をgive it a quick once overとして言えるかは正しくは知らない。

<hr>

https://english.stackexchange.com/questions/296366/expression-word-for-reading-a-book-quickly
> The only thing I can think of besides speed reading (which Hot Licks already suggested) is "skimmed." For example...
> She **skimmed through the book**.

速読でなく、「ざっと読む」として上記の例文が紹介されているようだ。

<hr>
関連して思い出したもの
comb through

http://ejje.weblio.jp/content/comb+through
> 丹念にとかす、(…を)念入りに調べる

1987年の「スペースボール」というスターウォーズのパロディ映画で砂漠に隠れた主人公を探すため「comb through!」と悪役が命令していた。
そこで実際に「大きなくし(comb)」が登場。

これは日本語版になった時に面白さが伝わらなくなっている。

中学生の時に吹き替えで初めて見た時は上記の意味がわからなかったが、その15年後くらいに英語音声(+日本語字幕)で見た時には意味が分かった。
nvidia-dockerは何をしているのか

**この記事はnvidia-docker v1.0の仕様を説明しています。現在の最新版はnvidia-docker2であり、この記事の仕組みでは動いていません。**

[nvidia-dockerのwiki](https://github.com/NVIDIA/nvidia-docker/wiki/Internals)にかいてあった

# nvidia-dockerとは?

nvidia-dockerを使うとdockerコンテナ内部から簡単にNVIDIAのGPUを使うことができる。

```bash
$ nvidia-docker run --rm nvidia/cuda nvidia-smi
```
nvidia-dockerを使うことによって、GPUのドライバとCUDA/cuDNNの関係を疎にしてあげる事ができる。結果として、ひとつのホスト上で複数のCUDA/cuDNNのバージョンのコンテナを動かす事ができ、CUDA/cuDNNを使っているコンテナのポータビリティがあがるらしい。


# どうやって動いてるの？
nvidia-dockerは大まかにいうと、実行したいコンテナ内からGPUにアクセスできるようにDocker Engine APIに色々なパラメータを指定してあげてコンテナを起動している。GPU関連の情報を取得できるようにnvidia-docker-pluginっていうGPU関連の情報をHTTPのサーバが立っている。
なので，nvidia-dockerコマンド経由でなくても、通常のdockerコマンドから、GPUを利用するdockerコンテナを動かす事もできる。(volume plugin機能も提供しているみたいなので、インストール自体は必要っぽい。)

![nvidia-docker.png](https://qiita-image-store.s3.amazonaws.com/0/55128/bad18fa5-1d66-f61c-b61f-f5c934e5191d.png)

## オプションの付与
nvidia-docker経由でコマンドを実行したときの処理の流れ

```bash
$ nvidia-docker run --rm nvidia/cuda nvidia-smi
```
1. nvidia-dockerがコマンドをうけとる
2. nvidia-dockerがnvidia-docker-pluginへホスト側のGPUに関連する情報を問い合わせる
3. nvidia-dockerは受け取った情報を元に、docker-engineへ渡すべきオプションを生成する
4. nvidia-dockerはdocker-engineのAPIをオプション付きで呼び出してコンテナを立ち上げる

### nvidia-docker-plugin
[REST API](https://github.com/NVIDIA/nvidia-docker/wiki/nvidia-docker-plugin#rest-api)
以下のエンドポイントがある。

```
GET /v1.0/gpu/info, /v1.0/gpu/info/json
GET /v1.0/gpu/status, /v1.0/gpu/status/json
GET /v1.0/docker/cli, /v1.0/docker/cli/json
GET /v1.0/mesos/cli
```
cliのAPIを叩いた時には、dockerにそのまま渡せるオプションを返してるらしい。

```
$ curl -s http://localhost:3476/docker/cli
--device=/dev/nvidiactl --device=/dev/nvidia-uvm --device=/dev/nvidia3 --device=/dev/nvidia2 --device=/dev/nvidia1 --device=/dev/nvidia0 --volume-driver=nvidia-docker --volume=nvidia_driver_361.48:/usr/local/nvidia:ro
```

nvidia-dockerはdockerエンジンに以下のオプションを渡している。
**volume/volume-driver**
ホスト側のnvidia driverをコンテナ側でもマウントさせている
**device**
ホスト側の`/dev/nvidia*`に存在するデバイスファイルをコンテナ側に追加している

## Dockerイメージの検証
nvidia-dockerはdockerエンジンのAPIを叩く前に、対象コンテナにGPUオプションを渡す必要があるか、コンテナを当該ホストで起動できるかを検証している。

### GPUを使うコンテナかの検証
そもそも、nvidia-dockerコマンド経由で実行されようとしているdockerコンテナがGPUを使わなければ、nvidia driverやdeviceのマウントは必要ない。nvidia-dockerはDockerイメージの`com.nvidia.volumes.needed`ラベルを見て、そいつがGPUを使うコンテナか調べてる。

### コンテナが当該ホストで実行ができるかの検証
CUDAのそれぞれのバージョンには最低限必要とするnvidia driverのバージョンが存在する。
nvidia-dockerはdockerコンテナを起動しようとする時に、ホスト側のnvidia driverのバージョンを見て、起動したいdockerイメージに含まれるCUDAのバージョンが動くか調べて、無理な時はコマンド実行時にエラーを返すらしい。
`nvidia/cuda`を継承しているDockerイメージには`com.nvidia.cuda.version`というラベルがついていて、dockerイメージにインストールされているCUDAのバージョンがわかるらしい。

# まとめ
nvidia-dockerすごい
angular-cli で ng build 後に変更可能な設定を行いたい

適切なタイトルかどうかは不安です..

angular-cli を使っていて `environment.ts` など設定のためのインタフェースはいくつか見つけたのですが `ng build` した後の `dist` に対して設定する方法が見つからなくて、探すより早く実装できそうだったので、試しにやってみました、という話です。

もう少し具体的な動機を言うと `docker run -v <config-file>` のように設定ファイルを上書きして実行できる docker イメージを作ってみたかったからです。docker の `nginx` イメージに `dist` のみを乗っけたものをアプリケーションのイメージとした時に、その方法で設定を行うように実装する方法はないものか、模索していました。

今回の方針としては、 `ng build` では `src/assets/` 以下がそのまま `dist/assets` にコピーされるようなので、その配下にスクリプトを置いて実行時設定として利用することにします。

グローバルに設定オブジェクト `appRuntimeConfig` を定義するスクリプトを用意します。

```js:src/assets/runtime-config.js
const appRuntimeConfig = {
  apiRoot: 'http://localhost:9090',
  message: 'overwritten by runtime-config.js',
}
```

それを `index.html` で読み込み

```html:src/index.html
<html>
<head>
  :
  <!-- Runtime Config -->
  <script src="assets/runtime-config.js"></script>
</head>
:
```

グローバルの `appRuntimeConfig` を参照して取り込むサービスを定義します。

```ts:src/app/config.service.ts
import { Injectable } from '@angular/core';

// 一応インタフェース定義
interface RuntimeConfig {
  apiRoot: string;
  message: string;
}

// グローバル変数を declare 宣言
declare const appRuntimeConfig: Partial<RuntimeConfig>;

@Injectable()
export class ConfigService {

  // デフォルト設定
  runtime: RuntimeConfig = {
    apiRoot: 'http://localhost:8080',
    message: 'will be overwritten',
  };

  constructor() {
    
    // appRuntimeConfig 未定義状態を回避する
    if (typeof appRuntimeConfig !== 'undefined') {

      // デフォルト設定に上書き
      Object.assign(this.runtime, appRuntimeConfig);
    }
  }
}
```

これで、`ConfigService` をモジュール定義で provider として登録すれば他のコンポーネントから楽に参照できるようになります。

```ts:src/app/app.component.ts
export class AppComponent {
  title = 'app works!';

  constructor(private config: ConfigService) {
    console.log(config);
    // => {
    //   runtime: {
    //     apiRoot: "http://localhost:9090",
    //     message: "overwritten by runtime-config.js",
    //   }
    // }
  }
}
```

これで例えば `ng build` した `dist/` 配下を `/app/` に置いた docker イメージを作った場合 `docker run` で `/app/assets/runtime-config.js` を上書きすれば実行時設定ができるようになりますね。 

`ng new` した状態からの変更点を [github](https://github.com/lbcat/angular-runtime-config/commit/c841540743a65ecf67ef19b9a6b902f02e3311a4) で見られるようにしましたので、よろしければご覧ください。
heart rate monitor

単極誘電心電モニターをテスト. 

switch scienceの(sparkfanの)これ
https://www.switch-science.com/catalog/1969/

sparkfunのhow toはここ
https://learn.sparkfun.com/tutorials/ad8232-heart-rate-monitor-hookup-guide

processingとarduinoのcodeは, 
sparkfunのgit
https://github.com/sparkfun/AD8232_Heart_Rate_Monitor

# 実装
ジャンパを接続するだけ. 
![IMG_3818.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/f89b0e4f-5511-df5b-3eb9-f64b938f5997.jpeg)

あとは, パッド側も作成して終わり. 
今回はミニステレオ端子で
GND: 黒
L? : 赤
R? : 白
で接続した. 

![IMG_3813.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/6aea8e45-9e3f-f59b-e9b1-30a04e836b38.jpeg)

身体のどこに付けるかはsparkfunのページを見ながら. 

![IMG_3797.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/6207629a-55e8-de34-3fae-a00c4fbee6f7.jpeg)

(見苦しいカラダ...)


# result
挙動はこんな感じ. 
https://youtu.be/V_6aSN70r90

- パッドの付け方なのか
- 接触の感度なのか
- カラダの姿勢の悪さなのか, 

は, わからないけど, セッティングに手間取ることもしばしば. 
心臓を取り囲む様に設置すれば, 概ね良い気がする. 

ノイズが大きくなることもあるけど, 光で血管を見る心拍モニタ寄りは精度が良い気がする. 
どう組み込むかな.
Relay touch board

iPadとかで使える, タッチを制御できるリレースイッチがあるということでテスト. 

使用したのはswitch scienceのコレ
https://www.switch-science.com/catalog/2455/

# 実装
ジャンパをハンダ付けするだけ. 
こんな感じ

![IMG_3815.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/089bc0f8-1c34-2089-c675-1d3f8ed7f50c.jpeg)

![IMG_3816.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/994886c0-ac89-8996-b705-6367814ce7de.jpeg)

# result
こんな感じで写真が取れる
https://youtu.be/H6SfGXS2enU
Cockcroft-Walton回路, 560V

高電圧のテストをしてみたくて調べると, よく出てくるCockcroft-Walton回路. 

キットがあったので実際に組んでみた. 
https://www.switch-science.com/catalog/1730/
http://pokkeyamada.blog79.fc2.com/blog-entry-359.html

# 実装
基本的には, この方が作ってくださっている説明書の通りに組むだけ. 
![1468_001.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/5a4e9aeb-4821-7197-1da2-c6e842ee7800.jpeg)

巨大な電解コンデンサを使用する以外はいつもと同じ感じ. 
回路自体もシンプル. 

こんな感じ: 
![IMG_3718.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/2da771ee-efd6-b39e-32ed-cd545f03678f.jpeg)


# result
本当は筋肉とかに通電させたいけど, 制御部分を何も作成していないので, ショートさせるだけにした. 
https://youtu.be/RSESAGvfyz0

ショートさせた後の導線:
![IMG_3722.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/1cf1adfa-46e1-3db2-c90b-ca44c7cdbbd9.jpeg)

少し焼けてる. 

# 展望
可変にして, 何Vなのかを確かめながらやりたい. 
同じ方のこれ

![HV_PS_組立_ページ_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/ca6f0aa5-b050-c035-7784-664abb7a5f0d.jpeg)

![HV_PS_組立_ページ_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/adeedf9d-310c-7869-4643-ce2262db75ea.jpeg)

を参考に組んでみたい.
シェルスクリプトで進捗表示

進捗を表示するスクリプトを作ってみました。
読み込んだ行の位置をパーセントで表示して終了するだけです。

```shell-session
# progresspar
# Example: ./progresspar file.txt
#!/bin/bash

ROW=$(awk 'END{print NR}' $1)
awk -v "row=$ROW" '{par=(NR/row)*100}{printf "%d%\r",par}END{printf "%d% Done\n",par}' $1
```
実行例

```sh
$ progresspar file.txt
　100% Done
```

以下は、ファイルサイズで計算する方法です。

```shell-session
#!/bin/bash

SIZE=`ls -l $1 | awk '{print $5}'`
od -An -tx1 $1 | awk -v "size=$SIZE" '{gsub(/ /,"");len=len+length($0)}{par=((len/size)*100)/2}{printf "%d%\r",par}END{printf "Done\n"}'
```

実行例

```sh
$ progresspar file.txt
　Done
```

GBサイズの膨大なログファイル整形処理の進捗を表示したいのですが、pvコマンドを導入できないので awkによる方法を模索している次第です。
とりあえず処理が進行していることが判れば良いので当面は以下ようにteeとawkとの応用で妥協することにします。

catでの実行テスト

```shell-session
$ cat input.log | tee output.log | awk '{printf "%dROWS Processed.\r",NR} END {printf "\nDone\n"}'
```
mastodonが動いているサーバーにnetdataを相乗りさせた際のnginxの設定

## TL;DR
- https://mstdn.jp/@dc1394/3967567
- かっこいいぼくもやりたい

## 動作環境
- Ubuntu16.04LTS
- docker&nginx

## 参考リンク
- [リアルタイムなリソースモニタリングツールのnetdataを試してみた ｜ Developers\.IO](http://dev.classmethod.jp/tool/netdata/)
- [Installation · firehol/netdata Wiki](https://github.com/firehol/netdata/wiki/Installation)
- [Running behind nginx · firehol/netdata Wiki](https://github.com/firehol/netdata/wiki/Running-behind-nginx)

## 手順
- リンクを参考にnetdataをインストールし19999ポートで動作していることを確認
- mastodonのconfファイルに以下のpatchをあてる

```diff
# diff -u mstdn.conf.org mstdn.conf
--- mstdn.conf.org      2017-04-25 16:45:27.205512141 +0000
+++ mstdn.conf  2017-04-25 16:03:56.388854481 +0000
@@ -12,6 +12,11 @@
     location / { return 301 https://$host$request_uri; }
 }
 
+upstream netdata {
+    server 127.0.0.1:19999;
+    keepalive 64;
+}
+
 server {
     listen 443 ssl;
     listen [::]:443 ssl;
@@ -87,5 +92,29 @@
         tcp_nodelay on;
     }
 
+    location /netdata {
+        return 301 /netdata/;
+    }
+
+    location ~ /netdata/(?<ndpath>.*) {
+
+        proxy_redirect off;
+        proxy_set_header Host $host;
+
+        proxy_set_header X-Forwarded-Host $host;
+        proxy_set_header X-Forwarded-Server $host;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_http_version 1.1;
+        proxy_pass_request_headers on;
+        proxy_set_header Connection "keep-alive";
+        proxy_store off;
+        proxy_pass http://netdata/$ndpath$is_args$args;
+
+        gzip on;
+        gzip_proxied any;
+        gzip_types *;
+    }
     error_page 500 501 502 503 504 /500.html;
 }
```

- これでhttps://{自ドメイン}/netdata にアクセスするとnetdataが表示されるようになりました！！
    - ※mastodon自体が `/netdata` って名前を使用した際はよしなにしてください

## netdataだけBasic認証かける

- netdata自体の認証機構は[まだ議論中のようで](https://github.com/firehol/netdata/issues/70)さしあたってBasic認証をかけるにはさらに以下のpatchをあてるといい

```diff
# diff -u mstdn.conf.basic mstdn.conf
--- mstdn.conf    2017-04-25 16:54:52.965571325 +0000
+++ mstdn.conf.basic  2017-04-25 16:03:56.388854481 +0000
@@ -97,6 +97,9 @@
     }
 
     location ~ /netdata/(?<ndpath>.*) {
+        auth_basic "Protected";
+        auth_basic_user_file /etc/nginx/.htpasswd;
+
         proxy_redirect off;
         proxy_set_header Host $host;
 
```
Lチカ by a linear light sensor

リニア光センサでLチカをした. 

光センサはの種類は(うろ覚えだけど)

- CdS
- フォトトランジスタ
- フォトダイオード
- フォトカプラ?
- フォトICダイオード?
- リニア光センサ

など色々あるらしい. 

今回は秋月の
http://akizukidenshi.com/catalog/g/gI-05713/
を使った. 

付属の用紙に従って回路を組む. 
表
![1466_001_ページ_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/aeef0c7e-c028-038d-7dd0-656cf120d5d6.jpeg)

裏
![1466_001_ページ_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/320c7f6e-be62-0137-39c0-1ae42791eea0.jpeg)

5V必要らしいのでUSBをVDDとした. 

# 仮組み
ジャンパを使って仮組みした. 
Voutの先にLEDをつけた. 
![IMG_3713.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/fc9327a0-00cd-f9e5-46ff-ca1848380de7.jpeg)

## モーター
この段階でLEDをモーターに変えて見るも動かず. 
試したモーターは

- 5Vファン
- 1.5VのDCモーター

の2つ. 
どちらも駆動せず. 
テスタでは測ったところ, 

- Voutは最大で3Vくらい
- 電流は0.015Aくらい?

なので, 電流が特に足りてないんですかね...
もっと回転遅くていいから省電力なモーターないかな. 
もしくは抵抗とかで電流とか変えれば行くのか?
どのみち回路を組み直す必要がありそう. 

ちなみにモーターを使いたいのは, ブライテンベルクのビークルをソフトウェアなしで組みたいためです. 

# 基盤組み
実際に基盤にハンダして組んだ. 
シンプル. 

表
![IMG_3714.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/b6f4e148-d55a-42b1-36b1-6685156cecc4.jpeg)

裏
![IMG_3715.jpg](https://qiita-image-store.s3.amazonaws.com/0/102253/9071afb9-1958-cc63-ee87-b46495fa10c4.jpeg)

# result
実際の挙動はこんな感じ. 
https://youtu.be/VLhKSkvbrbE

inputの光はblueのレーザーを使用した. 
普通の白色のライトでも全然OKなのだが,

- テスト動画では光が拡散してほしくなかった
- 手元にある光がたまたまレーザーしかなかった

の2つによるため. 

モーター早く動かしたいなぁ...
データ分析の勉強のために読む本

データ分析の仕事をするにあたり推奨された本などをまとめた

### 全体向け推奨本（マスト）
データ解析の実務プロセス入門　 http://amzn.to/2mUc2zm
ロジカルデータ分析　http://amzn.to/2nFJSH4
データ分析プロジェクトの手引き引　http://amzn.to/2nQYeVr
実証分析入門　http://amzn.to/2nFIfZQ
外資系コンサルのスライド作成術　http://amzn.to/2nQNvKA

### 全体向け推奨本（参考）
サイトサーチアナリティクス　http://amzn.to/2nl0uk2
バッドデータハンドブック　http://amzn.to/2nl8OAf
10年戦えるデータ分析入門　http://amzn.to/2nFZmL3
エンジニアのための データ可視化[実践]入門　http://amzn.to/2ohiIYp
探索的データ解析入門　http://amzn.to/2mUEC3s

### 個人向け推奨本
マーケティングの統計モデル (統計解析スタンダード)
レイティング・ランキングの数理 ―No.1は誰か？
データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)
統計学のための数学教室
ビッグデータ分析・活用のためのSQLレシピ

### よさげな本
マーケティング基礎読本増補改訂版
データサイエンティスト養成読本 登竜門編
Webコンテンツマーケティング　サイトを成功に導く現場の教科書
Rails on Dockerの開発環境構築（複数のHost環境バージョン）

# 今回の目的
既存のRuby on Railsアプリケーションをローカルマシン（基本Mac）上の複数Docker Hostで動かす
**※Railsアプリケーションを複数立ち上げるという意味ではなく、Railsアプリケーションを含む複数の開発環境を持ちたいケースになります**

## 基本構成
複数コンテナ構成

- rails app (ruby image base)  
  Based on [docker library](https://github.com/docker-library/rails)
  But this is deprecated at 5/15/2017
- database (mysql image base)
- KVS (redis or memcache image base)

それぞれを別コンテナとして立ち上げ、連携させる。
= Docker Composeを使用

## 詳細
`docker-compose.yml`, `Dockerfile`等は以下Githubに。
[Github hihats/rails-on-docker](https://github.com/hihats/rails-on-docker)

基本的には上記リポジトリのREADMEに書いてあるとおりの手順ですが、rails newでイチから作成する段階で動作するかは試しておりません。
あくまでこのリポジトリに「既存のRailsアプリケーションのリポジトリ」をマージさせた上で、`docker-machine create`から`docker-compose up -d`までの確認のみ。

**ちなみにMac && DockerToolboxでの動作確認のみです**（理由は後述）

## Docker for Mac対応
### 軽くDocker for Macについて説明
インストールだけでビルドできる
Docker用の軽量仮想環境HyperKitを使用して構築できる。
つまりDocker for Macを起動しているだけで、最初からいきなり、`docker-compose build`で各コンテナのビルド可能。

具体的には、dockerコマンドが常に`/var/tmp/docker.sock`を通してUnixドメインソケット通信するようになっている。Socket APIでDocker Engineを操作可能なため、直接MacからAPI叩いてdockerを動かしているような感覚です。

### ところが
そうなると、ソケットが単一になるのでインターフェースも単一に限られてしまう？（実際、Dockerホストの指定方法はlocalhostのみっぽい）
これでは基本的に複数のマイクロサービスを並行で動かして独立して開発する自分の作業フローには合わなくなりそう。

> However, if you want to create multiple local machines, you need Docker Machine, which is still available to create and manage machines for power users or multi-node experimentation.
https://docs.docker.com/machine/get-started/#prerequisite-information

やはり雲行きが。。
複数立ち上げるなら未だ docker machineが必要。

> Currently, there is no docker-machine create driver for HyperKit, so you will use virtualbox driver to create local machines. (See the Docker Machine driver for Oracle VirtualBox.) Note that you can run both HyperKit and Oracle VirtualBox on the same system. 
https://docs.docker.com/machine/get-started/#prerequisite-information

せっかくのHyperkitも docker machine用のドライバがまだない。
`Currently` なので、今後に期待か。

### つまり複数環境で使う場合（Railsに限らず）
従来通り、`docker-machine create --driver virtualbox ***` で作成するしかない。（2017/4時点）
今後、Docker MachineでHyperkitを指定できるようになるか、Docker for Macが複数ホスト保持可能になるか、気長に待ちましょう。

幸い、Docker for MacにもDocker Machineは入っているので特に何もせず、これまで通り使えます。
手軽に「ひとつRailsアプリをDockerで使ってみたい」という場合にはHyperKitでよいと思います。docker system系のコマンドが使えるようになっただけでもDocker for Mac超超便利だす。

## 実用にあわせてより拡張する

npmなどのパッケージ群や、DBのデータそのものをVolumeとする別コンテナをたてたほうが、定期的に同期するケースなどで理に適っています。
[参考](http://qiita.com/joker1007/items/9f54e763ae640f757cfb)

今回はとりあえず、開発着手しているRailsをDockerで動かしてみたい場合のソースコードとなっております。