OmniAICreator/Qiita-1.07M huggingface dataset:
PHPを始めたばかりの人が学ぶべき幾つかのこと


最近はProgateとかドットインストールを使って、
簡単にPHPの基礎を学ぶ事が出来ます。

PHPを使って Database システムを構築するのは簡単ですが、
PHPを初めて間もないうちはついつい可読性の低いコードを量産してしまいがちです。

コードに書き慣れてきたタイミングでおそらく読めないコードを量産するようになってくるので、
PHP初学者向けのスキルアップポイントを幾つかまとめてみました。

テンプレートエンジン使いましょうは言わないお約束。

## テンプレートを綺麗に書くためのコツ

### まずはPHPタグの開閉を

なんでもechoで書くと辛いだけです。とりあえずHTMLを書くときはコードを閉じてみましょう。

変数使う時だけまたPHP始めればいいです。`.`を使った文字列の連結とかでHTML組み立てたりするのは凄く読みづらいので極力避けましょう

**読みにくい**

````
<?php
	//なんかのややこしい処理
	echo "<input type='text' name='name' value='".$_POST['name']."'>";
	//なんかのややこしい処理
?>
````

**まだまし**

````
<?php
	//なんかのややこしい処理
?>
<input type='text' name='name' value='<?php echo $_POST["name"] ?>'>
<?php
	//なんかのややこしい処理
?>
````


### ショートタグを覚えよう

画面に文字を表示するのは`echo` だけではないです。

`<?=$hoge?>`という記法が使えます。 `<?php echo $hoge ?>` よりすっきりしていますね。

考古学系のシステムを専門で扱う現場などでは、`<?=$hoge?>` の記法を禁止している場合があったりします。
イマドキのシステムを扱う会社に就職しましょう。


**読みにくい**

````
<input type='text' name='name' value='<?php echo $_POST["name"] ?>'>
````

**まだまし**

````
<input type='text' name='name' value='<?= $_POST["name"] ?>'>
````

### 制御構造を見やすく

PHPにはテンプレート記述用のif文やwhile文の構造が幾つか用意されています。

http://php.net/manual/ja/control-structures.alternative-syntax.php

````
<?php if ($name): ?>
<p> <?=$name?> </p>
<?php else: ?>
<p> 名前がセットされていません！ </p>
<?php endif;?>
````

通常の`{}`を用いた記述を使うと,以下のようなコード内の謎の`<?php } ?>`が散らばりがちで可読性が悪いです。

````
	<?php
		}
	?>
````

### HTML書く部分と、そうじゃない部分をしっかり分けましょう

HTMLの中でPHPの処理を書くととても読みづらくなります。

HTMLを書く始める前に画面の中で必要な変数をしっかり用意してあげましょう。

**読みにくい**

````
<html>
	<head>....</head>
	<body>
	
	<?php
		//データベースからデータ取ってきて…とか 
		$pdo = new PDO.....
		
		while($stmt->fetch()){
	?>
	
	
	<?php
		}
	?>
	

</html>
````

**まだまし**

````
<?php
	//データベースからデータ取ってきて…とか 
	$pdo = new PDO.....
	$result = []; //表示用の配列を先に用意
	while($stmt->fetch()){
		$result[] = [
			...
		]
	}
?>
<html>
	<head>....</head>
	<body>
		<?php foreach($row as $result):?>
			<!-- データを表示... -->
		<?php endforeach; ?>
</html>
````
CloudPebbleでCannot read property 'addEvent' of undefinedが出てしまう

# 概要
- CloudPebbleでwatchfaceを開発しようと思った時にEmulatorを起動しようとしても`Cannot read property 'addEvent' of undefined`が出てしまう時の対処法

# 手法
- 端的に解決策から
- Mozilla firefoxから起動する :smile: 

# 解決まで
- 私はvivaldiをブラウザとして使っておりました
-　https://www.reddit.com/r/pebbledevelopers/comments/2yr5wh/cloudpebble_emulator_boot_failed/
- エラーを探っている時に上記のサイトを見つけてブラウザをChromeにしたら動いたよ！という書き込みを見つけて試してみましたが、chromiumベースのvivaldiがだめでchromeが動くわけもなく...そこでfirefoxでやってみたところ起動しました :beer:
VirtualBoxでOpenClinica

**資料は下記**

