OmniAICreator/Qiita-1.07M huggingface dataset:
iOS 11 の CLGeocoder geocodePostalAddress を試す

iOS 11 で追加される `CLGeocoder` の `geocodePostalAddress` を試してみました。既存の `reverseGeocodeLocation` と合わせて、住所と緯度経度とが相互に変換できるようになりそうです。

---

## コード

```swift
//: Playground - noun: a place where people can play

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

import UIKit
import CoreLocation // CLLocation, CLGeocoder
import Contacts // CNPostalAddress

// lat_long -> address

var cur = CLLocation(latitude: 35.66, longitude:139.75);

CLGeocoder().reverseGeocodeLocation(cur, completionHandler:
    {(placemarks, error) -> Void in
        if((error) != nil){
            print("Error", error!)
        }
        if let placemark = placemarks?.first {
            print("State:       \(placemark.administrativeArea!)")
            print("City:        \(placemark.locality!)")
            print("SubLocality: \(placemark.subLocality!)")
        }
})

// address -> lat_long

var postal = CNMutablePostalAddress()
postal.state = "Tokyo"
postal.city = "Minato"
postal.subLocality = "Shibadaimon"

CLGeocoder().geocodePostalAddress(postal, completionHandler: {(placemarks, error) -> Void in
    if((error) != nil){
        print("Error", error!)
    }
    if let placemark = placemarks?.first {
        print("latitude:    \(placemark.location!.coordinate.latitude)")
        print("longitude:   \(placemark.location!.coordinate.longitude)")
    }
})
```

---

## playground での実行結果

```
State:       Tokyo
City:        Minato
SubLocality: Shibakoen
latitude:    35.6600347
longitude:   139.7538893
```


---

## 参考

