OmniAICreator/Qiita-1.07M huggingface dataset:
swift3 で （文字列）固定長分割

# はじめに
以前swift２で実装していたものをswift3.0に移植するにあたり、ちょっとハマった、修正履歴として残しておこうと思う。

以前の記事はこちら＞[swift2 で 固定長分割](http://qiita.com/to_obara/items/fec3df6583e1acabedf6)

## 前置き
なぜこんな実装が必要なのというのに対して、特に回答する予定はありません、諸般の事情でとだけ:smirk:

## 参考にしたページ
結局エラーメッセージが一番参考になるのですが、そのメッセージをもとに、どのように直すかという部分で参考にしています。
- [swift migration guid](https://swift.org/migration-guide/)
- [apple-api-reference: stride function](https://developer.apple.com/reference/swift/1641347-stride)
- [apple-api-reference: string function](https://developer.apple.com/reference/swift/string)
- [blog: ranges](https://oleb.net/blog/2016/09/swift-3-ranges/)
- [blog: strings](https://oleb.net/blog/2016/08/swift-3-strings/)

## 変わった部分
短いコードの割に変わった部分が結構ありました。
- stride
- advancedBy
- joinWithSeparator

### stride
これは、stride(to:by:)が無くなっていて、stride(from:to:by:)に置き換える必要がありました。
`swift:String+Splitter.swift
0.stride(to: limit, by: len).forEach {
`
これが、以下のようになりました。
`swift:String+Splitter.swift
stride(from: 0, to: limit, by: len).forEach {
`

### advancedBy
indexで頑張ります

### joinWithSeparator
joined(separator:)に変わりました。

### とりあえず、コードを載せます
```swift:String+Spritter.swift


extension String {

  /** 文字列を固定長で分割する
  - Parameter len: 分割する長さ
  - Parameter handle: 分割ごとに呼び出される
  */
  public func Splitter(_ len: Int, handle: ((_ cut: String, _ isLast: Bool)->())) {
  {
    let limit = self.characters.count
    stride(from: 0, to: limit, by: len).forEach {
      p in
      guard let st = self.index(startIndex,offsetBy:p, limitedBy: endIndex)
         else {
            handle("",true)
            return
         }
      guard let end = self.index(st, offsetBy: len, limitedBy: endIndex)
         else {
            let cut = self.substring(from: st)
            handle(cut,true)
            return
         }
      let cut = self.substring(with: st..<end)
      handle(cut, end == endIndex)
    }
  }

}
```

### 書き直し
以前のコードより実行時間が遅くなってしまいました、以前のコードにできるだけ似せてみます。

```swift:String+Spritter.swift
  /** 文字列を固定長で分割する
  - Parameter len: 分割する長さ
  - Parameter handle: 分割ごとに呼び出される
  */
	public func Splitter(len: Int, handle: ((_ cut: String, _ isLast: Bool)->())) {
		let array = self.characters.map { String($0) }
		let limit = self.characters.count
		stride(from: 0, to: limit, by: len).forEach {
			p in
			guard let st = array.index(array.startIndex,offsetBy:p, limitedBy: array.endIndex)
				else {
					handle("",true)
					return
				}
			guard let end = array.index(st, offsetBy: len, limitedBy: array.endIndex)
				else {
					let cut = array[st..<array.endIndex].joined()
					handle(cut,true)
					return
			}
			let cut = array[st..<end].joined()
			handle(cut, end == array.endIndex)
		}
	}
```
これにより、以前より高速に動作するようになりました。arrayが頻出しているのが気にくわないけど。。。
substringより、分解してjoinedした方が早いのは、swiftの内部実装のせいかな。
【Swift】storyboardを利用しないテンプレート（UITabBarController）

# 概要
PureLayoutのサンプル（UITabBarController） です。

5つのタブを生成し、各ViewControllerにtag番号を表示しています。
UILabelのextension（setLayout）にてAutoLayout設定（中央表示）をしています。
❇TabBarControllerはPureLayoutは未使用

# 目的
[storyboardを利用しない必要最低限のテンプレート（Swift）](http://qiita.com/menomoto/items/3140ec04b509e4726615) を参照ください。

# メリット （PureLayout vs Storyboard）
[[Swift] storyboardを利用しないテンプレート（基本的なView）](http://qiita.com/menomoto/items/0031c4b430a05f9554f6) を参照ください。

# 対象View
* UITabBarController

# 結果
![サンプル](http://i.imgur.com/R1MiDsa.png "サンプル")

# github
* https://github.com/menomoto/Sample_PureLayout/tree/master/pureLayoutSample04
* xcode8, swift2.3
* iPhone5,6,6s UI確認OK
* TabBarVC、5つのVC、Extensionで[145行](https://github.com/menomoto/Sample_PureLayout/blob/master/pureLayoutSample04/pureLayoutSample04/UI/ViewController.swift)


# AutoLayout設定
#### UILabelのextension（中央表示）
```
extension UILabel {
    var setLayout: UILabel {
        self.autoAlignAxisToSuperviewAxis(.Horizontal)
        self.autoAlignAxisToSuperviewAxis(.Vertical)
        self.font = UIFont.systemFontOfSize(CGFloat(256))
        
        return self
    }
}
```
Macで立てたローカルサーバーの中身をスマホで見たいなって思った時にすること

# 概要
PC と スマホで同じ Wifi に接続して、PC 側のファイアウォールを無効、"0.0.0.0" でサーバーを立てればスマホで  PC 側のローカルサーバーにアクセスできる。以下、具体的な手順。

# 手順
1.Macとスマホを同じWifiに接続させる
2.Macのファイアウォールを切る
3.ターミナルを開いて、作業ディレクトリに移動
4.下のコードを実行してローカルサーバーを立てる (正直なんでもOK)

```
python -m SimpleHTTPServer 8000
```

5.スマホで "Macのipアドレス:8000" にアクセス (ex: 192.168.2.1:8000)

# メモ
ちなみに Android と Chrome でデバッグしたいならこっちの方が優秀。
http://qiita.com/okkunokkun18/items/2e6cc3088f6933238a77
Beaconの配置をWeb上でサクッと管理したい

#やりたかったこと
とりあえず、簡単にWeb上でBeaconの配置を管理したい。
Beaconを設置したあとに、パワーポイントとかでBeaconの配置情報を管理することが多いのですが、パワーポイント自体がどこかに行ってしまったり、最新がどれがわからなくなってしまうことがよくある。
なので、手軽にできたらいいな〜と思って、Angular.jsで実装してみた。

サンプルをGithubにアップしています。
ローカルストレージを使って自動で保存してくれます。
https://jmasystems.github.io/Beacon-Map-Sample/

##サンプル

###画像をアップして

![画像のアップロード](https://qiita-image-store.s3.amazonaws.com/0/130138/e35e3c05-7aa6-a5a7-195e-00538bf8adbd.png "スクリーンショット 2016-10-24 午前9.17.32.png")

###Beaconをセット

![登録完成イメージ](https://qiita-image-store.s3.amazonaws.com/0/130138/5847c917-1d69-1dba-09ba-f84e3248d75d.png "スクリーンショット 2016-10-24 午前9.14.40.png")

とりあえず、ローカルでメモ的に使えます。


複数フロア保存できないのはご愛嬌です。


#Drag&Drop

Drag&Dropには、ngDraggableが使いやすそうだったので、こちらを利用しています。

https://github.com/fatlinesofcode/ngDraggable
使い方は本家を見ていただければ大体わかると思いますが、簡単に導入手順を書いておきます。

※angular.jsは組み込まれている前提とします。

##ngDraggableのインストール

```
bower install ngDraggable
```

これだけ。

##htmlの修正

```header
<script src="angular.min.js"></script>
<script src="ngDraggable.js"></script>
```

パスについては、各々の環境に合わせて修正が必要です。

##ドラッグエリアの指定
```body
<div ng-drag="true" ng-drag-data="{object}" ng-drag-success="onDragComplete($data,$event)">
これがドラッグできるオブジェクトになりまーす。
</div>

<div ng-drop="true" ng-drop-success="onDropComplete($data,$event)" >
ここはドロップできるエリアになりまーす。
</div>

```


##jsの修正

```controller
app.controller('MainCtrl', function ($scope) {
    $scope.onDragComplete=function(data,evt){
    	//ここに、ドラッグしたオブジェクトのデータが飛んでくる。
    }
    $scope.onDropComplete=function(data,evt){
    	//ここに、ドロップしたオブジェクトのデータが飛んでくる。
    }
 };
```

##座標を取る
サンプルでは、ドラッグした位置に、オブジェクトを置きたかったので座標を取得して、ng-styleで反映させています。
オブジェクトの座標が、どうにもうまいこと取得できず、ちょっとアレですが以下のように取得することにしました。


```body
<div class="drop-outer"  ng-repeat="obj in droppedObjects2" ng-drag="true" ng-drag-data="obj" ng-drag-success="onDragSuccess2($data,$event)" ng-style="obj.style">
	<div class="drop-cell" ng-mouseover="selectBeacon(obj);">
		{{obj.ID}}
	</div>
</div>
```

```onDropComplete2
// 要素の位置を取得する
var element = document.getElementById( "beacon-drop-map" ) ;
var rect = element.getBoundingClientRect() ;

// 座標を計算する
var positionX = rect.left;	// 要素のX座標
var positionY = rect.top;	// 要素のY座標

var X = evt.event.clientX - positionX - 25;
var Y = evt.event.clientY - positionY -25;

data.style = {'left':X + "px",'top':Y + "px"};
data.X = X;
data.Y = Y;

$scope.droppedObjects2.push(data);
```


#地図画像もアップロードしたい。

主に、というかほとんどそのまま以下のサイトを参考にしました。
http://qiita.com/zaburo/items/f03433caa710902d599f
やりたいことが完璧にできていたので大変助かりました。

#保存する。
とりあえず、localStorageに画像データや、配置情報を記憶させているので、キャッシュクリアなどをしなければ、しばらく保存してくれてるはずです。


#これをベースに・・・
前回も紹介しましたが、[BeacappのAPIと連携](http://qiita.com/JMASystems/items/e1d6b118207935f4b417)すれば

 * 表示するBeacon一覧を取得したり
 * ログと連携して、ユーザを表示したり
 * ヒートマップを表示したり
 
と色々できるようになります。

#地図に表示するということ
単純にログとして保持しておくことも大切ですが、パッと見てわかる、というのも非常に重要だと思います。
集めたデータをどのように可視化していくかというのも、今後の課題になりそうです。
SeleniumでSBI証券にログインして、口座情報を取得する

##　はじめに
「[PythonによるWebスクレイピング](http://amzn.to/2dY6Gft)」を読んで、Seleniumを使って、ログインフォームのあるサイトにログインして、情報を取得してみたいと思い、個人的な要望から、SBI証券にログインして、口座の残高情報を取得してみました。初学者が見よう見まねで、書いたので、そのへんはご理解いただけますと幸いです。

## Seleniumとは

Seleniumとはブラウザの操作を自動化するツールで、WebアプリのUIのテストや今回のようにスクレイピングに使用するツールです。今回はヘッドレスブラウザ（コマンドラインなどで使用するブラウザ）と組み合わせて使用しています。

### 実行環境
mac OSX
Python 2.7.1


##　苦労したところ
- まだ、初心者なので、サイトの要素を探すところで苦労しました
- あと、リスト型の取扱。途中でめんどくさいかったので、Pandasのデータフレーム型を使用してます。二次元配列からうまくCSVに出力する方法がわからなかったので。
- レンダリングは単純に10秒待つだけなので、その辺を改善したいと思っています。

## ソース
**このプログラムを実行して何かあっても責任を取れませんので自己責任でお願いします。**

```

#coding:UTF-8
import pandas as pd
import csv
from selenium import webdriver
from bs4 import BeautifulSoup

##Selenumでログインし口座情報のページのHTMLを取得
def fetch_sbi_account_html(user_id,user_password):
    driver = webdriver.PhantomJS()
    print 'driver start'
    driver.get('https://www.sbisec.co.jp/ETGate')
    
    uid = driver.find_element_by_name('user_id')
    password = driver.find_element_by_name('user_password')
    uid.send_keys(user_id)
    password.send_keys(user_password)

    driver.find_element_by_name('ACT_login').click()
    driver.implicitly_wait(10)

    driver.find_element_by_link_text('口座管理').click()
    driver.implicitly_wait(10)
    
    driver.find_element_by_link_text('評価額').click()
    driver.implicitly_wait(10)
    
    #確認用にキャプチャも取得
    driver.save_screenshot("sbi_account.png")
    html = data = driver.page_source.encode('utf-8')
    driver.quit()
    print 'driver quit'
    return html


#listを分割する。リストの成型に必要だったため。
def chunked(iterable, n):
    return [iterable[x:x + n] for x in range(0, len(iterable), n)]

#HTMLをパースして、口座の情報を取得
def parse_table(tables,table_num):
    arr = [] 
    rows = tables[table_num].findAll("tr")
    for j in range(2,len(rows)):
        cells = rows[j].findAll(['td'])
        for cell in cells:
            text = cell.get_text()
            if u"現買"not in text and u"買付" not in text:
                arr.append(text)
    arr = chunked(arr,5)
    header = ["name","amount","price","value","total_amont"]
    df = pd.DataFrame(arr, columns = header)
    return df

if __name__ == '__main__':

	#IDとパスワードのところは変更してください。
	html = fetch_sbi_account_html('[your_id]','[your_password]')
	bsObj = BeautifulSoup(html, "html.parser")
	tables = bsObj.findAll("table" ,width="300")

	#取得するテーブルの選択。この辺は適当です。CSVで出力します。
	table_type = {"stock":3 ,"found":4, "found_nisa":5}

	for key, v in table_type.items():
    	file_name = key + '.csv'
    	data = parse_table(tables,v)
    	data.to_csv(file_name, index=False, encoding='UTF-8',sep='\t')
    	print 'saved '+ file_name
    
```

## 参考ページ
- [Selenium Tutorial: Locators](https://newcircle.com/bookshelf/selenium_tutorial/locators)
- [PythonとSeleniumでネットバンキングをスクレイピングする](http://blog.mursts.jp/entry/2015/09/25/scrape-netbanking-by-python-and-selenium/)
MySQLで直近の時間のレコードからソートする

#MySQLで直近の時間のレコードからソートする

>
select *,
str_to_date(concat(target_date,' ',target_st_time) , 
'%Y-%m-%d %H:%i' ) as times
from transaction_table_date 
where taget_id = :taget_id 
order by 
abs(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(times) > 0) asc,
times asc

データ形式がdateとtimeで分かれていたのでちょっとややこしくなった。
こんな感じのデータ。

| target_id | target_date | target_st_time | times |
|:-:|:-:|:-:|:-:|
|  2016-10-18 |  20:20 | 20:30  |  2016-10-18 20:20:00 |
|  2016-12-18 |  20:00 |20:30   |  2016-12-18 20:00:00 |
| 2016-10-16|  20:00 |  20:30 |  2016-10-16 20:00:00 |
| 2016-10-18| 19:00  | 20:30  |  2016-10-18 19:00:00 |

>
abs(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(times) > 0) asc

この部分で未来レコードは0に、過去レコードは1に、そしてasc。
その後timesでascする。

直近の日時を表示させるのにほしかったので。
Hire iOS App Developer To Maximize Revenue For Your Business 

![Hire iOS app developer.jpg](https://qiita-image-store.s3.amazonaws.com/0/144886/5b3ecc3c-de0c-2e92-850a-63dc7f5730f7.jpeg)

Not having a mobile app for your business means missing out on a golden opportunity to gain access to new revenue streams. Smartphones and tablets are an innovative way to showcase business globally and increase consumer base. A mobile app not only lets customers buy products at ease but also delivers a quick shopping experience. iOS market is one of the growing sectors where businesses tend to spend more money. To avail the benefits offered by this lucrative platform, mobile and app development companies need to [hire iOS app developers](http://www.hirewebdeveloper.com/hire-ios-app-developers/).

The role of proficient and skilled iOS app developer cannot be ignored to build unique and downloadable iOS apps. Known for their skilled mastery in the app development process, these developers are available based on your flexible requirements. They report directly to the client and stay in control of your project all the time. The basic advantage to **hire iOS app developer** is to cut down on the operational costs without compromising on the quality. With excellent expertise in handling clients from several industries, these developers offer entire support till the completion of a project. 

While investing in the development of an iOS app, you need to search for the best developer to match business needs. Below given are few important things you should definitely look for when hiring an iOS app developer for your business. 

- **Check their portfolio**- By assessing the skills and abilities based on the work done in the past, you will get an idea. Based on those capabilities, you can easily decide whether he/she is the right developer for the job or not. 

- **Communication**- It is very important to have an open and clear discussion with the developer hired so that they understand all the requirements for your app. Whether it’s a simple sit and chat session or chatting via Skype, Email or phone, you need to guarantee an effective communication during the entire process. 

- **Taking budget into account**- Having experience in the related domain, helps a lot to decide upon the budget. A proper understanding of complexities of software development enables you to decide upon a realistic budget. You should be able to demonstrate how your software works based on which, you will be able to decide a real-time budget. 

- **Expert Skills**- While selecting the right developer for your business, it is important to go for the one who has got expertise in all aspects of iOS app development. These skills include expertise in coding, design, marketing, product management and so on. It is always preferable to go for the ones who help you establish a business, not just code. 

Hiring an iOS app developer who can share your company vision will be your best asset. Using their skills, you will be able to address all aspects of app creation.
CSSだけで星形レーティング（小数点スコアも対応version）

# 目的
* 満点が星3個の時の星1.5個を表現する
* こんな感じ。![スクリーンショット 2016-10-18 19.29.09.png](https://qiita-image-store.s3.amazonaws.com/0/124445/fd073bd4-7c9b-5e68-37ae-13c315322bcf.png "スクリーンショット 2016-10-18 19.29.09.png")

# コード

```star.html
...
<div class="star-rating-box">
	<div class="empty-star">
	☆☆☆
	</div>	
	<div class="filled-star">
	★★★
	</div>	
</div>
...
```

```star.css
.star-rating-box {
	position: relative; /* position: abosoluteの基準 */
	display: inline-block; /* 最大星数に応じてdivのwidthを伸縮させるため */
}
.filled-star {
    position: absolute; /* .filled-starと.empty-starを重ねる */
    top: 0; /* 左上の基準位置に移動させる */
    overflow: hidden; /* widthが足りない時、はみ出た分は表示しない */
    white-space: nowrap; /* widthが足りない時に、折り返さないようにする。 */
    width: 50%; /* 星1.5個 表示。= 100 * 1.5 / 3 */ 
}
```

# 解説
* 欠けた星を表現するために``overflow: hidden`` と ``white-space: nowrap`` と ``width: xx%``を.filled-starに指定するところがコツ。widthを小さくして、わざと星をdiv.filled-starからはみ出させる。はみ出た分は見えないため、ユーザーには欠けた星が認識される。
* ratingが満点の場合=widht: 100%。あとは、ratingに比例してwidthの%を変化させて使用する


# GlyphiconやFont Awsomeを使う！
☆と★を下記置き換えるだけ。
* ☆

```html
Font Awsomeの場合
<i class="fa fa-star-o" aria-hidden="true"></i>
Glyphiconの場合
<span class="glyphicon glyphicon-star-empty"></span>
```

* ★

```html
Font Awsomeの場合
<i class="fa fa-star" aria-hidden="true"></i>
Glyphiconの場合
<span class="glyphicon glyphicon-star"></span>

```

# 注意
*  ~~div.star-rating-boxのwidth属性を指定すると、星の欠け具合が.filled-starのwidthと比例しなくなるかも。~~ display: inline-blockを指定したことで多分大丈夫。

# 応用
* widthをtransition-propertyにすれば星がにゅーっと出てくるアニメーションができます。
* 今回の例では、白抜きの星の部分にカーソルを合わせると星が塗られてきます。

<a href="https://gyazo.com/5b9791b1aa9801d6ddb7610d867f2c0f"><img src="https://i.gyazo.com/5b9791b1aa9801d6ddb7610d867f2c0f.gif" alt="https://gyazo.com/5b9791b1aa9801d6ddb7610d867f2c0f" width="60"/></a>


```star-transition.css
.star-rating-box {
	position: relative; /* position: abosoluteの基準 */
}
.filled-star {
    position: absolute; /* .filled-starと.empty-starを重ねる */
    top: 0;
    overflow: hidden; /* widthが足りない時、はみ出た分は表示しない */
    white-space: nowrap; /* widthが足りない時に、折り返さないようにする。 */
    width: 0%; /* 変更箇所　widthの初期値 */
    transition-property: width; /* 追加箇所 */
    transition-duration: 0.5s; /* 追加箇所 */
}

 /* 追加箇所 */
.empty-star:hover + .filled-star {
    width: 50%; /* 星1.5個 表示。= 100 * 1.5 / 3 */ 
}
```

* 実際は、星の数やスコアを可変にしたいので、railsであればヘルパーなどを使って実装するとよいでしょう。

# 参考
* [overflow](http://www.htmq.com/style/overflow.shtml)
* [white-space](http://www.htmq.com/style/white-space.shtml)


# 以下駄文
* 見た目が華やかになる応用編もつけたら面白いかなとおもって、使ったこともないtransitionに手を出したら、文書書き上げるのに時間がかかった。原因は、トリガをページ読み込み終了にしようと色々調べたこと（しかも、出来ず。）。javascriptを使えば余裕で出来るんだけど、それじゃ、タイトル詐欺になるので、CSSだけでなんとかしたかった。
* 星形レーティングの表示のトリガーがhoverっておかしいのはわかっているのです。ただ、animationのタイミングまで理解仕切れなかった。
Vagrantコマンド チートシート

## Vagrantコマンド チートシート

よくコマンドを忘れてしまうので、備忘録としてまとめております。
※随時更新予定。


| vagrantコマンド | 説明 |
|:--|:--|
| vagrant -v | バージョンを表示する |
| vagrant -v | ヘルプを表示する |
| vagrant -h | boxを追加する |
| vagrant box add [box名] | boxを追加する(URLなどから取得する) |
| vagrant box remove box名 | boxを削除する |
| vagrant box list | 追加済みboxの一覧を表示する |
| vagrant init [box名] | 仮想マシンの設定ファイルを生成する |
| vagrant up | 仮想マシンの作成/起動する |
| vagrant halt | 仮想マシンの停止する |
| vagrant suspend | 仮想マシンを一時停止する |
| vagrant resume | 一時停止されている仮想マシンを再開させる |
| vagrant reload | 仮想マシンに設定ファイルの内容を反映する |
| vagrant provision | 仮想マシンのプロビジョニングを実行する |
| vagrant status | 仮想マシンの状態を確認する |
| vagrant destoroy | 仮想マシンを破棄する |
| vagrant ssh | 仮想マシンにSSHでのログインする |
| vagrant global-status | vagrant全体の状況が確認する |
| vagrant global-status --prune | 削除したはずのVMの管理情報が残っている場合に綺麗にする(オプション: --prune) |
Exqのデバッグをする

Exq使ってるけどお手軽デバッグしたい、exq_uiなんてのも用意されているけどそんなの面倒くさいという方

ご安心ください、簡単にworkerの状態を確認できます。


### Exq.API
remote_consoleに入って、適当にExq.APIを叩くだけです。

```
$ ./bin/app remote_console
```

```elixir
> server_name = Exq.Api.Server.server_name(nil)
Exq.Api
> Exq.Api.stats(server_name, "processed")
{:ok, 28}
> Exq.Api.busy(server_name)
{:ok, 0}
> Exq.Api.jobs(server_name)
{:ok, [{"ranking", []}]}
```

わりといろいろ取れます。
[Exq\.Api – exq v0\.8\.0](https://hexdocs.pm/exq/Exq.Api.html)
yarn cheat sheet - vs npm

| npm                                           | yarn                              |
|-----------------------------------------------|-----------------------------------|
| npm init                                      | yarn init                         |
| npm run &lt;script name>                      | yarn run &lt;script name>         |
| npm test                                      | yarn test                         |
| npm bin                                       | yarn bin                          |
| npm install                                   | yarn                              |
| npm install &lt;package name>                 | yarn &lt;package name>            |
| npm install &lt;package name> --save          | yarn add &lt;package name>        |
| npm install &lt;package name> --save-dev      | yarn add &lt;package name> --dev  |
| npm install &lt;package name> --global        | yarn global add &lt;package name> |
| npm uninstall &lt;package name>               | yarn remove &lt;package name>     |
| npm ls                                        | yarn ls                           |
| npm cache clean                               | yarn cache clean                  |
| npm cache ls                                  | yarn cache ls                     |
| npm outdated                                  | yarn outdated                     |
| npm update --save                             | yarn upgrade                      |
| npm install &lt;package name>@latest --save   | yarn add &lt;package name>        |
| npm link                                      | yarn link                         |
| npm login                                     | yarn login                        |
| npm publish                                   | yarn publish                      |
| -                                             | yarn why &lt;package name>        |
| -                                             | yarn licenses ls                  |
| -                                             | yarn licenses generate-disclamer  |

- https://yarnpkg.com/en/docs/cli/
- https://docs.npmjs.com/
- https://shift.infinite.red/npm-vs-yarn-cheat-sheet-8755b092e5cc
Rasberry Pi (raspbian)でBonjour

Raspberry Piを使うとき，RasPiにはディスプレイとかキーボードなしで起動し他のパソコンからsshで接続して遠隔操作というのはよくやりますね。このときRasPiのIPアドレスが分かっていないと接続できません。固定IPならメモっておけばよいのですがDHCPでIPアドレスが変化する場合は工夫が必要です。[RasPiに小型LCDを付けてIPアドレスを表示](http://make.kosakalab.com/make/electronic-work/raspberry-pi-i2c-lcd/)させるとかやっていました。
WebをながめていたらRasPiでBonjourを使う記事を見ました。Bonjourは（IPアドレスが不明でも）ホスト名でLAN上のコンピュータ等にアクセスする方法です。
avahi-daemonというソフトをインストールするとRasPiでBonjourが使えると書かれていましたのでさっそくsudo apt-getしたら…
すでに最新版がインストールされていました。Rasbian jessieにはデフォルトでインストールされているようです。

`$ sudo apt-get install avahi-daemon
``Reading package lists... Done
``Building dependency tree       
``Reading state information... Done
``avahi-daemon is already the newest version.
` 
MacはデフォルトでBonjourが使えますので，さっそくsshで接続してみました。Bonjourでは相手のホスト名.localでアクセスします。

`$ ssh pi@raspberrypi.local
`The authenticity of host 'raspberrypi.local (240f:5:f844:1:88aa:3ab4:4f:236c)' can't be established.
`RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
`Are you sure you want to continue connecting (yes/no)? yes
`- 略 -
`pi@raspberrypi:~ $
` 
WindowsはBonjour for Windowsをインストールします。iTunesがインストールされていれば，すでにBonjourはインストールされています。

LAN上の複数のRasPiにBonjourでアクセスするときデフォルトのホスト名raspberrypiは衝突しますので，各RasPiに個別のホスト名を設定して置く必要があります。
Raspbianでホスト名を設定するところは２ヶ所あります。

`/etc/hostname
``/etc/hosts
` 

この二つのファイルに記述されているraspberrypiを個別のホスト名に書き換えて再起動します。

Bonjourを使えばIPアドレスを把握しなくてもイイので便利ですね〜

原典 http://make.kosakalab.com/raspberry/bonjour/
refresh page after swipe back Framework7

* page1 -> page2
* swipeback 
* page2 -> page1
* refresh page1

```javascript
var initPage1 = myApp.onPageInit("page1", function(page) {
  // ...
});
```

```javascript
myApp.onPageAfterBack("page2", function(page){
  initPage1.trigger(myApp.getCurrentView().activePage);
});
```
macOS: "docker-compose build" -> Error "no space left on device"




## Quick Fix



```
docker rmi -f $( docker images | grep '<none>' | tr -s ' ' | cut -d ' ' -f 3)
```

## Error Message


I got "no space left on device" error after "docker-compose build".

```
% docker-compose build
```

(snip)

```
Done, without errors.
 ---> d26d5bc0fdf4
Removing intermediate container 78dbd36b4e32
Step 6 : WORKDIR /eth-netstats
 ---> Running in 3ace9fe7e2dc
 ---> c80b7998173d
Removing intermediate container 3ace9fe7e2dc
Step 7 : CMD npm start
 ---> Running in 3a27d2dab885
 ---> afd803cc68aa
Removing intermediate container 3a27d2dab885
Successfully built afd803cc68aa
Building node
Step 1 : FROM python:2.7.9
2.7.9: Pulling from library/python
e5ad7970bc69: Extracting [=========>                                         ] 9.961 MB/51.37 MBBnload complete
0a7eeedff1c5: Download complete
bbe5878d8681: Download complete
1df3bb332f6a: Downloading [==================================================>] 160.4 MB/160.4 MBnload complete
66827c4496e3: Download complete
d53e9c58fa7d: Downloading [==================================================>] 19.42 MB/19.42 MBnload complete
ERROR: Service 'node' failed to build: write /var/lib/docker/tmp/GetImageBlob558874378: no space left on device
```

## Ref


Docker on Mac OS X: 'No space left on device' error
http://dmuso.com/2015/11/08/docker-on-mac-no-space-left-on-device.html
GCPのgcloudコマンドをインストールする

## はじめに
最近、gcloudコマンドをインストールすることがあったので備忘録として記す。本記事で記す方法は、インストールに際して`root`で実行する必要はない。インストール中に幾つか質問が現れるので注意が必要である。`root`になれる環境であれば、`apt`や`yum`でインストールできるため、そっちを使ったほうが楽かもしれない。

## インストール
このコマンドでダウンロードとインストールが実行される。

```shell-session
$ curl https://sdk.cloud.google.com | bash
```

インストール中の質問は、全てEnterキーを押し続けていれば問題ないはず。

```bash
Do you want to help improve the Google Cloud SDK (Y/n)?  y
```

```bash
Modify profile to update your $PATH and enable shell command
completion? (Y/n)?  y
```

```
Enter a path to an rc file to update, or leave blank to use [/home/test-user/.bashrc]:
```


インストールユーザの.bashrcが書き換えられているので、その内容を反映させる。すると、gcloudコマンドにパスが通るようになる。

```shell-session
$ exec -l $SHELL
$ which gcloud
~/google-cloud-sdk/bin/gcloud
```

## 認証
このコマンドで、自分のアカウントにログインする。

```shell-session
$ gcloud init
```

ここはEnterを押しておけばいい。

```bash
Your current configuration has been set to: [default]
```

URLが出力されるので、ブラウザで開いて、GCPで使っているメールアドレスでログインする。すると、認証キーが画面に現れるので、それをプロンプトにコピペする。

```bash
You must log in to continue. Would you like to log in (Y/n)?  y

Go to the following link in your browser:

  ¦ https://accounts.google.com/o/oauth2/XXXXXXXXXXXXXXXXXXXXXX


Enter verification code: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
```

ここもEnterでいい。

```bash
You are logged in as: [your-email@address].

Your current project has been set to: [your-project-name].
```

Google Cloud Storageだけ使う場合などには、`n`で問題ない。`y`を選ぶと、regionの選択プロンプトが現れる。

```bash
Do you want to configure Google Compute Engine
(https://cloud.google.com/compute) settings (Y/n)?
```

以上。

## Appendix
https://cloud.google.com/sdk/downloads
__future__モジュールとfuture_builtinsモジュール

Python2.6以降では次のコードを入れておくことでPython 3系の挙動に一部の関数や命令の挙動を変更できる。

```py
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
```

Python 2.6以降の2系 (2.6, 2.7) に限定して、以下も使用できる。

```py
from future_builtins import ascii, filter, hex, map, oct, zip
```

`future_builtins`は、`__future__`と異なりPython 3系ではこのモジュールは存在しないので、
両系対応時にはバージョンを確認の上でインポートするか、try/exceptで囲うような対応が必要になる。

各モジュールの詳細については、次のドキュメントを参照すると良い。

* http://docs.python.jp/2/library/__future__.html
* http://docs.python.jp/2/reference/simple_stmts.html#future
* http://docs.python.jp/2/library/future_builtins.html

Python 2.7でも事情は同じで、上記と同じコードを使用できる。
本文章でPython 2.6を含めているのは、主にRHEL/CentOS 6でPython 2.6が今後数年生き残る可能性がある(と、筆者は理解している)ためである。
結論として、Python 2.6でもPython 2.7でも`__future__`と`future_builtins`の挙動で特に留意するべき重大な違いはない。

`pyenv`を始めとした方法でPythonランタイムの選択が許されている人は、原則としてPython 2.6は使うべきではない。自由にランタイムを選べるのなら、Python 2.7つまりPython 2系全体を使用しない方向で考える方が良いだろう。ただし、使用したいライブラリ(やPythonランタイム)が2系にしか対応していないという理由でPython 2系に縛られているというケースは、現在でも考えられる。

`__future__`はPython2.1で導入された比較的古いモジュールで、Pythonの旧バージョンで新バージョンの挙動を一部先に取り込みたいときに使われてきた。現在ではPython 2系と3系の挙動を近づけるために言及されることが多いが、必ずしも3系対応のために存在するのではない。

`__future__`の一部機能については、Python 2.6でも使用する意味がなく、害はないものの混乱を招く可能性はある。[future 文](http://docs.python.jp/2/reference/simple_stmts.html#future) にある説明は以下の通りである。

> Python 2.6 が認識する機能は、 unicode_literals, print_function, absolute_import, division, generators, nested_scopes, with_statement です。 generators, with_statement, nested_scopes は Python 2.6 以上では常に有効なので冗長です。

`future_builtins`は「Python 2.x に存在するけれども、 Python 3 では異なった動作をするために、 Python 2.x のビルトイン名前空間に追加できない関数を提供」するために提供されるモジュールで、6種類の関数が定義されている。Python 2.6で導入された。
前述の通りPython 3系には存在しないモジュールであるため、3系で使用しようとすると無視されるのではなくエラーとなる。2系と3系の両方を意識したコーディングでは、若干の注意を要するように思われる。

`future_builtins`でインポートされるそれぞれの関数は、Python 3系の同等の組み込み関数と同等の挙動に近くなるよう工夫されているが、挙動が異なるものもある。全く同一の挙動を示すと仮定しては行けない。

＃ ごく正確にはデータ型からして違うが、この手のオブジェクトに対してデータ型を見て挙動を変更するのはPythonでは余りおすすめできないので、そもそも考察しない。

典型的には`map()`の第一引数が`None`であった際の挙動が異なる。

```py
Python 2.7.12 (default, Jul 20 2016, 12:19:03)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from future_builtins import map
>>> list(map(None, [1, 2, 3]))
[(1,), (2,), (3,)]
```

Python 2.7の `future_builtins.map` の実体は `itertools.imap()` であるとされる。
この関数は[ドキュメント](http://docs.python.jp/2/library/itertools.html#itertools.imap)にある通り、第一引数`function`が`None`のときの挙動が独特である。

> function が None の場合、 imap() は引数のタプルを返します。

Python 3系の`map()`関数にはこの挙動はない([参考](http://docs.python.jp/3.5/library/functions.html#map))。
実際、第一引数`function`に対してNoneを与えると、Python3系ではエラーとなる。

```py3
Python 3.5.2 (default, Jul 29 2016, 11:13:25)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> list(map(None, [1, 2, 3]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
```
rails consoleのままログレベルを変更する

`rails console`で作業中にログレベルを変更したいことがある。
`config/envronments/development.rb`の`config.log_level = :debug`部分を変更すれば当然変わるけど、それを変更せずにログレベルを変更したかった。

次のように指定するだけ。

```rb
Rails.logger.level = Logger::INFO # DEBUG, INFO, WARN, ERROR, FATAL等
```
安全に新機能を公開できるダークローンチ(Dark Launch)とは何か

日本ではまだ名前が広まってなさそうなダークローンチという言葉を最近知ったので紹介します。

# ダークローンチとは

新機能のリリースをこっそり一部のユーザーにだけ行うことを言います。
サービス全体への影響を避けながらユーザーからフィードバックを得たりシステムの問題を洗い出すことができます。GoogleやFacebookなどでも採用されています。

OSSのクライアントアプリケーションなどであれば、RC版やベータ版などでユーザーからフィードバックを得られますが、ウェブサービスではそういったことはできません。ダークローンチを使うことで、比較的安全にRC版やベータ版のようなフィードバックを得ることができます。

フィーチャーフラグと一緒に実装することでとても柔軟な機能リリースを実現できます。
例えば、一部のユーザーに機能をリリースして、順調に機能していることがわかれば全体に公開し、逆に問題が見つかればその機能だけを取り下げるといったことが可能になります。
取り下げの場合に、アプリケーション全体のロールバックが不要というところもメリットです。
（これはフィーチャーフラグのメリットですが)

# 参考

- http://tech.co/the-dark-launch-how-googlefacebook-release-new-features-2016-04
UITextViewでURLリンクをクリックしてもtextView:shouldInteractWithURL:inRange:が呼び出されない時。

ハマりました。

よく言われることとしては、
SelectableはYESで、EditableはNOにしろってこと。

やってました。
でも、呼び出されない。

delegateの設定が間違っているのか、とか色々調べたけど
解決できなかった。

ふと、思った。
User Intaraction Enabledは？

NOになってた・・・。orz
原因はこれでした。
AtomのEmmetでvendor-prefixが勝手に挿入されるのを無効にする

## 勝手にベンダープレフィックスがつく

emmet、つかってますか？
flexbox、つかってますか？
私は使ってます。

ある日、`df`で展開しようとして

```css
display: -webkit-flex;
display: -ms-flex;
display: flex;
```

みたいになってイライラしてました。
これからはね、**Autoprefixer**の時代だからね、こんなもの勝手につけなくていいの。

Autoprefixerについては下記。
[CSSベンダープレフィックス-webkit-を今この瞬間に辞める為のAutoprefixerの導入とお薦め設定](http://qiita.com/tonkotsuboy_com/items/377913c51b1ac00deffe)


## 解決方法

ホームディレクトリ（Macintosh HD/ユーザ/ :house:）に
`emmet`というフォルダをつくって、その中に`preferences.json`というフォルダを作る。
これは、Atomのemmetが標準でここのファイルを読み込むようになってて、ユーザーは元ファイルをいじらなくてもここにファイルを自作しておけば設定を上塗りしてくれるんです。

中身は以下の通り

```preferences.json
{
  "css.autoInsertVendorPrefixes": false,
  "less.autoInsertVendorPrefixes": false,
  "scss.autoInsertVendorPrefixes": false,
  "sass.autoInsertVendorPrefixes": false,
  "caniuse.enabled": false
}
```

あとはAtomを再起動すればおっけーです。

`"caniuse.vendor":false`を書いちゃうと挿入機能がうまく無効化してくれない場合があるので
上記のようにするといいと思います。
SSLチェッカーでランクA+を取る方法

#apacheでssl関連を設定する
デフォルトのまま設定してしまうとPOODLEなどの脆弱性を含んだ状態でサイトを公開することになってしまいます。
そのため、セキュリティを高める設定を施す必要があります。

##チェッカー
下記が大変便利です。
[https://www.ssllabs.com/ssltest/](https://www.ssllabs.com/ssltest/)

##デフォルトの設定
デフォルトの設定やネットに載っている昔の設定を使うとsslv3などの対策がないものが多いので
脆弱性が多数あります。
チェッカーでも「F」ランクになってしまいます。

##対策
何故かわからないが「SSLProtocol」や「SSLCipherSuite」を対象のバーチャルホストの設定箇所に入れても設定が効かず、httpd.confなどの全体にかかる所に入れると効いた。SSLをONにするわけではなく、定義だけなのでこの方式で進めることにする。

###具体例

```lang:httpd.conf（バーチャルホストではなく全体にかかるように。）
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4:!DH
Header set Strict-Transport-Security "max-age=315360000;"
```

```lang:それぞれのバーチャルホストのconf
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/*******.crt
SSLCertificateKeyFile /etc/httpd/ssl/**********.pem
SSLCertificateChainFile /etc/httpd/ssl/************.ca
```

####SSLHonorCipherOrder
SSLHonorCipherOrderを有効にすることで、ネゴシエーションの際に暗号の選択をサーバ側で決定するようになります。
この設定を有効にすることで、SSLダウングレード攻撃を防ぎます。

####SSLProtocol
SSLv2、SSLv3は深刻な脆弱性を抱えたものなので、使わないようにします。

####SSLCipherSuite
脆弱性のある暗号化スイートは明示的に禁止します。
!は暗号スイートを使わせない。
-は暗号スイートを削除する。後ろで追加すれば使用することも可能
+は暗号スイートの追加。

####Header set Strict-Transport-Security
HSTS はサーバーから “Strict-Transport-Security” というヘッダを返すことで、
以後そのブラウザで 同じURLを入力すると HTTP ではなく HTTPS で暗号化した通信を行うようにする機能です。
これにより、常時HTTPS通信をするように設定します。

##結果
グレードはA+となりました。
ただ、見えないレガシーな携帯なども出て来るようなのでその辺りのリスクも考慮してください。
[gusuku] 帳票：日付の出力（$DATEと書式設定の組み合わせで表現）

# 課題
gusukuのExcel帳票プラグインは、kintoneアプリケーションのデータを使って、手元のExcelで帳票をお手軽に作成できる点がメリットです。

ですが、意外に「あれ、これどうやるの？」と悩む点もありまして、そんなTIPSを少しずつご紹介しています。

***今回は「日付の出力」です。***

（Excel帳票プラグインはgusukuのオプションサービスです。詳しい情報は以下の公式サイトよりご確認ください。）


<a href="https://gusuku.io" rel="nofollow noopener" target="_blank"><img src="https://qiita-image-store.s3.amazonaws.com/0/133500/3a0f4bec-1475-e349-43c0-cd88056ea91b.jpeg" alt="gusuku_logo.jpg" title='"gusuku_logo.jpg"'></a>

<a href="https://gusuku.io" rel="nofollow noopener" target="_blank">kintoneアプリケーション開発をサポートするプラットフォーム gusuku（グスク）</a>

# 基本機能確認

日付で出力する書式はこちらです。
``` $DATE(フィールドコード) ```
これで、日付の値がEXCELに出力されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/56866/187a55f9-b134-8057-ec3a-759a7b9fb00c.png)

# 解決方法
値ですので、一般的な日付表示にはEXCEL側での書式設定が必要です。
また、関数のTEXTを使う事でも書式表示が可能になります。
メジャーな書式設定はこれくらいでしょうか。
![image](https://qiita-image-store.s3.amazonaws.com/0/56866/ae61a645-ecee-3fa5-c81d-54ed39834de3.png)
コピペ用書式＆関数テキスト
```yyyy"年"m"月"d"日"
TEXT(B2,"ggge年mm月")
TEXT(B2,"yyyy年mm月") ```

追記：
その他の書式としては、
```ge/m/d ```だと ![image](https://qiita-image-store.s3.amazonaws.com/0/56866/c6adf230-9185-8b72-8fff-a64732055259.png)で、
```ge/mm/dd```だと![image](https://qiita-image-store.s3.amazonaws.com/0/56866/3ea87194-d3f2-284f-8c7c-7a364812579d.png)になります。


# 注意点
$DATEの指定なしで出力すると文字列になります。なお、書式は指定できません。
そして、$NUMを指定して数値で出そうとすると空白になります。
![image](https://qiita-image-store.s3.amazonaws.com/0/56866/207fca40-44b4-0aca-b2b1-43fe67f5c9c2.png)

逆のパターンで、日付ではないフィールドを$DATEで出力した場合は空欄になります。
![image](https://qiita-image-store.s3.amazonaws.com/0/56866/2b35a832-8012-2a27-de43-3c34f4364cb3.png)


# まとめ
日付の書式などはEXCELの知識が必要ですが、非常に便利で見栄えも良いという事もありますので、是非使い慣れていただければと思います。
BクラスからAクラスを呼び出したい時（Swift ）

<<<<<<< HEAD
```Swift:ClassA


class ClassA {

    class func classMethod() {
        // クラスメソッド処理
    }

    func instanceMethod() {
        // インスタンスメソッド処理
    }

=======
```swift:ClassA
class ClassA {
    
    class func classMethod() {
        // クラスメソッド処理
    }
    
    func instanceMethod() {
        // インスタンスメソッド処理
    }
    
>>>>>>> EDIT_REQUEST
}
<<<<<<< HEAD

=======
>>>>>>> EDIT_REQUEST
```

<<<<<<< HEAD
```Swift:ClassB


// ClassA のクラスメソッドを呼び出す
    ClassA.classMethod()

    // ClassA のインスタンスメソッドを呼び出す
    let a = ClassA()
    a.instanceMethod()



=======
```swift:ClassB
    
    // ClassA のクラスメソッドを呼び出す
    ClassA.classMethod()
    
    // ClassA のインスタンスメソッドを呼び出す
    let a = ClassA()
    a.instanceMethod()
    
>>>>>>> EDIT_REQUEST
```

ドットで呼び出す
nginx 


https
https://dogmap.jp/2011/05/10/nginx-ssl/

php4-fpmが入っているか確認

```shell-session
yum update
php-fpm -v
```
なかったので次のコマンド
http://qiita.com/nagomu1985/items/31f7a24ee406826721e0

オプション
```shell-session
yum -y install yum-plugin-priorities
yum -y update
yum -y groupinstall "Base" "Development tools" "Japanese Support"
```
ここは入れる
```shell-session
yum --enablerepo=remi,remi-php56 -y install php-fpm
```

サービスとして開始
https://lowendbox.com/blog/php-on-centos-7-php-fpm/

編集
/etc/php-fpm.d/www.conf

```shell-session
systemctl start php-fpm
systemctl enable php-fpm
```

リダイレクトなどこの辺参考
http://cloudrop.jp/wordpress/more_tuning_on_nginx

ここで.htaccess変換
https://winginx.com/ja/htaccess


```shell-session:defalut.conf
server {
    root /var/www/example.com;
    location / {
        try_files $uri $uri/ /index.html;
    }
}
```
$uriがなければ$uri/なければindex.html



php-fpmをsocektで
http://qiita.com/monkick@github/items/610d1435d812beb853e2
unix:/tmp/phpcgi.socket;にする

でfastcgi_pass unix:/var/run/php-fpm/php-fpm.socket;を設定


以下のエラー
nginx error connect to php5-fpm.sock failed (13: Permission denied)
http://stackoverflow.com/questions/23443398/nginx-error-connect-to-php5-fpm-sock-failed-13-permission-denied


sessionファイルの権限変える
/var/lib/php/session/

chown root:nginx /var/lib/php/*
chown -R nginx:nginx /var/lib/php/session
chown -R nginx:nginx /var/lib/php/wsdlcache



http://vatchcjplog.blog.shinobi.jp/nginx/%E3%80%90nginx%E3%80%91%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%83%A1%E3%83%A2

proxy_connect_timeout
proxy_send_timeout
proxy_read_timeout

https://kb.plesk.com/jp/120210
ビットコインウォレットの開発にはどれがいいか(JSON-RPC,bitcoinjs-lib,bitcore-lib)

# ビットコインウォレットの開発はどれがいいか

良いところ悪いところ上げておきます

## ■bitcoind + JSON-RPCを使った開発スタイル

bitcoindの持つ機能をAPIとして呼び出せる

* https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list

### pros

* 
* ビットコインの仕様をあまりしらなくても開発ができるので楽
* json-rpcのライブラリは各言語に用意されている
* ビットコインウォレットの設定は設定ファイルで出来るから楽
* アルトコインもAPIはほとんど変わらない(Proof of StakeなどのコインでAPIが追加になっていたりするくらい)

### cons

* 開発機にbitcoindをインストールする必要があるのでブロックチェーンの同期が大変
* ビットコインのRPCは負荷耐性が低いので負荷に弱い。本格的にやる場合はジョブキューなど併用
* 入金用ウォレットでもウォレット機能を使うので秘密鍵をもつ必要があり、セキュリティ的に危ない
* HDウォレットにできないので秘密鍵の管理が発行したビットコインのアドレス分管理しなくてはならない

## ■bitcoinjs-libを使った開発スタイル

ビットコインの機能を細分化しJSのライブラリとして実装されたもの

* https://bitcoinjs.org/

### pros

* javascriptだけで完結するプログラミングができる（ブラウザで使える）
* アルトコインの追加が楽（最初からlitecoin、dogecoinのパラメータ有り）
* 入金用ウォレットに秘密鍵をもつ必要がない
* HDウォレットの実装ができる
* マルチシグの実装ができる
* 高度な実装ができる

### cons

* 鍵の生成や署名の作成が遅い
* トランザクションを自分で作らないと行けないので大変
* おつりの管理とか考える必要がある
* 手数料の計算をしなくてはならない
* ビットコイン特有な攻撃対策を実装しなくてはならない
* ビジネスで使うにはどこかにブロックエクスプローラーを用意する必要がある（公共のものはリクエスト制限があったりする）


## ■bitcore-libを使った開発スタイル

ビットコインの機能を細分化しJSのライブラリとして実装されたもの

* https://bitcore.io/

### pros

* JSで高速に動くようにチューニングされている（それでも遅いことには変わりないけど）
* javascriptだけで完結するプログラミングができる（ブラウザで使える）
* 入金用ウォレットに秘密鍵をもつ必要がない
* HDウォレットの実装ができる
* マルチシグの実装ができる
* 高度な実装ができる

### cons

* 素のライブラリでアルトコインの追加は想定されていないのでカスタマイズする必要がある
* トランザクションを自分で作らないと行けないので大変
* おつりの管理とか考える必要がある
* 手数料の計算をしなくてはならない
* ビットコイン特有な攻撃対策を実装しなくてはならない
* ビジネスで使うにはどこかにブロックエクスプローラーを用意する必要がある（公共のものはリクエスト制限があったりする）


## ■bitcoinj

javaで実装されたspvクライアントライブラリ
スタンドアローンで起動可能

* https://bitcoinj.github.io/

### pros

* javaだけで完結するプログラミングができる
* HDウォレットの実装ができる
* 高度な実装ができる
* SPVクライアントなのでブロックチェーン同期が速い
* bitcoindはどこかにつながればいいのでなくても良い
* フルマネージドなので実装が楽

### cons

* 素のライブラリでアルトコインの追加は想定されていないのでカスタマイズする必要がある
* 独自にUTXOのウォレットデータベースを持っているので問題が起きたときに追いにくい
* 秘密鍵を保有しなければならない
[メモ]CSSで画像にhoverした時にzoomする方法

①親要素```.scale```に```width,height,overflow:hidden;```を設定
②変化前(hover前)に```transition:transform 0.5s linear```で変化の仕方を記述
③変化後(hover後)に```transform:scale(1.2);```で変化後の状態を記述

```css
.scale {
    width: 400px;
    height: 300px;
    overflow: hidden;
}
.scale img {
    -moz-transition: -moz-transform 0.5s linear;
    -webkit-transition: -webkit-transform 0.5s linear;
    -o-transition: -o-transform 0.5s linear;
    -ms-transition: -ms-transform 0.5s linear;
    transition: transform 0.5s linear;
}
.scale img:hover {
    -webkit-transform: scale(1.2);
    -moz-transform: scale(1.2);
    -o-transform: scale(1.2);
    -ms-transform: scale(1.2);
    transform: scale(1.2);
}
```


(参考)
http://raining.bear-life.com/css/css3%E3%81%AE%E3%80%8Ctransformscale%E3%80%8D%E3%81%A7hover%E3%81%97%E3%81%9F%E6%99%82%E3%81%AB%E7%94%BB%E5%83%8F%E3%82%92%E6%8B%A1%E5%A4%A7%E3%81%99%E3%82%8B
Unityで現在のシーン名の取得方法

Unityで現在のシーン名を取得するためのメモ

#環境
・OS X 10.11.6(El Capitan)
・Unity 5.4.0f3

#コード
```
SceneManager.GetActiveScene().name
```

でString型で現在のシーン名を取得できる。



#サンプルコード

```:test.cs
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement; // コレ重要

public class HogeHoge : MonoBehaviour {

	void Update () {
		if(SceneManager.GetActiveScene().name == "hogehoge"){ // hogehogeシーンでのみやりたい処理

		}else{ // それ以外のシーンでやりたい処理

		}
	}

}

```
Travis CIでJailbreak Tweak(Logos)を自動ビルドしてみる

Travis CIでLogos、Jailbreak Tweakを自動ビルドしてみました。

##.travis.yml

```.travis.yml
os: osx
osx_image: xcode8
language: objective-c

env:
  global:
     - THEOS=~/theos

before_install:
  - brew update
  - brew install dpkg ldid
  - git clone --recursive git://github.com/theos/theos.git ~/theos

script:
   - make package
```
Makefileの位置等は適宜読み替えてください。

[デモ](https://github.com/ChikuwaJB/ClearBadgeFlipSwitch)

[![Build Status](https://travis-ci.org/ChikuwaJB/ClearBadgeFlipSwitch.svg?branch=master)](https://travis-ci.org/ChikuwaJB/ClearBadgeFlipSwitch)
Xcode6からXcode8へ移行する際に行ったこと-XCode編1

## XCodeからSubmitしたら・・・
5分後にこんなメールが帰ってきた

>This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

## 対応
特にカメラを利用していないのでオフにした

```Objective-c:CameraCapture.mm
+ #if 0
#include "CameraCapture.h"
#include "AVCapture.h"
#include "CMVideoSampling.h"
#include "CVTextureCache.h"
~~ (略) ~~
+ #endif
```
Movable Typeの記事やウェブページでMTタグを使いたい


## mtevalモディファイアを使う

```mtml
<mt:EntryBody mteval="1">
<mt:PageBody mteval="1">
```

記事テンプレート、ウェブページテンプレートなどで、上記のように記述。

## フォーマットは「なし」

記事の編集、ウェブページの編集で、フォーマットを「なし」にする。

フォーマットをリッチテキストにしちゃうとMTタグが消えちゃう。


## 注意点

mtevalモディファイアを使えるのは、MT4.2以降から

他のブログの記事とかを読み込んだ場合、記事とウェブページはMultiBlogの設定をしても再構築されない。
運用でカバーするか、別途、プラグインを使うかが必要。
メモ：less 行番号の表示、長い行は折りたたまない、ファイルの末尾まで到達したら終了

## less のオプション

よく使う less のオプションをメモ。
行番号の表示、長い行は折りたたまない、ファイルの末尾まで到達したら終了。

```
less -NeS <file>
```

## オプションの説明

```
-N or --LINE-NUMBERS
              Causes a line number to be displayed at the beginning of each line in the display.


-e or --quit-at-eof
              Causes less to automatically exit the second time it reaches end-of-file.  By default, the only way to exit less is via the "q" command.


-S or --chop-long-lines
              Causes lines longer than the screen width to be chopped rather than folded.  That is, the portion of a long line that does not fit in the screen width is not shown.  The default is to fold long lines;
              that is, display the remainder on the next line.
```

## 環境変数 $LESS をつかう

毎回タイプするのは面倒くさいので環境変数 $LESS にオプションを設定してデフォルトの振る舞いを変更できます。man をみましょう。

```
LESS   Options which are passed to less automatically.
```


さっきの例だとこれでよし。

```.zshrc
export LESS="-NeS"
```


## おまけ

ちな、less でファイルを開いている時に `F` (Shift + f, 大文字のF)をタイプすると `tail -f` みたいなモードに移行するのはもう語り尽くされたね。

レス！ネス！
捗れ〜。
Git CUIとうまく付き合うための便利コマンド一覧 ～リカバリ・Tips編～

[株式会社オズビジョン](http://www.oz-vision.co.jp/)の@terra_yuccoです。
2016年度、[enPiTプログラム履修生](http://enpit.aiit.ac.jp/)として、
7月～ 品川シーサイドの産業技術大学院大学にて学んでいます。
職場ではGit/GitHubはTortoiseGitで操作していますが、
講義内ではCUI操作なので、自分のための覚書も兼ねてまとめています。

# 誤操作のリカバリ
## 誤ってmasterブランチでファイルを編集してしまった場合

- git add前
    - git checkout -b <work_branch> でブランチ切り替え
- git add後 / git commit前
    - git reset [ファイル名]
- git commit後
    - git log でコミットIDを調べ、ひとつ前のコミットIDを取得
    - git reset <ひとつ前のコミットID>
        - ローカルも変更を破棄するなら、git reset --hard <ひとつ前のコミットID>
- git push -u origin master 後
    - git log でコミットIDを調べ、元に戻すコミットをあげる
    - git revert <該当のコミットID>
        - これでcommitが発行されるので、pushすれば元に戻ります

# 便利小ネタ
## WIP PRのための空コミット
```
git commit --allow-empty -m '[WIP]hogehoge'
```

## 参照先がなくなったorigin参照を一括削除
```
git fetch -p
```

## マージ済ローカルブランチを一括削除
```
git branch --merged | grep -vE '^\*|master$|release$' | xargs -I % git branch -d %
```
- これについてはいろいろな方が必要としているようで、Qiitaにも類似エントリがたくさんありました。
    - 自社開発ではgit-flowを利用しており、`master`と`release`なので、こうするのが良さそう。
    - enPiTは多分GitHub Flowになるので、たぶんこのままでもいいけど`release`は不要な気がする。

# 参考リンク
- [Git でマージ済みのブランチを一括削除する](http://qiita.com/kyanny/items/10a57a4f1d2806e3a3b8)
- [git fetchした時に既に削除されているリモートブランチがローカルにそのまま残り続けるのつらい](http://ejo090.hatenadiary.jp/entry/2014/11/26/130811)

おしまい。

----
# Git CUIとうまく付き合うシリーズ
- [設定・確認](http://qiita.com/terra_yucco/items/3e21319d2f75e19a0c65)
- [リカバリ・Tips](http://qiita.com/terra_yucco/items/ff31c9423836c0ba5517)
YAMAHAルーターのコンフィグ履歴にまつわる覚え書き

何度か助けられてるけど、いつもやり方を忘れるRTX1210の自動設定バックアップ。「RTX 設定　履歴」とかってググってもヒットしないのでまとめておく。ちなみに公式マニュアル的には「[設定ファイル](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/showconfig/show_config_list.html)」と呼んでるみたい。
RTX系、NVR510、700Wは多分共通。NVR500は本体内に複数の設定はもてないので、microSDカードやUSBフラッシュメモリを使う形になるんじゃなかろうか。

###■保存された設定の一覧を表示する

~~~
# show config list
No.   Date       Time     Size    Sects   Comment
----- ---------- -------- ------- ------- ------------------------------------
* 0   2016/10/18 14:25:11    3517 205/205 
  0.1 2016/10/16 18:16:54    3234 210/210 
  0.2 2016/09/13 18:31:09    3506 206/206 
  1   2016/04/26 12:59:44    3503 207/207 
  1.1 2016/03/19 15:44:00    3052 211/211 
  1.2 2016/03/19 14:20:34    3017 209/209 
----- ---------- -------- ------- ------- ------------------------------------
~~~
*がついてるのが現在有効なもので、小数点以下の枝番がついてるのは自動保存された履歴で2バージョン前まで残っている。
###■特定の設定バージョンの内容を表示
~~~
# show config 0.1
~~~
のようにNo.を明示してやれば閲覧可能。この際、ログインPWと管理者PWを聞かれる。

###■ファイル番号を指定して保存
親番号は0〜4までの5スロットあり（機種によって違うかも）、デフォルトの0以外に保存したい時は、

~~~
# save 1
~~~
####コメントもつける場合　

~~~
# save 1 (コメント)
~~~

###■指定の設定ファイルに切り替える
~~~
# set-default-config 1
~~~

たぶん要再起動。

###■指定の設定ファイルを削除する
~~~
# delete-config 1
~~~

###■設定ファイルをコピーする
内蔵メモリ内なら単純に、

~~~
# copy config 0 1
~~~
とか。SD/USBフラッシュメモリとか暗号化とかはややこしいので[公式マニュアルへのリンク](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/operation/copy_config.html)に留める。
%を使わずに剰余算

[行列プログラマー](https://www.amazon.co.jp/%E8%A1%8C%E5%88%97%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E2%80%95Python%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%A7%E5%AD%A6%E3%81%B6%E7%B7%9A%E5%BD%A2%E4%BB%A3%E6%95%B0-Philip-N-Klein/dp/4873117771)のp.19 
> Pythonを用いて、2304811 を47で割った余りを求めよ。ただし%を使用しないこと。

%を使わないでどうやってやれって言うんだ！？と思ってハマったのでメモ。

```answer.py
2304811 - (2304811 // 47) * 47
```

Python には // という演算子があって、これは切り捨て除算と呼ばれる。

```sample.py
print(10 / 3)      # 3.33333333333333
print(10 // 3)     # 3
print(10 // 3.3)   # 3.0
print(10 % 3.3)    # 0.10000000000000053
print(10 // 3.4)   # 2.0
print(10 // 3.33)  # 3.0
```

Cから入った人間だと、整数値を整数値で割れば、切り捨て除算じゃないか。と思ってたけど、型がない世界だと、そうは行かない模様。
branchをとりあえずmasterに追いつかせるための応急措置

#0. 自分のローカルブランチを切って作業している間にmasterが更新されてしまった場合


```bash
[~]git branch
master
* your_branch
[~]git pull origin master
....
CONFLICT (content): Merge conflict in xxxxxxxxxxx  # <= conflictを起こしたファイルがここに表示される
Automatic merge failed; fix conflicts and then commit the result.
```

- コンフリクトを起こしている当該ファイルをviなどで開くとコンフリクトを起こしている箇所がマーキングされている。
- その箇所を消す。またはそれが必要な変更であれば残し、マーキングの行を消す
- その後以下のようなお決まりの操作をする

```bash
[~]git add --all
[~]git commit -m "resolve conflict"
[~]git push origin your_branch
```

#1. masterが更新されてしまったあとに、リモートにあるブランチをmasterに追いつかせたいとき
```bash
[~]git branch　-r
  origin/HEAD -> origin/master
  origin/xxxx
  origin/hoge
  origin/your_branch  # <= 当該ブランチ
[~]git checkout -b your_branch origin/your_branch
```

- ローカルに、リモートにあるブランチと同じ名前のブランチ`your_branch`を無理やり作成し、そのローカルブランチへリモートにあるブランチ`origin/your_branch`の内容を反映させる。
- その後、コンフリクトを解消するなど先ほどと同じ操作をするとmasterの更新内容をbranchに取り込むことが出来る。


ルールがちゃんと決まっている現場ならばそれに従うべきですが、小規模もしくは個人で作業している場合は以上のような応急措置で十分対応可能だと思います。
コマンドラインからファイルの中身をクリップボードにコピーする方法

txtファイルのクリップボードにコピーする場合は、

```
$ cat ./hoge.txt | pbcopy
```

また、クリップボードからtxtファイルに直接書き込む場合は、

```
$ pbpaste > ./hoge.txt
```

### 参考
http://apple.stackexchange.com/questions/15318/using-terminal-to-copy-a-file-to-clipboard
Androidで、Connection to http://xxx.xxx.xxx.xxx refused が出た時の解決方法

#Androidで、Connection to http://xxx.xxx.xxx.xxx refused が出た時の解決方法

インターネットに接続するときにエラーが出た。

```
10-18 13:56:23.143 28696-29337/com.tonosamart.xxx D/MainActivity: http://xxx.xxx.xxx.xxx/xxx.php?rid=1
10-18 13:56:23.157 28696-29337/com.tonosamart.xxx I/System.out: org.apache.http.conn.HttpHostConnectException: Connection to http://xxx.xxx.xxx.xxx refused
```

なんかよくわかんないけど、permission指定忘れてる＋URLがIPアドレスだと、
上記エラーが出るみたい！

```
    <uses-permission android:name="android.permission.INTERNET" />
```

#ちなみに、普通はこのエラーが出る。

```
10-18 13:57:28.025 29661-29770/com.tonosamart.xxx D/MainActivity: http://google.com
10-18 13:57:28.035 29661-29770/com.tonosamart.xxx I/System.out: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
```

このエラーなら、すぐわかったのに！

はまったのでメモ
rsyslogでログ出力先を分けたいときのメモ

##やりたいこと

1. 送信元ネットワークでログ出力先を分けたい
* その上で、特定ホストの特定のメッセージを含む場合に破棄したい

##config
2→1の順で定義する。


/etc/rsyslog.confに以下を追記

```bash
#192.168.1.1から受信した'hoge'を含むメッセージは破棄
if $fromhost-ip == '192.168.1.1' and ($msg contains 'hoge') then ~
#192.168.1.0/24から受信したsyslogをsyslog-hogehoge.logに出力
if $fromhost-ip startswith '192.168.1.' then /var/log/syslog-hogehoge.log 
#上記ファイルを出力後、/var/log/messagesには出力されないようメッセージを廃棄
& ~
```
WEBrickサーバが立ち上がらない時

## server.pidの中身を削除してもkillコマンドを要求された時

実は結構簡単に解決できます。
ただの偶然かもRails側のバグかも詳しく調べていませんが、
servewr.pid内のプロセスの番号を削除した後WEBrickサーバを起動すると
自動的にRailsがserver.pidがもう一度削除され作り直される。

##つまり

tmp/pids/server.pidの中身を削除しても
Rails側が削除してくれない時は
自分でserver.pidファイルを削除してみましょう。
そうしてまたWEBrickサーバを起動すると
server.pidが作り直されるはずです。

WEBrick側のプロセスが終わらなかった人の参考になれば嬉しいです。