OmniAICreator/Qiita-1.07M huggingface dataset:
群論・環論・体論

（書き途中ー

http://math.shinshu-u.ac.jp/~hanaki/edu/intro/intro2011.pdf

# 定義

## 演算

1. 二項演算
 - 写像$f:A \times A \rightarrow A$を**二項演算**という。
 - $f(a,b)$を$a+b$, $ab$などと書き、前者のように書いたものを**加法**、後者を**乗法**という。
 - $A$と$f$の組$(A,f)$を**マグマ**、**亜群**という。
1. 結合法則
 - 任意の$a,b,c \in A$に対して$(ab)c = a(bc)$をみたすとき、この演算は**結合法則**を満たすという。
1. 交換法則
 - $a,b \in A$に対して、$ab=ba$のとき、$a,b$は**可換**であるという。
 - 任意の$a,b \in A$が可換のとき、この演算は**交換法則**を満たすという。
1. 分配法則
 - 二つの二項演算$ \cdot, +$に対して、$(a+b)c=ac+bc$, $c(a+b) = ca+cb$が成立するとき、これは分配法則を満たすという。
1. 単位元
 - ある$e \in A$が存在して、任意の$a \in A$に対して、$ea = a$が成り立つとき、この$e$を**左単位元**という。同様にして、**右単位元**も定義する。
 - ある$e$が左単位元でも右単位元でもあるとき、これを**単位元**という。
1. 逆元
 - $a \in A$に対して、$b \in A$が存在して$ab = e$となるとき、$a$は**右可逆**であるといい、$b$は$a$の**右逆元**という。上と同様に**左可逆**、**左逆元**、**可逆**、**逆元**も定義する。$a$の逆元を$a^{-1}$とかく。

## 群

1. (G1) 結合法則
1. (G2) 単位元の存在
1. (G3) 任意の元に対する逆元の存在
1. (G4) 交換法則

- 二項演算で書いた通り、集合と、その中で閉じた二項演算の組を**亜群**という。
- 亜群で、(G1)が満たされるものを**半群**という。
- 半群で、(G2)が満たされるものを**モノイド**という。
- モノイドで、(G3)が満たされるものを**群**という。
- 群で、(G4)が満たされるものを**可換群**とか**アーベル群**という。


## 部分群

$H$は群$G$の空でない部分集合。

1. (B1) $a,b \in H \rightarrow ab \in H$
1. (B2) $a \in H \rightarrow a^{-1} \in H$

(B1),(B2)がともに満たされるとき、$H$は$G$の**部分群**であるという。



$A,B$は群$G$の部分集合。

- $AB := \\{ ab | a \in A, b \in B \\} $
- $A^{-1} := \\{ a^{-1} | a \in A \\} $



$S$は群$G$の部分集合。

- $H = \\{ \prod_{i}^{r} {a_i}^{n_i} | a_i \in S, n_i \in \mathbb{Z}, r \in \mathbb{N} \\}$

とすると、$H$は部分群をなす。この$H$を$\langle S \rangle$とかく。
特に$S={a}$のとき、$\langle S \rangle = \langle a \rangle$を$a$による**巡回群**といい、$a$をその**生成元**という。$| \langle a \rangle |$を$a$の位数という。

## 剰余類

群$G$とその部分群$H$をとる。

$G$上の関係$\sim$を、$a \sim b \Leftrightarrow aH = bH$で定める。
$aH$を**左剰余類**といい、$\\{aH | a \in G\\}$を$G / H$とかく。**右剰余類**も同様に定める。

$H$に対し、任意の$a \in G$に対し、$aH = Ha$が成立するとき、$H$は**正規部分群**であるという。

## 剰余群

群$G$とその正規部分群$N$をとる。

$G/N$上の演算$(aN)(bN)=(ab)N$を定義すると、$G/N$はこの演算で群をなす。この群を$G$の$N$による剰余群といい、$G/N$とかく。

## 環・体
加法と乗法が与えられた集合$R$がある。

1. (R1) $R$が加法に関してアーベル群をなす。
1. (R2) $R$が乗法に関して半群をなす。
1. (R3) 分配法則
1. (R4) 乗法の単位元の存在
1. (R5) 乗法の交換法則

(R1-3)が成立するとき、**環**をなすという。
(R1-3),(R4)が成立するとき、**単位元を持つ環**をなすという。
(R1-3),(R5)が成立するとき、**可換環**をなすという。

加法の単位元を**零元**といい、$0$とかく。
乗法の単位元を$1$とかく。

単位元を持つ環$R$で、加法の単位元以外が乗法で可逆のとき、$R$は**斜体**であるという。
可換な斜体を**体**という。


環$R$がある。
ある$0 \neq b \in R$があって、$0 \neq a \in R$で、$ab = 0$となったとき、$a$を**左零因子**であるという。**右零因子**、**零因子**も同様。

単位元を持つ可換環$R$で、零因子が存在しないとき、$R$を**整域**という。

## 部分環

$R$は環。$S$は$R$の部分集合。

1. $a,b \in S \rightarrow a - b \in S$
1. $a,b \in S \rightarrow ab \in S$

以上が成立するとき、$S$は$R$の**部分環**であるという。

$R$の部分集合$I$が部分加群であるとき、$I$を**イデアル**といい、$R/I$を$R$の$I$による**剰余環**という。
RaspberryPiでOSリブート無しでWiFiの接続先を切り替える


なんかみんないちいちOSをリブートしててつらい

```bash
sudo vim /etc/wpa_supplicant/wpa_supplicant.conf  # 元あったnetworkの行を消す
sudo sh -c 'wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf'
sudo ifdown wlan0
sudo ifup wlan0
```

http://takuya-1st.hatenablog.jp/entry/2015/05/17/155229
Windows Driver Kit (WDK) 情報関連リンク

# Download
WDK and WinDbg downloads - Windows Hardware Dev Center
https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit


# MSDN
Windows Driver Kit (WDK) - Windows 10 hardware dev
https://msdn.microsoft.com/en-us/library/windows/hardware/ff557573(v=vs.85).aspx


# 公式サンプル
https://github.com/Microsoft/Windows-driver-samples

>Microsoft/Windows-driver-samples: This repo contains driver samples prepared for use with Microsoft Visual Studio and the Windows Driver Kit (WDK). It contains both Universal Windows Driver and desktop-only driver samples.


# Japan WDK Support Blog
WDK/DDK – Japan WDK Support Blog
https://blogs.msdn.microsoft.com/jpwdkblog/tag/wdkddk/
ARMv7-MのNOP命令

ARMv7-MのNOP命令について。

バイナリパッチを作るのに必要なので調べました。

NOP命令は"No Operation"　何もしない命令です。

# ARMv7-MのNOP
ARMv7-M には 2種類のNOP命令 NOPとNOP.wがある。 どう使い分けるかは不明です。

* NOP
 * opcode: 0xbf00

* NOP.w
 * opcode: 0xf3af 0x8000



# バイナリ書き換え例

cortex m3用のバイナリの

```
00002a0 2b 68 98 47 bd e8 f0 81 ff f7 fe ff bc e7 23 68
```

```
 1f8:   f7ff fffe       bl      0 <SdrControllerInit>
```
をNOPに書き換えてみた。

```
00002a0 2b 68 98 47 bd e8 f0 81 00 bf 00 bf bc e7 23 68
```

```
 1f8:   bf00            nop
 1fa:   bf00            nop
```

同様にNOP.wに書き換えてみた。

```
00002a0 2b 68 98 47 bd e8 f0 81 af f3 00 80 bc e7 23 68
```

```
 1f8:   f3af 8000       nop.w
```

ディスアセンブルは以下のコマンドで取得

```
arm-none-eabi-objdump -d hoge.o
```

でも、上記NOPとNOP.wだと期待した動作にならず mov r8, r8にしたら動いた。なんでだろ。

```
00002a0 2b 68 98 47 bd e8 f0 81 c0 46 c0 46 bc e7 23 68
```
```
 1f8:   46c0            nop                     ; (mov r8, r8)
 1fa:   46c0            nop                     ; (mov r8, r8)
```