[openclinica.com](https://docs.openclinica.com/3.1/installation/openclinica-vm-image)

#VMイメージのダウンロード
上記リンク内上部の
***Download OpenClinica Appliance (Virtual Machine)***
からダウンロード

#インポート
1. VirtualBoxのメニューバーから解凍したイメージファイルをインポート
2. ネットーワークの設定を行う（ブリッジ,NAT,ホストオンリーアダプター）

#起動
起動時にidとpasswordを入力する
id:root
pass:clinica

#openclinicaにログイン
http://{IPアドレス}:8080/OpenClinica

```
root
12345678
```

#tips
>webappsディレクトリは
>/usr/share/tomcat
>にある

>再起動
/etc/init.d/tomcat restart
めざせNode.jsライブラリマスター （12）webshot

#【ライブラリ説明】
　Webサイトのスクリーンショットが撮れる

#【プログラム】
```js:webshot.js
var webshot = require('webshot');

webshot('google.com', 'google.png', function(err) {
  // screenshot now saved to google.png
});
```

#【結果】
<img width="512" alt="google.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/1ca8cc70-a79e-693e-fc70-5bf9b8784ddd.png">

#【参考サイト】
　[github](https://github.com/brenden/node-webshot)
bashの設定ファイル（.bash_profile, .bashrc等）がどんなときに読み込まれるかまとめ

## 早見表

| 場合 | /etc/profile | ~/.bash_profile | ~/.bashrc | 備考 |
|:-:|:-:|:-:|:-:|:-:|
| 物理的な黒い画面からログイン  | o |  o | o  | 仮想コンソール（/dev/tty1）のこと|
| sshでログイン  | o | o  |  o ||
| ssh ホスト名 ls  |  x  | x |  o | bashはsshdから起動されたことを検出し、.bashrcを読み込む。ただし対話的シェルではないのでPS1はセットされない。 |
| screenで新しいウィンドウ  | x | x  |  o | |
| bash | x |  x |  o | |
| bash -i  | x |  x |  o | |
| bash --login  | o |  o |  o | |
| bash --norc  | x |   x |  x | |
| bash -c ls  | x |  x |  x | |
| sudo -i  | o |  o |  o | |
| sudo ls  | x |  x |  x | |
| su -  | o |  o |  o | |
| su   | x |  o |  x | |
| vimの中で:!ls  |x |   x |  x | |
| set shellcmdflag=--login\ -c  | o | o  |  o | ※vimでこの設定をして:!lsした場合。|
| BASH_ENV='path_to_bash_profile'  | x |  o | o  | |
| #!/bin/bashつきスクリプト  | x |  x | x  | ./hoge.shで起動した場合|
| cronジョブ  | x | x  |  x | |

下図は[Shell startup scripts](https://blog.flowblok.id.au/2013-02/shell-startup-scripts.html)より
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79394/f4e0dd22-a82c-6aeb-8057-7293821bb5bf.png)

## 通常の対話ログインシェルの場合

(1) /etc/profileを読み込む。
(2) ~/.bash_profile, ~/.bash_login, ~/.profileの順で見つかったもの１つだけ読み込む。
   通常は~/.bash_profileの中で~/.bashrcを読みこむように設定されている（この設定がなければ~/.bashrcは読み込まれない）。

## 非対話的に1個のコマンド行だけを実行する場合（cron、vimの:!ls、ssh ホスト名 lsなど）

基本的に/etc/profile、~/.bash_profile、~/.bashrcのいずれも読み込まない。
ただし環境変数BASH_ENVがセットされている場合はそのファイルを読み込む。
aliasは展開されない。展開させたい場合は`shopt -s expand_aliases`としておく。


## ログインシェルの定義

詳しくは`man bash`の`INVOCATION`のところに書いてある。

> A login shell is one whose first character of argument zero is a -, or one started with the --login option.
> ログインシェルとは、引数0（argv[0]）の1文字目が「-」である場合、または--loginつきで起動された場合をいう。

ログインシェルか判定するには：
    `shopt | grep login_shell`の出力を見るか、または`shopt -q login_shell`の戻り値を調べる。

ログインシェルの場合：

```
$ shopt | grep login_shell
login_shell     on
```

ログインシェルでない場合：

```
$ shopt | grep login_shell
login_shell     off
```

## 対話的シェルの定義

> An  interactive  shell  is one started without non-option arguments and without the -c option whose standard input and error are both connected to
> terminals (as determined by isatty(3)), or one started with the -i option.
> 対話的シェルとは、オプションでない引数（例：`bash hoge.sh`）がなく、-cもなく、標準入力と標準エラー出力が端末に接続されている場合か、または-iつきで起動された場合をいう。

対話的シェルか判定するには：
    `$PS1が`セットされているか、または`$-`に`i`が含まれているかを調べる。

対話的シェルの場合：

```
$ echo $-
himBH
```

対話的シェルでない場合：

```
$ bash -c 'echo $-'
hBc
```

## 確認方法
実際に何が読み込まれるかを確認するには /etc/profile, ~/.profile, ~/.bash_profile, ~/.bashrc の**先頭**に

```
echo "~/.bashrc loaded"
```

のように`echo`を仕込んでおくとよい。


## おまけ：zshの場合

下記でzshログインシェルの場合に読み込まれるファイルが表示される。

```
$ zsh --sourcetrace -lis <<<exit
```

任意の場所で `setopt source_trace` を実行してもトレース有効化できる。
React-FlexBox-Gridの使い方


[React-FlexBox-Grid](http://roylee0704.github.io/react-flexbox-grid/)は[flexgrid.css](http://flexboxgrid.com/)用のdivを生成するreact componentです。

[CSS Modules](https://github.com/css-modules/css-modules)という実装方法を取っています。
webpackを使う場合、[css-loader](https://github.com/webpack/css-loader)を一緒に使う必要があります。

# Component

次の三つのコンポーネントがあります

- Grid
- Row
- Col

使い方はbootstrap3と大体同じです。実装に[CSS flexible box](https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Flexible_Box_Layout/Using_CSS_flexible_boxes)を使っています。

1. Gridの中にRowを置きます。
2. Rowの中にColを置きます。
3. Colに`xs={6}`のように、幅を設定します。

# 例
```js:index.jsx
const React = require('react')
const ReactDOM = require('react-dom')
const {Grid, Row, Col} = require('react-flexbox-grid');

const App = () =>
    <Grid>
      <Row>
        <Col xs={6} md={3}>Hello, world!</Col>
      </Row>
    </Grid>

ReactDOM.render(<App />, document.querySelector('#container'))
```

```html:index.html
<!DOCTYPE html>
<html>
  <body>
    <div id="container"></div>
    <script src="bundle.js"></script>
  </body>
</html>
```

# 手順

## 準備

`package.json`を作ります。

```
npm init -y
```

必要なnpmモジュールをインストールします。

```
npm i -D webpack babel-loader babel-core babel-plugin-transform-react-jsx style-loader css-loader react react-dom react-flexbox-grid babel-polyfill classnames flexboxgrid
```

webpackの設定ファイルを作ります。

```js:webpack.config.js
module.exports = {
  entry: './index.jsx',
  output: {
    filename: 'bundle.js'
  },
  module: {
    loaders: [{
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: 'babel',
      query: {
        plugins: ["transform-react-jsx"]
      }
    }, {
      test: /\.css$/,
      loader: "style!css?modules"
    }]
  }
}
```

## ビルド

```
node_modules/webpack/bin/webpack.js
```

## 実行

`index.html`を開くと次のようなDOMが生成されます。

```html
<div id="container">
    <div data-reactroot="" class="R2zU9JsZW1r2id-qp7H3S">
        <div class="_1y_mg6OlZKhq9LGfUCMUme">
            <div class="_1DhV6KBVDhq0C7-sV3-jzc _3ANRSKqa19Npv87KFXEafn">Hello, world!</div>
        </div>
    </div>
</div>
```

classに`謎の文字列`が指定されています。

```html
<style type="text/css">
    ._2lUES1qfK73keSn9S_BiQT,
    .R2zU9JsZW1r2id-qp7H3S {
        margin-right: auto;
        margin-left: auto;
    }
    
    ._2lUES1qfK73keSn9S_BiQT {
        padding-right: 2rem;
        padding-left: 2rem;
    }
```

`head`タグの中の`style`タグに`謎の文字列`クラスが定義されています。
CSS Modulesによって、コンポーネントに閉じたスタイルが作られているのがわかります。

## 注意書き
`webpack.config.js`の定義で`?modules`をつけるのがわからず、苦労しました。

[className always empty · Issue #21 · roylee0704/react-flexbox-grid](https://github.com/roylee0704/react-flexbox-grid/issues/21#issuecomment-193801076)

> Adding ?modules to the loader fixed it for me:
{
    test: /\.css/,
    loader: "style!css?modules"
},



# 参考
- [webpackのcss-loaderでCSS Modulesをやる - Qiita](http://qiita.com/_likr/items/c335dec5221024ad56bc)
- [CSS Modules 所感 - morishitter blog](http://morishitter.hatenablog.com/entry/2015/09/28/103334)
- [CSS3 Flexbox の各プロパティの使い方をヴィジュアルで詳しく解説 | コリス](http://coliss.com/articles/build-websites/operation/css/css3-flexbox-properties-by-scotch.html)
自分が修正したファイルだけphp-cs-fixerで整形する方法

masterをマージした状態で

```bash
git diff --name-only --diff-filter=AMCR master...|xargs -n 1 php-cs-fixer fix
```

diff-filterで削除したファイルを一覧から消している

ファイル名の後にオプションを指定する場合は

```
git diff --name-only --diff-filter=AMCR master...|xargs -I'{}' php-cs-fixer fix '{}' --level=psr2
```
JMeterでELBを殴る時に守ってほしいたった一つのしまじろうとの約束

俺
で
す
。

自戒を込めて。

JMeterのシナリオに `-Dsun.net.inetaddr.ttl=0` を指定するとELBをいい感じに殴ります。

- JMeterでELBを殴る
 
```
$ jmeter -Djava.rmi.server.hostname=`curl http://169.254.169.254/latest/meta-data/local-ipv4`  -Dsun.net.inetaddr.ttl=0 -n -t <シナリオファイル>
```

- JMeter SlaveからELBを殴る

※JMeter Masterから実行

```
$ jmeter -Djava.rmi.server.hostname=`curl http://169.254.169.254/latest/meta-data/local-ipv4`  -Dsun.net.inetaddr.ttl=0 -n -t <シナリオファイル> -r
```

`完`
Firebase Analyticsのdebugモードを有効にする方法


firebase analyticsでdebugモードをonにして、送信されてるデータを確認する方法を紹介します
具体的には、ログに吐かれている

```
To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see http://goo.gl/Y0Yjwu)
```
の説明です。

## step1. scheme管理メニューを開く
![step1.png](https://qiita-image-store.s3.amazonaws.com/0/68146/daef39ea-9d12-7590-81a2-e86001e5478f.png "step1.png")

## step2. Edit Schemeをクリックして、scheme編集画面を開く
![step2.png](https://qiita-image-store.s3.amazonaws.com/0/68146/b803a499-683b-d4c1-7519-74bff2178fa3.png "step2.png")

## step3. Argumentsをの中の「Arguments Passed On Launch」に「-FIRAnalyticsDebugEnabled」を追加する
`-FIRAnalyticsDebugEnabled`の先頭の「-」も必要なので注意

![step3.png](https://qiita-image-store.s3.amazonaws.com/0/68146/8fce772c-fd43-c963-593a-2e4b993de111.png "step3.png")
[メモ] Raspberry PiでDomoticz (Open Source Home Automation System)


## 概要
- [Domoticz RaspberryPi SD Image](https://www.domoticz.com/wiki/Domoticz_RaspberryPi_SD_Image) にかいてあること。
- Setup > Settings : System - Language ... 日本語ないよ！
- Setup > Hardware : あたりからデバイスを登録刷る模様。
- 使えるセンサーとかないので、とりあえずWeb天気予報(Forecast)..デフォルトは華氏(°F)
![Dz.png](https://qiita-image-store.s3.amazonaws.com/0/75594/db0e9c44-1734-413a-2de1-6a85a30253ca.png)


## [インストール](https://www.domoticz.com/wiki/Domoticz_RaspberryPi_SD_Image#Installation)

(訳 - Google先生のサポート)
1. Class 10 SDカードを使いましょう。
2. Class 10 SDカードを使ってる？ イイヤツね!! これ重要。
3. らずぱい向けのDomoticz　SDイメージをダウンロード。 http://sourceforge.net/projects/domoticz/files/
4. 解凍。 SDイメージとか含まれています。 Readme.txtとかあったら、読みましょう。
5. SDカードにイメージを書き込む。
6. ラズベリーパイの電源を切る
7. あなたのパイにSDカードを入れて、マウス、キーボード、イーサネットケーブルとモニターを接続します。 最後に、マイクロUSB電源に接続します。 このアクションは、オンにし、あなたのラズベリーパイを起動します。

## First time startup
- デフォルトのユーザ名パスワード: pi / raspberry 
- (以下省略...
    - IP調べて、SSHでログインしたり、
    - `raspi-config`で、パーティション拡張したり、パスワード変更したり、タイムゾーンとかインタナショナル設定を変更したり、して、`sudo reboot`
- ブラウザから、`http://<ラズベリーパイのIPアドレス>:8080/` へアクセス。
- `sudo poweroff`<br>で適切にシャットダウンしましょう



## その他
- 使えるセンサー持ってなかった。


```txt:SSHでログイン.
______                      _   _          
|  _  \                    | | (_)         
| | | |___  _ __ ___   ___ | |_ _  ___ ____
| | | / _ \| '_ ` _ \ / _ \| __| |/ __|_  /
| |/ / (_) | | | | | | (_) | |_| | (__ / / 
|___/ \___/|_| |_| |_|\___/ \__|_|\___/___|
                                           

Wednesday, 15 June 2016,  1:18:54 am UTC
Linux 4.1.18-v7+ armv7l GNU/Linux
Uptime.............: 0 days, 00h01m27s
Memory.............: 767576kB (Free) / 948056kB (Total)
Load Averages......: 0.48, 0.18, 0.07 (1, 5, 15 min)
Running Processes..: 99
IP Addresses.......: 10.10.1.89

pi@raspberrypi:~$ 
```
Swift Closure の書き方まとめ

Objective-C の block と同様 Swift の Closure も様々な利用シーンがあります。
それぞれの書き方をまとめました。

Objcetive-Cのまとめはこちらです。
[(いまさら)Objective-C ブロックの書き方まとめ](http://qiita.com/taketomato/items/9cd31c458da020ba6d5a)

## メソッドのパラメータ / 戻り値 を closure にする(宣言時)
宣言時は呼び出し時と違い、戻り値がない場合でも`-> Void`を書いてやる必要があります。
そうしないと`closure`として認識されません。

```swift:swift
// パラメータ / 戻り値がない closure
// () -> Void のひとかたまりが closure の型を表しています
func hasNothingMethod(closureName: () -> Void) -> () -> Void {
    // do something
}

// パラメータ / 戻り値がある closure
// こちらの場合は (Int, Float) -> Bool が closure の型になります
func hasParamMethod(closureName: (Int, Float) -> Bool) -> (Int, Float) -> Bool {
    // do something
}
```

## メソッドのパラメータ / 戻り値 を closure にする(呼び出し時)

```swift:swift
// パラメータ / 戻り値がない closure
// パラメータを記述する() や closure の記述 () -> Void が省略化です
hasNothingMethod {
    // do something
}

// パラメータ / 戻り値がある closure
hasParamMethod { (intValue: Int, floatValue: Float) -> Bool in
    return Float(intValue) == floatValue
}
```

## ローカル変数宣言
```swift:swift
var someClosure: ((Int, Float) -> Bool)
```

## typealias

```swift:swift
// このように名前をつけることで、closureType をメソッドのパラメータの型などに使えるようになります。
typealias closureType = ((Int,Float) -> Bool)
```

## 使い方例
上の書き方を組み合わせただけですが、使い方の例を示します。

#### 1. パラメータ / 戻り値がない closure
呼び出し時にはパラメータを記述する`()` や closure の記述 `() -> Void` が省略できるところが肝です。

```swift:playground
// パラメータ / 戻り値が closure であるメソッドを宣言
func hasNothingMethod(closureName: () -> Void) -> () -> Void {
    return closureName  // パラメータの closure をそのまま return する
}

// 上記メソッドに closure を渡して呼び出し、戻り値を取得
let returnedClosure = hasNothingMethod {
    print("hasNothingMethod() に closure を渡しています")
}

// 戻り値の closure を実行
returnedClosure()
```

#### 2. パラメータ / 戻り値がある closure
ちょっとわかりづらいですが、 `hasParamMethod` の戻り値を格納した `returnedClosure` を直後に実行しています。

```swift:playground
// パラメータ / 戻り値が closure であるメソッドを宣言
func hasParamMethod(closureName: (Int, Float) -> Bool) -> (Int, Float) -> Bool {
    return closureName  // パラメータの closure をそのまま return する
}

// 上記メソッドに closure を渡して呼び出し、戻り値を取得
let returnedClosure = hasParamMethod { (intValue: Int, floatValue: Float) -> Bool in
    return Float(intValue) == floatValue
}

// 戻り値の closure を実行して、結果を print
print("結果は", returnedClosure(10, 10.1))     // 結果は false
```

#### 3. パラメータ / 戻り値がある closure (typealiasを使った場合)
`(Int, Float) -> Bool` を `closureType` で置き換えた場合です。
2. の例とやっていることは同じですが、より見通しがよくなることがわかると思います。

```swift:playground
typealias closureType = (Int, Float) -> Bool

// パラメータ / 戻り値が closure であるメソッドを宣言
// closure の型は closureType
func hasParamMethod(closureName: closureType) -> closureType {
    return closureName
}

// 上記メソッドに closure を渡して呼び出し、戻り値を取得
let returnedClosure: closureType = hasParamMethod { (intValue: Int, floatValue: Float) -> Bool in
    return Float(intValue) == floatValue
}

// 戻り値の closure を実行して、結果を print
print("結果は",returnedClosure(10, 10.0))   // 結果は true
```

Objective-C の block と違い、使うシーンによって記述がほとんど変わらないので、格段に書きやすくなっています。
closure を活用しましょう！！
Office 2013をイントラで使いたい

Office 2013は、使用するPCがオンラインでないと満足に使用できないらしい。

とある事情で、イントラネットのPCにOffice 2013をインストールする必要が出てきたので、試行錯誤のログを残したい。

MSの中の人からは怒られそう

## 前提条件、やりたいこと

- インストール作業環境は、インターネットに接続できる。
- インストールするOfficeは、Home & Business 2013 OEM(PIPC)版
- インストール対象のPCは新品、Office同時購入。諸事情によりWindows 7 Professional 32bitをインストール。
- イントラネットからは、インターネットに接続できない。
- インストール対象のPCは、インストールの完了後にイントラ上のドメインに参加させ、ドメインユーザーでOfficeを使いたい。


## 普通にインストール

対象PCをインターネットにアクセスできる回線につなぐ。
通常なら、通常ならローカルディスクにインストール用プログラムが格納されており、それをキックするだけでインストールができる。
今回は、諸事情により、別の機会に入手したインストールディスクを使用したが、手順は同じだと思われる。

プロダクトキーを入力し、インターネットで認証を行った上でインストールを完了させる。
One Drive等のクラウドサービスは使用しない（できない）ので、マイクロソフトアカウントは登録しない。

~~インストールがありえんくらい遅いんだけど何とかならんのか~~

インストールが完了したら、Word等が正常に起動するか・ライセンス認証がされているか確認する。


## テストと失敗と

ネットワークをイントラに繋ぎかえ、動作確認を行う。

Word等を起動してしばらく経つと、何やらインストール画面が表示されて操作不能になる。
「オンラインのまま待て」と言われる。

仕方なくインターネットに繋ぎかえるが、これがいつまで経っても終わらない。
「するな」と書かれていたが、PC再起動で強制終了させた。

この仕組みはClick to Runと言うそうで、インストールされていない機能をオンデマンドでインストールするというものらしい。
https://technet.microsoft.com/ja-jp/library/jj219427.aspx


Click to Runのインストール画面が表示される条件はよくわからない（そもそも、どの機能がインストールされていないかなど知る由もない）が、
私の環境では、「アドイン」の画面を表示させることで再現できることが分かった。

[ファイル] → [オプション] → [アドイン] で表示できる。


## 結論

試行錯誤の結果、
「プログラムと機能」画面より、「オンライン修復」を実行することで、[アドイン]画面表示時のインストーラ起動を回避することができた。

インターネット環境に戻し、オンライン修復を実行する。
オンライン修復を行った後、Office製品を起動すると、プロダクトキーを聞いてくるため、再入力する必要がある。
ライセンス認証を行った後は、オフラインにしても、「今のところは」問題なく動作する。

この状態でしばらく運用してみることにする。

## 所感

イントラで使いたいっていうニーズもあると思うけどな。。。
そういう場合はボリュームライセンス版を買えよってことになるだろうけど、中小だとそうもいかないよね。。。
mruby C API


## このメモについて

mruby/include 以下のヘッダファイルに定義されている MRB_API 参照して整理したもの

## 重要な構造体や型

|名称|概要|
|---|---|



## mruby.h

### クラス定義

|関数名|概要|
|---|---|
| mrb_define_class | クラスを定義する |
| mrb_define_module | モジュールを定義する |
| mrb_singleton_class | モジュールを定義する |
| mrb_include_module | モジュールを Mix-in する(include) |
| mrb_prepend_module | モジュールを Mix-in する(prepend) |
| mrb_define_method | (グローバル)メソッドを定義する |
| mrb_define_class_method | クラスメソッドを定義する |
| mrb_define_singleton_method | クラスメソッドを定義する |
| mrb_define_module_function | モジュール関数の定義 |
| mrb_define_const | 定数を定義する|
| mrb_undef_method | メソッドを未定義にする|
| mrb_undef_class_method | クラスメソッドを未定義にする |

### オブジェクト生成
|関数名|概要|
|---|---|
| mrb_obj_new | オブジェクト初期化|
| mrb_class_new_instance | オブジェクト初期化 |
| mrb_instance_new | インスタンス生成 |
| mrb_class_new | クラス生成 |
| mrb_module_new | モジュール生成 |
| mrb_class_defined | クラス定義 (上書き可) |


### クラスインスペクション

|関数名|概要|
|---|---|
| mrb_class_defined | |
| mrb_class_get | |
| mrb_class_get_under | 子クラスを返す |
| mrb_module_get | モジュールを返す |
| mrb_module_get_under |外部で定義されてるモジュールを返す|
| mrb_notimplement_m | 未実装のモジュールを返す |
| mrb_obj_dup | オブジェクトの複製|
| mrb_check_to_integer | |
| mrb_obj_respond_to | respond_to |

### 継承の定義

|関数名|概要|
|---|---|
| mrb_define_class_under | |
| mrb_define_module_under | |

### 仮想マシン操作系

|関数名|概要|
|---|---|
| mrb_get_args| 引数を取得する |
| mrb_funcall | 関数を呼び出す |
| mrb_funcall_argv | 引数ありの関数 |
| mrb_funcall_with_block | ブロックありの関数 |

### 型

|関数名|概要|
|---|---|
| mrb_intern_cstr | NULL終端文字列をシンボルに変換 |
| mrb_intern | 文字列をシンボルに変換 |
| mrb_intern_static | 引数ありの関数 |
| mrb_funcall_with_block | ブロックありの関数 |


## mruby/irep.h

バイトコード操作系

|関数名|概要|
|---|---|
| mrb_add_irep | |
| mrb_load_irep | バイトコードの読み込み|
| mrb_load_irep_cxt | コンテキスト付バイトコードの読み込み|
ネットワーク速度

## 参考
* [あなたの回線の速度を計測してみよう：BIGLOBE会員サポート](http://support.biglobe.ne.jp/faq/speed/sokutei.html)
* [みんなの測定結果 - Radish Network Speed Testing -](http://netspeed.studio-radish.com/cgi-bin/netspeed/openresult/openresult.cgi)
* [いくつ知ってる？意外と知られていない役に立つOS Xの標準アプリケーション – OTTAN.XYZ](http://ottan.xyz/os-x-apps-1833/)

## ネットワークユーティリティ
el capitanであれば
`/System/Library/CoreServices/Applications`にある

## リンク速度
うちは２回線持っていて

### 世間的にかなり早いとされる有線回線を家で無線LAN機器に繋げたもの
![Screen Shot 2016-06-15 at 9.01.44 AM.png](https://qiita-image-store.s3.amazonaws.com/0/27895/edee49bb-fb27-503d-1543-84ae03167657.png)

### 某無線
![Screen Shot 2016-06-15 at 9.04.47 AM.png](https://qiita-image-store.s3.amazonaws.com/0/27895/5d5570f6-d024-256c-d2b8-bffbeae87c28.png)

上記はリンク速度なので実測値ではない
実測値を計るアプリ的なものはなさそうなので、ブラウザでFlashやJavaScriptなどを使って計測するサービスにアクセスして計った結果が下記。

## 実測値(bps)
### 世間的にかなり早いとされる有線回線を家で無線LAN機器に繋げたもの
`35Mbps ~ 40Mbps`

### 某無線
`9Mbps ~ 6Mbps`


ネットワーク回線は`byte（B)`ではなく`bit(b)`がよく使われるが、ダウンロードするファイルは大抵`byte(B)`なので変換しないとややこしくなる

## 実測値(Bps)
### 世間的にかなり早いとされる有線回線を家で無線LAN機器に繋げたもの
`4.375MBps ~ 5MBps`
`約5MBps`と考えてよいだろう。

### 某無線
`1.125MBps ~ 0.75MBps`
`約1MBps`と考えてよいだろう。
【Swift】コーディング規約まとめ

Swiftのコーディング規約を作成することになったので、
その参考資料をまとめました。
この他、参考になるものありましたらお知らせください。

## 2016/12/13追記
[Swift Style Guide Updated for Swift 3](https://www.raywenderlich.com/148830/swift-style-guide-updated-for-swift-3)

## 2016/8/2追記
弊社コード規約公開しました！
[SmartDeviceTechnologies](https://github.com/SmartDeviceTechnologies/swift-style-guide)

# Swift Style Guide
[raywenderlich](https://github.com/raywenderlich/swift-style-guide)
[github](https://github.com/github/swift-style-guide)
[eureka](https://github.com/eure/swift-style-guide/blob/master/README_jp.md)
[prolific](https://github.com/prolificinteractive/swift-style-guide)
[netguru](https://github.com/netguru/swift-style-guide)
[SlideShare](https://github.com/SlideShareInc/swift-style-guide)
[GitBook](https://www.gitbook.com/book/opchen/swift-style-guide2/details)
[Devslopes](https://github.com/jackd942/devslopes-swift-style-guide)
[Recruit-LifeStyle](https://github.com/recruit-lifestyle/swift-style-guide)
[Wantedly](http://qiita.com/susieyy/items/f71435cc962e70d81b37)
[SmartDeviceTechnologies](https://github.com/SmartDeviceTechnologies/swift-style-guide) ← NEW!!

# Blogs
[エウレカ流Swift Style Guideを公開しました](https://developers.eure.jp/tech/swift-style-guide/)
[Swift開発で参考にしたいGitHub社の「Swift Style Guide」と日本語版](http://www.softantenna.com/wp/mac/swift-style-guide/)
[GithubとRay WenderlichのSwiftのコーディングスタイルガイドを読んでみた](http://blog.morizotter.com/2015/02/22/swift-coding-style-guide/)
[How We Tamed Swift Syntax: the Open Source Style Guide](https://www.netguru.co/blog/swift-style-guide-open-source)
[Swiftコーディング規約の資料まとめ](http://easyramble.com/swift-coding-convention.html)
[Swift Style Guide: April 2016 Update](https://www.raywenderlich.com/133102/swift-style-guide-april-2016-update)
[Swift Style Guide が Swift 書く前に参考になる](http://www.bokukoko.info/entry/2015/04/21/Swift_Style_Guide_が_Swift_書く前に参考になる)
[The Prolific Interactive Swift Style Guide](http://blog.prolificinteractive.com/2016/02/08/the-prolific-interactive-swift-style-guide/)
[A handful of Swift style rules #swiftlang](http://ericasadun.com/2015/11/17/a-handful-of-swift-style-rules-swiftlang/)

# Swift.org
[API Design Guidelines](https://swift.org/documentation/api-design-guidelines/)

# ほか
[tailorのチェックルール](https://github.com/sleekbyte/tailor/wiki/Rules)
iOSアプリで動画をAppleTVに投影する

## 投影方法
#### AirPlayを利用する
- [AirPlay Overview](https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AirPlayGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011045)の「Provide a Great AirPlay User Experience in Your App」内の[リンク](https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AirPlayGuide/EnrichYourAppforAirPlay/EnrichYourAppforAirPlay.html#//apple_ref/doc/uid/TP40011045-CH6-SW1)を見ると、[MPVolumeView](https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPVolumeView_Class/)を利用すればAirPlayで接続可能なデバイスのピッカーを表示できる。  
![IMG_0094.PNG](https://qiita-image-store.s3.amazonaws.com/0/38164/30de99ee-2a00-4835-1e09-9b5765b16b64.png)  

- AppleTVとネットワーク上で繋がっている状態であれば、AppleTVが選択できる。後は、AVPlayerを搭載した画面を作ってあげれば良い。 
![IMG_0096.PNG](https://qiita-image-store.s3.amazonaws.com/0/38164/df13716c-6f38-b8ad-45e1-4fd60edf353d.png)
 
#### AirPlayのプロトコル
- AirPlayの仕様は正式公開されていないが[Unofficial AirPlay Protocol Specification](https://nto.github.io/AirPlay.html)に基づいてHTTPリクエストを送信すれば、AirPlay経由せずに直接投影したりすることもできそう。
- [AllCast](https://itunes.apple.com/jp/app/allcast-cast-photos-music/id943763227?mt=8)とかはAirPlay経由せずに検索や投影ができるが、↑を実装しているんじゃないかと思っています。結局、Appleが正式に公開していない以上、AirPlay利用することを推奨しているのでしょうか。

## プレイヤー画面
- 画面をカスタマイズしない場合は以下のViewControllerを継承した画面を作成すれば良い。
- AVPlayerを持っているので、コンテンツをうまく紐づけてあげるだけで良い。
- 再生や停止などの操作も何もしなくてもうまくUIと連動して動作してくれる。

#### iOS8以上
- [AVPlayerViewController](https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayerViewController_Class/)  
![IMG_0093.PNG](https://qiita-image-store.s3.amazonaws.com/0/38164/d4cb8220-df5e-8667-b134-14a14aa24fed.png)


#### iOS8未満
- [MPMoviePlayerViewController](https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPMoviePlayerViewController_class/)

#### 画面のカスタマイズ
- 独自の画面を作成する場合はUIと上手く連動するようにAVPlayerを操作する必要がある。
- [AVPlayer](https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayer_Class/)
emacsでプロポーショナルフォントと等幅フォントを切り替える

emacsで日本語も英語もプロポーショナルフォントで表示したい。
emacsで`M-x variable-pitch-mode`とすると、バッファごとにデフォルト(等幅)のフォントとプロポーショナルフォントを切り替えられる。しかしWindowsのNTemacsでは、[デフォルトフォントの設定](http://qiita.com/styzo/items/f9d9db9d1455efd24dbe)だけしかしていないと、asciiフォントしかプロポーショナルにならず、日本語フォントはデフォルトの等幅のままになる。

```el:init.el
(set-face-attribute 'default nil :family "Consolas" :height 120)
(set-fontset-font t 'japanese-jisx0208 (font-spec :family "MeiryoKe_Console"))
(add-to-list 'face-font-rescale-alist '("MeiryoKe_Console" . 1.09))
```

文字`a`の上で`M-x describe-char`
uniscribe:-outline-Consolas-normal-normal-normal-mono-16-*-*-*-c-*-iso8859-1 (#x83)
文字`あ`の上で`M-x describe-char`
uniscribe:-outline-MeiryoKe_Console-normal-normal-normal-mono-17-*-*-*-c-*-iso8859-1 (#x901)

`M-x variable-pitch-mode`
文字`a`の上で`M-x describe-char`
uniscribe:-outline-Arial-normal-normal-normal-sans-16-*-*-*-p-*-iso8859-1 (#x44)
文字`あ`の上で`M-x describe-char`
uniscribe:-outline-MeiryoKe_Console-normal-normal-normal-mono-17-*-*-*-c-*-iso8859-1 (#x901)

試行錯誤して`variable-pitch`faceにfontsetを設定したら、日本語フォントもプロポーショナルフォントで表示された。

```el:init.el
(add-to-list 'face-font-rescale-alist '("MeiryoKe_PGothic" . 1.09))
(create-fontset-from-ascii-font
 "Arial:weight=normal:slant=normal" nil "variable")
(set-fontset-font
 "fontset-variable" 'japanese-jisx0208 (font-spec :family "MeiryoKe_PGothic"))
(set-face-attribute 'variable-pitch nil :fontset "fontset-variable")
```

`M-x variable-pitch-mode`
文字`a`の上で`M-x describe-char`
uniscribe:-outline-Arial-normal-normal-normal-sans-16-*-*-*-p-*-iso8859-1 (#x44)
文字`あ`の上で`M-x describe-char`
uniscribe:-outline-MeiryoKe_PGothic-normal-normal-normal-mono-17-*-*-*-p-*-iso8859-1 (#x7251)

![variable-pitch.png](https://qiita-image-store.s3.amazonaws.com/0/40128/a2fc70b3-3276-b3e0-162f-50700161a295.png)
VideoSubscriberAccount.frameworkとは何か？

WWDC2016でいくつかtvOSのアップデートについても触れられていましたが、見慣れないframeworkがあったので調べてみました。

## VideoSubscriberAccount.frameworkとは？
[What's New in tvOS](https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewinTVOS/Articles/tvOS10.html)の `Video Subscriber Account`において、以下のように記載されています。

ざっくり要約すると、衛星放送やケーブルテレビのプロバイダー向けのframeworkで、ビデオを認証して、オンデマンドで配信したい時に使うframeworkって感じみたいです。
日本だと誰も使わなさそうな感じですね。。。

```
tvOS 10 introduces the Video Subscriber Account framework (VideoSubscriberAccount.framework) to help apps that support authenticated streaming or 
authenticated video on demand (also known as TV Everywhere) authenticate with their cable 
or satellite TV provider. Using the APIs in this framework can help you support a single 
sign-in experience in which users sign in once to unlock access in all of the streaming 
video apps that their subscription supports.
```

## 参考
- [What's New in tvOS](https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewinTVOS/Articles/tvOS10.html)
Zybo > Chronicles blog 47 > AMPの使用 > 1. AMP実装用のzipファイル設定

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-47-AMP-Asymmetric/ba-p/512235


2つのbare metal applicationをZynqの2つのARM Cortex-A9で動作させようとしている。

> Unfortunately the Vivado design suite I am using 2014.1 … does not support AMP when it generates an FSBL (first-stage boot loader). Therefore to get this example up and running I will be using the modified FSBL and modified standalone OS provided as part of Xilinx Application note XAPP1079.  (The source files are available here http://www.xilinx.com/support/documentation/application_notes/xapp1079-amp-bare-metal-cortex-a9.pdf)

最近のVivadoでのAMP実装が可能なのかは不明。
実際に使う段階になってから調べるというのでいい。

> Having downloaded the zip file the first step is to extract the zipped files into your desired working directory and to <font color=red>rename the folder called SRC to design</font>. These files contain both a modified FSBL and a modified, standalone OS. We need the SDK to be aware of these files so the next step is to update your SDK repository to make the SDK aware of their existence. <font color=red>Within SDK under the Xilinx tools menu, select repositories and then new, navigating to the directory location</font> <your working directory>\app1079\design\work\sdk_repo as shown below:
ピラミッドストラクチャを使って、伝えたいことをまとめてみよう!

#はじめに
誰かに指示を貰って、それをまた誰かに説明しようとしたり、まとめてみたりするのは意外と難しいものです。話を聞いていたときは理解できていたと思っていても、言葉で表現しようとすると詰まったりしてしまう経験が今まで何度もありました。

#この記事の目的
今回はそんな苦い経験を繰り返さないため、自分の考えや断片的な情報を整理するのに向いているピラミッドストラクチャを使ってみて、伝えたいことをまとめてみます。

#ピラミッドストラクチャとは
ピラミッドストラクチャについてはこの[ネット記事](https://human-touch.jp/career/column/to_be_expert/rt_consult_188.html)やはじめてのロジカルシンキングを執筆された渡辺パコさんの[記事](http://www.nikkeibp.co.jp/article/column/20100827/243417/)に詳しく書いているので、詳細は省略します。

#悪い伝え方をすると相手の負担になってしまう

例えば、相手からプログラムの修正を指示されたとして、なぜ行うのか、どのように行うのか、事前にどんな準備が必要なのかが分かっていたとしても相手に対して、言いたいことだけを羅列して、伝えてしまったり、順序バラバラで相手に伝えてしまったりすれば、相手がこちらの伝えたいことをくみ取る手間が増えてしまいます。


#ピラミッドストラクチャで伝えたいことをまとめてみると・・・

<b>例</b>
ここでは相手から機能追加によるプログラムの修正を指示されたとして、ピラミッドストラクチャを使って、どうやってまとめるかを示します。

<b>作成の手順</b>
イシューを設定>サポートメッセージを書く>キーラインを書く>キーラインが示す内容を順序立てて、メインメッセージを書く

<b>ピラミッドストラクチャ</b>


![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/124488/2f004e9d-e932-5661-7f3c-9fc212e13516.png)






###メインメッセージの部分をそのまま相手に伝えれば、すっきり伝わります!

#ピラミッドストラクチャの用語
イシュー:ピラミッドストラクチャを使うにあたり、何を考えるかを指します。
　　　　上の例だとソースの修正指示に対して、やってほしいことになります。

メインメッセージ:結論のこと。

キーライン:メインメッセージを考える上での情報

サポートメッセージ:キーラインに紐づく情報

#使ってみての感想
何だかあたりまえなことを解説している気になってきましたが、下から考えていくことで、断片的な情報は何を示しているのか、ということが図で分かるようになりました。
相手が伝えてきたことをかみ砕いて、再度自分の中で整理して伝えなおす、という流れの中でピラミッドストラクチャを使ったのは初めてで、この使い方で合っているのかも不安なのですが、言葉がまとまらなくて、頭が真っ白なときの解決策として有効かもしれません。
Zybo > Chronicles blog 46 > AMP(Asymmetric Multiprocessing)の例としてやろうとしていること > interactionなし / interactionあり

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-43-XADC-Alarms-and/ba-p/496468

AMP(Asymmetric Multiprocessing)に関してblogでやろうとしていること

> It is my intention to initially create a very simple system that we can expand upon once it’s up and running. The first application will have the Zynq SoC’s processor Core 0 communicating with the user over RS232 while Core 1 runs a pattern on the LEDS connected to the MicroZed IO Carrier Card. These two applications will run without interaction.

interactionなし

> We’ll then progress to looking at how we can establish communication between processors using the on-chip memory along with how we can share resources between processors. Eventually we will progress from bare-metal code running on both processors to running operating systems on one or both processor cores.

intercationあり
Zybo > Chronicles blog 45 > Shared resources > I/O peripherals, On Chip Memory, the Interrupt Controller Distributor, the L2 Cache and system memory located within the DDR memory

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-46-Using-both-of-the-Zynq/ba-p/508697

Zynqには2つのARM Cortex-A9が搭載されており、それをAMP(Asymmetric Multiprocessing)で使う場合の考慮

resourceにはprivateとsharedがありsharedの方は２つのARM Cortex-A9でやりとりをするということらしい。

> The Zynq SoC also has a large number of shared resources of which common examples include I/O peripherals, On Chip Memory, the Interrupt Controller Distributor, the L2 Cache and system memory located within the DDR memory. The following diagram shows you some of these resources.

blogに関連図が掲載されている。
技術英語 > we are [opting out of] the supervisory situation

@ LOE > May 30, 2003
http://loe.org/shows/shows.html?programID=03-P13-00022
> By not signing the Kyoto Treaty, we are <font color=red>opting out of</font> the supervisory situation which the Kyoto rules are creating, even as we speak. 

> http://ejje.weblio.jp/content/opt+out
> 	(活動・団体などから)身を引く、脱退する

どこかで聞いたことがあると思ったら以下の用語だった。

[オプトアウト @ e-Words](http://e-words.jp/w/%E3%82%AA%E3%83%97%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88.html)
ActiveAdmin で一度入力した input を disabled にする

# はじめに
ActiveAdmin でユニーク性を保ちたい変数については、一度作成済みのときは値は確認したいが、編集時は間違えて変更してしまわないように編集不可にしたいといった要望がありました。
しかし、ActiveAdmin の form は編集、作成で共有しているので、編集時のみ disabled にするといったことができません。
そこで今回は、 `ActiveAdmin::Views::ActiveAdminForm` を拡張することでそのような特殊な `input` を実現できたので紹介します。

# ActiveAdmin::Views::ActiveAdminForm に protected_input を拡張する
以下のように、 `ActiveAdmin::Views::ActiveAdminForm` に新しく `protected_input` を追加します。

```lib/active_admin/views/active_admin_form.rb
module ActiveAdmin
  module Views
    class ActiveAdminForm
      def protected_input(*args)
        atr, option = args
        append_option = object.persisted? ? { input_html: { disabled: true } } : {}
        args[1] = option.to_h.merge(append_option)
        input(*args)
      end
    end
  end
end
```

作成したクラスは、 `require` するのを忘れないようにしましょう。

```
ActiveAdmin.setup do |config|
  # 省略

  Dir["#{Rails.root}/lib/active_admin/**/*.rb"].each { |lib| require lib }

end

```

# 使い方
実際の使い方は以下のようになります。

```rb
  form do |f|
    f.inputs Item do
      f.protected_input :user
      f.input :name
    end
    f.actions
  end
```

すると、以下のように編集時には入力項目を disabled を切り替えられていることが確認できます。

![disable.png](https://qiita-image-store.s3.amazonaws.com/0/48853/42ec951d-701f-4801-9795-085747cf4b43.png)

# さいごに
最初は、admin配下のファイルに`protected_input`に書いてあるような分岐を書いていたのですが、メソッドが拡張できると読みやすさを維持できていい感じです。
ドキュメントにない使い方ですが、ソースを読んで動作を理解できれば、気軽にメソッド拡張ができるのもRubyのいいところですね。
Toppers/ASPのRenesas RXアーキテクチャ GCC版を更新しました。

#Toppers/ASPのRenasas RXアーキテクチャ GCC版を更新しました。
今回の更新の目的はバグフィックスです。更新にfatfsやデバイスドライバの階層が含まれていますがほとんど検証できていません。
検証できていない部分がありますが、バグフィックスを優先しました。
色々いじった関係で-fでpushしています。すでにcloneしている方は-fでpullしてください。お手数をおかけして申し訳ないです。
fatfsに関しては近日中に更新とドキュメントを書きます。

更新内容は以下になります。

* Ethernetドライバの初期化コードを修正
 TINETを使用しない場合にコンパイルエラーになるのを修正しました。

* メモリ領域の多重定義の修正。
 C$VECTセクションを多重定義していた箇所を修正しました。これによりKPIT+e2studioの環境でも動作するようになりました。

* 割り込みコントローラのドライバ修正
 IERやIRレジスタのアドレス取得をテーブル参照から割り込み番号からの演算に修正しました。メモリ領域の節約を行いました。

* リンカスクリプトの修正
 DTCaを使用するためにディスクリプタテーブルの領域を確保するように修正しました。DTCaを使用しない場合は領域確保を行いません。旧版と同じになります。
Blade(Laravel)で日付のフォーマット

controllerでの処理はあるんだけどview側での操作が意外と見つけにくかったので。

```php:index.blade.php
@foreach($articles as $article)
  　　<b>{{$article->created_at->format('Y年m月d日')}}</b>
@endforeach
```


とか出来る。
普段AWS使ってる奴がGCPのCloudStorageを使ってみた

普段AWSを基本的に使ってます。
もうすぐ東京リージョンが来るらしいので、とりあえずCloudStorage使ってみました。

リージョンはとりあえず台湾リージョン。
→レイテンシは500ms程度らしい

## CloudStorageとは
* 高可用性と永続性を備えた高速なオブジェクトストレージサービス
    * S3と同じで耐久性99.999999999%、オブジェクトストレージです
* Googleのネットワークを使い、幅広い地域から高速アクセスが可能
    * GCPは東京リージョンがないですが、POP(Point of Presence)が東京と大阪にあるので、日本からのアクセスも高速に可能です

## 事前準備
* GCPを使える状態にする  
[日本リージョンが来る前にGoogleCloudPlatformを使える状態にしてみた](http://qiita.com/kazu23pole/items/057c8495c22f20e25000)


## Bucketを作成する
CloudStorageからバケットの作成をおこなう
![スクリーンショット 2016-06-15 1.17.17.png](https://qiita-image-store.s3.amazonaws.com/0/98887/4524d772-c218-531b-52fa-50f7dae96516.png)

Storageを選択
![スクリーンショット 2016-06-15 1.17.38.png](https://qiita-image-store.s3.amazonaws.com/0/98887/44c2f39a-36c7-f92d-3c36-6123c463530f.png)

『バケットを作成』を選択
![スクリーンショット 2016-06-15 1.17.50.png](https://qiita-image-store.s3.amazonaws.com/0/98887/4c714887-c3b7-0da3-3948-d4ff71213830.png)

バケット名：CloudStorage内で一意（S3と同じ）
ストレージクラス：Standard
場所：アジア
![スクリーンショット 2016-06-15 1.17.57.png](https://qiita-image-store.s3.amazonaws.com/0/98887/8466fb56-30fc-50f9-684c-faa6af9d3c81.png)

うん、あんまりS3と変わりない

## オブジェクトをアップロードする
バケットを選択
![スクリーンショット 2016-06-15 1.22.51.png](https://qiita-image-store.s3.amazonaws.com/0/98887/a12528ad-04c0-dcbd-a4d1-b0604a5d391d.png)

ファイルをアップロード
![スクリーンショット 2016-06-15 1.23.17.png](https://qiita-image-store.s3.amazonaws.com/0/98887/10c6c282-d625-fe55-5a1f-d68eef182313.png)

アップロード完了
![スクリーンショット 2016-06-15 1.24.45.png](https://qiita-image-store.s3.amazonaws.com/0/98887/bcffe57f-5180-6c38-d790-ec6da4326d36.png)

これもS3と同じ

## Webサイトホスティング
* s3のWebサイトホスティング

オブジェクトの「一般公開で共有する」にチェックを入れる
![スクリーンショット 2016-06-15 1.25.33.png](https://qiita-image-store.s3.amazonaws.com/0/98887/2faeccbb-39fd-7311-c08a-180a166365b4.png)

すると公開リンクが表示されるので、ブラウザで見てみる
![スクリーンショット 2016-06-15 1.26.32.png](https://qiita-image-store.s3.amazonaws.com/0/98887/e4b38af7-1e2a-ce47-f74c-36f0e7586776.png)

見れた！
ワンクリックなのは楽！！
けど、ポリシー（アクセス制限）的なのは？？
あと、オブジェクト単位って面倒・・・


## S3からデータ転送
S3に1MByteのテキトーなファイルを配置
今回はS3から転送してみる

左メニューから転送を選択
![スクリーンショット 2016-06-15 1.31.31.png](https://qiita-image-store.s3.amazonaws.com/0/98887/dae60670-e2e6-4f9b-fe4d-9d832cb11aca.png)

作成
![スクリーンショット 2016-06-15 1.32.35.png](https://qiita-image-store.s3.amazonaws.com/0/98887/bf80a0db-d1db-8895-6ddf-f767a4d98e8f.png)

S3の情報とアクセスキーを入力
![スクリーンショット 2016-06-15 1.33.55.png](https://qiita-image-store.s3.amazonaws.com/0/98887/d8b2e66a-cc1a-f7e5-7916-16a7d48e77d2.png)

CloudStorageの転送先を選択
![スクリーンショット 2016-06-15 1.35.36.png](https://qiita-image-store.s3.amazonaws.com/0/98887/4f968f4d-f243-d387-9e61-a0ba3fb3c40e.png)

名前を適当につけて作成
![スクリーンショット 2016-06-15 1.36.57.png](https://qiita-image-store.s3.amazonaws.com/0/98887/31f96c6c-1429-2e35-1b78-b497a6805f2e.png)

転送が開始される
![スクリーンショット 2016-06-15 1.40.13.png](https://qiita-image-store.s3.amazonaws.com/0/98887/ef2926cb-9246-88b2-9191-36a589163cbf.png)

## アップロード速度測定
明日やる

## まとめ
* 操作感はS3とほぼ同じ
* 細かな設定はS3の方ができそう
    * 調査不足？
* もう少し調べて追記
    * どこまで細かな設定ができるのか知りたい
聊到履歷要寫些什麼

今天上班的時候，和同事在看應徵者的履歷

看完之後有種隱隱的

> 履歷上寫的東西沒有寫到我們想要知道的東西

的這種感覺

稍微聊過之後我們都覺得，

- 在寫履歷上面的項目的時候要考慮到看履歷的人想要知道什麼東西
- 如何把自己會的東西寫出來讓看履歷的人了解
- 如何把自己會的東西清楚有條理的、不用空泛的無實質內容的文字（打高空）呈現出來。例如：實作 xxx 的架構（是怎麼樣的架構？負責了什麼內容？）；維護和開發的 apps （問：你維護了哪些？從頭規劃和開發哪些？）

這些應該只是部分怎麼寫履歷的小結論，這篇只是做為筆記記錄下來。未來自己需要寫履歷的時候，也可以多注意這幾點。
[Unity]テキストアニメーションしてみたい！！[DoTween]

# はじめに
uGUIのテキストアニメーションしてみたかったので、やってみました。

DoTweenをつかってアニメーションさせてみます


# やってみること。

数値を1から100まで、すべて表示しながら、アニメーションさせる。
こんなかんじ

![anim.gif](https://qiita-image-store.s3.amazonaws.com/0/114344/0a1ee416-cacf-0a81-6ee5-44ed80a8e59c.gif)



# やってみる

## カスタムプロパティをつかう！

DoTweenではカスタムプロパティのアニメーションが可能になっているので、それを使ってアニメーションしてみる。

実装するコードは以下のような感じ


カスタムプロパティの実装

```
public Text text;
private int num;

public int Number{
	set {
		num = value;
		text.text = "Power : " + num;
	}
	get {
		return num;
	}
}
```

アニメーションさせるコード

```
DOTween.To (() => Number,(x) => Number = x,100,3);
```

これだけで上のアニメーションが実装できます！すごい簡単でわかりやすいですね！

## DoTween.Toについて

このように、DoTweenでは、ラムダを使って

- 第一引数に「何に入れるか」
- 第二引数に「何を入れるか」
- 第三引数に「どこまで値を変化させるか」
- 第四引数に「変化させるのにかける時間」

と書いていく。

カスタムプロパティのアニメーションでは

![スクリーンショット 2016-06-15 1.30.47.png](https://qiita-image-store.s3.amazonaws.com/0/114344/85c740f1-4e83-6f38-ab2c-238bd655a227.png)

このような感じで、Vector3やRectや結構自由に使えるので、これだけでも新しいアニメーションなどは簡単に作れそう！

# 気をつけること！

__気をつけなければいけない__のは、第三引数の変化させる値は、__「今の値から指定の値まで」__

もし、相対的な変化だとしたいのであれば、、、


DoTweenをよく使う方なら気づいたかもしれませんが、そうです。
`SetRelative()`をチェーンで繋いでしまいましょう。

コードとしては

```
DOTween.To (() => Number,(x) => Number = x,100,3).SetRelative ();
```

こうですね！

そうすれば、
![anim2.gif](https://qiita-image-store.s3.amazonaws.com/0/114344/37cb832e-dd4e-d828-ae2c-748f99f238d5.gif)
このように！！


# 最後に

DoTweenのライブラリは素晴らしいですね。Tweenアニメーションで何かやりたいと思ったら、なんでも叶えられる気がします。

もちろん、Easeも簡単にかけられますよ！（上のgifではすでにかけてみましたが）

Ease、いろいろあって実際に動かしてみて悩んでいるので、また改めて記事にまとめつつ覚えようかなと…
css javascript ライブラリ　確認環境

webアプリのサンプルソースが動かせる環境のまとめ

#[CodePen](http://codepen.io/)
![codepen.jpg](https://qiita-image-store.s3.amazonaws.com/0/54159/a26f5530-0eb2-4dee-dc6a-5e2238a926c0.jpeg)

#[jsdo.it](http://jsdo.it/)
![justdoit.jpg](https://qiita-image-store.s3.amazonaws.com/0/54159/3c101a90-b917-d774-5b8e-d6eb238a6866.jpeg)

#[jsfiddle](https://jsfiddle.net/)
容量がなくなっておあずけ..
タグも埋め込めないし、他に移ろうかな

#[bootsnipp](http://bootsnipp.com/)

#[plnkr](http://plnkr.co/)
HerokuにDeployしたタイミングでdb:migrateを実行したい

[追記]
最近だと、Release Phaseという機能を使うのがよさそうです
http://qiita.com/m_nakamura145/items/2eafb2dc9f8a459670b6


------------------

https://devcenter.heroku.com/articles/getting-started-with-rails4#migrate-your-database

この辺とか見ると、普通にmigrateを実行する感じである。

```
heroku run rake db:migrate
```

でもどうせならDeployしたタイミングで自動で反映させて欲しい。手でいちいち打つのは面倒くさいのである。

そこで以下のBuildpackを使う

https://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks

```
heroku buildpacks:set https://github.com/heroku/heroku-buildpack-ruby
heroku buildpacks:add https://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks
heroku config:set DEPLOY_TASKS='db:migrate cache:clear'
```

こんな感じで設定するとDeployする時に勝手に実行してくれるようになる。

最近は

https://github.com/winebarrel/ridgepole

これを使っているので、rakeタスクを作って、

```
heroku config:set DEPLOY_TASKS='ridgepole:apply'
```

こんな感じに設定している。`ridgepole:apply`のrakeタスクは以下のサイトのような感じに作ってる。

http://fujiyasu.hatenablog.com/entry/2015/06/21/140826

## 所感
ridgepole最高です。（タイトルと関係ない）
render :json したときのTypeError: nil is not a symbol


なぜか、以下のような形でrender :jsonしたときにTypeError: nil is not a symbol時の対処について。

```rb
respond_to do |format|
    format.html
    format.json {render :json => result}
end
```

tableを作成したときに複合主キーを設定していてかつ、
model側で、複合主キーの設定が抜けていた場合に発生する可能性がありそう?

composite_primary_keysというgemを利用して、
modelファイルに複合主キーの設定を追記してあげることで解消しました。

手順
1.Gemfileにgem 'composite_primary_keys'を追加しbundle install
2.modelファイルに以下のような記載と追加

```rb
   # 主キー設定
  self.primary_keys = :column_a, :column_b
```

ちなみに複合主キーをtable側に指定するMigrationファイルは以下のような感じです。

```rb
class CreateTables < ActiveRecord::Migration
  def change
    create_table :tables, id: false do |t|
      t.string :column_a
      t.string :column_b
    end
    add_index :tables, [:column_a, :column_b], unique: true, name: 'index_name'
  end
end
```

エラー自体は解消されたんですが、理屈がさっぱりです...
brew-cask でのインストール先を変更する際に発生するシンボリックリンクの問題


Caskroom の場所の変更
--

Caskroom の場所が **/opt/homebrew-cask/Caskroom から /usr/local/Caskroom へ変更**．

`brew cask doctor` などで以下の Warning を確認．

```
==> Homebrew-cask Install Location:
<NONE>
Warning: The default Caskroom location has moved to /usr/local/Caskroom.

Please migrate your Casks to the new location, or if you would like to keep your
Caskroom at /opt/homebrew-cask/Caskroom, add the following to your HOMEBREW_CASK_OPTS:

  --caskroom=/opt/homebrew-cask/Caskroom

For more details on each of those options, see https://github.com/caskroom/homebrew-cask/issues/21913.
```

Warningの内容から対応としては以下の二択．

* --caskroom=/opt/homebrew-cask/Caskroom オプションを付けて従来の場所(/opt/homebrew-cask/Caskroom)を使用
* /opt/homebrew-cask/Caskroom から /usr/local/Caskroom へファイルを移行

ファイル移行時に生じた問題
--

[GitHubのIssues](https://github.com/caskroom/homebrew-cask/issues/21913) では簡単な移行方法として

```zsh
mv /opt/homebrew-cask/Caskroom /usr/local
```

を紹介していたが，実行すると brew-cask で入れたものが使用不可．

目に見えた症状としては，以下の通り．

* Lanchpad,Dock で app が見つからない
* Alfred から app が見つからず，はてなマークが出ている

brew-cask で入れた app のシンボリックリンクの参照先を変更していないのが原因．

解決策
--

以下の手順により，問題は解決．

### シンボリックリンクを修正．

以下のシェルスクリプトを実行.
IFS(区切り文字)を関数のスコープの中で収めて無名関数として実行(zsh)．

```zsh
() {
  local IFS=$'\n'
  local cask_app_symboliclink_dir=$HOME/Applications
  local old_room=/opt/homebrew-cask
  local new_room=/usr/local
  
  for dest in `\ls -d $cask_app_symboliclink_dir/*.app`; do
    if [ -h $dest ]; then
      src=`readlink $dest | sed -e "s@$old_room@$new_room@"`
      sudo ln -sf $src $dest
    fi
  done
}
```

Lanchpad および Dock の正常動作確認．

### Alfred の設定を修正
次に Alfred を起動．Lanchpadから，または`open "/usr/local/Caskroom/alfred/<お使いのversion>/Alfred 2.app/Contents/Preferences/Alfred Preferences.app"` で Alfred Preferences が起動．

1. Features -> Search Scope の +ボタン をクリック
1. Command + Shift + G で /usr/local/Caskroom を入力，追加
1. /opt/homebrew-cask/Caskroom にカーソルを合わせて delete キーで削除

Alfred の正常動作確認．

以上で新しい Caskroom への移行完了．
Gemのwkhtmltopdfでテーブルを自動的に改ページする

これが何よりの回答。
http://stackoverflow.com/questions/8712677/how-to-apply-css-page-break-to-print-a-table-with-lots-of-rows

```css:sample.css
<style type="text/css">
   table { page-break-inside:auto }
   tr    { page-break-inside:avoid; page-break-after:auto }

</style>
```
サーバー構築：初めの一歩

xamppを立ち上げるまでに相当時間がかかった・・・。
もうこんな時間の無駄は嫌なのでメモ。

今回は、LinuxにCentOSを入れようとしています。

teratermとwinSCPが立ち上がったらこのサイトを見てください。以上。
ここに全てが書いてあり、この通りにやったら大丈夫です。

参考サイト：[XAMPP for Linuxのインストール](http://w.builwing.info/2013/08/13/xampp-for-linux%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/)

そして、その通りにやって
phpmyadminに入ろうとしたら
アクセス拒否されるという事態が。
セキュリティが頑丈になってるのかな？

こっちは割とすぐに出てきた。

/opt/lampp/etc/extra/httpd-xampp.conf

の最後のほうに書いてある

```
    AllowOverride AuthConfig Limit
    Require local
    Order allow,deny
    Allow from all
```
↓↓↓　↓↓↓　↓↓↓　↓↓↓　↓↓↓　↓↓↓　↓↓↓　↓↓↓　↓↓↓　↓↓↓

```
    AllowOverride AuthConfig Limit
    Require all granted
    Order allow,deny
    Allow from all
```

分かりますかね？
2行目の Require local　を　Require all granted　に変更しています。

で、XAMPPの再起動をする。


```
# /opt/lampp/lampp restart
```

そして、ブラウザでサーバーのIPアドレス/phpmyadminを入力すると
入れたー！！となっているはず。
プログラマによる英語の慣れ親しみ方 (まずはここから)

まずは英語に「慣れ親しむ」ために、身の回りのものから調整していってはいかがだろうか。


# Qiita を英語設定にする。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/ff175b75-f1ce-f56b-3f53-4a1bd299d2a6.png)


# Amazon を英語設定にする。

インターフェイスが英語になるだけで。
ちゃんと日本の商品は注文できるままだから大丈夫。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/68ecd916-283a-3658-6fd4-ef3652aa1476.png)


# 携帯 / タブレットを英語設定にする。

身近なものといえばスマホだ。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/250ebc39-b91e-9b49-2b68-146281a034fb.png)

# Google を英語にする。

この設定ではインターフェイスが変わるだけで、検索結果は変わらない。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/d5fa0014-36fc-159c-6568-b592b1206c2a.png)


# Google の検索設定を英語にする。

これはインターフェイスだけではなく検索結果も、英語優先に変える設定。
検索後の「Search Settings」から設定できる。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/5bc3a82b-51c4-901b-0f3c-5dd0005d0b62.png)

# 英語でググる。

前記のとおり、Googleの検索設定を英語にしておくと良い。
Stack Overflow ( 技術関係の Q&Aサイト )がよくヒットする。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/a02ca930-51d8-c440-cf55-a6390a587938.png)

# その他

言語切替が出来るサービスはぜんぶ英語にしてみる。








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
SiriKitについてリファレンスを読んでまとめてみた

# 概要
SiriKitが気になったのでリファレンスを見てちょっとまとめてみました。
(参考：[SiriKitリファレンス](https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/index.html))
現状使える領域が特定されており、領域によっては活用が少し難しいかもしれません。
以下、まとめです。

# Siriに対応するための必須事項
* Intents extensionの作成
* Info.plistでサポートするIntentsを指定

# UI
必須ではないが、Siri応答のUIを作成したい場合はIntents UI extensionを作成する。

# 処理の流れ
1. Siriがユーザーの音声に沿ったIntent Objectをextensionに送信。
2. 自作で用意したIntents extension内でIntent Objectの情報を元にhandlerを指定、responseを作成。

# 対応できる領域
* 指定できるIntentの領域は6つ
  (音声・ビデオ通話、メッセージ、支払い、写真、ワークアウト、乗車ブッキング)

* それぞれ対応できるinteractionの数が決まっている。
  (対応可能なinteractionの数は合計で17個。)
* (CarPlayも5個のinteractionに対応できるが、ここではかつあい。)

# 対応できるinteractionsの詳細
【Audio or video calling(through VoIP)】(3 interactions)
　- Start an audio call
　- Start a video call
　- Search the user’s call history

【Messaging】(2 interactions)
　- Send a message
　- Search for messages

【Payments】(2 interactions)
　- Send a payment to another user
　- Request a payment from another user

【Searching photos】(2 interactions)
　- Search for photos
　- Play a photo slideshow

【Workouts】(5 interactions)
　- Start a workout
　- Pause a workout
　- Resume a workout
　- End a workout
　- Cancel a workout

【Ride booking】(3 interactions)
　- Get a list of available rides
　- Book a ride
　- Get the status of a booked ride

# まとめ
* 対応できる領域が6つに限定されているので使うシーンを選ぶ。
* それぞれの領域で対応できるinteractionが指定されており、合計は17個。
* 最小限での対応はExtensionの作成とInfo.plistでの指定だけなので、そこまで手間ではなさそう。

# おまけ
調べている中で個人的に気になっているMapsについても書いてありその内容を見ていると、Mapsへの対応も上記のIntentsの仕様に準拠していてかつ、Ride bookingの部分にのみに記述があるため、Mapsに対応できる領域はRide bookingだけなのでは。。
(ここに関しては、全ての情報が追えている訳ではなく確定とはまだ思えないので情報が増えたら追記します。)
Fastlane + Crashlyticsにてmissing dSYMsとなる問題

BITCODEの関係なのかもしれないが、Fastlaneでビルドするようになってからなのか、CrashlyticsでIt looks like we are missing dSYMs to process crashes for the versions below.と言われるケースが発生するようになった。

<img width="835" alt="スクリーンショット 2016-06-15 0.17.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/6678/ecec6c99-554b-367a-d7c4-9a5e8e0a3887.png">

おそらく、iTunesConect側でBITCODEの処理が走るのだが、BITCODE化されたdSYMsが必要なので、FastlaneからアップロードしたタイミングではCrashlyticsにdSYMsがアップロード出来ないのだと思われる（？）

そこでBITCODEの処理後のdSYMsがiTunesConectで配布されているのだが、fastlaneにはdownload_dsymsというdSYMsの取得メソッドとupload_symbols_to_crashlyticsという、dSYMsをアップロードするコマンドが用意されているので、それを使うと簡単に処理することが出来る。
https://github.com/fastlane/fastlane/blob/0d5f5220a857090f8f966b2cad6119dc20b1a997/fastlane/docs/Actions.md#download_dsyms