OmniAICreator/Qiita-1.07M huggingface dataset:
macのデスクトップ通知をjsから行う

- jxaを使って実現できた
  - [User Interactions · dtinth/JXA-Cookbook Wiki](https://github.com/dtinth/JXA-Cookbook/wiki/User-Interactions#displaying-notifications)


```javascript
// run関数にコマンドライン引数が渡される
function run(argv) {
  var msg = argv.pop() || "";
  notify('from jxa-notify', msg)
}

function notify (title, msg) {
  var a = Application.currentApplication();
  a.includeStandardAdditions = true;
  a.displayNotification(msg, {withTitle: title});
}
```

- osascriptコマンドにオプションを渡すとjsで実行してもらえる
- aliasにしておくと便利

```bash
$ osascript -l JavaScript ~/bin/jxa-notify.js
$ alias notify="osascript -l JavaScript ~/bin/jxa-notify.js"
```

実行が長くなるようなものの後ろにつけておくと忘れておくことができる

```bash
$ long.sh; notify "long.sh finished"
```
Google Project Tango の領域学習使用時にUnityエディタ上で開発しやすくする小技

TangoDeltaCamera や TangoARCamera はエディタ上で
WASDでの移動等をエミュレートしているが、
AreaDescription を有効にするとエミュレートがオフになってしまう。
また、上記のWASDエミュレートを使いたいならオートコネクションもオフにすること。

実機とエディタ上では赤枠で囲まれた設定をトレードオフして使う(自分はヘルパコンポーネントを書いた)。

また Phab2Pro ではリローカライズに失敗することが確認される。
電源のオンオフ等で改善する場合がある。
要継続調査。

<img width="277" alt="スクリーンショット 2016-12-27 21.57.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/101292/c379962a-ba64-746e-51ee-ee994a39114a.png">


![Game_ARCamera.unity - yakitori - Android (Personal) <OpenGL 4.1> 2016-12-27 22-13-46.png](https://qiita-image-store.s3.amazonaws.com/0/101292/365bb73a-72e5-d4db-c6e5-3df11f3cecaf.png)
three.jsで自家製stlloader

#概要

three.jsでstlファイルをパースして見た。

#写真

![stl.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/642e30b6-2629-500a-17d0-dc28cece6712.jpeg)

#環境

three.js r83

#成果物

http://jsdo.it/ohisama1/K8yR
CentOS に Heroku Toolbelt をセットアップ

#まえおき

Heroku を操作するにはシェルで heroku コマンドを利用する必要があります。
heroku コマンドを利用するには事前にインストールする必要があります。　←当たり前

Ubuntu ではパッケージやリポジトリが用意されていて簡単にインストールすることが可能ですが、CentOS でも特に難しくありません。
本記事では、ユーザの home にセットアップした際の手順を紹介します。


#公式情報

2016-12-15 の投稿で新バージョンのリリースがアナウンスされました。
新バージョンは Node.js で書かれていて Windows において３倍以上の性能向上を果たしたようです。

https://blog.heroku.com/the-new-heroku-cli

新バージョンでは公式ページにおいてもインストールスクリプトを利用しないシンプルなセットアップ手順が紹介されています。

https://devcenter.heroku.com/articles/heroku-cli


#成功した環境

- CentOS 6.8 x86_64
- ユーザの home に rbenv がセットアップされている
- rbenv に ruby 2.3.1 がセットアップされている

具体的には、下記手順で構築した環境を利用しました。
https://github.com/matsueoss/hiyaoroshigo/wiki/Minimal-steps-to-install-our-Rails


#しくみ

heroku コマンドは、単にアーカイブを展開してパスを通すだけで動くようになります。


#手順概要

1. 公式手順を参考にツール本体のアーカイブをダウンロード
1. アーカイブを展開
1. パスを通す


#実践

ほとんど公式手順そのままです。

```
$ wget https://cli-assets.heroku.com/branches/stable/heroku-linux-amd64.tar.gz
$ tar xf heroku-linux-amd64.tar.gz
$ sed -i -e "/^export PATH$/i PATH=\$HOME/heroku/bin:\$PATH" ~/.bash_profile
$ export PATH=$HOME/heroku-client/bin:$PATH
```

`heroku --version` でエラーが出なければ成功です。
heroku-linux-amd64.tar.gz は消してしまって問題ありません。


#参考情報：古いバージョンを使っていた人へ

アーカイブに含まれるツリーのトップディレクトリ名が変更になっています。パスを通す場合にご注意ください。

旧：heroku-client
新：heroku
PHPで画像出力


この記事は [一人PHP総復習 Advent Calendar 2016](http://qiita.com/advent-calendar/2016/php_beginner) 21日目の記事です！

PHPで画像出力する方法について！
同じような記事、知見は結構あるんですけど、初心者向けの一連の記事ということで許してね(´・ω・`)

## 画像を出力ってどういうこと？
```php
<?php

echo 'Hello, world!';
```

上記のように記述してあるindex.phpを読み込むと、Hello, world!と表示されますよね。

同様に、あるphpファイルを読み込むと画像を出力させます。
それだけのことなんだけど初心者の時なかなか理解できなかった・・。

## 書き方
### ベタのPHPで書く
HTTPヘッダで、「これは画像です」ということを宣言してファイルを読み込みます。
例えばpublic/images/hoge.pngというパスの画像を出力する場合。

```php
<?php

header('Content-Type: image/png');
readfile('public/images/hoge.png');
```

以上です。簡単ですね！！

content-typeに指定するのはMIMEタイプという画像の種類(ここでは`image/png`のこと)で、関数を使って取得することができます。

```php
<?php

$file = 'public/images/hoge.png';

//MIMEタイプの取得
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $finfo->file($img_file);

header('Content-Type: '.$mime_type);
readfile($file);
```

ファイルの拡張子は偽装されている場合もあるので、予期せぬエラーを避ける為に拡張子を取得する際もMIME TYPEから判定する場合が多いです。
[PHPマニュアル](http://php.net/manual/ja/book.fileinfo.php)

### おまけ: フレームワークを使う
紹介程度に書きます。例えばLaravelの場合。

```php
public function showImage() {
	$file = public_path('image/hoge.png');
	$mime_type = File::mimeType($file);
	$headers = [
		'Content-type' => $mime_type
	];
	
	response()->file($file, $headers);
}
```

一見見慣れない関数が多くて「!?」となるかもしれませんが、動的な処理がしやすい&Laravel内部で細々したエラーなどを吸収してくれるところがとっても便利です。

フレームワークを使えば、ルーティング処理をして画像を出力することも簡単にできます。
例えば`/image`にアクセスしたら画像を表示するとか。

```php
Route::get('/image', 'SampleController@showImage');
```

画像にアクセス制限をかけたり条件分岐させたりという時に有用になってきます。
ファイルの処理は予期せぬエラーが多いので、フレームワークを使うのがよいですね！
rangerで予測


#モデルにするデータ(data1)

|ID|　説明変数1　|　説明変数2　|　説明変数3　|目的変数|
|:--|--------:|--------:|-------:|:--------:|
|A　 |　11111113111　|　2222222　|　33222　　|　1|
|C　 |　11111111121　|　2223222　|　33323　　|　0|
|B　 |　11111111113　|　2223222　|　33222　　|　0|
|D　 |　11111113311　|　2211222　|　3333332　|　1|



#モデルの作成
説明変数と目的変数からモデルの作成

```.R
model <-ranger(目的変数~.,data=data[,2:length(data)],write.forest=T)

```



#予測したいデータ(data2)

ID　|　説明変数１　|　説明変数２　|　説明変数３　|　目的変数　|
|:--|--------:|--------:|-------:|:--------:|
B　 |　11141133　|　22288822　|　33222　　　|　1|
C　 |　11111431214　|　222888622　|　33323　　　|　0|
D　 |　11111441134　|　222366222　|　3322　　　　|　1|
F　 |　1111133114　|　21226662　|　333333　　　|　1|







#モデルに当てはめて予測
"説明変数1","説明変数2","説明変数3"をmodelに当てはめて、目的変数の予測

```.R
predict <-predict(model,data2[,c("説明変数1","説明変数2","説明変数3")])

```
predict$predictions が予測値



#精度検証
この予測結果と、data2をマージして答え合わせする
Hive グループごとのランダムサンプリング

##概要
SQLライクな言語Hiveでの、
グループごとのランダムサンプリングです。

##例
以下のようなデータが続くとき
グループごとに各３つずつランダムに抽出したい

|customer_ID|item_name|date| 
|:--|--------:|:--------:|
|　3  |  A    |　　2016-10-11　　|  
|　3  |  B    |　　2016-11-11　　|  
|　5  |  C    |　 2016-12-10　|  
|　2  |  A    |　　2016-09-20　　|  
|　3  |  D    |　 2016-08-09　|  



##クエリ

```.sql
SELECT 
    sample.customer_ID,
    sample.item_name,
    sample.date,
    sample.row_num
        
FROM

    (
    SELECT
          *, 
          row_number()             
              over(PARTITION BY customer_ID ORDER BY rand() ) as row_num          
    FROM        
          table
    ) as sample

WHERE
    sample.row_num beween 1 and 3
```

##解説
WINDOW関数を用いて、グループごとにランダムに番号をふってから（以下の表の右カラムのように）
その番号を1~3まで抽出することで、
グループごとに3つずつ抽出します。

|customer_ID|item_name|date|row_num|
|:--|--------:|--------:|:--------:|
|　3  |  A    |　　2016-10-11　　|1|  
|　3  |  B    |　　2016-11-11　　|3|
|　5  |  C    |　 2016-12-10　|1|
|　2  |  A    |　　2016-09-20　　|1|  
|　3  |  D    |　 2016-08-09　|2|
Unicode文字からそれを表示できるフォントを探す方法

最近、[Unicode巨大地図](https://github.com/hakatashi/unicode-map)というポスターを制作しています。これはUnicodeの全文字を1枚のポスターに並べるというかなり無謀なポスターなのですが、制作する上でUnicode文字からそれを表示できるフォントを探すためのノウハウが蓄積されたのでご紹介します。

# 万能Unicodeフォント

Unicodeフォントの中でも、特にUnicodeのほぼ全文字を網羅的に収録しているフォント。まずはここに収録されているか調べる。

## [GNU Unifont](http://unifoundry.com/unifont.html)

Unicodeの全文字を16x16のビットマップフォントで網羅するというプロジェクト。Unicode 6.0 の時点で全文字対応を実現しており、以降Unicodeに文字が追加されるたびアップデートが行われている。

Unicode対応率では他の追随を許さないが、16x16のビットマップフォントというのがやはりネック。Unicode巨大地図には使用していない。

## [Noto Fonts](https://www.google.com/get/noto/)

GoogleとAdobeが開発しているUnicodeフォント。現在 [Unicode 6.1 に完全対応している。](https://github.com/googlei18n/noto-fonts/blob/08427dcf8c2970fd1c29a7c20cf1015572712d6c/FAQ.md#what-writing-systems-does-noto-support)ただしCJK文字を始めとしてサンセリフフォントしか対応していない言語も多いので注意。

なお標準のフォントに含まれていない文字が[アルファ版](https://github.com/googlei18n/noto-fonts/tree/master/alpha)に含まれている場合もあるので要チェック。

# 万能ではないがそこそこ対応率が高いUnicodeフォント

## [SIL Fonts](http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=fontdownloads)

少数言語の研究、開発を行う[国際SIL](https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9BSIL)が公開しているフォントのリスト。各言語のエキスパートがデザインした高品質なフォントが言語ごとに公開されている。

またSILは有名な [SIL OFL](https://ja.wikipedia.org/wiki/SIL_Open_Font_License) の生みの親でもあり、公開されているフォントも比較的自由なライセンスで利用できる。

## その他

* [GNU FreeFont](https://www.gnu.org/software/freefont/)
* [Quivira](https://www.gnu.org/software/freefont/)
* [HCR Batang](http://www.freekoreanfont.com/hancom-hcr-batang/)

# 対応フォントを探すためのサイト

## [FileFormat.info Unicode Character Search](http://www.fileformat.info/info/unicode/char/search.htm)

文字コードから対応するフォントを検索できる。例えばU+3371に対応しているフォントは[こんな感じ](http://www.fileformat.info/info/unicode/char/3371/fontsupport.htm)。

そこそこいろんなフォントに対応している。検索結果のフォントにはプロプライエタリなものも多いので注意。

## [ScriptSource](http://scriptsource.org/cms/scripts/page.php)

各言語、書記体系ごとに様々なリソースをまとめたサイト。「Fonts & Keyboards」でそれぞれの文字種ごとに対応するフォントがライセンスとともに一覧されている。

## [Alan Wood’s Unicode Resources](http://www.alanwood.net/unicode/fontsbyrange.html)

Unicodeのブロックごとに対応するフォントをまとめたサイト。フォントの網羅度が高い。

# その他テクニック

## Unicode提案書に記載されているフォント情報を調べる

Unicodeに最近追加された文字や、Unicode提案段階でまだ追加されていない文字などは、フォントの対応状況も悪い。そのような文字は、Unicode提案書に記載されているフォント提供情報を調べてみると良い。

例えば、教会スラブ文字のUnicode追加提案である [L2/14-196](http://www.unicode.org/L2/L2014/14196-slavonic.pdf) の 5. Fonts related の欄を見てみると、

> b. Identify the party granting a license for use of the font by the editors (include address, e-mail, ftp-site, etc.):
> Hirmos Ponomar font licensed under GNU GPL by Aleksandr Andreev and Yuri Shardt

とある。この情報から[このフォントの提供サイト](http://www.ponomar.net/cu_support/fonts.html)にたどり着くのは容易い。その他提案書の本文にフォント情報が記載されている場合もあるので要チェック。
こんなアプリが欲しい

# 横断辞書検索
- 電子辞書専用機と同等のもの
- 専用機遅い、見にくい
- iphone, ipad ジャンプできるけど横断検索できない
- 横断で例文検索したい

# 自動チェックイン

- 好みの席(前方、通路側、隣が開いているなど)を事前に登録
- check-in 情報を事前に登録
- 各航空会社毎に異なる online check-in 時間に対応
- confirmation mail から必要な情報を取得

# Github notifications reader

- Jasper がすごく使いやすい。
- slack に流してもらった方がいい。
- github reader https://github.com/azu/github-reader がいまいち使いにくい
- watch している repository について repository 毎に, 未読の issue を古い順に読みたい
- 自分が管理しているものは slack に投げられるようだけど、watch しているものが欲しい

# Gitter Client

- 未読管理
- 勝手に Thread 化
dockerコンテナへの接続alias化


毎回dockerコンテナーに接続際docker exec xxx打つの面倒くさかったので
~/.bashrcに以下のようなalias設定を入れて使ってます。

```
alias uu="docker exec -it  `docker ps | grep unicorn | grep 3000 | awk '{print $1}'` /bin/bash"
alias nn="docker exec -it  `docker ps | grep nginx | grep 80 | awk '{print $1}'` /bin/bash"
alias pp="docker exec -it  `docker ps | grep php | grep 80 | awk '{print $1}'` /bin/bash"
alias tt="docker exec -it  `docker ps | grep td-agent | awk '{print $1}'` /bin/bash"
```

これよりシンプルな方法ありましたら教えてください
PhpStormで空行を一括削除

ファイルにある「空っぽの行」が多すぎたので、いっそのこと全部消すことにした。

#方法

1. Command + R
2. 「Regex」にチェック
3. 検索欄の上に `\n\n` 、下に `\n` （正規表現）
4. 「Replace all」

![スクリーンショット 2016-12-30 16.40.43.png](https://qiita-image-store.s3.amazonaws.com/0/109241/6a047638-d57b-30ae-9df4-bd3f1b8ad823.png)

念のため差分をとってチェックなどを忘れずに。

#参考

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206344569-Remove-empty-lines-from-code
初めてのSQL（Postgres）


- 検索
- データの一部書き換え

の２つだけ、初めてSQLを書きました。
あとトランザクションエラーも発生したときの解決法も。

# データを検索（抽出）

「user_table から new_flg が1のものを検索したい」

```
SELECT * FROM user_table WHERE new_flg = 1
```

「*」 は「全件」を表す。

##検索結果の一部を置換する

「user_table の gender を 'man' から 'woman' にした場合の **結果を表示したい** 」

```
SELECT REPLACE(gender, 'man', 'woman') FROM user_table;
```

`SELECT` `FROM` 間の表記は、「検索結果として何を表示するか」の指定らしく、DBが書き換えられるわけではない！

# データを更新

「user_table の gender を 'man' から 'woman' に書き換えたい」

```
UPDATE user_table SET gender=REPLACE(gender, 'man', 'woman');
```

`WHERE` も追加可能。

```
UPDATE user_table SET gender=REPLACE(gender, 'man', 'woman') WHERE new_flg = 1;
```

# トランザクションブロック内でエラーが発生

```
[2016-12-22 15:49:29] [25P02] ERROR: current transaction is aborted, commands ignored until end of transaction block
```

##解決策

ロールバックした。

```
ROLLBACK
```
PICでAndroid Open Accessoryをつくる:01

#PIC開発課環境構築
PIC開発のための環境構築を行います

##ダウンロードファイル
- [MPLAB X IDE v3.50](http://www.microchip.com/mplab/mplab-x-ide)（2016/12/30現在）<br/>
[Downloads]タブ内にリンクがあります
- [MLAB X16 Compiler v1.30](http://www.microchip.com/mplab/compilers)（2016/12/30現在）<br/>
[Downloads]タブ内にリンクがあります
- [PIC24/dsPIC Peripheral Libraries v2.00](http://www.microchip.com/mplab/compilers)（2016/12/30現在）<br/>
コンパイラと同じ[Downloads]タブ内の下のほうにリンクがあります

##インストール
ダウンロードした各ファイルを実行し、インストールしていきます。
Peripheral Librariesについては、Compilerよりも後からインストールする必要があり、インストール時にコンパイラのインストールフォルダの指定が求められますので、コンパイラのバージョンと同じ名前のフォルダを指定します。
（上記バージョンであれば、「C:\Program Files (x86)\Microchip\xc16\v1.30」となります）

##動作確認
- MPLAB X IDEを起動します。
- メニューバーの「File」-「New Project」を実行します
- 「Standalone Project」を選択します<br/>![01_01.png](https://qiita-image-store.s3.amazonaws.com/0/153698/14170fd7-ea3e-260b-1ca3-0f335e1088de.png)
- Familyに「16-bit MCUs(PIC 24)」を、Deviceに「PIC24FJ64GB002」を選択します<br/>![01_02.png](https://qiita-image-store.s3.amazonaws.com/0/153698/0ecb3db1-a101-4fea-0f37-89838f849cf6.png)
- 「Simulator」を選択します<br/>![01_03.png](https://qiita-image-store.s3.amazonaws.com/0/153698/a3590618-9bc2-f826-b97e-d72873bd4666.png)
- 「X16(v1.30)」を選択します<br/>![01_04.png](https://qiita-image-store.s3.amazonaws.com/0/153698/eeffaa02-7065-8724-84ff-3896c89c54b9.png)
- Project Nameを入力し、Encodingを「UTF-8」としてプロジェクトを作成します<br/>![01_05.png](https://qiita-image-store.s3.amazonaws.com/0/153698/791038af-b06d-0100-a877-98ffc08fbe85.png)

- プロジェクト内の「Source File」を右クリックし、「new」-「mainXC16.c」を実行して、そのまま「newmainXC16.c」を作成します<br/>![01_06.png](https://qiita-image-store.s3.amazonaws.com/0/153698/571c4b5c-9aba-6309-e26d-ac6c92d35bec.png)<br/>
- 「newmainXC16.c」が開かれるので、下記の通り編集します。

```c:newmainXC16.c
#include "xc.h"
#include<ports.h>                       /*ポートbit操作マクロの定義*/

void delay(int i){
    while(i--);
}

int main(void) {
  AD1PCFG = 0xffff;                     /*全てのポートをデジタルI/O */
  CLKDIV  = 0x0000;                     /*クロック周波数 32MHz*/
  mPORTBOutputConfig(IOPORT_BIT_15);    /*PORTB RB15を出力設定*/
  mPORTBWrite(0);                       /*PORTB Low出力*/
  while (1) {
    mPORTBSetBits(IOPORT_BIT_15);
    delay(10000);
    mPORTBClearBits(IOPORT_BIT_15);
    delay(60000);
  }
  return 0;
}
```
- メニューバーの「Debug」-「Debug Main Project」を実行します<br/>
環境に問題がなければ、デバッグモードでコードが実行されます。

##参考にさせていただいたサイトについて
- Peripheral Librariesの必要性について<br/>
[PIC24FのPeripheral Libraryを個別インストールする方法](http://garchiving.com/pic24f-peripheral-library/)
- コードサンプル<br/>
[PIC24Fで基本のLED点滅](http://garchiving.com/pic24f-led-flash/)
PHPの配列結合についてのまとめ

#さいしょに
PHPの配列を結合させる際に、+演算子とarray_mergeの違いを区別できていなかったのでまとめ。
内容はかなり初心者向けです。

#どのように使い分けるか
結合させたい配列のkeyに重複があったときの処理をどうしたいかで使い分けが変わります。

###+演算子
keyに重複があった場合には値を上書きしない。
keyを指定していない場合にも、適用される。

###array_merge
keyに重複があった場合には値を上書きする。
keyを指定していない場合には、1つ目の配列の後に2つ目の配列が結合される。


#理解していないとこんなことが起こり得る
###keyを指定していな場合にも、+演算子でうまく結合してくれると思ってるパターン
```php
$array1 = ['hoge1','hoge2','hoge3'];
$array2 = ['fuga1','fuga2','fuga3'];

$res = $array1 + $array2; //[0]=> "hoge1" [1]=> "hoge2" [2]=> "hoge3"??
```
array1の後ろにarray2を結合させようと思っても、両方ともkeyが[0],[1],[2]と重複しているため、元のarray1の値が変わらなくなってしまう。

###keyが重複していても最初の配列の後ろに結合してくれると思ってるパターン
```php
$array1 = ['key1' => 'val1', 'key2' => 'val2'];
$array2 = ['key1' => 'hoge', 'key2' => 'fuga'];

$res = array_merge($array1, $array2); //["key1"]=> "hoge" ["key2"]=>"fuga"??
```
てっきり最初の配列の後に次の配列が結合されると思っていると、keyの重複があったときに上書きされてることに気がつけない。

###keyを指定していないけど、keyが重複しているから値が上書きされると思ってるパターン
```php
$array1 = ['hoge1','hoge2','hoge3'];
$array2 = ['fuga1','fuga2','fuga3'];

$res = array_merge($array1, $array2); //[0]=> "hoge1" [1]=> "hoge2" [2]=> "hoge3" [3]=> "fuga1" [4]=> "fuga2" [5]=> "fuga3"??
```
この例だとarray2をそのまま使えよとなるけど、一応。
3D空間を簡易的に移動してみる

```c#:
using System;
using System.Collections;

public class TestControl : MonoBehaviour {

   


    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        this.transform.position += this.transform.forward;
    
    
        if (Input.GetKey(KeyCode.S))
        {
            transform.Rotate(-0.5f, 0, 0);
        }
        if (Input.GetKey(KeyCode.W)) 
        {
            transform.Rotate(0.5f, 0, 0);
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.Rotate(0, 0, 0.5f);
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.Rotate(0, 0, -0.5f);
        }
        
    }
}
```
js 文章から目的の単語を探して置き換える

##お題
・文章から目的の単語を探して置き換える。
・目的の単語が大文字から始まる場合は置き換える単語も大文字にする。

```js
function replace(str, before, after) {
//write your code.
  return arr;
}

replace("His name is Tom", "Tom", "john");//"His name is John"
```

##出力結果　例

```js
replace("He is Sleeping on the couch", "Sleeping", "sitting") // "He is Sitting on the couch"
replace("This has a spellngi error", "spellngi", "spelling") // "This has a spelling error"
replace("Let us get back to more Coding", "Coding", "algorithms") // "Let us get back to more Algorithms"
```

##使ったもの
split()
indexOf()
charAt()
slice()
replace()

##考え方
大文字の判定
・indexOfで目的の単語(before)が文章(str)にある位置(index)を取得する。
・文章(arr)から上記のindexを使って文字を抜き出して、toUpperCase()で大文字にしたものと一致するかif文を使って判定する。
・一致した場合、afterの単語の一文字目をcharAt(0)で指定して、toUpperCaseで大文字にする。のこりはslice(1)で切り出して一緒にafterへ再代入する。

置き換え
・配列(arr)を用意して、split()で切り分けた単語を入れる。
・for文でarr[i]をまわし、beforeと一致したときにreplace()で置き換える。

arrを返しておわり

##コード

```js
function replace(str, before, after) {
  var arr = [];
  arr = str.split(' ');
  var index = str.indexOf(before);
  if (str[index] === str[index].toUpperCase()) {
    after = after.charAt(0).toUpperCase() + after.slice(1);
  }
  for(var i = 0; i < str.length; i++){
    if(arr[i] === before){
      arr = str.replace(before,after);
    }
  }
  return arr;
}

replace("His name is Tom", "Tom", "john");
```

###他にもコードが浮かんだ方、コメントおまちしております。

*例外が発生してました。
@think49　さん　指摘、コードの記述ありがとうございます。
【VBA】いろいろ備忘録


最近、VBAで使ったネタを備忘録としてまとめておきます。

--

# 1.Worksheetにあるチェックボックスのステータスの一括確認する

複数存在するチェックボックスのステータス（True or False）を確認させる。
下記では、"True（チェックが入っている）"のもののカウントをさせている。

````コマンド
Sub Macro1()

    '変数定義
    Dim n, i, cnt
    
    'チェックボックスがTrue（チェックありもの）のカウントを行う
    With Worksheets("sheet1")
        For i = 1 To n
            If .OLEObjects("Checkbox" & i).Object.Value = True Then
                cnt = cnt + 1
            End If
        Next i
    End With

End Sub
````

--

# 2.チェックボックスのタイトル（Caption）を取得する

チェックボックスのタイトル（Caption）を取得させる。
連続した複数のタイトル（Caption）を取得する場合は、前述1を組み合わせる。

````コマンド
Sub Macro2()

    '変数定義
    Dim Caption
    
    'タイトル（Caption）を取得する
    Caption = Worksheet("sheet1").OLEObjects("Checkbox1").Object.Caption
    
End Sub
````

--

# 3.指定したアプリケーションを実行する

指定したアプリケーションを実行させる。

````コマンド
Sub Macro3()

    '指定したアプリケーションを実行させる（ex.メモ帳）
    Shell "notepad.exe"

End Sub
````

--

# 4.指定したアプリケーションをアクティブ表示する

指定したアプリケーションをアクティブ表示させる。

````コマンド
Sub Macro4()

    '指定したアプリケーションをアクティブ表示させる
    AppActivate "Microsoft Excel", True

End Sub
````

--

# 5.検索情報を取得する

指定した条件を満たす情報を任意のセルから取得させる。

````コマンド
Function get_info(info_name As String)

    '検索処理
    whr_info = serch_info(info_name)
    info = Worksheets("sheet1").Cells(whr_info, 1).Value
    
    '取得情報格納
    get_info = info
    
End Function

Function serch_info(name As String)

    '変数定義
    Dim lngYLine As Long
    Dim intXLine As Integer
    Dim Obj As Object
    
    '検索処理
    Set Obj = Worksheets("sheet1").Cells.Find(name, lookat:=xlWhole)
    If Obj Is Nothing Then
        MsgBox "Err_Not_Find...."
    Else
        lngYLine = Worksheets("sheet1").Cells.Find(name, lookat:=xlWhole).Row
        ingxline = Worksheets("sheet1").Cells.Find(name, lookat:=xlWhole).Column
    End If
    
    serch_info = lngYLine

End Function
````

--

# 6.指定秒数waitする

指定秒数waitさせる。

````コマンド
Sub Macro6()

    Application.Wait Now + TimeValue("00:00:10")

End Sub
````

--

# 7.指定したwindowがアクティブ表示させるまでループ

指定したwindowがアクティブ表示させるまでループさせる。

````コマンド
Sub Macro7()

    On Error Resume Next
    
    Do
        DoEvents
        Err.Clear
        AppActivate "notepad.exe"
    Loop While Err <> 0
    
End Sub
````

--

# 8.指定したアプリケーションのGUI操作する

指定したアプリケーションのGUI操作させる。

````コマンド
Sub Macro8()

    Shell "notepad.exe", True
    AppActivate "notepad.exe", True
    
    'フォント設定画面を開く
    SendKeys "%OF", True

End Sub
````
Nexus 7 2012 Wi-Fi(Grouper) にAndroid 6.0 Marshmallowを焼いてみる

# はじめに
動作環境がないと困るので、適当に転がっていた Nexus 7 2012 Wi-Fi(Grouper)に Android 6.0 Marshmallowを焼いてみる。

# 準備
TWRPは焼いてあったので最新版の[TWRP 3.0.2-0](https://dl.twrp.me/grouper/twrp-3.0.2-0-grouper.img.html)に更新。TWRP-2.8.4以降は自分でアップデートできるので非常に便利。
ついでに、入っている4.4のまま、pure_nexus_grouper-6.0.1-20160724.zipとGApps nanoにSuperSUをダウンロードしておく。

# インストール
普通にTWRPを起動して焼くだけ。特に問題無くできました。

# 動作確認
RMaps0.9.4.apk 入れたら普通に動いてます。Android2.2の時代のapkが普通に動くのはすごいです。
なんか、この作業自体が意味が無いように思えてきましたが、今後も考えて続けます。

# 参考
[Nexus 7 [2012]にThe Pure Nexus Projectを焼いてみた](http://hanpenblog.com/nexus7-2012-pure-nexus-marshmallow/)
[TeamWin - TWRP](https://twrp.me)
[[UNOFFICIAL][ROM][GROUPER][6.0.1_r62][EXT4/F2FS]★ The Pure Nexus Project ★[22/08/16]](http://forum.xda-developers.com/nexus-7/development/unofficial-pure-nexus-project-layers-t3243943)
[downloads for Asus Nexus 7 by GtrCraft](https://www.androidfilehost.com/?w=files&flid=37911)
[The Open GApps Project](http://opengapps.org)
OpenCV3.2をOSXでhomebrewを使わずにインストールする

つい先日でたところのopencv 3.2をOSXにインストールします。
Homebrewなどを使うと簡単なんでしょうが、複数バージョンを併用したいのでソースからです。

##環境
　MacOS 10.12 Sierra
  cmakeを新しくしておきます。
```
sudo port install cmake
```
##Build
OpenCV 3.2のソースを取ってきて展開しておきます。
```
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=$HOME/local/opencv32 -D BUILD_EXAMPLES=ON -D WITH_IPP=OFF -D BUILD_PYTHON_SUPPORT=ON ./opencv-3.2.0  ..
```
なぜかcmakeするのに、WITH_IPP=OFFをつけないとエラーで落ちました。
```
make -j4
make install
```
##PATH設定
PKG_CONFIG_PATHとDYLD_FALLBACK_LIBRARY_PATHの設定を.bashrcに記述します。
```
export PKG_CONFIG_PATH=$HOME/local/opencv32/lib/pkgconfig:$PKG_CONFIG_PATH
export DYLD_FALLBACK_LIBRARY_PATH=$HOME/local/opencv32/lib:$DYLD_FALLBACK_LIBRARY_PATH
```
##動作確認
```
 cd samples/cpp
 g++ facedetect.cpp -o facedetect `pkg-config --libs --cflags opencv`
```
 コンパイルでき、ちゃんと動きました。V4Lライブラリがないのにカメラ動いてます。Macの場合どんな仕組みになってるのかはよくわかりません。

##参考リンク
http://ser1zw.hatenablog.com/entry/20110904/1315083776
macOS で SourceTree コマンドラインツールインストール失敗

失敗したのでメモ

## マニュアルでインストールする方法

Terminal にて下記のコマンドを実行し、シンボリックリンクを作成する

```bash
ln -s /Applications/SourceTree.app/Contents/Resources/stree /usr/local/bin/
```

または、`.zshrc`, `.bashrc` などで `alias` 設定を行う

```bash
#~/.zshrc, ~/.bashrc
alias stree='/Applications/SourceTree.app/Contents/Resources/stree'
```

※`/Applications/SourceTree.app` に SourceTree がインストールされている前提

## ソース

### エラー内容

<img width="532" alt="エラーダイアログ" src="https://qiita-image-store.s3.amazonaws.com/0/2908/b77ebba8-498c-b39f-5c3c-13ebb015be70.png">


### system.log
```
Dec 30 15:02:00 mukoyama-MacBook-Pro SourceTree[8353]: 2016-12-30 06:02:00 +0000 (e) Failed to install privileged helper: Error Domain=CFErrorDomainLaunchd Code=4 "(null)"
```

### エラー内容でググった結果出てきた。

- [SourceTree command line tools installation failed \- Atlassian Answers](https://answers.atlassian.com/questions/31657961/sourcetree-command-line-tools-installation-failed)
- [\[SRCTREE\-3172\] Sourcetree fails to install command line tools on El Capitan \(Mac OS X 10\.11\) \- Atlassian JIRA](https://jira.atlassian.com/browse/SRCTREE-3172?src=confmacro)
Angular(Angular2)で数値の書式化(underscore.stringライブラリ使用)

数値の書式化ができる文字列ライブラリ`underscore.string`をangular-cliで使用するためのメモ。

## :zero: 動作確認環境
以下の環境で動作確認済みです。

| # | package                  | version       |
|:-:|:-------------------------|:--------------|
| 1 | angular-cli              | 1.0.0-beta.24 |
| 2 | typescript               | 2.0.3         |
| 3 | angular                  | 2.3.1         |
| 4 | underscore.string        | 3.3.4         |
| 5 | @types/underscore.string | 0.0.30        |

## :one: underscore.string のインストール

まずは`underscore.string`本体のインストール。

```bash
npm install underscore.string --save
```
続いて、angular-cliの設定。`underscore.string.min.js`を`scripts`の中に追加。

```json:angular-cli.json
"scripts": [
  "../node_modules/underscore.string/dist/underscore.string.min.js"
]
```

## :two: @types/underscore.string のインストール

typescriptで使うためにd.ts定義ファイルをインストールする。

```bash
npm install @types/underscore.string --save-dev
```

## :three: 使う

```ts:sample.ts
import * as s from 'underscore.string'

console.debug(s.lpad('1', 2, '0'));
console.debug(s.numberFormat(1000, 2));
console.debug(s.numberFormat(123456789.123, 5, ".", ","));
```

```bash:コンソール出力
01
1,000.00
123,456,789.12300
```

 `underscore.string`自体の使い方は以下が参考になる。

- https://github.com/epeli/underscore.string/blob/master/README.markdown#api
- http://qiita.com/naoiwata/items/c181b44e9b835e937b3a
分割した LaTeX ファイルを subfiles を使ってコンパイルする

## `\input`, `\include` によるファイル分割の問題点

学位論文など大規模な LaTeX 文書では，次のようにファイルを分割するのが一般的だと思います．

```tex:main.tex
\documentclass{jsarticle}

\usepackage[dvipdfmx]{graphicx}
\graphicspath{{images/}}

\title{分割した{\LaTeX}ファイルを\texttt{subfiles}を使ってコンパイルする}
\author{sankichi92}
\date{2016年12月30日}

\begin{document}

\maketitle

\input{introduction}

\end{document}
```

```tex:introduction.tex
\section{\texttt{input}, \texttt{include} によるファイル分割の問題点}

分割した{\LaTeX}ファイルを個別にコンパイルできない．
```

しかし，この方法では `introduction.tex` を単体でコンパイルすることができません．
私の場合，LaTeX ファイルを保存するたびに `chktex` と `latexmk` が走るようエディタで設定しているので，`introduction.tex` を編集するたびにエラーが返されてしまいます．
また，`introduction.tex` の変更を確認するために，`main.tex` を毎回コンパイルするのは非効率的です．

そこで，パッケージ等を利用することで[^1]，分割した LaTeX ファイルを個別にコンパイルできるようにすることを考えます．

## `subfiles` を用いたファイル分割

ここでは，[`subfiles`](https://www.ctan.org/pkg/subfiles) を紹介します．
`subfiles` はパッケージファイルとクラスファイルがセットになったもので，TeX Live に含まれています．

`subfiles` を用いると，ファイルの分割は次のようになります．
（`sections` というサブディレクトリに分割したファイルをまとめることにします．）

```tex:main.tex
\documentclass{jsarticle}

\usepackage{subfiles}
\usepackage[dvipdfmx]{graphicx}
\graphicspath{{images/}{../images/}}

\title{分割した{\LaTeX}ファイルを\texttt{subfiles}を使ってコンパイルする}
\author{sankichi92}
\date{2016年12月30日}

\begin{document}

\maketitle

\input{introduction}

\subfile{sections/body}

\end{document}
```

```tex:sections/body.tex
\documentclass[../main]{subfiles}

\setcounter{section}{1}
\begin{document}

\section{\texttt{subfiles}を用いたファイル分割}

\texttt{subfiles}を用いると，プリアンブルを共有したうえで，分割した{\LaTeX}ファイルを個別にコンパイルすることができる．

\end{document}
```

親になる `main.tex` で `subfiles.sty` を読み込み，`\include` や `\input` ではなく，`\subfile` を用いて分割した LaTeX ファイルを指定します．
`\subfile` を用いることで，子の `\begin{document}...\end{document}` の外側を無視することができます．

そして，子の `body.tex` では，ドキュメントクラスに `subfiles.cls` を読み込み，そのオプションとして親を指定します．
これにより，子を個別にコンパイルできるうえ，**親のプリアンブルを子に共有することができます**．

より詳しい使い方はドキュメントを確認してください．

```sh
$ texdoc subfiles
```

ただし，`subfiles` を用いても，ファイル間でラベルや文献を共有できないという問題が残ります．
たとえば，子で `\ref` や `\cite` を用いると，`??` や `[?]` のように出力されてしまいます．
よい解決策をご存知の方がいらっしゃいましたら，教えていただけると助かります．

## ファイル分割のためのその他のパッケージ

[CTAN の `subdocs` というトピック](https://www.ctan.org/topic/subdocs)にまとめられています．
以下，LaTeX ファイルの分割について調べる中でよく見かけたものを簡単に紹介します．

### `docmute`

`docmute` は，`\input`, `\include` を拡張して，読み込むファイルに `\begin{document}...\end{document}` があればその内側のみを読み込むようにするシンプルなパッケージです．

分割した LaTeX ファイルのコンパイルについて日本語で調べると，`docmute` を紹介している記事を多く見かけます．
しかし，`docmute` ではプリアンブルの共有はサポートされていません．
個々の独立した LaTeX ファイルを include するのであれば `docmute` は良いかもしれませんが，大規模な1つの LaTeX 文書を分割するのであれば，`subfiles` の方が便利です．

### `standalone`

子のプリアンブルを親で読み込んだり，一つの LaTeX ファイルを複数箇所で利用したりといった，より複雑な LaTeX ファイル分割を行うのであれば，`standalone` を使うと良さそうです．

[Multi-file LaTeX projects](https://ja.sharelatex.com/learn/Multi-file_LaTeX_projects) というタイトルの [ShareLaTeX](https://ja.sharelatex.com/) のドキュメントで，`subfiles` とともに簡単な使い方が紹介されています．
この記事では，[`import`](https://www.ctan.org/pkg/import) パッケージと組み合わせて，ネストした LaTeX ファイルの読み込みを行っています．

---

[^1]: パッケージ等を利用せずに，分割した LaTeX ファイルを個別にコンパイルする方法は，[効率的な LaTeX ファイル分割術](http://qiita.com/wtsnjp/items/6ba3b8e12514d8a3bd41#%E8%A7%A3%E6%B1%BA%E7%AD%962) という記事で紹介されています．
餃子の支払と財布のダイエット

# 餃子の支払と財布のダイエット

先日、昼に会社の近所で餃子定食を食べに行きました。田町には餃子定食が食べれるところが数か所ありますが、その日行った所の餃子は一回り大きく、たっぷりと肉が詰まっいて食べごたえがあることから何気に気に入っていて、月に一回のペースで食べに行ってます。

さて、食べ終えて、日ごろから共にランチしている同僚と一通りの雑談をしてから会計に行ったところからが本題となります。

ここで皆さん、定食のお値段が 880 円というありきたりな設定だった場合、お財布から出す硬貨はどのように選びますか？

私はその時いつもの習慣から「四百円とっ…」と言いながら、財布にあった 100 円を４枚とキャッシュトレーに配置し、最後に千円札を小銭の横に添えるように出しました。（100 円より小さい硬貨が無かったためです。）

店主から受け取ったお釣りの 520 円を財布にしまって店を出た後、同僚からとある事実を知りました。

というのは、いつからか財布に貯まる硬貨の枚数を最小限に保つためにやっている習慣ですが、このように 880 円の会計をする時に 1400 円を出すというのは世間的には珍しいという事です。

皆さんも自分では何気に習慣としてやっていることが、周りの人から言われて初めてそうでないと気付いた事があるのではないでしょうか。その時の瞬間や他の人の習慣が知れる時は意味深ですよね。

おしまい。


P.S. これだけだと技術系の投稿にはならないので、財布の硬貨を最低枚数に保つ出し方のロジックを考えてみることにしました。

# 支払をロジック化

意外と難しいかった・・・結論から言うと、下記に少し考えたけど、いい方法がちょっとやそっとで思いつきそうにないので諦めました。

日本だと 1000 円や 10000 円などのように百十一の位が０の紙幣があるのでそれに合わせて組み合わせ選んでいるけど、どんな硬貨・紙幣の種類がある国にでも対応できる汎用なロジックはいいのが思いつかない…

* 取り敢えず日本の通貨の定義はこうかな

```py3
denominations = [1, 5, 10, 50, 100, 500, 1000, 10000]
```

## アルゴリズム１：財布の中身を何も考えずに全部渡しそれに対して釣銭を計算してもらい、戻って来たお釣りから元々渡さなくても良かった通貨・紙幣を引く

* 最適な釣銭を求める処理はなんとなく書ける（キャッシュドロアの中は無限という前提）

```py3
def denomiate_amount(amount):
    denominated = {}
    for denomination in reversed(sorted(denominations)):
        denominated[denomination] = int(amount / denomination) * denomination
        amount -= denominated[denomination] 
    return denominated
```
* すると、財布に 100 円が 4 枚と千円が 1 枚あったときに

```py3
wallet = {100: 4, 1000: 1}
```

* 880 円の食事をした場合

```py3
# 買い上げ額
price = 880

# お財布そのまま出す
tray = wallet

# お釣りの額を計算
change = sum(d * n for d, n in tray.items()) - price
if change < 0:
    raise # 足りない

# 釣銭の最適な組み合わせ
changed = denomiate_amount(change)

# 戻ってきた硬貨を引いた組み合わせ
optimal = {d: n - changed[d] for d, n in wallet.items()}
```

という感じで `optimal` に結果が求まる。

ただ、雑なロジックなため問題が直ぐに一つ思いつく：

* 財布の中に元々千円札が 11 枚あった場合、11,400 円を出して一万円札と 520 円のお釣りを貰うが、千円 11 枚と一万円札は相殺されないので、実際それを出すことになる。これって店に結構な嫌がらせだと思う…

奥が深そうなのでこの辺でお手上げとします。

綺麗なアルゴリズムが思いついた方は是非コメントをください。 :bow:
three.jsでsketchupのモデルを読み込む。

#概要
three.jsで(google sketchupでモデリングしたモデルを
objとmtlで書き出して)、読み込んで表示して見た。

#写真
three
![](http://jsdo-static-contents.s3.amazonaws.com/images/capture/6/j/s/6jsU.jpg?t=1482725073)

#写真
sketchup
![sk.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/9417a065-c6fc-2b2e-4b05-535c36f1daca.jpeg)

#環境

three.js r83
google sketchup 7.1

#three読み込み

http://jsdo.it/ohisama1/6jsU

#sketchupプラグイン

https://github.com/ohisama/viup
PICでAndroid Open Accessoryをつくる:00

#はじめに
今更感はありますが、PICを使用したAndroid Open　Accessoryを作りましたので、備忘録を兼ねて記事を作成していきます。
電子回路やPICのプログラムについては全く経験がありませんので、先人の知恵を最大限に活用させていただくこととします。
また、「動けばＯＫ！」レベルの検証のみですので、ご了承ください。

#最終目標
赤外線リモコンを受信しAndroidへ通知を行う装置を作成していきます。

#開発環境
Windows10 64bit環境を前提に進めていきます

#手順
[01：PIC開発環境構築](http://qiita.com/sin5-developer/items/c3e4bb01d41bb2917193)
[02：構築環境確認（Lチカ）](http://qiita.com/sin5-developer/items/fceb3701dc32310eae94)
[03：回路作成](http://qiita.com/sin5-developer/items/93d008bd43d9b7c6a761)
[04-1：ファームウェア作成](http://qiita.com/sin5-developer/items/a1037ac8b53611d35fd6)
[04-2:ファームウェアの調整](http://qiita.com/sin5-developer/items/d514b7406d2dd0eb707e)
05：Android開発環境構築
06：Androidアプリ作成
とりあえずuGUIでドラッグしたい

uGUIでドラッグしたい。そんなちょっぴりセンチなとき。Unity様のSampleアセットを使わせてもらいましょう。
[[Unity Samples: UI]](https://www.assetstore.unity3d.com/jp/#!/content/25468)

# 環境
* MacbookPro 2012 Mid OS X Yosemite 10.10.5
* Unity 5.1

# ドラッグを実現できるパネルサンプルの確認
1. 上記assetをimportしましょう。
2. importが完了すると、Scenesフォルダが出ますね。
3. 「Draggable Panel」のSceneを表示しましょう。
4. その中のPanelの子にDragZoneが存在します。これを使いまわしましょう！！

# とりあえずテキトーにドラッグを実現
1. 先の同じScene上のHierarchyで、新規にPanelを生成しましょう。Canvas>Panel Drag Areaの下にCreate>Panelで生成。Panelの大きさを調整しておくと良いです。
2. さらにその中にDragAreaを設けましょう。既存のDragAreaをコピペしてもいいですね！(プレハブ化してからの方がよさげ) Canvas>Panel Drag Area>Panel>Drag Areaをコピーして、先ほどのPanelの下にコピペ。
3. 既存のDragAreaは上付きの高さ40の状態なので、Panel全体をドラッグしたい場合は、調整します。コピペしたDrag Areaのinspector内Rect TransformでAnchor Presetsを調整します。上下左右stretchにして、Heightを0にしましょう。

以上！
50の手習い始めました

# きっかけ
「小さな親切大きなお世話」が最近増えて鬱陶しいので自分でやってみようかなという動機です。
特にスマホが「何も考えないで使う」には良いのですが、作った人間の「どうだ、すごいだろう！」的なものが透けて見えることが多く、実際はどんどん使い辛くなってます。欲しいのは「目の前の事をとりあえず解決する」でなく、「何が起こっていて、どう周りが動いているか」を知りたいなので。

と、いう事で自分で使いたい機能をスマホで実現するを目標に、５０過ぎで初めてAndroidというか、Javaプログラムを書いてみます。

# 目標
昔あった、[RMaps 0.9.4](https://robertdeveloper.blogspot.jp/2009/08/rmaps.html)をリコンパイルして、今のスマホで動かす事。
ソースしかないので、環境とかの勉強が大変ですが目標は大きく行きます。

# とりあえず
ここで書く内容は個人的な経験とメモなので参考にならないでしょうが備忘録として書けるだけ書いてみます。
普段文章はマニュアルくらいしか書いていないので読み辛いと思います。
node.jsとECMAの変遷とフレームワークのメモ

# はじめに

完全に個人的なメモです。
概要は覚えてるんだけど、細かいところ（あれ何年だけ？とか）忘れるので。

# Node.jsの変遷

- 2009年03　Node.js誕生
 - API仕様がころころ変化
  - つか、モジュール名すら変化　
 - 初期だし、そんなもんだろうと。

- 2012年～
 - 初期型が定まった感じ？
 - 個人的には、2011～2014年あたりのnode.jsの記事に出会うことが多い気がする。

- 2014年　　Node.jsプロジェクト分裂。⇒ io.js プロジェクト誕生
- 2015年01　io.js のv1リリース
 - ここからしばらく、Node.js と io.jsが両立状態（主にio.jsが進化）
- 2015年09　Node.jsのv4リリース。⇒io.jsとNode.jsプロジェクト統合
- **2016年**04　Node.jsのv6リリース。

Node.js v4は2017年度末までサポート。
**Node.js v6**は2018年度末までサポート。
⇒LTS（＝Long Term Support）版。リリースから2年間サポート。

※最新版は v7 だが、これのサポートは短い。
　次のLTSはv8の見込み。


Node.jsの情報をWebで探すなら、「2016年以降」でフィルタリングするのお勧め。**現行のNode.js v4 / v6 で動くコードサンプルとの遭遇率アップ**で幸せ。
（「2015年9月～」でも「2016年4月～」でも構わないけど）


# ECMAScript

JavaScriptの標準規格
「ES」と略されること多数。ES6⇒ECMAScript v6 を意図。

- 1997年06　ES1 策定
- 　・・・（中略）・・・
- 2009年12　ES5 策定
 - 当時のメジャーなブラウザはほぼすべて対応。
 - IE10やIE9も、コレならサポート済み。
        - IE7-8は、ES3までのサポート。
        - （ES4？あぁ、生まれる前に殺された子ですね。←）
 - これで書いておけば、たいていの**ブラウザ互換は大丈夫**。
- 2015年06　ES6 策定
 - ES2015や、**ECMA2015**などとも呼称される。
 - IE11【以外】のメジャーなブラウザはほぼすべて対応済み。
  - Edge13～、FireFox45～、Chrome50～が対応済み。（たぶん、もう少し前のバージョンから）
  - Node.js は v6～でほぼ対応済み。



# Node.jsのフレームワーク

※完全に個人的嗜好／メモでの列挙。

## Express
- MVCフレームワーク
	- MVC＝Model View Controller
	- ユーザーへの表示（View）と、ユーザーからのInput（Controller）と、それに対する応答（Mode）を分けて考えよう、ってヤツ。
- UI込みでクライアント側とサーバー側を設計する際に便利なフレームワーク（らしい）。

## Electron
- クロスプラットフォーム（Windows、Mac（OS X）、Linux等）なデスクトップアプリケーションを作れるフレームワーク。
- Node.jsとChroniumの組わせでデスクトップアプリ動作を実現。
	- Webブラウザベースで動作するローカルなアプリ、というイメージか？
- 「**Visual Studio Code**」や「Atom」も、これで実装されている。

## Mocha
- UnitTest用テストフレームワーク。
	- シンプルで使いやすい。前提知識なしでもとっつきやすい。
- 非同期テストももちろん対応。
	- Promiseオブジェクト使うときは、「done()呼び出し」ではなく「Promiseオブジェクトを返却」なので、要注意。
- Assertライブラリは好きなのを選べる。

## Chai
- Assertライブラリ。
	- Mochaと組み合わせて使っていて、とりあえず不満はない。
	- 構文も分りやすいと思う。


# 参考にしたサイト様

[どうしてこうなった？ Node.jsとio.jsの分裂と統合の行方。]
https://speakerdeck.com/yosuke_furukawa/dousitekounatuta-node-dot-jstoio-dot-jsfalsefen-lie-totong-he-falsexing-fang-korekaradoujin-hua-siteikufalseka

[Node.js 6.0 リリースを機にLTSについて整理してみた]
http://backport.net/blog/2016/05/03/node_js_lts/

[ECMAScript 2015のブラウザ対応状況と実践投入に向けて]
https://html5experts.jp/1000ch/16995/

[Electron 1_0でデスクトップアプリ開発超入門]
http://www.atmarkit.co.jp/ait/articles/1605/18/news017.html
Hololensエミュレータの「DEP6100 エラー」の解消法

#Hololensエミュレータ環境構築
基本的には以下のリンクを参考にセットアップしていきます。
http://tech.guitarrapc.com/entry/2016/04/11/070745
ツールのダウンロード最新版はこちらから。上記記事からバージョンが更新されていますが、手順は同じです。
Unityのバージョンが上がってhololensβでなくなっているので、古い参考サイトを見るとレイアウトが変わっていることに注意。
https://developer.microsoft.com/ja-jp/windows/holographic/install_the_tools
 - Visual Studio 2015 Update 3
 - HoloLens Emulator (build 10.0.14393.0)
 - Unity 5.5
 - Vuforia
なお、このページの作成時のバージョンは↑です。

#動作環境
参考に自分の動作環境を記載しておきます。
 - マザボ : GIGABITE GA-Z170X-UD3
 - CPU : intel core i7 6700k
 - GPU : ASUS NVIDIA GEFORCE GTX970
 - メモリ : RAM:Crucial DDR4-2133 8GB x 4

#DEP6100がリンク先の方法で解消されない
上記リンクの
http://tech.guitarrapc.com/entry/2016/04/11/070745#DEP6100-エラー
をいくら試してもエラーが解消されない場合、結論から言うと自分の場合以下の方法で動作するようになりました。

Hyper-Vマネージャー > 操作 > Hyper-Vの設定 > 物理GPU > 「このGPUをRemoteFXで使用する(U)」のチェックを外す
で動作するようになりました。
参考：https://forums.hololens.com/discussion/2583/error-running-the-windows-hololens-emulator

以下、ここに行き着くまでのチェック項目。

#Hyper-Vマネージャーからhololensエミュレータが起動しない
一度VisualStudioからhololensエミュレータを起動しようとするとHyper-Vマネージャーに仮想マシンが追加されます。
![Hyper-V仮想マシンhololens.PNG](https://qiita-image-store.s3.amazonaws.com/0/157437/c35bb381-514a-528d-4f8e-a6f3e305d367.png)

この仮想マシンを「右クリック > 起動」すると、上記のチェックボックスが問題の場合32788エラーが表示されて起動できません。
この段階で、VisualStudioから起動する際にエラーが発生しているのではなく、エミュレータそのものか仮想マシンの設定に問題があるのではないかとわかります。
その際、エミュレータは何度か再インストールしているので、設定に当たりをつけてみていきます。

##仮想マシンの設定
32788エラーでググるとこんな記事が、
http://sakuragi1987.blogspot.jp/2016/11/hyper-v-error-32788.html
仮想マシンを右クリックし設定を確認します。
上記リンクの通り

イベントビューアー > アプリケーションとサービスログ > Microsoft > Windows > Hyper-V-VMMS > Admin
に「必要な GPU リソースにアクセスできませんでした。このサーバーを RemoteFX ホストとして実行するには GPU が必要です。GPU が正しくインストールされていることを確認してください。」なるエラーが。
なので、「RemoteFx 3D ビデオ アダプター」を仮想マシンの設定から削除し、「右クリック > 起動」すると無事起動！

その後、VisualStudioがら実行して動。。。。。かないっ！

もう一度仮想マシンの設定を確認すると「RemoteFx 3D ビデオ アダプター」の設定が復活している。どうやらVisualStudio経由で実行するときに設定を再構築してしまうらしい。
とはいえ、ここまでわかったのでRemoteFxやHyper-Vというキーワードで検索すれば上記のチェックボックスを外すページがhitし、無事解決。

エミュレータを起動するだけでほぼ丸一日かかったがこれでなんとかエミュレータが使えるようになった。
チュートリアルは最初に101Eのチュートリアルを熟読することをおすすめする。Unity初めてだったけど特に問題なく読み終えたし、コードも難しくなかったので調べながら色々追記して試すことができた。
早く実機がほしいなー。
TTS（text-to-speech）の比較（AWS Polly、Azure Bing Speech API）、macOS sayコマンド

興味関心のままにTTSを比較してみました。

AWS Polly
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Amazon AWSのPollyを使ったTTS（Text-to-Speech）のサンプル <a href="https://t.co/KmL5Gitk48">https://t.co/KmL5Gitk48</a></p>&mdash; 波乗野郎 (@shojiueda) <a href="https://twitter.com/shojiueda/status/814697870976684032">December 30, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

Azure Bing Speech API
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">そしてこちらがAzure TTS <a href="https://t.co/POpzZhz7gW">https://t.co/POpzZhz7gW</a></p>&mdash; 波乗野郎 (@shojiueda) <a href="https://twitter.com/shojiueda/status/814698140649463808">December 30, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

macOS 10.12 say command
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">macOS 10.12のsayコマンド <a href="https://t.co/scpWv7vQD6">https://t.co/scpWv7vQD6</a></p>&mdash; 波乗野郎 (@shojiueda) <a href="https://twitter.com/shojiueda/status/814698242222850048">December 30, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

Polly >> say >> Azure のように感じました。


HOYAの[VoiceText](http://voicetext.jp/)を掲載しようと思いましたが、2次利用禁止でした。
同じテキストを再生させたところ、Pollyなみの品質でした。
C++で書いたクラスをemscriptenを経由してVue.jsで利用する

この記事は @janus_wel さんの [emscripten でドメイン層に型と速度を持ち込む](http://qiita.com/janus_wel/items/f039c91576358bb69626) に~~触発された~~ロマンを感じた筆者が、C++で書かれたクラスをemscriptenを通してVue.jsにバインドしてみた記事です。「なぜそもそもそんなこと面倒なことを？」と思われた方がいたら、元記事の「コンセプト」や「経緯」の部分を読んでもらえればと思います。「要するにロマンです」です。


## 概要

リポジトリ: [edwardkenfox/vue-emscripten-todo](https://github.com/edwardkenfox/vue-emscripten-todo)
デモ: [vue-emscripten-todo](https://edwardkenfox.github.io/vue-emscripten-todo/public/)


-   TodoクラスはC++で実装
    -   最近趣味でC++触り始めていたので自分で書いても良かったんですが、Todo.cppやビルド用のスクリプトは元の実装を拝借しました
-   AppコンポーネントおよびTodoコンポーネントをVueで実装
    - Appコンポーネント（コンテナ）は複数のTodoコンポーネントを持つ   
    -  Todoコンポーネント（Vue）はTodoクラス（C++だったやつ）のインスタンスを持ち、Todoのドメイン知識はTodoクラスのインスタンスが管理する

ややこしいですね。でもロマンがあるからいいんです。

## 課題

TodoオブジェクトをVue.jsから利用する際に、Todoクラスが持ってるプロパティがリアクティブにならない（！）

-   emscriptenを通して出力されたTodo.jsファイルの中身を見ていないのでなんとも言えないですが、[Change Detection Caveats](https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats) に書かれている内容に該当するんじゃないかと推測
-   `this.$set(todo, 'isDone', Boolean)`もうまくいかず



## まとめ

-   C++で書いたクラスのプロパティがリアクティブにならない点は要調査
    -   これが出来ないとそもとも全く使いものにならないｗ
-   emscriptenやWebAssemblyなどの技術は、ブラウザゲームや3Dレンダリングが主な目的として利用されるだろうと想定していましたが、こういう感じでカジュアルに取り込むことができるなら、Webアプリケーションが利用することも出来なくはない、という印象でした
    -   とはいえ、1KBのcppファイルが500KBのjsファイルになる時点で全然カジュアルではない

    ​
three.jsで自家製rokloader

#概要

three.jsでrokファイルをパースして見た。

#写真

![rok.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/7afd564a-2e2b-8a37-8f1f-c17b04fcc18b.jpeg)

#環境

three.js　r83

#成果物

http://jsdo.it/ohisama1/Otc3
Mac OS向けのアプリで新規windowを段々に表示する

#windowを段々に表示する
#手順
1. windowController classを作る
2. 実装

#手順1 windowController classを作る
File>New>File...
と選び表示されたものからCocoa Classを選ぶ

<img width="717" alt="スクリーンショット 2016-12-30 13.12.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/96484/68664cd5-4bc5-1dde-a179-975e9fe27fe3.png">

Class名を入力し
Subclass of をNSWindowControllerにする
<img width="540" alt="スクリーンショット 2016-12-30 13.12.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/96484/e87e78c3-52a4-53e4-63b8-e85c15a712ff.png">

#手順2 実装

##2.1 storyboardとの対応付け
storyboardの Window Controller Scene から Windows Controllerを選ぶ
そして右側のメニュから Show the Identity inspector のCustom Classを手順１で作成したclassにする
<img width="1011" alt="スクリーンショット 2016-12-30 13.16.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/96484/7a0ebb37-19fd-6550-9891-9c6a4b92f1e0.png">

##2.2 プログラムのの実装
手順１の作成したclassに下記のプログラムを入力する

```swift
required init?(coder: NSCoder) {
        super.init(coder: coder)
        shouldCascadeWindows = true
}
```

#表示結果
新規windowを作成してみると段々に新規windowが表示されていることがわかりますね
<img width="841" alt="スクリーンショット 2016-12-30 13.21.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/96484/8e83221a-a585-b13f-74f1-af8751b46d76.png">
SwiftのEnumをif文で比較できない（Associated Value）

## 事象
とあるenumの値をif文で比較しようとしたら怒られました。

```swift
import Foundation

enum LoginProvider {
    case facebook
    case email(String, String)
    case google
    case twitter
}

let provider = LoginProvider.email("bob@bob.com", "pass")

if provider == .facebook {
    print("facebook")
}
```
<img width="531" alt="Screen Shot 2016-12-30 at 12.35.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/2569/5cc3dc96-7b57-6896-86f1-f19d1853f72a.png">
'=='は使えませんと。
使えませんと言われましても、、としばらく悩んでしまった。

## 原因
`email(String, String)`がEnumのAssociated Valueというもので、これが含まれていると`==`オペレーターは使えずコンパイルエラーになってしまいます。

## 解決策
これに対応するには素直に`switch`文で書くか、if文で書きたければ`if-case`パターンマッチが使えます。

```swift
import Foundation

enum LoginProvider {
    case facebook
    case email(String, String)
    case google
    case twitter
}

let provider = LoginProvider.email("bob@bob.com", "pass")

// 単純な比較はコンパイルエラーになる❌
// Binary operator '==' cannot be applied to operands of type 'LoginProvider' and '_'
if provider == .facebook {
    print("facebook")
}

// switch文で書くのが無難⭕️
switch provider {
case .facebook: break
case .email: break
case .google: break
case .twitter: break
}

// とはいえ単一の比較とかならif文で書きたいことも
// if文で書くならパターンマッチを使う⭕️
if case .facebook = provider {
    print("facebook")
} else if case .email = provider {
    print("email")
}
```

## 所感
エラーメッセージが`==`使えませんだけなので、知らないと結構悩みそうだなぁと思いました。仕様的に使えないのはわかりましたけど、何で使えないのかまではまだ分かってないです。使えても良さそうな気がするんですけどね。

## 参考
EnumのAssociated Valueについてはこちらが参考になりました。
https://realm.io/jp/news/david-east-simplifying-login-swift-enums/
サンプルもこちらから拝借しています。

http://stackoverflow.com/questions/31548855/how-to-compare-enum-with-associated-values-by-ignoring-its-associated-value-in-s
SSH 等コマンドライン使える MySQL のデータベースをでよく使うコマンドメモ


# ユーザーを作成して、データベース作成、そのユーザーに権限を与える

```
mysql -h [MySQLサーバーアドレス] -u [MySQL管理者ユーザー名] -p
CREATE USER 'concrete5'@'127.0.0.1' IDENTIFIED BY 'パスワード';
CREATE USER 'concrete5'@'localhost' IDENTIFIED BY 'パスワード';
CREATE DATABASE [データベース名] DEFAULT CHARACTER SET=utf8;
GRANT ALL PRIVILEGES ON [データベース名].* TO 'concrete5'@'127.0.0.1' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON [データベース名].* TO 'concrete5'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

```

# 既存のデータベースを空白にする

データベースを削除して、同じ名前で作って、同じユーザーに権限を与える

```.bash
mysql -h [MySQLサーバーアドレス] -u [MySQL管理者ユーザー名] -p
DROP DATABASE [データベース名];
CREATE DATABASE [データベース名] DEFAULT CHARACTER SET=utf8;
GRANT ALL ON [データベース名].* to [追加で権限を与えたいMySQLユーザー名];
FLUSH PRIVILEGES;
```

例

```.bash
mysql -h 127.0.0.1 -u root -p
DROP DATABASE concrete5db;
CREATE DATABASE concrete5db DEFAULT CHARACTER SET=utf8;
GRANT ALL ON concrete5db.* to concrete5user;
FLUSH PRIVILEGES;
```


mysqldump コマンドを使ってテーブル名を取得してそのままテーブルを削除するコマンドに渡す

```.bash
mysqldump  -h [[MySQLサーバーアドレス] -u [MySQL管理者ユーザー名] -p --add-drop-table --no-data [データベース名] | grep ^DROP | mysql -u [MySQL管理者ユーザー名] -p  -h [MySQLサーバーアドレス] [データベース名]
```

例

```.bash
mysqldump -u root -p  -h localhost --add-drop-table --no-data concrete5db | grep ^DROP | mysql -u root -p  -h localhost concrete5db
```


# 既存のデータベースをコピーする

複製先のデータベースを新規作成して、mysqldump と mysql コマンドを使ってデータを複製

```.bash
mysql -h [MySQLサーバーアドレス] -u [MySQL管理者ユーザー名] -p
CREATE DATABASE [複製先データベース名] DEFAULT CHARACTER SET=utf8;
GRANT ALL ON [複製先データベース名].* to [追加で権限を与えたいMySQLユーザー名];
FLUSH PRIVILEGES;
exit;
mysqldump -h [MySQLサーバーアドレス] -u [MySQL管理者ユーザー名] -p [複製元データベース名] | mysql -h 127.0.0.1 -u [MySQL管理者ユーザー名] -p [複製先データベース名]
```

例

```.bash
mysql -h 127.0.0.1 -u root -p
CREATE DATABASE concrete5duplicate DEFAULT CHARACTER SET=utf8;
GRANT ALL ON concrete5duplicate.* to cocnrete5user;
FLUSH PRIVILEGES;
exit;
mysqldump -h 127.0.0.1 -u root concrete5original | mysql -h 127.0.0.1 -u root concrete5duplicate
```

# 宣伝 & クレジット

この記事が役に立ったら、「 **CMS は [concrete5](https://concrete5-japan.org/) が一番**」と頭の中で10回唱えてください。
文字列操作　Javaの問題をTypeScriptにしてみる　　9-3

次のプログラムの実行結果を選びなさい

```java:java.java
public class Main{
 public static void main(String[] args){
  String str = "abcde";
  System.out.println(str.charAt(5));
 }
}
```

A.dが表示された
B.eが表示された
C.何も表示されない
D.null が表示される
E.コンパイルエラーが発生する
F.実行時に例外がスローされる


答えはFです。

str.charAt(5)は引数に整数を取り、引数をインデックスとしてその場所にある文字を返すというものです。
文字列strには5文字しかないため、インデックスは0から4が振られ５番目がないためスロー(実行時エラー)されています。
文法上に問題はないため、コンパイルエラーは起きずにスローがされるので、答えはFになります。

これをTypeScriptでやると


```ts:TypeScript.ts
   var str:string = "abcde";
   console.log(str.charAt(5));
```

このように書きます。

スローは実行時エラーのため、TypeScriptのコンパイルは問題なく通ります。
また、jsはこの場合ではエラーを出さないため、空白が表示されます。
VirtualBoxにmacOS Sierraの仮想マシンをつくってみた

# ぼくのやりたいこと
macOS用の自動プロビジョニングをテストするために仮想のmac環境がほしいなーと思ったのです。

# ぼくがやったこと
[こちら](http://mk.hatenablog.com/entry/2016/09/24/082145)の `まさたか日記さん`の記事 が神でした。


あらかじめAppStoreからmacOS SierraのインストールAppをダウンロードしておいてください。

ダウンロード時期によってインストールAppの名前が違うみたいなので `Install OS X Sierra.app` => `Install macOS Sierra.app/` と読み替えましょう。


```bash
$ hdiutil attach "/Applications/Install macOS Sierra.app/Contents/SharedSupport/InstallESD.dmg" -noverify -nobrowse -mountpoint /Volumes/esd
$ hdiutil create -o Sierra.cdr -size 7316m -layout SPUD -fs HFS+J
$ hdiutil attach Sierra.cdr.dmg -noverify -nobrowse -mountpoint /Volumes/iso
$ asr restore -source /Volumes/esd/BaseSystem.dmg -target /Volumes/iso -noprompt -noverify -erase
$ rm /Volumes/OS\ X\ Base\ System/System/Installation/Packages
$ cp -rp /Volumes/esd/Packages /Volumes/OS\ X\ Base\ System/System/Installation
$ cp -rp /Volumes/esd/BaseSystem.chunklist /Volumes/OS\ X\ Base\ System/
$ cp -rp /Volumes/esd/BaseSystem.dmg /Volumes/OS\ X\ Base\ System/
$ hdiutil detach /Volumes/esd
$ hdiutil detach /Volumes/OS\ X\ Base\ System
$ hdiutil convert Sierra.cdr.dmg -format UDTO -o Sierra.iso
$ mv Sierra.iso.cdr Sierra.iso 
$ rm Sierra.cdr.dmg
```

# ぼくがはまったところ
上述したコードの一番最初、 

```bash
$ hdiutil attach "/Applications/Install macOS Sierra.app/Contents/SharedSupport/InstallESD.dmg" -noverify -nobrowse -mountpoint /Volumes/esd
```
 でハマっちゃう人が結構多いみたい。 `Resource Busy` とか出ちゃう。なので 

```bash
$ cp -a "/Applications/Install macOS Sierra.app/Contents/SharedSupport/InstallESD.dmg" .
```

 で `InstallESD.dmg` を退避させてみる。ぼくはこれでいけた。

あとなんかよくわからないけど、スクリプトを一箇所順番が前後して実行してしまったら色々とエラーが出ちゃったので、もう一回最初からやったらいけた。まあいっか。

# ぼくがつくったISOをVirtualBoxにのせる
VirtualBoxを起動したら新規追加から `Mac OS X(64bit)` を選択して、メモリとかストレージとか値は適当に(デフォルトでいいと思う)決めて進んでみる。

起動すると初回に使用するイメージファイルを聞かれるので、先ほど作った `Sierra.iso` を選択してGO。

# すきなようにあそぶ
さあここからは秀麗なUXがぼくらをmacOSの世界へ連れて行ってくれるね！！！

**追記(20161230)**
(まさたか日記さんにも書いてありますが、インストールディスクの選択のところはちょっとぼくらを悩ませます。まさたか日記さんを参考にしてください。)
**追記終わり**

# さんこうしりょう

- [仮想環境で macOS Sierra を導入(isoイメージ作成)]
(http://qiita.com/sho7650/items/c24aa487938ac177de01)

- [仮想Sierra環境を作る(まさたか日記)](http://mk.hatenablog.com/entry/2016/09/24/082145)

- [How to create a macOS Sierra iso installer successfully?](http://apple.stackexchange.com/questions/258392/how-to-create-a-macos-sierra-iso-installer-successfully)

- [Download MacOS Sierra.DMG – Installer.ISO – without Apple store
By kecodoc1377 23](http://macdrug.com/download-macos-sierra-dmg-installer-iso-without-apple-store/)

この最後の記事には、ISOファイルをどこからかダウンロードしちゃうっていう方法が紹介されている。それもよしですね。
【iPhone】LINEがダウンロードできない

LINEは日常生活のコミュニケーションツールとして、我々の社交生活に大きな役割を果たしています。
しかし、機種変更、最新版にアップデートするとき、App Storeアイコンが見当たらない、LINEアプリが検索できない、または、他のエラーでLINEがうまくダウンロードできなくなったら、どうしたらよいのでしょうか？

ここで、iPhoneでLINEがダウンロードできない原因別の対処法をご紹介します。ぜひご参考ください。

Part 1：iPhone版のラインがダウンロードできない

１、「Appをダウンロードできません。“LINE”は現在ダウンロードできません」というエラーが発生した場合

iPhone版のLINEの最新版が公開されてから、多くのユーザーは一斉にアップデートしているようです。その時には、「LINEはダウンロードできない」という不具合報告は続々出てきます。その場合、以下のいくつかの対処法を試してみてください：
➀、再試行ボタンを繰り返しタップする；
➁、しばらく待って再試行する；
➂、iPhoneを再起動する；
➃、LINEを再インストールする。

２、「ダウンロードできません。“LINE”をダウンロードするのに十分な空き領域がありません。ストレージは“設定”で管理できます。」というメッセージが出て、LINEがダウンロードできない場合

App Storeにアクセスして、LINEをダウンロードしようとすると、「ダウンロードできません…」というエラーが表示され、LINEがダウンロードできなくなるユーザーが多いですね。それは手元のiPhone本体の空き容量が足りないからです。その場合は、iPhoneの空き容量を増やすなら、問題を解決できると思います。

ステップ1：　設定　＞　一般　＞　ストレージとiCloudの使用状況と進み、iPhoneの空き容量を確認します。
ステップ2：　もし空き容量が少なくなったら、iPhone上の不要なデータ（写真・動画・メッセージなど）を削除してください。

３、App Storeアイコンが見当たらなくてダウンロードできない場合

App Storeアイコンがホーム画面のどこにも見当たらなくなって、LINEがダウンロードできないこともあります。それは機能制限が有効になっている、また、アプリを非表示になっているからです。そこで今回は、問題を解決するため2つの対策をご紹介します。

➀、機能制限でインストールをオンにする；
➁、iPhoneを再起動する。

４、ダウンロード途中で止まってLINEがダウンロードできない
通信状況などの原因で、LINEがダウンロードできないケースもあります。その場合、以下の方法を試してみてください。

➀、Wi−Fiをオフにしてオンにする；
➁、機内モードをオンにしてオフにする；
➂、モバイル通信でダウンロードする；
➃、マルチタスクから全てのアプリを終了させる；
➄、LINEを一度削除する；
➅、一旦サインアウトする。

５、App Store内で検索できなく、LINEがダウンロードできない
App Store内で検索をかけても画面が真っ白になっていたまま先に進まなく、LINEがダウンロードできないケースもあります。その場合、iTunesでLINEをダウンロードしてください：

iTunesアプリを開く　＞　App Storeに入る　＞　検索欄でLINEを入力　＞　LINEのダウンロード画面が表示される　＞　「入手」ボタンをクリックして、LINEをダウンロードします。

以上はiPhoneでLINEがダウンロード出来ない時の対処法です。もし、AndroidでLINEがうまくダウンロードできないなら、次のリンク先の記事を読んでください。

https://www.imobie.jp/support/line-can-not-download.htm

この文章はhttps://www.imobie.jp/support/line-can-not-download.htmより引用