# 参考
* ARMv7-M Architecture Reference Manual
* [NOP for Iphone Binaries]( http://stackoverflow.com/questions/1875491/nop-for-iphone-binaries)
* http://everything.explained.today/NOP/
【数Ⅰ】文系卒社会人が統計・機械学習を理解するために勉強した

#サマリ
統計・機械学習を理解するために数学の知識が足らず勉強を始めました。その経緯などは[「文系卒が統計・機械学習を理解するための数学勉強方法」](http://qiita.com/FukuharaYohei/items/0a66c37091dc27c71fe6)を参照ください。
※2003年以前の学習指導要領に準拠しています。

|項目|内容 |
|:-----------------|:------------------|
| 総勉強時間        |            **14h**(約2週間) |
| 使用教材        |[長岡先生の授業が聞ける高校数学の教科書数学 (考える大人の学び直しシリーズ)](http://amzn.to/2nueRau) <br> 数Ⅰは約130ページの内容です。|
| 勉強開始前の状態 |数学の勉強は高校以来やっていない状態。数学は嫌いではないが、高校2年生くらいで授業についていくのが辛くなってきていました。ちなみに高校が付属校なので大学受験はしていません。|
#やった内容
###1. 数と式
因数分解や平方根(ルート)について。簡単です。
###2. 方程式と不等式
1次不等式と2次方程式について。忘れている内容も多かったです。
平方完成は忘れていました。2次関数の最小値・最大値を求めるのに使います。確か何かの統計の計算でも使った記憶があります。[リンク先](http://kou.benesse.co.jp/nigate/math/a13m0204.html)はわかりやすいです。
**2次方程式の解の公式**はおぼろげながらに覚えている程度。重要なのでメモしておきます。

>```math
{ax^2 + bx + c = 0 \Leftrightarrow x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}}
```

###3. 2次関数
2次関数とグラフ。
特に躓くこともなく簡単に終わらせられました。
###4. 図形と計量
####三角比
**サイン($\sin$)・コサイン($\cos$)・タンジェント($\tan$)**です。正直、ほとんど忘れていました。教材を読んでいけば、思い出し理解できました。[リンク先](http://alg.cias.osakafu-u.ac.jp/webMathematica/HighSchool/tri_ratio/theme0.jsp)はわかりやすいです。

>```math
\tan \theta= \frac{\sin \theta}{\cos \theta}\\
\sin ^2\theta+\cos ^2\theta=1\\
1+\tan ^2\theta= \frac{1}{\cos ^2\theta}
```

三角関数は別記事[「基礎数学公式一覧【三角関数】」](http://qiita.com/FukuharaYohei/items/398763e4c4b4ec03f17f)でまとめました。
####正弦定理と余弦定理
これまた完全に忘れている内容です。詳しくは[リンク先](http://www004.upp.so-net.ne.jp/s_honma/trigonometry/sinecosine.htm)を参照ください。簡単な公式と絵を載せておきます。
#####正弦定理
>![正弦定理](http://www004.upp.so-net.ne.jp/s_honma/trigonometry/sinecosine1.gif)

>```math
\frac{a}{\sin A} = \frac{b}{\sin B} = \frac{c}{\sin C} = 2R
```

#####余弦定理
>![余弦定理](http://www004.upp.so-net.ne.jp/s_honma/trigonometry/sinecosine2.gif)

>```math
a^2 = b^2+c^2-2bc\:\cos A\:\:,\:\:
\cos A=\frac{b^2+c^2-a^2}{2bc}
```

####相似
面積と体積の相似比についてです。

####球の体積と表面積
タイトル通りです。**球の体積(V)と表面積(S)の公式**として以下を知っていれば十分です。
>```math
V = \frac{4}{3}\ \pi r^3\:\:,\:\:
S = 4 \pi r^2
```

#感想
**そんなに難しくもなく、すいすいと勉強できました。**三角比は、ほとんど覚えていなかったので懐かしがりながら勉強していました。
仕事がそんなに忙しくなく、勉強の時間を継続的にとれたので2週間ほどで終わり気持ちよかったです。しかし、**ここで数学を甘く見たのが後々に後を引くことになりました。**[「【数A】文系卒社会人が統計・機械学習を理解するために勉強した」](http://qiita.com/FukuharaYohei/items/c62e042762fb017cef6b)に続きます。
#こぼれ話
今回の投稿では、数式を書く方法に時間がかかってしまいました :astonished: [Markdown記法 チートシート](http://qiita.com/Qiita/items/c686397e4a0f4f11683d#%E6%95%B0%E5%BC%8F%E3%81%AE%E6%8C%BF%E5%85%A5)だけでは全然わからず、かなり苦労しました。
(2018/1/1追記)
ある程度慣れていてもLaTeXは入力に時間がかかります。
[「LaTeXコマンド集」](http://www.latex-cmd.com/)がとてもよくまとまっています。
Fedoraのサービス停止方法覚書

Fedora 24での覚書。


# auditd停止方法
Fedora24では`auditd`がデフォルトで有効になっている。
(インストール方法にもよる)
監査ログが不要な環境では止めたい。

```
$ sudo auditctl -e 0
$ sudo auditctl -D
$ sudo systemctl disable auditd
```

# firewalld停止方法
ファイアウォールが不要な環境での停止方法。

```
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
```

# SELinux
`/etc/selinux/config`内の`SELINUX`の行を以下の通り書き換える。

```
SELINUX=disabled
```

再起動
ぼくが思う一番いいUI・1.リスト表示

こんにちは。
初めての投稿なので、なんかちょっと変でもご容赦ください。

はじめに
-----------------------------------------------------
ぼくはこれまで縁あってIT業界で働いてきて、企業用のシステムにそれなりの期間携わってきた中で、「ああああこれもっといいUIにできるのに」って思うことが結構あった。あんまりちゃんと考えずに作られたUIのせいで、作業が進まなくてユーザーがキレていたり、システムの使い方の知識を貯めこんでいるのに共有しない意地悪な人によって後輩が虐げられていたり、ぼく自身も学生の時にバイトでやってたPC操作でミスって怒られて情けない思いをしたりした。

ぼくがQiitaに書きたいこと
-----------------------------------------------------
ぼくがQiitaに書きたいことは、ぼくがそういう経験の中で願ってきた、「犠牲者を出さないUI」についてです。書き続けられるかちょっと分からないんですけど、たとえ企業向けのシステムでも、コンシューマー向け並の優しくて分かりやすいUIにしたいって野望があります。そういうのをちょっとずつでも叶えられるノウハウを書けたらいいなって思うし、色んな視点からの評価を頂けたらとも思います。

編集できるリストのUI
-----------------------------------------------------
なんか日記になってしまった。ごめんなさい。
Qiitaに寄稿している多くのエンジニアの方には到底敵わない投稿なのは分かっているんですが、とりあえず書いてみたいと思います。
よくあるリスト表示のUIについて。
※PCでのマウス＆キーボード操作を前提としています。

<img width="175" alt="01.png" src="https://qiita-image-store.s3.amazonaws.com/0/136791/f68b649d-dae0-441d-0fc7-6008dac93796.png">


こういうのあるじゃないですか。
列は１つ、行は複数みたいなやつ。
ここに、あらゆる編集UIでおなじみの「追加」「編集」「削除」の３セットが乗ったやつの色んなパターンを見てきたんですが、上記はその１つの例です。

このリストの欠点は、行数が増えてくると「追加」のリンクが画面外に消えてしまうことでした。スクロールしないと追加できることが分からない、操作できない。あと、追加をクリックするたびにリストのスクロールが一番上に戻ってしまって、また一番下までスクロールしてから入力しないといけない。そういうUIでした。

**・機能が固定位置にないUIはNG**
**・操作した瞬間に操作対象がどっかに行ってしまうUIはNG**
という持論をここから得ました。

<img width="175" alt="03.png" src="https://qiita-image-store.s3.amazonaws.com/0/136791/5be4f133-ba0c-49eb-27f8-c40c328f19b9.png">

あと、こういうのもありました。
追加ボタンがリスト外にあるタイプです。
機能が固定位置にあり、リストのスクロールが一番上に戻ることもない。
でもぼくの中ではベストなUIではありませんでした。
図では描いていないんですが、実はこのリストのすぐ下に同じようなリストが配置されているUIだったんです。

**・1つの機能グループなのに配置が離れていると分かりにくい**
この「分かりにくい」というリアクションがUI設計において最も悔しく、最も排除したいものでした。

<img width="175" alt="02.png" src="https://qiita-image-store.s3.amazonaws.com/0/136791/eb801aab-5c63-8d79-5842-38cdb5c15f2d.png">

こういうのもありました。
Googleなんかのスマホアプリで最近よく見る、右下に何やらプラスボタンが浮いてるやつです。（黒丸のところにはゴミ箱アイコンが配置されてたんですけど絵心ないので黒丸で妥協しました…）
固定位置、対象が逃げない、機能グループとしてまとまっているのですが、残念なことに
**・ボタンがあるせいでリストの一部が隠れる**
**・浮遊してて「画面内での定着感」がない**
という、まぁ言うほど問題じゃないけど何かやだって感じる問題がありました。

スマホアプリなら、右手の親指での操作がメインなので右下にボタンがあるのは正しいソリューションだと思います。脱力した親指がうっかりタップする訳でもないポジションで、でも一番下のタブバーのエリアは避けた末の配置。かつてはこういう追加ボタンは右上が王道でしたが、スマホの画面の巨大化に合わせて、親指の届く右下に移動してきた結果のUIだと思われます。

じゃあ、一番いい形は？
-----------------------------------------------------

<img width="175" alt="04.png" src="https://qiita-image-store.s3.amazonaws.com/0/136791/0540ecb8-8d03-8eee-43bb-9ca2d269dddf.png">

ぼくが一番いいと感じたUIはこの形です。
**・可能な限り文字を排除してアイコン化されている**
**・追加、編集、削除が1操作でできる**
**・操作可能な場所がタテヨコで揃えられている**

「揃える」というのはデザインの基本中の基本中の基本で、UIデザインでも例外ではありませんでした。良いUIデザインを最初から思い付くのってなかなか難しくて、こうして色んなものを比較して絞り込んでいくことが多いです。

ふう。
だいぶ時間掛かってしまった。
カフェの店員さん、遅くまで居座ってしまってごめんなさい。
リストひとつにこんな長文投稿を書くことになるとは…。
何か反響があれば嬉しいです。

以上、ビギナーによる初投稿でした。
Amazon、楽天、Yahoo!のショッピングAPIをJavaから使う

## はじめに
ショッピングサイト大手3社（Amazon、楽天、Yahoo!）のAPIの利用申請とJavaによるプログラミング方法をまとめました。アフィリエイトで使ったり、スクレイピングしなくてもショッピングサイトの商品情報が取れるので色々と応用が効きそうです。

## 利用申請
- [AmazonのProduct Advertising APIの使い方](http://blog.apitore.com/2016/08/01/amazon-product-advertising-api/)
- [楽天のAPIを使ってみた](http://blog.apitore.com/2016/08/02/rakuten-api/)
- [Yahooの商品検索APIを使ってみた](http://blog.apitore.com/2016/08/04/yahoo-itemsearch-api/)

## プログラミング
- [AmazonのProduct Advertising APIをJavaから呼び出す](http://blog.apitore.com/2016/08/08/amazon-product-advertising-api-java/)
- [楽天ショッピングAPIをJavaから呼び出す](http://blog.apitore.com/2016/08/09/rakuten-api-java/)
- [ヤフーショッピングのAPIをJavaから呼び出す](http://blog.apitore.com/2016/08/10/yahoo-shopping-api-java/)

## マッシュアップ
- [夏休みの自由研究：大手ショッピングサイト4社の一括商品検索サイトを作った](http://blog.apitore.com/2016/08/07/shirable/)
- [Shirable ショップぜんぶ調べよう](https://mashup.apitore.com/shirable/index.html)
rails gem deviseのバージョン変更に気づかず1h以上溶かしたので、そのことをまとめてみた(undefind method'for'for)

railsでwebappを作る時にログインのあれこれを作るのに

gem deviseを使うことがあると思います。

僕はgem deviseにめっちゃ助けてもらっていたのですが

突然現れた

「undefind method'for'for・・・・・・・・・・・・・・・・・」


????????????????

これは何？

なんかやってしまったのか？

自分の書いたコードを見直して

それっぽいものを調べること1h以上

全く見当たらない

ふと見たgemfile.lock

deviseのバージョンが違う？？？？？？

過去に作ったwebappのdeviseのバージョンを見ると(3.5.6)

エラーが出ている方のバージョンは(4.2.0)

「おっ？？これは？」

必殺！google検索！！

rails devise 4.0

すると、

どうやら今までの記述だとエラーが出るらしい

今までの記述

```ruby:controller/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?
  def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) << :name
  end
```

nameのカラムを追加するとこんなことを書いていたと思います。

これだとさっきのエラーが出るらしい

で、じゃあどう書いたらいいかって話なんですが

devise_parameter_sanitizer.permit(:sign_up){|u|
      u.permit(:◯◯◯◯)}
こんな感じに変えなきゃいけないらしくて

```ruby:controller/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?
  def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up){|u|
      u.permit(:name)}
  end
```

じゃあこれでいけるや

と思ってやってみると

今度は

emailとpasswordが空じゃけぇ入力せんか！

と、おっしゃるわけですよ？

は？入れてっけど。。。。。(−_−＃)

何度試しても同じ。。。。

そろそろ、ふざけてるとぶっ壊すぞ！！

💡

もしかして

```ruby:controller/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?
  def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up){|u|
      u.permit(:email, :name, :password, :password_confirmation)}
  end
```

emailもpasswordも書いてないといけないのか？

これで試してみると

正常に動くではないか！！！！！！！

正常に動いてくれたので一件落着です

一応、バージョンの情報を

rails 4.2.5.1

devise 4.2.0


====追記====

もっと短くかけることが分かったのでそれを追記して来たいなと。


```ruby:controller/application_controller.rb
  devise_parameter_sanitizer.permit(:sign_up){|u|
      u.permit(:email, :name, :password, :password_confirmation)}
```

()の中にフォームの全ての項目を書いていたわけなんですけど、
これって、deviseの登録内容を編集するとき、全てのフォームを埋めないと
編集を完了することができないんですよね。

クソ不便。

ってなわけで

```ruby:controller/application_controller.rb

devise_parameter_sanitizer.permit(:account_update, keys: [:name])

```

こう書けばデフォルトに追加した項目だけ書けばいい。
:account_updateは：sign_upに変えれば会員登録でも使える
こうしておけば全てのフォームを埋めなくても、変えたいものと今のパスワードを書けば
登録内容の編集もできる。
IoT事例


よさそうなのあったらおしえてください。

# 2016-07 以前

- [TOTO、ベトナムの工場でIoT活用の生産システムを構築](http://www.itmedia.co.jp/enterprise/articles/1607/21/news053.html)
- [東京都、渋滞解消へ自動車走行データを活用　渋滞多発地点433カ所を分析](http://www.itmedia.co.jp/enterprise/articles/1607/01/news059.html)
- [おいしい牡蠣はデータではぐくむ　IoTで変わる養殖ビジネスの今](http://www.itmedia.co.jp/enterprise/articles/1606/13/news050.html)
- [ 街中の子どもや高齢者の見守りを実現するサービスを提供 伊丹市の子ども・高齢者見守りサービスのビーコン受信器として「OpenBlocks IoT EX1」を市内1,000箇所に設置](http://openblocks.plathome.co.jp/casestudy/160331_hanshindentetsu.html) 2016-03-31
- https://www.ecomott.co.jp/case/

# 2016-08

- [IoT遠隔監視で灯油代1200万円削減を実現　－エコモットCEO入澤氏インタビュー](https://iotnews.jp/archives/27702)
- https://twitter.com/kAk6w/status/764838567445049344
RTL8710のソフトウェア書き込み

RTL8710を入手したので、ソフトウェア書き込み方法について調査しました。

RTL8710はCMSIS DAPまたはJTAG経由で書き込みできます。

# CMSIS DAP (LPC11U35 realtek の firmware)
* 自分的には、これがオススメ。
* CMSIS DAPとしてはLPC11U35FHI33/501のボードを用意し、Realtekから提供されているDAP FWを書き込みます。 
 * https://github.com/Ameba8195/Arduino/tree/master/misc/dap_firmware
 * DAP_FW_Ameba_V10_2_3-2M.bin が動作すること確認しました。
* このファームウェアはLPC11U35FHI33/501用です。11U35でも別の型番だと動きませんでした。
* トラ技ARMライタにはLPC11U35FHI33/501が載っているので動作しました。
* Ameba と CMSIS DAPはGND,VCC,SWIO,SWCLKを配線
 * DAP SWCLK - RTL8710 RTL00 4
 * DAP SWIO  - RTL8710 RTL00 6
 * DAP 3.3V - RTL8710 RTL00 8
 * DAP GND -  RTL8710 RTL00 15
* CMSIS DAPとPCはUSBで接続します。
* 書き込みはMass Storage Class経由で行います。 DAPのドライブにram_all.binをコピーします。

# その他の方法
## J-Link + IAR EWARM
* Realtekが一番推奨する手順
* ドキュメント通りにやれば上手く行きます。
* J-linkとはJTAG or SWDを接続します。
* 書き込みはIAR EWARMから行います。
* ただし、まともに買うと高いです。

## CMSIS DAP + IAR EWARM
* こちらも Realtek推奨の手順。
* Ameba と CMSIS DAPはSWDで接続します。
* CMSIS DAPとPCはUSBで接続します。
* 書き込みはIAR EWARMから行います。
* こちらも、まともに買うと高いです。

# 注意
* 書き込む時はFLASHの 0x9000-0xAFFFFを消すとMACアドレスやRFのキャリブレーションデータが消えます。
アプリケーションエンジニアでも知っておきたいLinuxコマンド

「えっ？サーバー？そんなのインフラエンジニアに任せようよ」

そんな気軽な発言は許されない昨今。アプリケーションエンジニアでも、サーバー周りの知識は必須になってきています。本エントリでは、アプリケーションエンジニアでも最低限押さえておきたいLinuxコマンドをご紹介します。
※思いついたら逐次追加していきます。

## psコマンド：動いているプロセスを調べる
メモリ逼迫m9(^Д^)ﾌﾟｷﾞｬｰってなった時に、何が悪さをしているのか調べる時に使う。

```bash
$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4  37712  4552 ?        Ss   Aug08   0:04 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Aug08   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Aug08   0:05 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Aug08   0:00 [kworker/0:0H]
root         7  0.1  0.0      0     0 ?        S    Aug08   3:04 [rcu_sched]
root         8  0.0  0.0      0     0 ?        S    Aug08   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    Aug08   1:08 [rcuos/0]
root        10  0.0  0.0      0     0 ?        S    Aug08   0:00 [rcuob/0]
root        11  0.0  0.0      0     0 ?        S    Aug08   0:01 [migration/0]
(以下略)
```

## killコマンド：動いているプロセスを止める
`ps`コマンドで悪者を見つけた後に、対象のプロセスを止める時に使う。

```bash
$ kill -9 8508
```

## dfコマンド：サーバーの空き容量を調べる
なんとなく空き容量を知りたい時に。

```bash
$ df -h
Filesystem        Size  Used Avail Use% Mounted on
udev              492M     0  492M   0% /dev
tmpfs             100M  4.8M   95M   5% /run
/dev/sda1          39G  5.3G   34G  14% /
tmpfs             497M  4.0K  497M   1% /dev/shm
tmpfs             5.0M     0  5.0M   0% /run/lock
tmpfs             497M     0  497M   0% /sys/fs/cgroup
cgmfs             100K     0  100K   0% /run/cgmanager/fs
home_vagrant_lim  112G  103G  9.2G  92% /home/vagrant/lim
vagrant-notify    112G  103G  9.2G  92% /tmp/vagrant-notify
tmpfs             100M  4.0K  100M   1% /run/user/1000
```

## duコマンド：ディレクトリの容量を調べる
サーバー容量逼迫m9(^Д^)ﾌﾟｷﾞｬｰってなった時に、地道に一個づつ見て行く時に使う。

```bash
$ du -sh /home/vagrant/
911M	/home/vagrant/
```

## niceコマンド：プロセスの優先順位を変更する
サーバー上でコマンド実行したいんだけど負荷が気になる、、という時に使える。設定出来る値は`-20`〜`19`まで。

```bash
$ nice -20 grep 'hoge' hogehoge.log
```
rake db:migrate ではまったときの解決一例

記念すべき初投稿！

railsTutorialを進めている最中にrakeコマンドでハマったので備忘録兼、世界のどこかの誰かに役に立つことを願って。

背景としてはdbに保存もできたのだが、次の日にgitにコミットしようと思った際に以下が発生した。

###最初のエラー
```
ActiveRecord::PendingMigrationError (

Migrations are pending. To resolve this issue, run:

    bin/rake db:migrate RAILS_ENV=development

):
```

###実行したコマンド
```
rake db:migrate RAILS_ENV=development
```



##直らないではないか・・・


ということで再度エラーログを見てみると以下のアナウンスが。

```
SQLite3::SQLException: no such table: users: ALTER TABLE "users" ADD "password_digest" varchar
```

んー、よくわからないがdbに作成したテーブルが機能していないみたい。

同じくQiitaに上がっているものや他サイトを参考にしたがわかりませんでした。
なので、rake db:migrate:resetでリセットしてしまおうと。

そこで再度同様の手順を踏むのは冗長性高いですが、泣く泣くその手法で構築。

・冗長性
・規模が大きくなった時の影響度が高い

ということであまりおすすめしませんが、困ったときは組み直しもありということも頭に入れておこう。

なぜ動かなくなったのか調べる必要性ありですね。
うーむ。
setup.pyを用いてインストールしたモジュールのアンインストール方法

#はじめに
setup.pyを用いて外部モジュールをインストールする際には

```bash
python setup.py install
```
こんな感じにインストールしたのだから，

```bash
python setup.py uninstall
```
こんな感じにアンインストールできるだろうと思っていたのだが，そう上手くはいかなかった

#アンインストール方法
まずインストールする際に作成されるファイルのリストを書き出して

```bash
python setup.py install --record files.txt
```

次にリストに載ってるファイルを消去

```bash

cat files.txt | xargs rm -rf
```

これでアンインストール完了

#参考
http://stackoverflow.com/questions/1550226/python-setup-py-uninstall
北海道一周50日



```ruby
50.each do |i|
  puts "this is the %s day" % i
end

```
这[哥们](http://blog.livedoor.jp/ilikesusi/)在北海道花了50天时间骑行, 从大阪附近的家乡到大阪坐船到小樽, 然后北上到稚内, 然后东海岸北下道网走, 然后横穿到旭川富良野,最后到札幌, 接着和朋友一起从钏路出发北上到斜里然后知床, 标津, 根室, 钏路, 襟裳, 日高, 苫小牧, 函馆, 最后小樽, 坐船会家! 50天!

- http://blog.livedoor.jp/ilikesusi/archives/39996001.html
- http://blog.livedoor.jp/ilikesusi/archives/40020449.html
- http://blog.livedoor.jp/ilikesusi/archives/40035522.html
- http://blog.livedoor.jp/ilikesusi/archives/40051484.html
- http://blog.livedoor.jp/ilikesusi/archives/40060978.html
- http://blog.livedoor.jp/ilikesusi/archives/40082385.html
- http://blog.livedoor.jp/ilikesusi/archives/40096765.html
- http://blog.livedoor.jp/ilikesusi/archives/40144509.html
- http://blog.livedoor.jp/ilikesusi/archives/40146549.html
- http://blog.livedoor.jp/ilikesusi/archives/40159509.html
- http://blog.livedoor.jp/ilikesusi/archives/40161240.html
- http://blog.livedoor.jp/ilikesusi/archives/40183397.html
- http://blog.livedoor.jp/ilikesusi/archives/40188043.html
- http://blog.livedoor.jp/ilikesusi/archives/40208019.html
- http://blog.livedoor.jp/ilikesusi/archives/40222901.html
- http://blog.livedoor.jp/ilikesusi/archives/40243626.html
- http://blog.livedoor.jp/ilikesusi/archives/40256675.html
- http://blog.livedoor.jp/ilikesusi/archives/40269066.html
- http://blog.livedoor.jp/ilikesusi/archives/40283393.html
- http://blog.livedoor.jp/ilikesusi/archives/40302288.html
- http://blog.livedoor.jp/ilikesusi/archives/40312963.html
- http://blog.livedoor.jp/ilikesusi/archives/40329674.html
- http://blog.livedoor.jp/ilikesusi/archives/40347547.html
- http://blog.livedoor.jp/ilikesusi/archives/40375931.html
- http://blog.livedoor.jp/ilikesusi/archives/40391538.html
- http://blog.livedoor.jp/ilikesusi/archives/40423047.html
- http://blog.livedoor.jp/ilikesusi/archives/40440501.html
- http://blog.livedoor.jp/ilikesusi/archives/40471825.html
- http://blog.livedoor.jp/ilikesusi/archives/40472851.html
- http://blog.livedoor.jp/ilikesusi/archives/40486988.html
- http://blog.livedoor.jp/ilikesusi/archives/40501126.html
- http://blog.livedoor.jp/ilikesusi/archives/40522222.html
- http://blog.livedoor.jp/ilikesusi/archives/40532016.html
- http://blog.livedoor.jp/ilikesusi/archives/40545920.html
- http://blog.livedoor.jp/ilikesusi/archives/40563604.html
- http://blog.livedoor.jp/ilikesusi/archives/40577378.html
- http://blog.livedoor.jp/ilikesusi/archives/40594830.html
- http://blog.livedoor.jp/ilikesusi/archives/40610613.html
- http://blog.livedoor.jp/ilikesusi/archives/40624399.html
- http://blog.livedoor.jp/ilikesusi/archives/40647859.html
- http://blog.livedoor.jp/ilikesusi/archives/40658178.html
- http://blog.livedoor.jp/ilikesusi/archives/40673649.html
- http://blog.livedoor.jp/ilikesusi/archives/40690215.html
- http://blog.livedoor.jp/ilikesusi/archives/40705863.html
- http://blog.livedoor.jp/ilikesusi/archives/40722619.html
- http://blog.livedoor.jp/ilikesusi/archives/40739180.html
- http://blog.livedoor.jp/ilikesusi/archives/40757066.html
- http://blog.livedoor.jp/ilikesusi/archives/40973987.html
Pythonでリストのn番目に大きい・小さい値のインデックスの取得

リスト操作をするときとかにn番目にデカい値までのindexが欲しいということが度々ある。
今までは適当にこねくり回して書いていたがnumpyを用いるとスマートにかけると知ったので自分用にメモ

```
a=[1,5,4,3,2]
```

というリストがあったとき

```
>>> A=np.array(a)
>>> A.argsort()
array([0, 4, 3, 2, 1])
```
とndarrayに対してargsort()を用いると昇順のindex取得が可能である
降順にしたければスライスを使って

```
>>> A.argsort()[::-1]
array([1, 2, 3, 4, 0])
```

と取得可能である
AndroidのContentResolver経由でURIからファイルパスを取り出す際にドハマリした件

# やりたかったこと

ギャラリーをインテントで立ち上げて、そいつが返すURIからファイルパスを取得したい

# ハマった内容

- ギャラリーを立ち上げて返ってきたインテントのURI（`data.getData`で取得するやつ）を`ContentResolver.query`に投げても、`_data`の入った情報が返ってこない

# 理由（確度100%ではない）

- URIの形式に応じて`ContentResolver`が`ContentProvider`へ問い合わせるが、インテントから取得できるURIだと問い合わせる`ContentProvider`が`MediaProvider`になるため、ファイルのパスが取れない

# 解決策

- 下記のStackOverflowのコードがさっくり動く（2016年8月時点）ので、利用する
    - http://stackoverflow.com/questions/32661221/android-cursor-didnt-have-data-column-not-found

# この問題の厄介な点（あるいは愚痴）

- 日本語の情報があまり見当たらない
- 日本語の記事だと、`ContentProvider.query`に問い合わせれば問題なくファイルのパスが取得できるように書いてあるものが多い
- StackOverflowの解決策を適用したとしてもやや複雑なので、「そもそもURIのまま扱え」という神のお告げがどこかに存在する可能性がある
【git】aliasの設定方法

git のaliasの設定方法です。
動作確認環境はMacです。

###aliasとは
例えば、`git status`というコマンドをaliasを設定することによって、`git s`とすることができます。
6文字が1文字になるだけですが、頻繁に使うコマンドであれば、とても便利に感じると思います。

###設定ファイル
コマンドで設定する方法もありますが、今回は設定ファイルを編集する方法で設定します。
どの設定ファイルを編集するかによって、aliasが反映される範囲が異なります。

| 反映させたい範囲 | 編集する設定ファイル |
|:-:|:-:|
| システム全体 | /etc/gitconfig |
| ユーザー | ~/.gitconfig もしくは ~/.config/git/config |
| リポジトリ | リポジトリルートディレクトリ/.git/config |

以下サンプルは`~/.gitconfig`を編集しています。


###設定方法

`~/.gitconfig`を開きます。
`~/.gitconfig`は直接ディレクトリをたどって開くこともできますし、以下のコマンドで開くことも可能です。

```bash
$ git config --global --edit
```

以下のように追記します。

```lang:~/.gitconfig
[alias]
    s = status
```

これで`git s`と打つと、`git status`が実行されます。
ここに続けて記述していくだけでOKです。

```lang:~/.gitconfig
[alias]
    s = status
    ss = status -s
    co = checkout
```


私は`checkout`を`co`にするだけでだいぶ楽になりました。
ググるといろいろな方がaliasの設定を公開していらっしゃって、とても参考になります。
MariaDB 10.1.16 datadirをhome配下にした場合にsystemdで起動しない

/usr/bin/mysqld_safeで起動するのですが
systemctl start mariadbで失敗するケースに遭遇しました。

原因はhome配下をdatadirとしていたためで
以下の変更が10.1.16されています。
https://jira.mariadb.org/browse/MDEV-10298

/usr/lib/systemd/system/mariadb.service
ProtectHome=false
とすることでsystemdでも起動しました。
pythonでcsvの書き出しを変数に代入したい場合

# io.StringIO を使う

```py3
from io import StringIO                                                                                     
import csv                                                                                                  
                                                                                                            
f = StringIO()                                                                                              
writer = csv.writer(f, quotechar='"', quoting=csv.QUOTE_ALL, lineterminator="\n")                           
writer.writerow(['foo,', 'bar'])                                                                             
writer.writerow(['"あい', 'うえお\''])                                                                      
result = f.getvalue()                                                                                       
print(type(result))                                                                                         
print(result)  
```

# csvfileパラメータの仕様
[ドキュメント](http://docs.python.jp/2/library/csv.html#csv.writer)によれば下記のようなパラメータを指定することができ、
csv.writer(csvfile[, dialect='excel'][, fmtparam])
csvfileオブジェクトはwriteメソッドを持つ任意のオブジェクトであればよいらしい。故にsys.stdoutなども指定できる。

CSVとして書き出した上でファイルに保存するのではなく、WEB上でコピペできるようにしたいという要求からちょっと調べた。StringIOを使うやり方はcsvモジュールのテスト(Python-3.5.2/Lib/test/test_csv.py)で発見した。
[iOS] 会員登録を外部ブラウザ(Safari)で開くと、リジェクトされる

# はじめに
Webサイトをアプリ化するという案件はよくありますよね。
その際に、Webサイトの画面を再利用して、アプリで表示することも多いと思います。

アプリ実装の選択肢としては、下記の2パターンあると思います。

・内部ブラウザ(WebView)で表示するパターン
・外部ブラウザ(Safari)で開くパターン

どちらの実装方法が良いでしょうか。

弊社では、
各種一覧系画面はパフォーマンスが求められるので、『ネイティブ』で、
各種詳細画面は更新頻度が高いので、『WebView』で
という風にざっくり切り分けることが多いです。
（勿論その他の理由も加味します。）

場合によっては、画面の一部のみにWebViewを表示することもあります。
(ContainerViewを利用するなど）

# 本題
皆様は、会員登録画面、ログイン画面、パスワードを忘れた方画面などは、どうされていますか？

ログイン画面は、ログイン時にトークンIDを取得したり、Webサイトとの連携等があるため、
WebViewで作ることが多いのではないでしょうか。

それに関連して、会員登録画面やパスワードを忘れた方画面は、
ユーザにWebサイト側でやってもらえば良いのではという考えに辿り着いたりします。
（たどり着かない方は、スルーしてください。）

# Apple様の審査結果
残念ながら、『リジェクト』されます。

最近は、新規リリースでも数時間で審査が通りますが、
リジェクトされると凹みますよね。

# 何かダメだったのか？
会員登録画面を外部ブラウザ(Safari)で開くこと
どうも、アプリから一度離れるのがダメなようです。（推測）

# それでは、どうする？
『会員登録画面は、アプリ内ブラウザ(WebView)で開く』が正解です。

加えて、iOS9については、
SFSafariViewControllerを利用して表示する必要があるようです。

（心の声）
SFSafariViewControllerは、イベントのフックなど何もできないのに。。。。。

# まとめ
会員登録は、アプリ内でやりましょう。

実装方法は、ネイティブ、アプリ内ブラウザ（WebView）のどちらでも構いません。
ただし、iOS9以上に限り、
アプリ内ブラウザ（WebView）で表示するときは、SFSafariViewControllerを使いましょう！

アプリをたくさん制作されている方には、
釈迦に説法かもしれませんが、どなたかのお役にたてばと思います。

以上です。
Visual Studio Community のインストールメモ

トラブルが起きたときの試行錯誤の結果を書いています。
すべてを鵜呑みにはしないでください。

# Visual Studio Community 2013 のアンインストールと再インストール
コンパネから選択して「変更」を指示すると表示される黒い枠なしウィンドウ。
その uninstall でうまくいくことが普通かもしれません。
でも、途中でとまって、半日も動かない。
ということで、いろいろやりました。

### C:\Program Files(x86) の Microsoft Visual Studio 2012 を消す。（失敗）
このとき 2008 などのほかのバージョンのフォルダも、コンパネからアンインストールして残ったフォルダを消しました。

参考サイト：[Visual Studio Community 2013 with Update 4 のインストールで Setup Blocked](https://social.msdn.microsoft.com/Forums/ja-JP/78253047-1ee4-4f72-ae90-5700b23de61b/visual-studio-community-2013-with-update-4-setup-blocked?forum=vsgeneralja)

コンパネのプログラムのアンインストールのリストからは消えました。
しかし、再インストールができない状態で何かしら残っているようです。
これをした後で、次の成功したやり方を試しました。
フォルダを消すやり方はやらないほうがいいかもしれません。

### コマンドプロンプトから実行（成功）
公式からダウンロードするインストーラの vs_community.exe をコマンド実行します。

日本語化パッケージ vs_langpack.exe も使っている場合は、 vs_community.exe の前に
`> vs_langpack.exe /uninstall /force` をしてアンインストールします。
最後のほうで一部うまくいかなかったと表示されますが、きちんと終了します。

**日本語化パッケージをインストールしている場合は、日本語化パッケージを先にアンインストールしないと、 vs_community のアンインストールの日本語リソースのステージで処理が終わらなくなりました。**

続いて本題の vs_community.exe です。
`> vs_community.exe /uninstall /force`
これを管理者権限のついたコマンドプロンプトでやると、一部うまく出来なかったというメッセージが出ますが、アンインストールは３０分くらいで完了しました。

参考サイト：[Visual Studio Professional 2013 is currently...と出て再インストールができなかった - My days of...](http://tako1192.hatenablog.com/entry/2015/02/11/215716)

このあとで、 vs_community.exe を起動すると、初回のインストールのときの画面になり、無事インストールが２時間くらいでできました。

vs_langpack.exe では終盤にダイアログが表示されましたが OK を選びました。
こちらの Microsoft Visual Studio 2013 preparation はものすごく長いです。
気長に待つしかないようです。６時間後にみるといつの間にか終わっていました。
[Visual Studio Community 2013を早速インストールしてみた！インストール方法をご紹介します | Lancork](https://www.lancork.net/2014/11/how-to-install-visual-studio-community-2013/)

### ３０分くらいはまってあげたほうが良い
ぜんせんインストールやアンインストールの手順が進まなくてデッドロックや無限ループにおちいっているような錯覚におちいりますが、意外とまっていると進むこともあります。特に自分にいいたいことですが、あまりあせらずインストーラを信じましょう。少しは。

# Visual Stuido Community 2015 のアンインストール
コンパネで選択して「変更」で黒い枠なしウィンドウが表示されます。
アンインストールを実行していると途中で３時間も進まなくなったのでキャンセルしました。
キャンセルもきかないので、強制シャットダウンして再起動しました。
そうするとなぜかいきなりこの黒い枠なしウィンドウがでてきます。
これをキャンセルしてから次のことをしました。

### ほかの Microsoft Visual とついたプログラムをアンインストールする。
C++ 関係がたくさんあったのでアンインストールして、 Visual Studio や tools もアンインストールしました。
その後で再びアンインストールすると成功しました。
Riot.jsでオプションのテキストにhtmlタグをつけて表示する方法

Riot.jsで以下のようにオプションのテキストにhtmlのタグが付いている場合、


```html:tag
<app>

  <!-- layout -->
  <p>{ opts.message }</p>

  <!-- style -->
  <style>
    body {
      color: #444;
      font-size: 16px;
    }
    div {
      margin: 20px;
    }
    #emphasis { 
      color: blue;
      font-weight: bold;
    }
  </style>

</app>
```

```js:mount
riot.mount('app', {
    message: 'メッセージの<span id="emphasis">この部分</span>が強調'
})

// マウントすると
// メッセージの<span id="emphasis">この部分</span>が強調
// と表示される
```

そのhtmlタグは評価されずそのまま文言としてそのまま表示されてしまいます。


でも、htmlタグはそれとして評価されてほしい。（上記では、`span`タグ）
どうするか考えた結果、`innerHTML`でガツンとセットする方法が一番楽。

```html:tag（改良版）
<app>

  <!-- layout -->
  <p id="message"></p>

  <!-- logic -->
  <script>

    // riotはid属性にthisでアクセスできる
    this.message.innerHTML = opts.message

  </script>

  <!-- style -->
  <!-- 先ほどと同じなので省略 -->

</app>
```

以上、ちょっとした小技でした。　→[デモ](http://runstant.com/k-kuwahara/projects/00a18c6a)
AES EC2 で、Windows Server の RDP環境を立ち上げて、普通のデスクトップとして使う


なんとなく。

2016/08/22 追記：
AWS Workspace が時間課金を始めるようです。今後はこちらの方が良いかもしれません。（多くのDesktop as a Serviceが月額課金のため、hourly 料金の EC2 で Win を使いたかったのが本記事のモチベーションでした）
https://aws.amazon.com/jp/blogs/aws/category/amazon-work-spaces/


### インスタンス立ち上げ ###

1. AWS Console -> EC2
2. インスタンスの作成
3. コミュニティAMIを選択。Japanese を検索。（デフォルトの英語だと、日本語入力の設定が後で必用なので、Japaneseを選んだ方が無難）
4. Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-XXXX 等を選択
5. インスタンスタイプを選択（t2.medium などそれなりの性能が良いと思う）
6. 確認と作成をクリック
7. キーペアを選択
8. 作成されるのをまつ
9. 作成されたインスタンスを右クリック、「Windowsのパスワードを取得」
10. 先ほど選択したキーペアを使って、パスワードを取得

### 初期設定 ###

IE は、標準設定ではほとんどのサイトへのアクセスがブロックされている。
面倒なので、Chromeをインストール

1. デスクトップ上にあるEC2 Microsoft Windows Guideをダブルクリック
2. ブロックに関する表示が出る。下部にある、追加をクリック
3. https://*.google.co.jp を追加
4. https://www.google.co.jp/chrome/browser/desktop/ にアクセス。複数のブロック警告が出るが、無視して閉じる
5. Chorme をダウンロード
6. Chrome を実行。インストール開始

### その他 ###

.net framework 3.5 のインストールの仕方

https://www.desknets.com/neo/download/doc/install/win2012dotnet.html
Docker上でCaffeを動かす時にハマったこと

Caffeの環境をUbuntu上に用意するように書籍に書かれていますが、手間がかかるためDocker上で動作させます。その際にハマったことを紹介します。

DockerとKitematicをインストールします。
DockerHubのアカウントを作ります。

そして検索ウィンドウにUbuntu14.04 Caffeなどと打ち込みます。(またはcuda-caffe)
そうすると↓2kというのがあります。これは2000ダウンロードされていることを意味します。
2000ダウンロードされているので信用できると判断できるので、CREATEボタンを押します。

<img width="500" alt="スクリーンショット 2016-08-10 19.11.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/33329/90b05d7e-6975-ed10-0db0-cfde0a2aa6aa.png">

そうするとイメージがダウンロードされると以下のような画面になります。

<img width="500" alt="docker-cuda.png" src="https://qiita-image-store.s3.amazonaws.com/0/33329/a3b35bdc-2c59-4b30-d0a7-7e2b3aa29d55.png">

execボタンを押すとターミナルが起動しますので。
bashを起動させた方が入力しやすいので、terminal上で**bash**と入力すると補完が効くようになります。

起動するとcaffeのフォルダの中にいるはずです。
**pwd**と打って確認してみてください。

そのあとに

```
cp Makefile.config.example Makefile.config
```
を実行してください。

g++-4.6も必要になるのでインストールします。

```
sudo apt-get install g++-4.6
```

次にviだと入力しづらいのでvimをインストールします。

```
sudo apt-get install vim
```

```
vim Makefile.config
```

そして、以下の行を編集します。行はバラバラに記述しているので、それぞれ　/ + 検索ワード　(スラッシュバー + 検索したい文字)で検索してください。

```
CUSTOM_CXX := g++ //修正前
CUSTOM_CXX := g++-4.6　//修正後

# CPU_ONLY := 1 //修正前
CPU_ONLY := 1 //修正後、コメントアウトを外す
```

そして

```
make 
make test 
make runtest
```
これで最終的にPASSEDという文字が出れば完了です。

次にMNISTのサンプルを動かします。

```
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh

//MNISTの学習を実行 (ここでエラーになる)
./examples/mnist/train_lenet.sh

```

私の環境では最後の**./examples/mnist/train_lenet.sh**で上手くいかなくなりました。

```
less ./examples/mnist/train_lenet.sh
```

と入力して確認するとlenet_solver.prototxtを実行していることがわかります。

```
lenet_solver.prototxt
```

で

```
# solver mode: CPU or GPU
solver_mode: GPU //修正前

# solver mode: CPU or GPU
solver_mode: CPU //修正後、GPUをCPUにする
```
最後にMNISTの学習を実行します。
```
//MNISTの学習を実行 
./examples/mnist/train_lenet.sh
```

これで私の環境では上手くいきました。





>参考書籍
>初めてのディープラーニング　オープンソース"Caffe"による演習付き
>著者　武井宏将
>ISBN 978-4-86594-022-0
PHP の実行ユーザーを変えたかった @nginx + php-fpm

Ubuntu & nginx & php (php-fpm) の構成で Web サーバーの実行ユーザーとPHPの実行ユーザーを切り分けたいと思って探した所、次の記事を発見
http://qiita.com/kijtra/items/022d3cde07046e396486
内容的に「nginx と php-fpm の実行ユーザーは切り分ける事ができそう！」という事は分かったけど、「この構成、慣れてないからもしかしたら不具合あるかも」とあったので、ちょっと他にも記事がないかを探したらクラウドサービスを提供している Digital Ocean の記事を発見
https://www.digitalocean.com/community/tutorials/how-to-host-multiple-websites-securely-with-nginx-and-php-fpm-on-ubuntu-14-04

一つ一つの設定に関して丁寧に解説してあって、上のQiitaの記事で書かれてた疑問もここで解消できた

たぶん Qiita の記事の方で `listen.mode=0666` にしないと動かない部分は、Digital Ocean の記事にある

> listen.owner and listen.group define the ownership of the listener, i.e. the socket of the new php-fpm pool. Nginx must be able to read this socket. That's why the socket is created with the user and group under which nginx runs - www-data.

と繋がってると思う。

リンク貼ってるだけになっちゃったけど、備忘録として。
【iOS】システムフォントはUILableとUITextViewで違う

# これは何

システムフォントを指定した場合、和文フォントが UILable と UITextView で違うっぽいのでメモ。

※間違っていたらコメントください！マサカリ歓迎

# テスト環境

* 実機
    * iPhone 6 Plus / iOS 8
    * iPhone 6s / iOS 9
* 実機の言語設定は「日本語」
* `CFBundleDevelopmentRegion ` には Japan 指定

# 実験

* UILabel と UITextView だけの Storyboard を作る
    * 上が UILabel
    * 下が UITextView
* 「System」を指定した時と「ヒラギノ角ゴ」を指定した時の違いを比べる

フォントは Storyboard 上で指定。

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/aa5d1bc8-676a-e10e-2831-44b5abde9cfd.png)


## iOS 8

### システムフォント指定

 
<img width="414" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/8292/d4de8a85-ec8a-c5f5-91a5-e2f57248a7e0.png">

* UILabel は「ヒラギノ角ゴシック」に
* UITextView も「ヒラギノ角ゴシック」になった


### ヒラギノ角ゴシック W3 指定

<img width="414" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/8292/ba1db4e5-fae2-5a0d-004f-9df2e188118a.png">

* UILabel は「ヒラギノ角ゴシック」に
* UITextView も「ヒラギノ角ゴシック」になった

## iOS 9

### システムフォント指定


<img width="375" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/8292/94e43934-e1f1-33db-5bbf-df7ae1c30d6d.png">
 

* UILabel は「ヒラギノ角ゴシック」に
* UITextView は「謎のフォント（仮）」になった（「や」を比較するとわかりやすい。文字間隔もせまい）


### ヒラギノ角ゴシック W3 指定

<img width="375" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/8292/430aca6d-d653-372e-95fd-de270ff7d9e3.png">


* UILabel は「ヒラギノ角ゴシック」に
* UITextView も「ヒラギノ角ゴシック」になった（文字間隔もUILabelと揃った）


# 結論

* システムフォントを指定した場合、**和文フォントが UILable と UITextView で異なる**
* iOS 9の場合のみ起こる（iOS 8では起こらなかった）

ちなみに今回はあくまで和文フォントの話であり、欧文フォントの場合は

iOS 8 - Helvetica Neue 
iOS 9 - San Francisco

が使われます。

# 参考リンク

* [iOS で日本語文章に発生する中華フォント現象とは \- Qiita](http://qiita.com/usagimaru/items/46c27c42e862fb8aba7e)
* [iOS9からのシステムフォント San Francisco を理解する \- Qiita](http://qiita.com/mo_to_44/items/e16d93ef78ff5e0ffbac)
Rails(Ruby)で日付の重複をチェックする


スケジュールの管理システムなどで、登録したスケジュールが既に
登録した日付が重複していないかチェックして何か処理を行う場合があると思います。
そんな対応を今日やったので、まとめてみようと思います。


# 重複をチェックする条件式
日付の重複チェックには定石があるそうです。

```
(開始時間1 < 終了時間2) && (終了時間1 > 開始時間2)
```
Rspec初心者まとめ


rspecで使われる色々なキーワードについて教えていただいたので、まとめてみます。

# キーワード

- describe

テストの対象となるものを書いていく。大見出しになる感じ。日本語でもOKとのこと
インスタンスメソッドは`#date_range`、クラスメソッドは`.date_range`とする

- context

「〇〇の場合」というような前提条件を書く

- before

テスト全体のデータを投入する
特定のitの中で検証するデータを作るのには使わない

- let

変数のようなもの
itの中でデータを書き換えたりする
itブロック内では使えない

```ruby
context 'hogehogeの場合' do
  it 'falseとなること' do
    let(:hogehoge) { nil }　# これはできない
    expect(subject).to be false
  end
end
↓
Failure/Error: let(:hogehoge) { nil }
       `let` is not available from within an example (e.g. an `it` block) or from constructs that run in the scope of an example (e.g. `before`, `let`, etc). It is only available on an example group (e.g. a `describe` or `context` block).
```

- subject

オブジェクト。itの中で対象となるテストデータを定義する

- it

「〇〇となること」というようなテスト内容を書く

# 実行方法
```irb
¥ rspec spec/features/hogehoge.feature
# ファイルを`:`で繋ぐと行番号で実行できる
¥ rspec spec/features/hogehoge.feature:555
```

# 書き方
```ruby
  describe 'テストの大項目' do
    before do # テストを実施する前の処理      
      start_at1 = Time.new(2016, 8, 1, 9, 00, 00)
      end_at1 = Time.new(2016, 8, 31, 12, 30, 00)

      start_at2 = Time.new(2016, 8, 4, 12, 00, 00)
      end_at2 = Time.new(2016, 8, 4, 15, 00, 00)
    end
    it '期待する仕様をここに書く' do
      # 値を一致することをチェックできる
      expect(start_at1).to eq(Time.new(2016, 8, 4, 10, 30, 00))
      expect(start_at2).to eq(Time.new(2016, 8, 4, 12, 00, 00))
      expect(end_at1).to eq(Time.new(2016, 8, 4, 10, 30, 00))
      expect(end_at2).to eq(Time.new(2016, 8, 4, 12, 00, 00))
    end
  end
```

# 実際のテストコード例
```ruby
# モデル（event_spec.rb）のテスト
  describe '#hogehoge?' do #インスタンスメソッド
    let(:start_at){Time.zone.local(2016, 8, 1, 9, 00, 00)} # 変数定義
    let(:end_at){Time.zone.local(2016, 8, 31, 12, 30, 00)} # 変数定義
    subject do # オブジェクト
      event = Event.new
      event.start = start_at
      event.end = end_at

	  # インスタンスメソッドの戻り値がsubjectにセットされる
      event.hogehoge?(Time.zone.local(2016, 8, 4, 00, 00, 00))
    end
    context 'start_atがnilの場合' do
      let(:start_at) { nil }
      it {expect(subject).to be false} # subjectがfalseだったらOK
    end
  end
```
httpカスタムヘッダを参照してnginxからapacheに振り分ける

nginxをリバースプロキシにして、特定のヘッダの値でapache2にプロキシするやつ。
設定値とかは適宜読み替えてください。

# 設定

*CentOS 6.6* で試した。

カスタムヘッダのキーは `X-BACKEND-PORT` としておきます。
ここ変更するなら nginx の設定の `$http_x_backend_port` も変えてください。

## nginx

```
nginx version: nginx/1.10.1
```

```conf:/etc/nginx/conf.d/site.conf
server {
        listen       80;
        server_name  hoge.example.com;

        access_log  /var/log/nginx/hoge.example.com.access.log;
        error_log /var/log/nginx/hoge.example.com.aerror.log;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_pass  http://127.0.0.1:$http_x_backend_port;
        }
}
```

### 余談

proxy_pass の upstream を _localhost_ で指定すると何故か *IPv6* でプロキシしようとすることがあるので、
特に理由が無ければ _127.0.0.1_ にしておくとよいと思います。

## apache2

```
Server version: Apache/2.2.15 (Unix)
Server built:   Jul 18 2016 15:24:00
```

2.4 だと書き方違うかも。

```conf:/etc/httpd/conf.d/site.conf
Listen 8000
Listen 8001
Listen 8002

<VirtualHost *:8000>
    ServerAdmin webmaster@hoge.example.com
    DocumentRoot /var/www/html/test0
    ServerName  hoge.example.com;

    ErrorLog logs/test0.error_log
    CustomLog logs/test0.access_log common
</VirtualHost>

<VirtualHost *:8001>
    ServerAdmin webmaster@hoge.example.com
    DocumentRoot /var/www/html/test1
    ServerName  hoge.example.com;

    ErrorLog logs/test1.error_log
    CustomLog logs/test1.access_log common
</VirtualHost>

<VirtualHost *:8002>
    ServerAdmin webmaster@hoge.example.com
    DocumentRoot /var/www/html/test2
    ServerName  hoge.example.com;

    ErrorLog logs/test2.error_log
    CustomLog logs/test2.access_log common
</VirtualHost>
```

# 配置

```
/var/www/html
├── test0
│   └── info.php
├── test1
│   └── info.php -> ../test0/info.php
└── test2
    └── info.php -> ../test0/info.php
```

```php:/var/www/html/test0/info.php
<?php
var_dump(getcwd());
var_dump($_SERVER);
```

# 動作確認

サーバが _192.168.33.30_ の場合。

```
curl -s -v 192.168.33.30/info.php -H "X-BACKEND-PORT: 8000"
curl -s -v 192.168.33.30/info.php -H "X-BACKEND-PORT: 8001"
curl -s -v 192.168.33.30/info.php -H "X-BACKEND-PORT: 8002"
```
EclipseにGlassFishサーバーを設定

#設定環境
・Windows10
・Eclipse Neon(4.6.0)
・Java 1.8.0_92
・JavaEE - GlassFish4.1

※参考サイト
http://ittoybox.com/archives/509#Eclipse

※Eclipseのインストールについては、以下サイトを参考
http://ittoybox.com/archives/63


#Eclipseにサーバーアダプタの追加

サーバーアダプタを追加し、EclipseからGlassFishを利用できるようにする。

・Eclipse メニューバー｢ウィンドウ｣　→　「設定」
・左のメニューから｢サーバー｣ → ｢ランタイム環境｣を選択。
　サーバー・ランタイム環境の｢追加｣ボタンを押下。
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/f7f8ac3f-2c84-2b88-b311-12900d960d0a.png)



<br>
<br>

・Oracleフォルダの下に｢GlassFish Tool｣が表示されているはずなので、それを選択し、インストール
　(既にGlassFishのフォルダが存在している場合は、この処理は不要)

　※使用条件の条項に同意とかが表示されるが、全て｢はい｣を選択。
　※インストールは結構時間がかかるので、気長に待つ。インストール後はEclipseを再起動。
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/c927e4ed-ff01-39d6-f918-03aeb56d4fd1.png)


<br>
<br>

#Eclipseのサーバー設定

・インストールが完了すると、GlassFishの選択フォルダが表示されるので、その中のGlassFish4を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/26b0c4fa-9cd9-71b1-0eb1-37ca6db217f7.png)


<br>
<br>

・GlassFishの設定画面が表示されるので、環境に応じて適宜設定
　GlassFish location：｢"インストールディレクトリ"/glassfish4/flassfish｣
　Java location：Javaのインストールディレクトリ
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/4aaa53ab-6d82-762b-c873-c1759e31238d.png)


<br>
<br>

#サーバービューの追加
メニューバーから｢ウィンドウ｣　→　｢ビューの表示｣　→　｢その他｣を選択。
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/5e8f7c9d-749d-c608-d7a1-31c134811459.png)


<br>
<br>

サーバービューが表示されるので、サーバービューの範囲上で右クリック　→　｢新規｣　→　｢サーバー｣
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/88adf09a-74ec-e3c0-be9c-f2aa2465e3b8.png)


<br>
<br>

サーバータイプ｢GlassFish4｣を選択し、次へ
![image](https://qiita-image-store.s3.amazonaws.com/0/136774/ffc685e9-3ac3-e7d3-2b16-8a13224f0dd0.png)


<br>
<br>

Domain pathに対象とするドメインのパスを指定。
ドメイン名、パスワードを指定し、完了。

![image](https://qiita-image-store.s3.amazonaws.com/0/136774/ed226f11-b0f9-4161-e982-ff8e48de6850.png)


<br>
<br>

#GlassFishサーバーの起動/停止
サーバービューからサーバーを選択して右クリック。
｢開始｣/｢停止｣にて制御可能。
※サーバービュー右上の再生マーク、停止マークでの制御も可能。

![image](https://qiita-image-store.s3.amazonaws.com/0/136774/d6acb78b-366f-ed91-859d-b9bfd4c15525.png)


<br>
<br>

サーバーを起動すると、GlassFishの管理コンソールが表示可能となる。
サーバービューから対象のサーバーを選択し、右クリック → ｢GlassFish｣ → ｣｢管理コンソールの表示｣
※ブラウザから｢[http://localhost:8080](http://localhost:8080)｣にアクセスしての確認も可能。
※WebサーバーにデプロイされているアプリケーションについてもEclipse上から確認可能。

![image](https://qiita-image-store.s3.amazonaws.com/0/136774/1de55ef3-d121-ebdd-c0f7-f3effe9481f6.png)


#GlassFishのホットデプロイ設定
標準の設定だと、プログラムを修正した際、サーバーを再起動しないと修正が反映されない。
ホットデプロイとは、サーバーの停止、再始動を行わなくとも、変更内容を適用できる仕組み。
通常本番運用時はOFFにするが、開発時はトライアル＆エラーを繰り返すのでホットデプロイをONにする。

<br>

対象サーバーをダブルクリックしサーバーの概要を開く。

![image](https://qiita-image-store.s3.amazonaws.com/0/136774/0f1b379b-e0c9-3872-32d1-ba41dee9c599.png)



<br>
<br>

｢公開｣タブのデフォルト設定は｢自動公開しない｣になっているが、
これを｢リソースの変更時に自動的に公開｣に変更し、保存すれば完了。
※必要に応じて、｢公開間隔(秒)｣の設定を変更。

![image](https://qiita-image-store.s3.amazonaws.com/0/136774/ae481472-f5fb-339b-2d29-8f71cd4e6423.png)
Excelよく使う関数・小技

随時更新。

# 関数
## COUNTIF
```vbnet
COUNTIF(検索範囲, 検索条件)
```
[【参考】](http://www3.tokai.or.jp/excel/kansu/countif.htm)
検索条件を満たすセルの数を返す。

## COUNTIFS
```vbnet
COUNTIFS(条件範囲１, 検索条件１, 条件範囲２, 検索条件２, ...)
```
[【参考】](http://www.excel-list.com/countifs.html)
COUNTIF関数の複数バージョン。
検索条件はAND。ORではないことに注意。

## INDEX
```vbnet
INDEX(範囲, 行番号, 列番号, 領域番号)
```
[【参考】](http://www.excel-list.com/index_fun.html)
指定された行と列が交差する位置にあるセルの参照（セルの場所）を返す。
配列形式でINDEX関数を使用した場合、セルの参照ではなく配列の要素の値を返す。

## MATCH
```vbnet
MATCH(検査値, 検査範囲, 照合の型)
```
[【参考】](http://www.excel-list.com/match.html)
指定したセルの範囲を検索し、その項目の相対的な位置（上から数えて何番目か）を返す。

| 照合の型 | 詳細 |
|:-:|:-:|
| 　1　　　 | 検索値以下の最大値で検索。検索範囲は昇順でなくてはならない。 |
| 　0　　　 | 検査値に一致する値。 |
| 　-1　　　| 検査値以上の最小値で検索、検索範囲は降順。 |

## ROUNDDOWN
```vbnet
ROUNDDOWN(数, 桁数)
```
[【参考】](http://www3.tokai.or.jp/excel/kansu/rounddown.htm)
数値を指定した桁で切り捨てる。

| 桁数 | 詳細 |
|:-:|:-:|
| 1以上 | 桁数+1桁目を切り捨て |
| 0 | 小数第一位を切り捨て |
| 桁数が負 | -1は一の位、-2は十の位... |

例）ROUNDDOWN(153.473, 1) → 153.4

# 小技
## 指定したセルの相対／絶対を切り替える
[【参考】](http://excel.onushi.com/purpose/refer-form.htm)
F4キーをおす。

## 指定した行や列を固定する
1. 固定表示したいセルの右斜め下のセルをクリック。
2. 「表示」タブ　＞「ウィンドウ」グループ　＞「ウィンドウ枠の固定」＞「ウィンドウ枠の固定」をクリック。

## 0.5単位で数字を切り捨てる
[【参考】](http://kspc-biz.com/explanation/foundation/12-excel/22-excel-round01)
例)1.43 → 1.0、 1.73 → 1.5、　2.1 → 2.0

```vbnet:セルA1に0.5単位で切り捨てたい数字があるとき
=ROUNDDOWN(A1*2,0)/2
```

## VLOOKUP関数は使わないほうが良い
処理が重いのと、使い勝手そこまでよくない。
変わりにINDEXとMATCHを使うと良い。

## シート移動のショートカットキー
| ショートカットキー | 挙動 |
|:-:|:-:|
| Ctrl + Page Up | 左のシートに移動 |
| Ctrl + Page Down | 右　〃 |

## 名前の管理
[【参考】](http://liginc.co.jp/life/useful-info/178680)
数式タブの名前の管理から開始できる。
セルやセル範囲に名前をつけることができる。

## Excelの時間の扱い方
[【参考】](http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/hour.htm)
日付や時刻はシリアル値で処理される。
時間・時刻は「1日(24時間)」を「1」として、12:00は「0.5」、6:00は「0.25」と小数点以下の数値で表す。
spring-batchでRepositoryItemReaderを使う

## はじめに
* JPAでクエリメソッドを使用して、RepositoryItemReaderを実装するときの備忘です。

## バージョン
* pomから抜粋。

```xml
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.4.0.RELEASE</version>
</parent>
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-jpa</artifactId>
	<version>1.10.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-batch</artifactId>
	<version>1.4.0.RELEASE</version>
</dependency>
```

## 実装

### entity
* 説明に最低限必要な物だけ。

```java:Company.java
@Data
@Entity
public class Company implements Serializable {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="company_id")
	private int companyId;
	
	@Column(name="category_id")
	private int categoryId;
}
```

### repository
* findByCategoryIdが今回対象のクエリメソッドです。

```java:CompanyRepository.java
@Repository
public interface CompanyRepository extends JpaRepository<Company, Integer> {
	public Page<Company> findByCategoryId(int categoryId, Pageable pageable);
}
```

### 本処理部


```java:BatchConfiguration.java
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
	@Autowired
	public JobBuilderFactory jobBuilderFactory;
	@Autowired
	public StepBuilderFactory stepBuilderFactory;
	@Autowired
	CompanyRepository companyRepository;

	@Bean
	public RepositoryItemReader<Company> reader() {
		RepositoryItemReader<Company> reader = new RepositoryItemReader<>();
		reader.setRepository(companyRepository);

		// クエリメソッド指定。タイプセーフにしたい。
		reader.setMethodName("findByCategoryId");
		// クエリメソッドの引数指定
		List<Object> arguments = new ArrayList<>();
		arguments.add(CategoryCode.BANK);
		reader.setArguments(arguments);

		// 取得結果のソート
		Map<String, Direction> sort = new HashMap<>();
		sort.put("companyId", Direction.ASC);
		reader.setSort(sort);

		return reader;
	}

// 以降、その他の処理
```

### ポイント
* クエリメソッドはPageableでの実装が必須のようです。   
たとえばrepositoryの実装が以下のようになっているとします。   
`public List<Company> findByCategoryId(int categoryId);`   
この実装でバッチを実行すると以下の様なエラーが出ます。   
`java.lang.NoSuchMethodException: com.sun.proxy.$Proxy66.findByCategoryId(java.lang.Integer, org.springframework.data.domain.PageRequest)`
* ItemReaderの実装で、ソートの指定も必須のようです。   
こちらも指定しないと例外が発生します。
iOS / Android メモ　16進数を用いたColorの編集


iOSやAndroidでアプリ開発をする際にオリジナルのアプリを作るために活用する文字の色や背景色を変更する際、16進数で色を把握するために利用しているサイトです。
オススメなので是非活用してください

HexRGB To UIColor
http://tobioka.net/wp-content/uploads/2012/05/hexrgb2uicolor.html

原色大辞典
http://www.colordic.org/


Objective-C

![スクリーンショット 2016-09-10 21.08.02.png](https://qiita-image-store.s3.amazonaws.com/0/123847/0e93ea25-5366-06de-c1a6-4c57eed4568b.png)

hファイルを別で用意し設定し全体へ反映させるか、指定のファイルでのみ設定している

JAVA

<img width="346" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/123847/0293be7d-db89-2d06-c951-5ea60f7bc9a3.png">

valueでそれぞれの色を設定している
font-awesome ベルマークの表示方法　※自分用メモ

# お知らせ通知に用いられる、ベルマークの表示方法
http://fontawesome.io/get-started/

STEP1
Gemfileに以下を追記する。
gem 'font-awesome-sass'

STEP2
bundle install --path vendor/bundle

STEP3
application.cssファイルを、application.css.scssに変更する。
変更後、ファイルに以下を追記する。
@import "font-awesome-sprockets";
@import "font-awesome";

STEP4
ナビゲーションメニューのIconsより、好きなアイコンを選択する。
http://fontawesome.io/icons/

※ アイコンが表示されない場合は、CDNを利用する。
http://highfivecreate.com/blog/course/tips/2218.html

http://fontawesome.io/get-started/

以下、URLを`<head>`タグの中に埋め込む。 
`<script src="https://use.fontawesome.com/d4bf0cfcaa.js"></script>`


リストに使う場合は「fa-fw」を追加すると、文字が始まる位置がきれいにそろいます。
http://weboook.blog22.fc2.com/blog-entry-388.html

もしくは、ul の class に fa-ul をつけ、 li の class に fa-li をつけます。
https://h2ham.net/font-awasome
iPadでUIActivityViewControllerが落ちるし、いいところに出ない

結論から言うと以下

```swift

let activityItems = [shareText, shareWebsite]
            
// 初期化処理
let activityVC = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)

// 使用しないアクティビティタイプ
let excludedActivityTypes = [
    UIActivityTypePostToWeibo,
    UIActivityTypeSaveToCameraRoll,
    UIActivityTypePrint
]

activityVC.excludedActivityTypes = excludedActivityTypes

if AppDelegate.isIpad(){
    activityVC.popoverPresentationController?.sourceView = self.view
    activityVC.popoverPresentationController?.barButtonItem = self.actionBarButtonItem
    activityVC.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Down
}
            
```

barbuttonitemに出したい場合はそう指定しなければいけない、sourceViewの指定がなければクラッシュする