- [CLGeocoder - Core Location | Apple Developer Documentation](https://developer.apple.com/documentation/corelocation/clgeocoder)
- [[Swift] iOSの標準ライブラリだけで、郵便番号から住所を取得する - Qiita](http://qiita.com/k-yamada@github/items/5ce29b3c30397104461e)
AWS(Amazon EC2)のWebサーバーの設定

## 概要
AWS(Amazon EC2)のWebサーバーの設定方法です。
ターミナルからコマンドを打つことで書く設定をすることができます。


最初にec2-userからrootになりましょう。
```
$ sudo -i
```


## 言語ファイルの設定
言語を日本語に変更
```
# vim /etc/sysconfig/i18n 

```
vimなので、入力モードに変更して下記のように編集、コマンドモードに変更して保存します。
```
LANG=ja_JP.UTF-8
```

## タイムゾーンの設定
日本に設定

```
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

確認（JSTと出て入れば変更完了）
```
$ date
Thu Jul 13 14:06:12 JST 2017
```


## PHP
### インストール
```
# yum install -y php
```
確認
```
# php -v
```
言語ファイルを日本に変更
```
# vim /etc/php.ini
```
開いたファイルを/date.timezoneで検索し、;を外して'Asia/Tokyo'に設定します。
※タイムゾーンはApacheの設定と合わせておきましょう。

```php.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = 'Asia/Tokyo'
```
## MySQL
### インストール
```
# yum install -y mysql-server
```
自動起動を設定
```
# chkconfig mysqld on
```

### パスワードを設定
起動
```
# service mysqld start
```
動作確認

```
# service mysqld status
mysqld (pid  3101) を実行中...
```

ログインパスワード設定
```
mysql> set password for root@localhost=password('パスワード');
Query OK, 0 rows affected (0.00 sec)
```

ログアウト
```
mysql> exit
Bye
```
### 初期設定

初期設定（mysql_secure_installation）
```
# /usr/bin/mysql_secure_installation
```
対話形式で、ログインユーザーの設定などを設定
```
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
```

再起動
```
# service mysqld restart
```
PDFファイルのチェック

PDFファイルの末尾には決まった構造があります。これを確認することで、ファイルが途中で切れていないかを簡単にチェックできます。

必要最低限の構造だけを説明します。これだけではPDFの仕様を理解するには不足ですが、取っ掛かりにはなるかもしれません。

# 構造

PDFファイルの基本的な部分はテキストで記述されます。

※ ストリームという構造があり、その中にバイナリが直接埋め込まれます。今回の範囲を超えるため詳細は省略します。

最低限の構造を持った白紙のPDFファイルを示します。テキストエディタで打ち込んで改行コードをCRLFで保存すれば、PDFファイルとして開けます。

```text:blank.pdf
%PDF-1.2
1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj
2 0 obj <</Type/Pages/Count 1/Kids [3 0 R]>> endobj
3 0 obj <</Type/Page/Parent 2 0 R>> endobj
xref
0 4
0000000000 65535 f
0000000010 00000 n
0000000056 00000 n
0000000109 00000 n
trailer <</Root 1 0 R/Size 4>>
startxref
153
%%EOF
```

次の構造になっていることが分かります。

1. シグネチャ `%PDF-1.2`
2. オブジェクトの羅列 `番号 0 obj ... endobj`
3. クロスリファレンス `xref`
4. トレイラー `trailer`
5. クロスリファレンスのオフセット `startxref`
6. 番兵 `%%EOF`

`xref` と `trailer` はオブジェクトの1つとして埋め込まれている場合がありますが、`startxref` と `%%EOF` は必ず末尾に存在します。

※ 編集時に差分が追記されることがあり、`%%EOF` などがファイルの途中にも存在することがあります。今回の範囲を超えるため詳細は省略します。

# チェック

ファイルの末尾の `startxref` を確認することで、ファイルが途中で切れていないかを簡単にチェックできます。

F# で `startxref` の値を取得する例を示します。

```fsharp
open System
open System.IO
open System.Text

let readStartXref f =
    use fs = new FileStream(f, FileMode.Open)
    let bytes = Array.zeroCreate<byte> 64
    let pos = max 0L (fs.Length - int64 bytes.Length)
    fs.Position <- pos
    let size = fs.Read(bytes, 0, bytes.Length)
    let text = Encoding.ASCII.GetString(bytes, 0, size)
    let p = text.LastIndexOf "startxref" |> int64
    if p < 0L then p else
    fs.Position <- pos + p
    use sr = new StreamReader(fs, Encoding.ASCII)
    try
        ignore <| sr.ReadLine()
        Int64.Parse(sr.ReadLine())
    with _ -> -1L
```

とりあえずファイルが途中で切れていないかを確認するだけなら、これで用は足ります。

しかし正確には `startxref` のオフセットを取得するだけでは不足で、

* オフセットが正常な範囲内か
* 指す先にクロスリファレンスが存在しているか
* クロスリファレンスが正常な形式か

などをチェックする必要があります。そのためにはクロスリファレンスのパーサーを実装する必要があります。

※ クロスリファレンスがオブジェクトに埋め込まれている場合、圧縮データを展開する必要があります。今回の範囲を超えるため詳細は省略します。

# GUI

手軽にチェックするための簡易GUIです。

* [CheckPDF.fsx](https://bitbucket.org/snippets/7shi/q474By)

# 参考

- [手書きPDF入門](http://www.kobu.com/docs/pdf/pdfxhand.htm)
ECS で Spot Fleet を使う時の設定

`/etc/ecs/ecs.config` にこのインスタンスがどのECS Clusterに紐付くのか記述してあげないといけないけど、毎回忘れてしまうので備忘録。

`User data` にこうやって書いておけば良い。

```
#!/bin/bash
sudo echo ECS_CLUSTER=cluster_name >> /etc/ecs/ecs.config
```
NativeScriptでAndroid/iOS別にソース分割する方法

iOS用に書いていたNativeScriptのプロジェクトをAndroidで実行したところ、クラス定義でエラーが発生。

ちなみにこんなソースです。

```ts:camera.ts
class AVCapturePhotoCaptureDelegateImpl extends NSObject implements AVCapturePhotoCaptureDelegate {
```

出たエラーは次のようなモノ(正確ではないですが、イメージ)

```
Class not found: NSObject
```

NSObjectはiOSのAPIのクラスですから、Androidで実行時エラーになるのは当たり前です。
通常なら platform の判定をしたり、 ios オブジェクトがあるかどうか確認したりして処理を分けるところ。ですが、ここはクラスの宣言なので、そういう分岐ができません。

はて困った。

そういう時に、NativeScriptでは、iOS用、Android用で読み込ませるソースファイルを分けることが出来るんです。

# iOS用のソースは 〜.ios.ts にリネーム
まず今のソースはiOS用なので、 camera.ts を、**camera.ios.ts** にリネームします。

# Android用のソースは 〜.android.ts にリネーム
次にAndroidで実行されたときに、エラーにならないように、「.android.ts」を付けたファイルを作成します。今回は **camera.android.ts** になります。

# TypeScriptの定義ファイル 〜.d.ts を作成
最後に、TypeScriptの定義ファイルとして **camera.d.ts** を作成して、クラスやメソッドの定義を記述しましょう。このファイルが無いとコンポーネントをAppModuleで import することが出来ないので必須です。

例えばcameraコンポーネントは、画面にカメラプレビューを表示する画面Componentです。別クラスからインスタンス生成されたりメソッドを呼ばれたりはしないので、以下のような単純なものでOKです。

```ts:camera.d.ts
export class CameraComponent {

}
```

# まとめ

ソース分割をすると、このようなファイル構造になります。

（例) component.ts をプラットフォーム別に分割する場合

component.ios.ts ⇒　iOS用のソース
component.android.ts ⇒　Android用のソース
component.d.ts ⇒ TypeScript用の型定義ファイル
[CentOS][oVirt] oVirt 4.1.1を4.1.3へアップグレード

CentOS 7上で動いているoVirt 4.1.1を4.1.3へアップグレードしました。

手順としてはリリースノートにあるとおりです。
http://www.ovirt.org/release/4.1.3/#install--upgrade-from-previous-versions


# oVirt Enginのアップグレード

## 手順1

setup関係のものをアップグレード

```shell-session
# yum update "ovirt-*-setup*"
```

## 手順２

`engine-setup`を実行

```shell-session
# engine-setup
```

いくつかわらわらと質問が表示されます。

```shell-session
[ INFO  ] Checking for product updates...
          Setup has found updates for some packages:
(snip)
          do you wish to update them now? (Yes, No) [Yes]:
```

```shell-session
[ INFO  ] Checking for an update for Setup...

          --== NETWORK CONFIGURATION ==--

          Setup can automatically configure the firewall on this system.
          Note: automatic configuration of the firewall may overwrite current settings.
          Do you want Setup to configure the firewall? (Yes, No) [Yes]:
```

```shell-session
          --== DATABASE CONFIGURATION ==--

          The detected DWH database size is 155 MB.
          Setup can backup the existing database. The time and space required for the database backup depend on its size. This process takes time, and in some cases (for instance,
 when the size is few GBs) may take several hours to complete.
          If you choose to not back up the database, and Setup later fails for some reason, it will not be able to restore the database and all DWH data will be lost.
          Would you like to backup the existing database before upgrading it? (Yes, No) [Yes]:
```

```shell-session
          --== OVIRT ENGINE CONFIGURATION ==--

          Perform full vacuum on the engine database engine@localhost?
          This operation may take a while depending on this setup health and the
          configuration of the db vacuum process.
          See https://www.postgresql.org/docs/9.0/static/sql-vacuum.html
          (Yes, No) [No]: Yes
```

```shell-session
[ INFO  ] Stage: Setup validation
          During execution engine service will be stopped (OK, Cancel) [OK]:
```


すべて「Yes」と答えて問題ありませんでした。

# ホストのアップグレード

oVirt Engineにログインし、データセンターツリーのホストタブを選ぶと、アップデートが存在することが表示されます。

InstallationメニューからUpgradeを選びます。

![ovirt-host-upgrade.png](https://qiita-image-store.s3.amazonaws.com/0/59475/e1c49737-9431-720d-8ecc-343e42268a46.png)

仮想マシンが動いているとアップグレードできません。
マイグレートするか、シャットダウンします。
Google Analyticsのレポートのショートカットが左ペインから無くなったので探したら保存済みレポートに代わってた

# で、でたーｗタイトルで全部言奴〜ｗｗｗ

Google Analyticsの情報古いままなんでアタフタした。

https://support.google.com/analytics/answer/2676996?hl=ja
aタグにdisabled属性を与えた際のIEとChromeで挙動の差

#aタグにdisbled属性
多くの場合、ブラウザ上でボタンを表示する時はbuttonタグを使用すると思う。
buttonの形にとらわれずにcssにより自由なデザインでボタンを配置したい場合、aタグをデフォルトの挙動を排除した状態にしてクリックイベントにやりたい挙動を実装することがあると思う。
このようにして作成したaタグのボタンを非活性とするためdisabled属性を設定した際に、IEとChromeで挙動が異なることに気付いたためメモ。

# 実行環境
- OS：Windows(7、10)
- ブラウザ：IE(10、11)、Chrome
- その他：HTML5、CSS3、Jersey（サーバ側フレームワーク Strutsベース）

# IEの挙動
狙った通りの挙動。
クリックしてもクリックイベントにしかけた処理は呼び出されない。
見た目は変わらないため、disabled属性が存在する場合のスタイルを定義する必要がある。

# Chromeの挙動
クリックするとクリックイベントにしかけた処理が呼び出されてしまう。
IE同様見た目は変わらないため、disabled属性が存在する場合のスタイルを定義する必要がある。

# aタグにdisabled属性はない！
調べたところ、aタグにはdisabled属性はないとのこと。。。
参照：https://developer.mozilla.org/ja/docs/Web/HTML/Element/a

IEでdisabled属性が効いているのは、IEが独自路線を突っ走っているからと思われる。。。

# aタグを非活性にするには
そんなわけで、非活性にするのは多くのブラウザでタグの指定では実現できないため、javascriptで動的に非活性としてあげる必要がある。
（クロスブラウザ対応が不要で対応ブラウザがIEのみの場合は問題ないかもだが、いつ独自実装を変更するか分からないのでIEのみ対応でもjavascriptを使って実装するのが無難と思われる。。）
Google フォームのアンケート結果ページ、長文回答を畳まず全てページ内に表示させる方法

「Google フォームで集めたアンケート結果をメンバーに共有したい。結果ページをPDFで保存して送ろう」

と思ったのですが、Google フォームの回答サマリーページの長文回答枠は、結果の一部しか表示さません。
ブラウザで見る分には枠内でスクロールすればOKですが、[印刷] - [PDFで保存] すると見えない部分は見えないままです。

![a6e7bde3-e295-48dd-a034-dead856529b2.jpg](https://qiita-image-store.s3.amazonaws.com/0/4584/ef91cc1e-5553-e627-0f2f-140dbe84089e.jpeg)

このままだと、困る。ということで、細工しました。

# ブラウザの開発者ツールで、対象 div 要素の max-height を disable にする。

<img width="672" alt="disable.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/4584/ea309f4e-8259-08fa-9959-d9e96c9db782.jpeg">

ブラウザ（Chrome, Vivaldi）の開発者ツールを起動して、長文回答枠のdiv枠を特定。
`max-height: 400px;` をOFFにします。そうすると、回答枠が縦に広がり、全回答を一覧できるようになります。

あとは、PDFにするなり、スクショにするなりどうぞ。
PythonからProcessingへソケット通信でデータを送る

## 概要

簡単にプロトタイピングをするときに、ややこしい処理をPythonに、描画をProcessingに任せると楽に作れる。良い連携の仕方を探してたら、ソケット通信でシンプルに作れた。もっと良い方法があったら教えてください。

## コード

PythonからProcessingへ、一方的にテキストメッセージを送るだけのコードを、サンプルとして以下に。Processing側を先に立ち上げて、続けてPython側を実行すると、Processingの標準出力にメッセージを出力する。

### Processing(受信側)

```java:conenctWithPython.pde
import processing.net.*;

int port = 10001; // 適当なポート番号を設定

Server server;

void setup() {
  server = new Server(this, port);
  println("server address: " + server.ip()); // IPアドレスを出力
}

void draw() {
  Client client = server.available();
  if (client !=null) {
    String whatClientSaid = client.readString();
    if (whatClientSaid != null) {
      println(whatClientSaid); // Pythonからのメッセージを出力
    } 
  } 
}
```

### Python(送信側)

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

import socket

host = "127.0.0.1" #Processingで立ち上げたサーバのIPアドレス
port = 10001       #Processingで設定したポート番号

if __name__ == '__main__':
    socket_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #オブジェクトの作成
    socket_client.connect((host, port))                               #サーバに接続

    #socket_client.send('送信するメッセージ')                #データを送信 Python2
    socket_client.send('送信するメッセージ'.encode('utf-8')) #データを送信 Python3

```
Android Studio で Coverage がうまく表示されないときにチェックする場所

以下を実行したときに一部のクラスの数値しか表示されなくなった

![スクリーンショット 2017-07-14 16.39.04.png](https://qiita-image-store.s3.amazonaws.com/0/30241/da60545b-0fc4-456c-3a41-bffac2d5d4b9.png)

いろいろ探したがうまく見つけられなかった
そこで原点に戻り `Run/Debug Configurations` をチェックしたら
予想通り原因はここにあった
`Code Coverage` の `Package and classes to record coverage data` に一部のクラスが登録された状態だった

何かの拍子で設定してしまっていたらしい

全部解除して再設定したらいけた
.NETでCOMポートのポート番号を取得する方法(WMIを使用する)

## 前置き
RS-232で通信してはかりの重量を取得するアプリを作ってるけどCOMポート番号が稀に変わる事があるので自動で設定できるようにしたいなぁと。

そしたらWMIを使ったら取得できるみたいだなぁと。

## WMIとは
Windows Management Instrumentation (WMI) で、ハードウェアやソフトウェアの情報取得するインターフェース。詳しくは[ココ](http://www.wmifun.net/step/vb6_01.html)

Powershellで使用すると次のようになる。下記はデバイス情報を取得している。

```ps1
Get-WmiObject -Query "SELECT * FROM Win32_PnPEntity"
```

デバイスマネージャなんか開くのめんどくさいぜという方のためにあるような物。

## c#でCOMポート番号取得

ManagementObjectSearcher クラスを使うとWMIを使用できる。

```csharp
using System;
using System.Management;

namespace CheckDeviceConnectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = "通信ポート";
            DeviceChecker dc = new DeviceChecker();
            dc.Name = name;
            dc.PartialMactch = true;

            if (dc.IsDeviceConnected())
            {
                Console.WriteLine("Port : " + dc.GetPortName());
            }
            else
            {
                Console.WriteLine("接続されていません。");
            }

            Console.Read();
        }
    }

    class DeviceChecker
    {
        public string Name { get; set; }
        // 部分一致
        public bool PartialMactch { get; set; }

        private string QueryString
        {
            get
            {
                if (PartialMactch)
                {
                    return "SELECT * FROM Win32_PnPEntity WHERE Name LIKE \"%" + Name + "%\"";
                }
                else
                {
                    return "SELECT * FROM Win32_PnPEntity WHERE Name =" + Name;
                }
            }
        }

        public DeviceChecker()
        {
            PartialMactch = true;
        }

        // 接続されてるか確認
        public bool IsDeviceConnected()
        {
            ManagementObjectSearcher mos = new ManagementObjectSearcher();

            mos.Query.QueryString = QueryString;

            var moc = mos.Get();

            return moc.Count > 0;
        }

        // ポート番号取得
        public string GetPortName()
        {
            ManagementObjectSearcher mos = new ManagementObjectSearcher();
            var check = new System.Text.RegularExpressions.Regex("(COM[1-9][0-9]?[0-9]?)");

            mos.Query.QueryString = QueryString;

            var moc = mos.Get();

            foreach(var m in moc)
            {
                string value = m.GetPropertyValue("Name") as string;
                if(value == null)
                {
                    continue;
                }

                if (check.IsMatch(value))
                {
                    var match = check.Match(value);
                    return match.Captures[0].Value;
                }
            }

            return null;
        }
    }
}

```
JavaScriptフレームワーク入門 93ページ

printという関数が定義済みのため（予約語なのか？）
以下のように変更します。
Number((<HTMLInputElement>document.querySelector("#text1")).value)
の部分については<a href="http://qiita.com/hikotaro_san/items/ae09a28babb6bd504ee0">こちら</a>と同じ理由です。

```TypeScript
function prt(n:number,f:(number)=>number):string{
    var re:number = f(n);
    return '<p>結果:' + re + '</p>';
}
function doClick():void {
    let val:number = Number((<HTMLInputElement>document.querySelector("#text1")).value) * 1;
    let msg:Element = document.querySelector("#msg");

    let a:(nubmer)=>number = (n:number) => n * n;
    let b:(number)=>number = (n:number)=>{
        let total:number = 0;
        for(let i:number = 1;i <= n;i++){
            total += i;
        }
        return total;
    };
    msg.innerHTML = prt(val,b);
}
```
fastlaneで "incompatible character encodings: US-ASCII and UTF-8" エラー

swiftの開発でfastlaneを利用しています。
fastlaneを実行すると↓のようなエラーが発生。

```
bundler: failed to load command: fastlane (/Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/bin/fastlane)
Encoding::CompatibilityError: [!] incompatible character encodings: US-ASCII and UTF-8
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/fast_file.rb:20:in `tr!'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/fast_file.rb:20:in `initialize'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/lane_manager.rb:12:in `new'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/lane_manager.rb:12:in `cruise_lane'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/command_line_handler.rb:30:in `handle'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/commands_generator.rb:104:in `block (2 levels) in run'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/commander-fastlane-4.4.5/lib/commander/command.rb:178:in `call'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/commander-fastlane-4.4.5/lib/commander/command.rb:153:in `run'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/commander-fastlane-4.4.5/lib/commander/runner.rb:476:in `run_active_command'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:39:in `run!'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/commander-fastlane-4.4.5/lib/commander/delegates.rb:15:in `run!'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/commands_generator.rb:303:in `run'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/commands_generator.rb:42:in `start'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/fastlane/lib/fastlane/cli_tools_distributor.rb:66:in `take_off'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/gems/fastlane-2.44.1/bin/fastlane:20:in `<top (required)>'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/bin/fastlane:22:in `load'
  /Users/iosbuild/work/ra-mail/.bundle/ruby/2.4.0/bin/fastlane:22:in `<top (required)>'
```

エラーの内容を見て見ると、
```
incompatible character encodings: US-ASCII and UTF-8
```
とある。

```
$ export LANG=ja_JP.UTF-8
```
とLANGの設定をしてあげれば、エラーが解消。

無事にfastlaneのコマンドを実行できた。
SET FEEDBACK ONLY と SET TIMING ON で SQL の結果を表示せずに性能計測(Oracle Database 12cR2新機能)

SQL*Plus の 12cR2の新機能 で、SET FEEDBACK ONLY をセットすると、
結果を表示せずに行数だけを表示できるんやで彡(ﾟ)(ﾟ)

> SQL*Plus ユーザーズ・ガイドおよびリファレンス リリース2 (12.2) E81324-02
> SET FEED[BACK]
> http://docs.oracle.com/cd/E82638_01/SQPUG/SET-system-variable-summary.htm#GUID-2C90B73B-A7E0-4357-9382-5EBAF53BF528
> ：
> ONLYにより、問合せで選択された行の数が返されます。
> ：

試しに実行してみると…

```sql
SQL> SET TIMING ON;
SQL> SET FEEDBACK ONLY;
SQL> SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 100;

100 rows selected.

Elapsed: 00:00:00.00
```

結果が表示されずに SET TIMING ON の Elapsed を確認できたやで彡(^)(^)
Raspbian でGUIで自動起動

キオスクみたいに使いたい。
リソース考えるとSDL使ってフレームバッファ上で動かしたいけれども、 X-window 使って
自動起動して単一アプリを動かすような。

# LXDE の場合

ウィンドウマネージャにLXDEを使う方法。

```

~/.config/lxsession/LXDE-pi/autostart
```

にコマンドを記述する。

autostart の書式として、行頭に@が必要。

また、スクリーンセーバを切っておく必要がある。

```

@xscreensaver -no-splash
```

次に、スクリーンセーバ以外の省電力設定も切っておきます。これらの行をスクリーンセーバー行の下に追加します。

```

@xset s off
@xset -dpms
@xset s noblank
```

https://www.danpurdy.co.uk/web-development/raspberry-pi-kiosk-screen-tutorial/
ここには、以下のようなコマンドも追加していました。

```

@sed -i 's/"exited_cleanly": false/"exited_cleanly": true/' ~/.config/chromium/Default/Preferences
```

# matchbox の場合

ウィンドウマネージャに matchbox を使う方法

まず、X-window が自動起動になっている場合は

```

 sudo raspi-config 
```
として一旦CUI起動にしておきます（もしかしたらこれをしなくてもいいのかもしれませんが試していません）。

matchboxをインストールします

```

sudo matchbox-window-manager
```

```

vi ~/.xinitrc
```
として、以下のようなスクリプトを書きます。

```

#!/bin/sh

matchbox-window-manger
```

こうしてから startx で起動するとマウスカーソルのみの画面になりました。

.xinitrc に起動したいアプリを記述すればいいのでしょうが、まだアプリ作ってないのでとりあえず

```

sudo apt-get install matchbox-Desktop
```
として、
~/.xinitrcに

```

matchbox-Desktop
```
とすれば、ファイルブラウザが起動しました。
【Git初心者が教える】SVNを使ってる人向けのGit入門

# はじめに(読み飛ばしてもいいよ)
* これは、__「SVNに触ったことがあるけどGitはわからん！」__という人のための記事です。

* __Git初心者の私の備忘録でもあるので温かい目でご覧ください__。

# 参考サイト
参考にしたサイトは上のほうに書いたほうが個人的に見やすいので上に書いてます

[Gitとは? – Gitの仕組みを速攻で理解する](http://wp.tech-style.info/archives/506)

# GitとSVNの違い
ざっくり

|  			 | SVN | Git |
|:-----------|:------------|:------------|
| 分類 | 集中型バージョン管理システム | 分散型バージョン管理システム |
| 学習コスト | 低い | 高い |
| 管理するソース | 1か所 | 複数 |

他にも色々あるのですが、とりあえず要所のみをピックアップしました。
どっちにも良いところ、悪いところがあると思いますが、__Gitは学習コストが一番のネック__だと思います。
（Gitrouble(ギットラブル)とかいう言葉もあるくらいなんで...。）

# そもそも、分散型バージョン管理システムって何？
初めてGit触ったときに思いました。
図で見るのがわかりやすいので、図にします。

## SVN(集中型)
<img src="https://qiita-image-store.s3.amazonaws.com/0/182357/c4e1acc3-026c-8980-7297-b84efdb28bb7.jpeg" width="60%">

## Git(分散型)

<img src="https://qiita-image-store.s3.amazonaws.com/0/182357/6bf1e6dc-3e69-da65-ed18-5304e5854818.jpeg" width="60%">

__Gitのほうが1階層多い__ことがわかります。
ローカルリポジトリとかいうのが増えてますね。
このローカルリポジトリというのがあるお陰で、
__リモートリポジトリに反映されること無く__、各ユーザごとにソースを自由にコミットできます。
(反映したいコミットだけ反映できる)
この辺りは、使ってみると便利さに気付けると思います。

# 覚えておくべきGit用語
最初、使った時に用語が多すぎて辛かったので、__最低限必要なもの__をピックアップ。
これを理解してれば、ある程度は使えると思います。

* __リモートリポジトリ__
SVNと同様、一箇所に存在するリポジトリ

* __ローカルリポジトリ__
各自のローカルの中にGitで作成するリポジトリ

* __クローン__
リモートリポジトリをローカルリポジトリとしてローカルにコピー

* __コミット__
__作業フォルダからローカルリポジトリに__ソースをコミット

* __プッシュ__
__ローカルリポジトリからリモートリポジトリに__ソースをコミット

* __フェッチ__
リモートリポジトリからローカルリポジトリへバージョン履歴を更新

* __プル__
__リモートリポジトリからローカルリポジトリ__のバージョン履歴と作業フォルダを更新

* __ブランチとマージ__
SVNと一緒

## さっきの図に当てはめてみる

### SVN
<img src="https://qiita-image-store.s3.amazonaws.com/0/182357/7211e9d2-ce6c-c43b-5056-52909712b46c.jpeg" width="60%">

### Git
<img src="https://qiita-image-store.s3.amazonaws.com/0/182357/6b4c2113-888d-ca7e-0de4-fb974acbe9d2.jpeg" width="60%">

# まとめ
とりあえず、ざっくり用語と原理をまとめてみました。

[TortoiseGit](http://tracpath.com/bootcamp/learning_tortoisegit.html)等GUIツールでバージョン管理する分にはこの程度わかってれば使えると思います。

慣れてきた頃にコマンドラインからGitを操作できるようになれば、__ほぼ__怖いもの無しでしょう！
[こわくないGit](https://www.slideshare.net/kotas/git-15276118)

カッコイイんで、なんでも使える人になりましょう！
ElectronのBrowserWindowでDOMにアクセスする

ドキュメント内に要素があるかどうかで分岐したかった。

```javascript
let window = new browserWindow({width: 400, height: 400});

window.loadURL('http://localhost:3000/');

window.webContents.on('did-finish-load', function() {
  window.webContents.executeJavaScript('document.querySelector("#dom-id")', function (result) {
    if (result != null) {
      console.log('dom-id見つかったよ');
    }
  }
}
```
Lie-Trotter公式における二次の対称分解

# はじめに

非可換な演算子$X, Y$について、以下のLie-Trotter公式が成り立つ。

```math
\exp(h(X+Y)) = \left( \exp(hX/n)\exp(hY/n) \right)^n + O\left(\frac{h^2}{n}\right)
```

ここで$n$は分解数(トロッター数)である。この公式は$h$に関するテイラー展開としては$h$の一次までしか正しくなく、それを反映して打切り誤差は$O(h^2/n)$となる。ここで、展開の形を工夫すると次数を上げることができる。

```math
\exp(h(X+Y)) = \left( \exp(hX/2n)\exp(hY/n)\exp(hX/2n) \right)^n + O\left(\frac{h^3}{n^2}\right)
```

これは二次の対称分解と呼ばれ、テイラー展開が$h^2$の次数まで正しい。それを反映して打切り誤差が$O(h^3/n^2)$となる。

本稿は、この近似精度の向上を確認する。

ソースは
https://github.com/kaityo256/lie-trotter-sample
においてある。

# ソースの解説

やってることは[前の記事](http://qiita.com/kaityo256/items/b7e0568cad8b86c5c8ea)と同じなのでそちらを参照。一次の分解の場合は

```py
def trotter(X,Y,Z,h,n):
    eZ = calc_exp(Z,h)
    eX = calc_exp(X,h/n)
    eY = calc_exp(Y,h/n)
    S = np.diag(np.ones(d))
    eXeY = eX.dot(eY)
    for i in range(n):
        S = S.dot(eXeY)
    return linalg.norm(eZ - S)/linalg.norm(eZ)
```

と書いていたのを、二次の対称分解の場合は

```py
def trotter2nd(X,Y,Z,h,n):
    eZ = calc_exp(Z,h)
    eX = calc_exp(X,h/n*0.5)
    eY = calc_exp(Y,h/n)
    S = np.diag(np.ones(d))
    eXeYeX = eX.dot(eY.dot(eX))
    for i in range(n):
        S = S.dot(eXeYeX)
    return linalg.norm(eZ - S)/linalg.norm(eZ)
```

と書くだけ。難しいことは無いと思う。

# 結果

二次の対称分解を行った結果は以下の通り。

まず、打切り誤差の時間刻み$h$依存性。$n$を1,2,4とし、それぞれについていろんな$h$の値で打切り誤差を評価する。

![h_2.png](https://qiita-image-store.s3.amazonaws.com/0/79744/c07cc615-2044-7a9d-4afc-084fce82a96c.png)

分解数$n$に依らずに$O(h^3)$と、精度が向上していることがわかる。

次は分解数$n$の依存性。時間刻み$h$は$1.0$固定。

![n_2.png](https://qiita-image-store.s3.amazonaws.com/0/79744/93fea0df-09a5-953e-25ad-698acf5d42e1.png)

誤差が$O(1/n^2)$と、こちらも精度が向上していることがわかる。

# まとめ

トロッター分解において、二次の対称分解を用いると精度が向上することを確認した。ここで、

```math
\begin{align}
U_X(h) &= \equiv \exp(h X) \\
U_Y(h) &= \equiv \exp(h Y)
\end{align}
```

と書くと、$n=3$の場合の一次の分解は

```math
\exp(h(X+Y)) \sim U_X(h/3)U_Y(h/3)U_X(h/3)U_Y(h/3)U_X(h/3)U_Y(h/3)
```

と書ける。$U_X(h_1)U_X(h_2) = U_X(h_1 + h_2)$が成り立つことから、二次の対称分解は

```math
\exp(h(X+Y)) \sim U_X(h/6)U_Y(h/3)U_X(h/3)U_Y(h/3)U_X(h/3)U_Y(h/3) U_X(h/6)
```

と、一次の分解に比べて左端の演算子を半分だけ右端に移動させた形になっている。$n$が増えても、両者の違いはこの端っこだけ。たったこれだけのことで演算子の近似精度が$h$、$n$ともに一次上がるって不思議じゃないですか？[^1]

[^1]: 職場の人には「当たり前というか、よくあることじゃないですか」って言われたけど・・
「単体テスト」を手抜きするbash script


# 背景
何度も何度も単体テスト流すのが面倒くさかったので
今の現場で作ったものです。

手抜きが主目的なので、さくっと作る。
・コマンドで起動できる機能の単体テスト用
・完全オレオレ！
・他人が読めなくてｏｋ・汚くてもｏｋ！
・３０分悩むなら諦める

以下のbashコードは要点だけぬいたもので、動作確認してないです。


# あいことばを忘れない

```bash
#!/bin/bash
set -Ceu
```

# 変数定義

入力・ログ置き場とかを変数・定数化
local を使う


# ファイルがなければ終了

```bash
if [ ! -e ${FILE} ];then
  echo "${FILE}が無い"
  exit 1
fi
```

# 出力ファイル用Directryをmkdir

```bash
if [ ! -e "${logDir}" ]; then
  mkdir "${logDir}"
fi
```

# ファイル群をlogfileに出力しとく

```bash
ls -l ${inputDir} > ${LOGFILE}
echo -e \n\n >> ${LOGFILE} #見やすいよう改行いれただけ
```

# 実行！

```bash
sh hogehoge.sh 2&1 | tee -a ${LOGFILE}
local returnCodes=${PISESTATUS[@]} #bashのみ
local procTime=${SECONDS} #bashのみ　起動してから今までの時間を秒で取得
local procMin=$(( $((${SECONDS} / 60)) + 1))
```

# ログファイルを退避

testshellを蹴った時刻の後に更新されたログファイルを全部とってきます。

```bash
find "${logDir} -maxdepth 1 -name *.log -mmin ${procMin} | xargs -i cp -p {} ${logWorkDir}
```

# 終了メッセージ表示

```bash
echo "〇〇テスト終了します ReturnCodes[$returnCodes]"
exit 0
```


# ↑を複数回ぶん回す

```bash
cat ${csvFile} | while read line
do
  echo $line
  local array=(`echo $line | tr -s ',' ' '`)
  # テストしたいコマンド-------------
  sh unitTest.sh ${array[@]}
  #-------------------------------------
done
exit 0
```

shell職人さんからのツッコミ歓迎！
わかりやすいGitflowの開発手法

## 概要
### Gitflowとは
masterやdevelopなど複数のブランチを用意し、効率的にチームで開発していく手法です。
メリットは、チームで共通の認識のもとに開発ができるます。そのため、開発のステータスがわかりやすくなります。

### 主なブランチ
ブランチは下記のようになります。

|名称  |用途  |
|---|---|
|master  |マスターブランチ  |
|release  |リリースブランチ  |
|develop  |開発元ブランチ  |
|feature  |開発用ブランチ  |
|hotfix  |緊急対応用ブランチ  |

## SourceTreeでGitflow
SourceTreeでGitflowを使うことができます。


### 準備
「SourceTree」→「リポジトリ」→「Git flow/ Hg flow」→「リポジトリの初期化」をクリックします。

※Sourcetreeの機能でGitflowを使うとdevelopへのプルリクエストが出来ません。
プルリクまで行う場合はSourceTreeのGitflowの機能を使わない方が良いかと思います。

### Feature（開発）
Featureブランチでは、開発を行います。developブランチよりfeatureブランチを切って、個別に機能開発をしていきます。

#### 1. featureブランチを切る
「SourceTree」→「リポジトリ」→「Git flow/ Hg flow」→「新規フィーチャーを開始」をクリックします。名前をつけてOKをクリックします。

#### 2. featureブランチで開発を行う
このブランチで開発します。

#### 3. developブランチにマージする
ローカルで開発を行い、きちんと動作しているか確認します。
問題なければ、コミットとプッシュを行います。
その後「Sourcetree」→「リポジトリ」→「Git flow/ Hg flow」→「フィーチャーを終了」をクリックします。そうするとdevelopにマージされます。

※コミットを忘れてマージしようとすると下記のメッセージが出てます。

```
fatal: Working tree contains unstaged changes. Aborting.
```

### Release（リリース）
Releaseブランチでは、masterブランチにdevelopブランチをマージさせて、リリースのタグ付けをします。

#### 1. 新規リリース
「SourceTree」→「リポジトリ」→「Git flow/ Hg flow」→「新規リリース」をクリックします。
バージョンをつけてOKをクリックします。

#### 2. Verを追加（必要な場合のみ）
開発用のファイルにVerの記載がある場合は、このバージョンを変更します。

#### 3. masterブランチにマージする
「SourceTree」→「リポジトリ」→「Git flow/ Hg flow」→「リリースを終了」をクリックします。
タグをつけてOKをクリックします。
そうするとmasterにマージされます。
artilleryで性能試験をする

# artilleryで性能試験をする

- https://artillery.io
- node.js製のload test(性能試験)ツール

## Intall

```
npm install -g artillery
```

## [Getting Started](https://artillery.io/docs/gettingstarted.html#)

yamlファイルでテストシナリオを定義するので、Getting Startedにならってhello.yml を作成します

```yaml
config:
  target: 'https://artillery.io'
  phases:
    - duration: 60
      arrivalRate: 20
  defaults:
    headers:
      x-my-service-auth: '987401838271002188298567'

scenarios:
  - flow:
    - get:
        url: "/docs"
```

テスト実行はyamlファイルを指定してrunするだけです

```
artillery run hello.yml
```

10秒ごとに以下のようなレポートが出力されます

```
# artillery run hello.yml
Log file: artillery_report_20170714_045591.json

Phase 0 started - duration: 60s

Report for the previous 10s @ 2017-07-14T04:55:54.982Z
  Scenarios launched:  179
  Scenarios completed: 144
  Requests completed:  305
  Concurrent users:    62
  RPS sent: 36.88
  Request latency:
    min: 494.2
    max: 3676.2
    median: 671.6
    p95: 3491.2
    p99: 3627.1
  Scenario duration:
    min: 1138.6
    max: 5266.1
    median: 2172.4
    p95: 4683.3
    p99: 5227.6
  Codes:
    200: 144
    302: 161

```

テストが完了するとまとめも出力されます

```
all scenarios completed
Complete report @ 2017-07-14T04:56:48.791Z
  Scenarios launched:  1200
  Scenarios completed: 1200
  Requests completed:  2400
  RPS sent: 38.05
  Request latency:
    min: 487.9
    max: 7689.1
    median: 666.7
    p95: 1686.4
    p99: 3491.8
  Scenario duration:
    min: 1107.4
    max: 9208.1
    median: 2163
    p95: 3250
    p99: 5154.5
  Scenario counts:
    0: 1200 (100%)
  Codes:
    200: 1200
    302: 1200
```

jsonファイルも出力されるので、これをもとにレポート作成します

```
# ls
artillery_report_20170714_045591.json  hello.yml

# artillery report artillery_report_20170714_045591.json
Report generated: artillery_report_20170714_045591.json.html

# ls
artillery_report_20170714_045591.json  artillery_report_20170714_045591.json.html  hello.yml
```

HTMLのレポートをブラウザで開きます

![capture20170714.png](https://qiita-image-store.s3.amazonaws.com/0/38157/28dd5e52-3796-8ce7-8b5d-206584e7bbd4.png)

Request per second とかHTTP codeのグラフも見れます

![capture20170714_2.png](https://qiita-image-store.s3.amazonaws.com/0/38157/e0eeb648-c324-486d-7346-0d12feefd374.png)



すごく簡単でした！

Getting startedな内容でしたが、
シナリオの書き方と独自スクリプトの利用まで次回に書いてみます
AFNetworking の failureブロックで response の body を取得する方法

#やりたいこと
AFNetworking の failureブロックで response の body を取得したい

#方法
以下の方法で取得可能。

```objc
} failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSData* data = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
        NSString* body = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@",body);
}];
```
SmartGit >Changesペインにおいて日本語フォントが小さい > Meiryo UIにする

```txt:動作環境
Windows 7 Pro (32bit)
SmartGit Version 17.0.4 #10132
```

SmartGit を試用中。

Changesペインにおいてファイルの変更箇所が表示される。

ShiftJISの日本語コードは表示はされるが、フォントサイズが小さくなっているため漢字がつぶれた状態になる。

~~漢字コードのフォントだけサイズを大きくする方法があるかは不明~~。

### 設定変更

Edit -> Preferences -> User Interface > Built-in Text Editors においてFontタブがある。

Lucida Console となっているところをMeiryo UIに変更したら、日本語が適度な大きさになった。

Font Sizeは9のまま。
Ajaxでhtmlの部分更新

<h1>概要</h1>
Ajaxを使ってブラウザを更新せずにhtmlの一部だけを数秒毎更新する方法です。
チャットとかをイメージしてもらえると、分かりやすいかと思います。
本当はDBとかに値が入ったら更新というのがベストですが、
簡易版ということで。

<h1>内容</h1>
prototype.jsを使用。

html

```
<html>
  <body>
    test
    <div id="test"></div> // ここに通信結果が定期的に挿入される
  </body>
</html>
```
Ajax

```
<script type="text/javascript" src="js/prototype.js"></script>
  <script type="text/javascript">
      new Ajax.PeriodicalUpdater(
        'test', // 返り値を挿入するidを指定
        './xxx.html', // 非同期通信を行いたいURL
        {
          method: 'get',
          frequency: 2 // 何秒毎に通信を行うか
        }
      )
    </script>
```
Ajaxでpost送信

<h1>内容</h1>
id="ajax-button"のボタンを押すと、
指定のURLに3秒毎に"param1"と"param2"を送信する。
成功したら"ok"のアラートを、失敗したら"error"のアラートを出す内容です。

```
$( function() {
    $('#ajax-button').click(
    function() {
        var hostUrl= 'http://localhost:8000';
        var param1 = 1;
        var param2 = 10;
        $.ajax({
            url: hostUrl,
            type:'POST',
            dataType: 'json',
            data : {parameter1 : param1, parameter2 : param2 },
            timeout:3000,
        }).done(function(data) {
                          alert("ok");
        }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
                         alert("error");
        })
    });
} );
```

これでいらない内容を消したり、paramに変数を入れたりすればOK！
「PythonとSwiftは結構似ている」説の検証

「PythonとSwiftは、結構似ている。」

言った。ついに言ってしまった。
なぜか言ってはいけないような空気があるのでずっと黙っていたが、
今回はこれら、近年[国内年収No.1言語と需要増加率No.1の言語]( http://a.excite.co.jp/News/it_g/20160304/Mdn_44349.html )について[「できるだけプログラムっぽくない〜」](http://qiita.com/rotors123)シリーズの外伝、という扱いで斬り込んでみたい。

まずはこのソース比較を見てくれ。こいつをどう思う？ （※お返事はコメント欄にてお願いします）

![SwiftVSPython3.6.png](https://qiita-image-store.s3.amazonaws.com/0/187895/2ab14c15-afbb-9649-64da-872433c8d2e9.png)

### 実行結果

#### Swift版　
```
「 諦めなさい。 貴方は 私みたいな 気の強い女としか 一緒になれない運命なんだから 」
　　　〜 家内
「 いってらっしゃい。 元気に暮らしてよ！ 」
　　　〜 家出に向かう筆者に当時4歳の長男が掛けてくれた言葉
```

#### Python版
```
「 遅刻厳守ねッ⚠️  」
　　　〜 結婚前、初デートの前の家内
「 気付かない振りをし続けるっていうのも 結構大変なんですよ❓️  」
　　　〜 結婚後の家内
```

### 解説

- 今回は「[できプロ](http://qiita.com/rotors123)」シリーズの流れで実装を行った為、Python版についてもできるだけ日本語を使用している。
3.x系では日本語の扱いが上手になったとは言え、Obj-C版と同様、文字出力以外での絵文字の利用は不可であった。

- 比較の為、Python版をSwift版の構成になるべく近付ける、という無茶もしている。
（よって、本当はもっと簡潔に書けるが、Pythonとしては冗長なコードとなった）

実装した感想としては、
- Swiftは、「短く書く」テーマを追いつつ、「読みやすさ」、「バグの出しづらさ」を開発者に半強制している。
- Pythonは、より効率を求めた「短く書く」、そして（今回は表面化していないが）拡張性や汎用性を重んじている。
…といった印象を持った。
どちらも、素晴らしい言語だと思う。

結局、似ていると思えば似ているし、生きて行こうと思えばどこだって天国になるし。幸せになるチャンスはどこにでもあるのだという事で、今回は筆を折りたい。

### バージョン情報

Python版
　　Python 3.6.1

Swift版
　　Swift：3.1
　　Xcode：8.３.3 (Swift Playgrounds)

### ソースコード

Python版
　　https://github.com/rotors123/ProgrammingNoProgrammingPy.git

Swift版
　　https://github.com/rotors123/ProgrammingNoProgrammingObjC.git
　　※Swift版についての詳細は[こちら](http://qiita.com/rotors123/items/113407168a362d7e321d)
prototype.jsとjQueryを同時に使う。

<h1>概要</h1>
prototype.jsとjQueryを同時に使おうとすると、
競合のようなものが起き、正常に動作しない場合があります。

<h1>内容</h1>
まず、呼び出し順はprototype.jsを先にします。

```
<script src="prototype.js"></script>
<script src="jquery.js"></script>
```

そして競合というのは、コード内の"$"が競合してエラーが出ます。
なので、jQuery側の"$"を"jQuery"に置き換えます。

```
$(function(){
 
});
```

これを

```
jQuery(function(){
 
});
```

このようにします。
こんなんで動くんですね。笑

<h1>補足</h1>
これで動かない場合は、
jsの読み込みを全ページ共通ではなく使用するページのみにすると上手くいくかもしれません。
ハッピー1.5ギガ秒

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Happy 1.5Gs! <a href="https://t.co/ke6UI0kip6">pic.twitter.com/ke6UI0kip6</a></p>&mdash; moment.js (@momentjs) <a href="https://twitter.com/momentjs/status/885692568775806980">2017年7月14日</a></blockquote>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">(new Date).getTime() == 1500000000000</p>&mdash; JavaScript Daily (@JavaScriptDaily) <a href="https://twitter.com/JavaScriptDaily/status/885690336240164864">2017年7月14日</a></blockquote>

`getTime()`メソッドはUNIX時間（1970年1月1日からの経過時間）をミリ秒単位で返すわけですが、それが15億秒になったということらしい（1Gは10の9乗で10億）。たまたま見つけたのでメモ。20億秒は2033年の5月18日（`new Date(2e12)`）。35億秒までは見届けたいけど果たしていけるのか。

同じように経過時間を返すメソッドとしては`Date.now()`があるけど、こちらは静的メソッドなので`new`してインスタンスを作る必要がない。だから普通は`Date.now()`を使った方が良いと思われるけど、`Date.now()`はIE8でサポートしていないので使えない（いまさらIE8とか）。それで `(new Date()).valueOf()` と書くのがクセになっている。`getTime()`じゃなくて、`valueOf()`を使う理由は特にない（なんとなくの安心感）。

なお、`new`演算子を使う場合、後ろの括弧（`()`）はなくても良いらしい。知らなかった。だからJavaScript Dailyのツイートのような `(new Date).getTime()` という書き方で問題なく実行できる。だた`new Date`の周りの括弧は`new`演算子よりメンバー演算子の方が優先順位が高いので必要。`getTime`の後ろの括弧もないと呼び出しにならないので必要。

- [Date.prototype.getTime() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime)
- [Date.now() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/now)
- [演算子の優先順位 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
- [関数 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Functions)
SmartGit > Discard | Remove | Delete

```txt:動作環境
Windows 7 Pro (32bit)
SmartGit Version 17.0.4 #10132
```

SmartGitを試用中。

Filesペインにおいて右クリックした時のメニューのうち、以下のものがある。

- Discard
- Remove
- Delete

各種説明はこちら
http://www.syntevo.com/doc/display/SG/Local+Operations+on+the+Working+Tree

2011年の情報だが、RemoveとDeleteの違いは以下が簡潔だ。
http://smartgit.3668570.n2.nabble.com/Remove-and-delete-td5898706.html
> Delete is for physical deleting the file (rm <file>). Remove is for making unversioned (git rm <file>). What names do you suggest?
avfoundationを使って動画をトリミング

# 環境

-swift3
-xcode8

# 補足

下記の実装では動画ファイルをトリミングするだけで音声ファイルはくっついてきません

# 実装

```swift

import UIKit
import AVFoundation

class ViewController: UIViewController {
  
  var asset: AVAsset?

  @IBAction func exportBtnDidTap(_ sender: AnyObject) {
    
    guard let asset = asset else {
      return
    }
    
    createAudioFileFromAsset(asset)
  }
  
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    let videoAsset = AVURLAsset(url: Bundle.main.url(forResource: "sample", withExtension: "m4v")!)
    
    let comp = AVMutableComposition()
    
    let videoAssetSourceTrack = videoAsset.tracks(withMediaType: AVMediaTypeVideo).first! as AVAssetTrack

    
    let videoCompositionTrack = comp.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)
    
    do {
    
        try videoCompositionTrack.insertTimeRange(
            CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(1, 600)),
            of: videoAssetSourceTrack,
            at: kCMTimeZero)

    }catch { print(error) }
    
    asset = comp
    }

    
    
    
    
    
    
    
    
    
    
    
    
    
    
  func deleteFile(_ filePath:URL) {
    guard FileManager.default.fileExists(atPath: filePath.path) else {
      return
    }
    
    do {
      try FileManager.default.removeItem(atPath: filePath.path)
    }catch{
      fatalError("Unable to delete file: \(error) : \(#function).")
    }
  }
  
    
    
    
    
    
    
    
    
    
    
  func createAudioFileFromAsset(_ asset: AVAsset){
    
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL
    
    let filePath = documentsDirectory.appendingPathComponent("rendered-audio.m4v")
    deleteFile(filePath)
    
    if let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPreset640x480){
        
      exportSession.canPerformMultiplePassesOverSourceMediaData = true
      exportSession.outputURL = filePath
      exportSession.timeRange = CMTimeRangeMake(kCMTimeZero, asset.duration)
      exportSession.outputFileType = AVFileTypeQuickTimeMovie
      exportSession.exportAsynchronously {
        _ in
        print("finished: \(filePath) :  \(exportSession.status.rawValue) ")
      }
    }
    
    }
}

```

# ソース

[github](https://github.com/Ryosuke-Hujisawa/avfoundation-video-Trimming-swift3)

# 参照

[](http://off.tokyo/blog/2017/07/14/avfoundation%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%8B%95%E7%94%BB%E3%82%92%E3%83%88%E3%83%AA%E3%83%9F%E3%83%B3%E3%82%B0/)
Android Studio 2.3.3 が突然フリーズしてしまう問題とその解決方法

# 起こった問題
KotlinでAndroidアプリの開発をしているが、いつぞやからコードを書いていると突然Android Studioがフリーズしてしまう問題に遭遇するようになってしまった。
Android Studioを強制終了して、Invalidate Caches and Restartを行ったら、ひとまず使えるが、しばらくするとまた同じ事が起こるという状態で非常に困っていた。
試して見たことと、最終的な解決方法書いておく。

# 試してみたこと
## kotlin-gradle-pluginのバージョンを上げてみた
`org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-3`を利用していたが、新しいもの
`org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.3`に変更。
が、解決せず

## Android Studioの利用メモリを増やしてみた
Help > Edit Custom VM Options
でAndroid Studio の利用メモリの設定ができるので増やしてみた
参考: https://developer.android.com/studio/intro/studio-config.html?hl=ja
<img width="380" alt="スクリーンショット 2017-07-14 12.51.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/29526/a7954d9d-7838-c75b-2d2d-3f65c057f5cf.png">
が、解決せず

# 解決方法
## Android Studio のKotlinプラグインをアップデートする
kotlin-gradle-pluginのバージョンをあげた時に気づくべきだったが、Android Studio のKotlinプラグインのバージョンを上げたら解決。気付かなかったの悲しい。

<img width="844" alt="スクリーンショット 2017-07-14 12.57.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/29526/c4ded7bd-5da7-4451-d5aa-7849105d5e24.png">

# 参考
Kotlin :: JetBrains Plugin Repository
https://plugins.jetbrains.com/plugin/6954-kotlin
各バージョンで何が解決されたか見れるページってどこかにあるのだろうか。
SnmpSharpNet で OctetString を文字列にうまく復元する

NuGet で提供される [SnmpSharpNet](https://www.snmpsharpnet.com/) を利用した SNMP 関連のプログラミングをしていて、取得した [OCTET STRING](https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb648644.aspx) 値から文字列にうまく復元できない場合の解決法です。
#[SnmpSharpNet.AsnType](https://www.snmpsharpnet.com/?page_id=41) 型から得る場合

本来であれば SnmpSharpNet.OctetString 型にキャストして、ToString メソッドを呼び出せば文字列に変換できます。しかし、日本語を含む場合などはとくに、本来の文字列には変換されず 16進数羅列の文字列に変換されてしまう場合があります。

```C#
  // 変数 value に AsnType 型の値で SJIS エンコード文字列が入っているとします
  var text = ((SnmpSharpNet.OctetString)value).ToString();
  // text : "95 73 8E 76 8B 63 82 C5 95 D6 97 98"
```
変換されていない場合は、IsHex プロパティが true になっています。
そこで、SnmpSharpNet.OctetString 型にキャストされたオブジェクトを ToArray メソッドでバイト配列にして、[System.Text.Encoding](https://msdn.microsoft.com/ja-jp/library/system.text.encoding.aspx) を利用して文字列に復元します。

```C#
  var octetStr = (SnmpSharpNet.OctetString)value;
  var text = octetStr.IsHex ?
    System.Text.Encoding.GetEncoding("SHIFT_JIS").GetString(octetStr.ToArray()) :
    octetStr.ToString() ;
  // text : "不思議で便利"
```

#おまけ
- http://www.oidview.com/mibs/detail.html - OID VIEW さん

#参考
-  [Working with Octet Strings](https://www.snmpsharpnet.com/?page_id=66) - SnmpSharpNet
-  [Reference](http://www.docs.snmpsharpnet.com/) - SnmpSharpNet  （SourceForce のほうのマニュアルは、内容が若干古いようです）
Apple Developer Programの更新時の登録デバイスの削除について

# 概要

Apple Developer Programの更新時に登録しているデバイスを削除出来ると聞いていたが実際にやったことなかったので備忘録としてまとめました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56178/5a7a78c8-a287-559f-a5d9-7fc780119e9c.png)

# 結果

- 端末の削除が出来るのは**更新日のみ**
- ~~削除が出来るのはAgentのアカウントのみ~~削除が出来るのは**Agent**と**Admin**のアカウントのみ(2017/07/26修正)

削除できる日が**更新日のみ**ということを理解していなかったので色々と混乱しました。

## 登録デバイス削除までの手順

1. Apple Developer Programの更新1ヶ月前になるとAppleから通知がくる
2. Apple Storeで更新日までに『Apple Developer Program - Membership for one year』を購入する
3. **実際の更新日になったら、AgentまたはAdminのアカウントで[Apple Developer](https://developer.apple.com/account/)へログインし、不要なデバイスを削除する**

# 補足1 勘違いした点

最初ググって調べた感じ自分は以下のような手順になると勘違いしていました。

1. Appleからもうすぐ切れるよと通知がくる ![image.png](https://qiita-image-store.s3.amazonaws.com/0/56178/345733d4-6c9a-64f3-ee88-33251d312131.png)
2. 切れる前に更新処理(Apple Storeで『Apple Developer Program - Membership for one year』を購入) ![image.png](https://qiita-image-store.s3.amazonaws.com/0/56178/48a08cb2-ebd1-ca22-f9d4-b3ba9c557253.png)
3. 購入が終わったら更新され、削除が出来るようになる(**←間違い**)

実際は更新処理(Apple Storeで『Apple Developer Program - Membership for one year』を購入)をした日付で削除処理ができるわけではなく、**更新日になるとできるようになります。**

# 補足2 Appleから回答

てっきり何か手順を間違えたかと思いAppleに問い合わせたところ以下のような返信がありました。

>ご担当者様
>
>平素より大変お世話になっております。
>
>この度は、デバイスの削除について Apple Developer Program Support へお問い合わせ頂き、誠にありがとうございます。
>
>当方で確認しました所、御社のアカウントは既に更新手続きは完了しておりますが、実際のメンバーシップの更新日は2017年7月24日（米国時間）になります。同日(日本時間7月25日になります)にチームエージェントがアカウントにログインされますと、デバイスの削除が可能になるかと存じます。
>
>同日にログインされデバイスのリセットが出来ない等、問題がある場合は、このメールに返信する形でご連絡くださいませ。当方で確認し、ご対応させていただきます。

めっちゃ助かり。
更新日になったらまた追記します。

# 補足3 更新日になっても削除できなかった！

更新日(上記のメールにあるように日本時間7/25)にAgentアカウントでDevicesのページに行っても削除のための動線がでてきませんでした。
再びAppleのサポートに問い合わせて見ました。

>> (私)
>>日本時間の7/25にデバイスの削除ができると聞いていたのですが
まだ削除の動線が表示されていないように思えます。
>>どうすればよいでしょうか？

> (Apple)
>当方より 1 回限りの例外として、御社の Apple Developer Enterprise Program のデバイスリストをリセットさせていただきました。
>
>本日から7日間、不要なデバイスを削除していただくことができます。全ての不要なデバイスが削除されるまでは、新しくデバイスを追加しないようお願い致します。7日間の期間中にデバイスを追加すると、それ>以降デバイスを削除できなくなります。

理由は不明ですが削除のための動線が表示されなかったみたいなのでもう一度出すようにしてくれたとのこと
このあとリセットされたと連絡を受けたのでDevicesのページにアクセスしてみましたが、やはり動線が表示されず。。。

もう一度Appleへ連絡

>> (私)
>>下記メールをいただいた後にAgentアカウントでログインをして
>>「Certificates, Identifiers & Profiles (証明書、ID、プロファイル)」ポータルの>>「Devices (デバイス)」にアクセスしましたが
>>先ほど特に変わった様子がありません。

> (Apple)
>デバイスリセットができるよう当方にて対処させていただきましたが、本日がメンバーシップ前年度の最終日であることが理由でリセットができない可能性がございます。
>
>リセットが可能になると、黄色の「 Get Started」ボタンが表示されるはずですので、大変お手数ですが明日再度お試しいただきますようお願い申し上げます

なんか更新日にリセットはできないらしい。明日また見てみてとのこと。

後日確認すると

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56178/5a7a78c8-a287-559f-a5d9-7fc780119e9c.png)

出てきました。

あとは以下のように有効にしたいデバイスのみを残せば完了です。
(disableにしていた端末はこのリストには出てこないので注意が必要です。)

![スクリーンショット 2017-07-26 10.06.34.png](https://qiita-image-store.s3.amazonaws.com/0/56178/54e0b33c-fd17-5492-7959-2eab6e483a28.png)
ATOM でターミナルを使えるようにする。

platformio-atom-ide-terminal という名のプラグインをインストールする。
これは巷でよくオススメされている terminal-plus をフォークしたもので、 terminal-plus の最終更新日が 9 ヶ月前なのに対し、こちらはわずか 8 日前。
ダウンロード数もこちらが多いし、使わない理由はないだろう。

この時点で ``ctrl-` `` で下からターミナルがズズズっと出てくるようになる。

だがこれで使えるようになったと勘違いしてはダメだ。
おしゃれな ATOM に対してこれだけ浮いてるウィンドウが出てくることは到底ではないが「使える」という状態にはなっていないし、個人的にはあまり好きではない動作が存在する。

設定を開くのだ。

# 設定

## Toggles

- [x] Close Terminal On Exit
- [ ] Cursor Blink

この状態にする。
1 つめのチェックでターミナル状で `exit` した場合に自動でウィンドウを閉じてくれるようになる。
2 つめの設定はカーソルを点滅させるかどうか選ぶもの。

## Style
### Theme

standard から one-dark に変更する。
これで背景が目に突き刺さるような黒から Atom と一体感のある色に変わる。

これは自分の Atom のテーマに合わせるといいだろう。

## Ansi Colors

背景がましになったからといって油断してはダメだ。
このままだと青色で表示される文字が悲しいことになる。
青色だけいい感じの色に変更するのだ。
ちなみに私は空色に近い感じにした。
それとわかっていると思うが、 Ansi Colors Normal よりも Ansi Colors Z Bright の方が全部少しだけ明るくなってるので、そこの色合いも守っておこう。

# おしまい

いい感じのターミナルになったんじゃないか？
[チートシート（和訳）](http://qiita.com/regashia/items/8831b62648a7b8cbfeaa)。
PlatformIO IDE Terminal のチートシート

公式に書いてあるものを適当に和訳。
[設定はこちら。](http://qiita.com/regashia/items/41af5d8c260c29a52ee4)

| Command | Action | Default Keybind |
|---------|--------|-----------------|
| platformio-ide-terminal:new | 新しいターミナルを作る。 | `ctrl-shift-t`<br>or<br>`cmd-shift-t` |
| platformio-ide-terminal:toggle | 最後にアクティブだったターミナルの表示 / 非表示を切り替える。<br>**Note:** ターミナルが 1 つもない場合は新しく作成する。 | `` ctrl-` ``<br>(Control + Backtick) |
| platformio-ide-terminal:prev | 左側のターミナルに移動する。 | `ctrl-shift-j`<br>or<br>`cmd-shift-j` |
| platformio-ide-terminal:next | 右側のターミナルに移動する。 | `ctrl-shift-k`<br>or<br>`cmd-shift-k` |
| platformio-ide-terminal:insert-selected-text | 選択したテキストをコマンドとして最後にアクティブだったターミナルで実行する。 | `ctrl-enter` |
| platformio-ide-terminal:insert-text | IME や特殊なキーで入力するための入力ボックスを表示する。 | –––––––––––– |
| platformio-ide-terminal:fullscreen | アクティブターミナルの通常表示 / 全画面表示を切り替える。 | –––––––––––– |
| platformio-ide-terminal:close | アクティブターミナルを閉じる。 | `ctrl-shift-x`<br>or<br>`cmd-shift-x` |
| platformio-ide-terminal:close-all | 全てのターミナルを閉じる。 | –––––––––––– |
| platformio-ide-terminal:rename | アクティブターミナルの名前を変える。 | –––––––––––– |
Homebrew でアップグレード した git 2.13.3 で diff-highlight が使えなくなって困った

## tl;dr

本日最新の Homebrew でインストールし直せば、ちゃんと `diff-highlight` の実行ファイルも生成されるようになり、この問題は発生しなくなりました \_(:3」∠)\_

## 問題と解決

#### 昨日（2017/07/13）

`.gitconfig` で `diff-highlight` を使うように設定してたが git `2.13.2` から `2.13.3` にアップグレードしたところ、以下のようなエラーが発生するようになった。

```
[pager]
	log = diff-highlight | less
	show = diff-highlight | less
	diff = diff-highlight | less
```

```shell-session
$ g diff
diff-highlight | less: diff-highlight: command not found
$ diff-highlight
zsh: permission denied: diff-highlight
```

`diff-highlight` 自体は、git-core 配下の実行ファイルを `/usr/local/bin` にシンボリックリンクを貼って使っていたが

```shell-session
$ ll /usr/local/bin/diff-highlight
lrwxr-xr-x  1 tmd45  admin  48  7 13 16:58 /usr/local/bin/diff-highlight@ -> /usr/local/share/git-core/contrib/diff-highlight/diff-highlight
```

参照先のディレクトリから実行ファイルが消えていた。

```shell-session
$ ll /usr/local/Cellar/git/2.13.3/share/git-core/contrib/diff-highlight
total 56
drwxr-xr-x   8 tmd45  admin   272  7 13 07:59 ./
drwxr-xr-x  30 tmd45  admin  1020  7 13 07:59 ../
-rw-r--r--   1 tmd45  admin    28  7 13 07:59 .gitignore
-rw-r--r--   1 tmd45  admin  5865  7 13 07:59 DiffHighlight.pm
-rw-r--r--   1 tmd45  admin   365  7 13 07:59 Makefile
-rw-r--r--   1 tmd45  admin  8008  7 13 07:59 README
-rw-r--r--   1 tmd45  admin   211  7 13 07:59 diff-highlight.perl
drwxr-xr-x   5 tmd45  admin   170  7 13 07:59 t/
```

使うなら自分で make してくれという仕様になった様子。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Warning: if you use diff-highlight from git’s contrib, the executable  now requires being built. Must cd into diff-highlight dir and `make`</p>&mdash; Jason Karns (@jasonkarns) <a href="https://twitter.com/jasonkarns/status/885565933498109952">2017年7月13日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

- [git 2.13.3 and up: missing diff-highlight · Issue #15588 · Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core/issues/15588)

### 本日（2017/07/14）

Homebrew 側が Formula で対応してくれました（上記 Issue 参照）。めでたしめでたし。
Android Studioで、左右のタブ移動のショートカットを変更する

Xcodeと合わせて、左右にタブを移動するキーボードのショートカットを変更したいときの備忘録。

`Alt` + `Command` + `→` で、右のタブへ移動。
`Alt` + `Command` + `←` で、左のタブへ移動。

以上をやりたい。

まず、すでに上記コマンドを設定してるキーマップからコマンドを削除

![スクリーンショット 2017-07-14 12.28.01.png](https://qiita-image-store.s3.amazonaws.com/0/85148/0ff68370-3d49-830b-80cd-3394eae98c64.png)

次に、左右のタブ移動のキーマップに、新たにコマンドを追加

左のタブに移動

![スクリーンショット 2017-07-14 12.27.30.png](https://qiita-image-store.s3.amazonaws.com/0/85148/c57f1daa-8ed1-c616-f02e-38e983175dd2.png)

右のタブへ移動

![スクリーンショット 2017-07-14 12.27.11.png](https://qiita-image-store.s3.amazonaws.com/0/85148/9e2937b2-d363-e766-f430-0802d4be3ac5.png)