OmniAICreator/Qiita-1.07M huggingface dataset:
メモ：jekill 静的なHTMLジェネレータを使ってみた

jekyll＝Rubyで作成された静的HTMLジェネレータ。

まだ、触りしか使っていませんが。

#使ってみた感じ、
HTMLが好きな人がHTMLだけでPHPとかRubyとかでサイトを作るように効率的にサイトを作れたらHTMLだなー。ってときに、とてもよさそうなジェネレータ。とても俺得。
静的なhtmlなのでサイトスピードの改善のときにサーバー言語側の処理を視野に入れなくていいので対策範囲を狭く保てる。
htmlファイルでhtmlファイルを読み込んで静的なhtmlファイルを生成できるので、HTMLのパーツ管理サイトに便利そう。
記事間の関連付けができればコンテンツSEOでも使えそうかな。

というか、他のケースでの利用シーンがまだ見いだせてない。

テンプレートがHTMLだけで書けるのが大きい。
環境構築の敷居が高い気がする。

#特徴
１．いままでのHTMLをそのまま置ける。
デザインにこだわるページはそのままHTMLでガリガリ書いてそのまま設置できる。
２．.htmlファイルを簡単に連結できる
htmlさえ書ければヘッダーとフッターを別のファイルから読み込むみたいなことができる。
どのサイトでも使いまわせるようにHTMLとCSSを設計していればすごく便利。
３．DBがなくても記事ブログが作れる
メモ帳で記事を書いて、ファイル名に日付と記事タイトルをつけて、所定の場所に置くと記事になる。

#難点
・管理画面とかないから、画像とか自分でFTPにあげてね。
・CMSのビジュアルエディタみたいなのはないから、記事はHTMLかMarkDownで書いてね。
・ページ数が多くなればなるだけ静的HTMLの生成処理が重くなる

#必要なスキルセット
##環境構築
・サーバー側でHTMLジェネレータ部分を動かそうとすると専用サーバーやクラウドサーバーに環境構築できる知識が必要
・ローカル側でHTMLジェネレータ部分を動かす分にはコマンドプロンプトにコマンド打てるぐらいの知識があればいける

##テンプレート
・HTMLがかければいける←これが便利

##記事コンテンツ
・メモ帳に文章書ければ最悪いける
・Markdown記法がわかると色々装飾できる
・HTMLがかけると無限の可能性がある

##LP調ページ
・そのままHTMLべた張りイケる
vagrant ssh-config --host hoge >> ~/.ssh/configでssh 接続出来ない場合

```
$vagrant ssh-config --host development >> ~/.ssh/config
$ssh development
```
でssh接続出来ない場合、`~/.ssh/config` ファイル内の記述がコンフリクトを起こしている可能性あり。不要箇所を削除して、再度上記を試みれば解決する。
OSX SFMLをビルドして使うまでの話

__※注：解決した後に思い出しながら書いている為、不正確な所があるかもしれないです__

## 環境
```
ProductName:	Mac OS X
ProductVersion:	10.11.3
BuildVersion:	15D21
cmake: 3.3.0
clang:Apple LLVM version 7.0.2 (clang-700.1.81)
```

## 対象者

- SFMLを使おうかなーと思っている人

## 事始め

とりあえずgithubからSFMLをDLしてこよう

```bash
git clone https://github.com/SFML/SFML.git
```

## ビルドする

```bash
cd ./SFML
cmake . -G 'Unix Makefiles' \
      -DCMAKE_OSX_ARCHITECTURES='i386;x86_64' \
      -DCMAKE_CXX_COMPILER='/usr/bin/clang++' \
      -DCMAKE_C_COMPILER='/usr/bin/clang' \
      -DSFML_BUILD_FRAMEWORKS='ON' \
      -DSFML_INSTALL_XCODE4_TEMPLATES='ON' \
      -DCMAKE_CXX_FLAGS='-stdlib=libc++' \
      -DCMAKE_C_FLAGS='-stdlib=libc++'
make -j4 #もしfreetype関係でエラーが出た場合は次の項を参照の事
sudo make install
```

## freetypeがねーよ！

どうもfreetypeが存在しない場合があるようですねー
困ります、困ります

```bash
brew install freetype
ln -s /usr/local/Cellar/freetype/2.6.3/include/freetype2/freetype/ /usr/local/include/freetype
```

とりあえず includeディレクトリから見て、 /freetype/config/ftheader.h となるようにシンボリックリンクを作ると解決する。

## とりあえず動かしてみる

公式にチュートリアルがありますんで参考にしよう
http://www.sfml-dev.org/tutorials/2.1/start-linux.php

## CMakeで使う

```cmake
cmake_minimum_required (VERSION 2.6)


SET(PROJECT_NAME ProjectName)
# コンパイラ
SET(CMAKE_C_COMPILER clang)
SET(CMAKE_CXX_COMPILER clang++)
# リリースビルド用オプション
SET(CMAKE_CXX_FLAGS_RELEASE "-Wall -O2")
# デバッグビルド用オプション
SET(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0")
# ビルドの基本フラグ
SET(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ ${CMAKE_CXX_FLAGS}")
# ビルドのタイプ
SET(CMAKE_BUILD_TYPE Debug)
# ext type
SET(PUTTYPE ".out")
# バージョン
SET(serial "0.0.1")

SET(MAIN_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp")

PROJECT(${PROJECT_NAME}${PUTTYPE})

ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES} ${MAIN_SOURCES})

find_package(SFML 2 COMPONENTS system window graphics audio REQUIRED)

# includes
include_directories(${PROJECT_NAME} ${SFML_INCLUDE_DIR})

# target link
target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARIES}) 

```

```bash
cmake .
make
./ProjectName.out
```

## Moduleがないんですけど！って言われた場合

そもそも、cmakeは、find_packageの時に、cmake/modulesディレクトリの
FindHoge.cmakeファイルを見て、パッケージがあるかないか判断しているっぽい（適当）

SFMLの場合は、FindSFML.cmakeファイルが
SFML/cmake/Modules
に存在しているみたいなんで、上記ディレクトリの中身のcmakeファイルを
`/usr/local/Cellar/cmake/3.3.0/share/cmake/modules`
へコピーすると、Moduleは見つかり、動作するようになる。
Mac再インストール時に「このOS X ○○ インストールアプリケーションを検証できません」というエラーが出る場合は日時が過去になってないか確認

数時間を浪費したので新たな被害者を生み出さない為にメモ
キレてないっすよ

# 概要

(数ヶ月放置していたMacbookの) OS再インストール時に以下のエラーが発生する

>このOS X El Capitan インストールアプリケーションを検証できません。ダウンロード中に破損したか不正に変更された可能性があります。

英語の場合：

>This copy of the Install OS X El Capitan application can't be verified.
It may have been corrupted or tampered with during downloading.

バージョンによって「OS X El Capitan」は「Mavericks」だったり「Mountain Lion」だったり

# 解消方法

Macの日時が過去になっているので修正する
(日時が過去ではなかった場合すみません他の記事へどうぞ)

Macの電源切っても内蔵のボタン電池で時計は動いてる
放置しすぎて時計が狂ったかなんかが原因

## 日時の変更方法
インストーラのメニューからターミナルを起動し`date`コマンドを実行
過去の日時になっていることを確認
(今回は2016年のはずが2014年になってた)

変更するには`date`に続けて数値を2桁ずつ「月、日、時、分、年」の順番に入力する
(mmddHHMMyy)

```shell-session:2016年02月20日11時22分にしたい場合
date 0220112216
```

インストーラの作成日時よりも未来であれば何でもいいので`date 0000000020`で2020年とかにしてもいいはず
どうせインストール完了してネットに繋げば正確な日時に自動同期される

# 備考

内蔵ディスクを何度も初期化するとか
6GBものインストーラを何度もダウンロードし直すとか
USBメモリにインストーラを何度も複製するとか
自分とMacの寿命が縮まるのでやめよう
(そうしたくなるエラーメッセージが悪いんだけど)

あとMacのインストーラにて「残り1秒」で何十分も放置されるのは恒例行事なので、そこで諦めて再起動するのはやめよう

キレてないっすよ

# 参考
- [Fixing OS X Install Errors “can’t be verified” and “error occurred while preparing the installation”](http://osxdaily.com/2015/01/19/fix-os-x-install-errors-cant-be-verified-error-occurred-preparing-mac/)
- [Having trouble installing OS X El Capitan](https://discussions.apple.com/thread/7251085?tstart=0)
Atomで翻訳系API呼び出すパッケージを作った

[translator-plus-dictionary](https://atom.io/packages/translator-plus-dictionary)

翻訳API(主にMS Translator)と辞書API(主にデ辞蔵)をAtom.ioから使うためのパッケージを作った．既存パッケージにもある(MS Translator)のは事実だが，見た目・機能が気に食わなかったので自作した．
言語の自動認識でショートカットだけで日本語から英語，英語から日本語に翻訳するくらいはできるようになったので自分としては満足．英語論文を書く時とかにはそれなりに便利になったのではと思っている．

基本的には書きやすいプラグインだったが，いくつか詰まった所があったのでそれについては別途投稿するつもり．

---

(2016/8/31追記)
[この記事](http://qiita.com/MikamiHiroaki/items/4d674122485cf1eec521)の自作モジュールを使って，MS TranslatorのIDやSecretなど必要なconfigが無い時に設定パネルを出すようにしました．
【Unity】エディタ拡張に初心者が挑戦_その１ 

# <i class="fa fa-cubes"></i>エディタ拡張 初心者の備忘録
初めてのエディタ拡張で分からないことだらけなので、
基本的なことからメモしていきたいと思っています。
良いサイトなどがあれば、教えていただけると幸いです。

## <i class="fa fa-cube"></i>概要
**その１: Windowを作成しラベルを表示してみる**
## <i class="fa fa-files-o"></i> 手順

**Editorフォルダの作成** 
はじめに、Unityではエディタ拡張のお決まりとしてEditorフォルダを作成する。 
Projectfile/Asset/Editorを作成し、その中にMyEditorWindow.csを作成する。 
(Editorフォルダの場所はAsset以下ならどこでもOK)  

**EditorWindowの継承** 
独自Windowを作成する場合にはUnityEditor.EditorWindowを継承し、 
必要とするGUIを配置していく。
## <i class="fa fa-code"></i> ソースコード

```csharp:MyEditorWindow.cs

using UnityEngine;
using UnityEditor;	//エディタ拡張関連は使用する
using System.Collections;

//独自のウインドウの作成
public class MyEditorWindow : EditorWindow {

	//メニューのWindowにEditorExの項目を追加
	[MenuItem("Window/MyEditor")]

	//staticにするのを忘れずに!
	static void open(){

		//MyEditorを選択するとopen()が呼ばれる
		EditorWindow.GetWindow<MyEditorWindow> ("MyEditor");

	}

	//Windowのクライアント領域のGUI処理
	void OnGUI(){

		//ラベル表示
		EditorGUILayout.LabelField( "Hello World!!" );

	}
}

```
## <i class="fa fa-cube" ></i> 確認  
最後に、メニューのWindowからMyEditorを選択して表示を確認してみる。  
![MyEditor](http://cl.ly/2o3R2r1E2o23/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202016-02-21%205.54.36.png "MyEditor")
![](http://cl.ly/16231I0p3i0A/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202016-02-21%205.55.59.png "Hello World!")    
おお~自作のWindowにHello World!!が表示された! 
これでエディタ拡張の最初の一歩は踏み出せました。笑 
これからも少しづつ勉強して自分の思い通りに拡張できるようになりたいですね。

## <i class="fa fa-book"></i> 参考
とてもわかりやすく説明されています。 
[ケットシーウェア【エディタ拡張徹底解説】](http://caitsithware.com/wordpress/archives/category/unity/エディタ拡張徹底解説)
技術英語 > If they had built the stairway [from one end],

@ AXIS Feb. 2016 > Cover interview: Frank Gehry

> If they had built the stairway <font color=red>from one end</font>, it might have turned out smooth.

Vitra Design Museum の螺旋階段を両サイドから作成したために最後に a little kink (折り目という訳になっている)ができた話。
両サイドでなく片側 (from one end) から作成したら、a little kink はできなかっただろうということだった。

フランク・ゲーリーがコンピュータシステム導入を決めたきっかけとなった話。

<hr>
関連して思い出したのは

go in one ear and out the other
http://qiita.com/7of9/items/773ef623696acb9380ab

片方の耳から入って、もう片方の耳に抜ける（すぐに忘れる、ということ)

<hr>
関連して思い出したのは

Code Complete の Top-Down and Bottom-Up Design Approaches の章 (Kindle No. 4232)。

この方式はどちらがいいかという話ではなく、実装内容に基づき、top, bottom両方から攻めるのが良い時がある。
Djangoテンプレート内でPHPのvar_dump的なもの


環境
Python 3.5.0
Django 1.9.2

Django の[組み込みフィルタ](http://docs.djangoproject.jp/en/latest/ref/templates/builtins.html#ref-templates-builtins-filters)を使う

```template.html
{{ variable|pprint }}
```

これで配列の中身とか型とかが確認できる。
Djangoテンプレート内でviewのURLを指定する


環境
Python 3.5.0
Djnago 1.9.2

```python:urls.py
app_name = 'app'	# 追加
urlpatterns = [
    url(r'^$', views.index, name='index'),
]
```

```template.html
{% url 'app:index' %}
```
Markdown to PDF Converter (OSX, MacPorts)

アプリやスクリプトのREADMEをMarkdown形式で書くのですが、どなたでも読みやすいようにPDF形式に変換する'markdown-pdf'を導入しました。

結論から言うと、[markdown-pdf](https://github.com/alanshaw/markdown-pdf)に記載の通り、下記コマンドで終わりです。

```
npm install markdown-pdf
```

ただ私の場合、npm?ってなったのと、オプション`-g`でインストールしたのでその手順を記載します。

# 環境
- OS : 10.10 (Yosemite)
- パッケージ管理ツール : MacPorts (2.3.4)
    - nodejs (4.3.1)
    - npm (2.14.19)


(Note1) nodejs, npmはmarkdown-pdf導入にあたってインストールした際のバージョンを示しています。

# npmについて
npmは、JavaScriptのためのパッケージ管理ツールです。
gemもしくはpipと同じようなものです。

# インストール手順

## Node.js
npmは、Node.jsインストール時に付属されているらしいので、

```
sudo port -d install nodejs
```
でNode.jsをインストール

## npm
上記コマンド実行後、`port installed`で確認しました。
しかしnpmは入っていなかったので、`port search node`で`npm`が出てきたのを一応確認して、

```
sudo port -d install npm
```

でインストールしました。

モジュールのインストール方法は、下記コマンドです。

```
npm install <モジュール名>
```

## markdown-pdf

```
npm install markdown-pdf
```
を実行すると、カレントディレクトリに`node_modules`が生成され、`node_modules/markdown-pdf/bin/`に`markdown-pdf`を確認しました。

ただ、現状だと

```
./node_modules/markdown-pdf/bin/markdown-pdf -o README.pdf README.md
```
のような実行方法になっていて、
実行ファイル`markdown-pdf`までパスを示してあげる必要性があるので、イケてません。

## Stand-aloneモード
[markdown-pdf](https://github.com/alanshaw/markdown-pdf)のREADMEを最後まで読むと、

```
To use markdown-pdf as a standalone program from the terminal run

npm install -g markdown-pdf
```
と書かれていました。

```
npm install -g markdown-pdf
```
だと`Permission define`と出力されたので、

```
sudo npm install -g markdown-pdf
```

で無事完了しました。

使い方は、[markdown-pdf](https://github.com/alanshaw/markdown-pdf)のREADMEの最後に記載されています。

# PDF変換結果

```
markdown-pdf -o README.pdf README.md
```
でPDFに変換すると、下記図のように無事にPDF形式のファイルが出力されました。
![README.png](https://qiita-image-store.s3.amazonaws.com/0/97701/f44c880d-6f5c-7d0e-18a8-7167659c9fe0.png)

(Note2) PDFファイルは添付できなかったので、png形式に変換しました。また、画像の空白部分は切り取っています。

# その他、参考文献
- Windowsの場合は、[Node.js / npmをインストールする（for Windows）](http://qiita.com/taipon_rock/items/9001ae194571feb63a5e)
- [Markdown ファイルを PDF に変換する。](http://qiita.com/spiegel-im-spiegel/items/cdea4a17b44fb59d6320)
- [markdown-pdf で .mdを.pdfに変換してみた](http://qiita.com/tukiyo3/items/25b47cfed8f7b6e8c9bf)
TS-220が繋がらない時に…。

TS-220を久しぶりに起動したら…

・接続元PCからPingは通る
・Qfinderダメ
・エクスプローラーダメ
・ブラウザダメ
・ルーターからのPingも通る
・TS-220のLANのインジケータがオレンジの点灯(not点滅)

それぞれ再起動してみるもダメ。
で、3秒のハードウェアリセットを試みるもダメ。

これ以上は、10秒ハードウェアリセット。
の前に…。
怖いので一度ハードディスクを外して、試しに起動してみたら何故か認識。

「いけるかも…。」

と感じ、ついでにファームのアップデート。
しかし、Qfinderからは途中で止まってアップデートできず、
QNAPのサイトからファーム420のBuild130をダウンロードしてきて、
Qfinderでやろうとしてもダメ。

一度電源を落として。
HDDを指し直して起動。

「ん？」

認識しているっぽい。

先ほど、ダウンロードしておいたファームをブラウザからアップデートで無事完了！！

元のファームは20151128の420だったと思う…。

HDDの抜き差しで認識するようになるってどういうこった？？

備考
・クロスケーブルとかルーター以外にネットワーク構成を変える品が手元になかったので変な作業した…。
・ステータスが赤と緑の交互点滅は怖い。
Eloquentに惚れちゃう便利な機能


## 1. アクセサでデータを作成

DBに存在しないアトリビュートをJSONのレスポンスで吐き出しができます。ゲッターとセッターを使うのは元々可能ですけど、アクセサで作られるアトリビュートがデフォルトでJSONになりません。そういうときは`$appends`が助けてくれます！


```php
<?php
class Store extends Model
{
	$appends = ['products_count']; // ← ここを追加すると
	
	public function getProductsCountAttribute()
	{
		// 複数クエリーに気をつけてください :)
		return $this->product()->count();
	}
}

class StoresController extends Controller 
{
	public function index()
	{
		return Store::all(); 
		// products_countも一緒に表示されます
	}
}
```

## 2. クエリースコープ

複雑な条件があるとコードが汚くなる可能性が高くなりますね。それぞれのクエリーの条件をスコープにすれば、別々になるおまけに、メソッド名から理解できるようになります。

スコープを使って綺麗なクエリーを書きましょう！

```php
<?php

// モバイルの大きな発売の取得
Order::bigSales()
	->fromMobile()
	->get();

// 先週モバイルで行われた1000円以上の発売の取得
Order::totalGreaterThan(1000)
	->fromMobile()
	->lastWeek()
	->get();

class Order extends Model
{
	public function scopeBigSales($query)
	{
		return $query->totalGreaterThan(5000);
	}

	public function scopeTotalGreaterThan($query, $total)
	{
		return $query->where('total', '>', $total);
	}
	
	public function scopeFromMobile($query)
	{
		return $query->whereIn('source', ['phone', 'tablet']);
	}
	
	public function scopeLastWeek($query)
	{	
		return $query->where('created_at', Carbon::now()->subWeek());
	}
}
```

## 3. グローバルスコープも可能です

ユーザーは自分のポストしか見れないとか？簡単です！

ログインしているユーザーのみの結果がほしい場合、グローバルスコープが有効です。

```php
class Post extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('my_posts', function(Builder $builder) {
        	// ログインしてるユーザーのみ
           $builder->where('user_id', auth()->id());
        });
    }
}
```

一年以上前の古いデータを隠すとか？

```php
class Order extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('last_year_only', function(Builder $builder) {
        	// 去年から取得する
           $builder->where('created_at', '>', Carbon::now()->subYear());
        });
    }
}
```

もちろん、古いデータが必要だったらとか、他のユーザーのポストが必要だったらとか、グローバルスコープを外すことができます。

```php
// 今年のデータに限るスコープを外す
Order::withoutGlobalScope('last_year_only')->get();

// 全てのスコープを外す
Order::withoutGlobalScopes()->get();
```

## 4. イベントも簡単です！

Laravelが発火するイベントは下記のようです。

| イベント名 | 説明 |
|----------|------|
| creating | 作成するとき |
| created | 作成したとき |
| updating | 更新するとき |
| updated | 更新したとき |
| saving | 保存するとき（制作でも、更新でも）|
| saved | 保存したとき（制作でも、更新でも）|
| deleting | 削除するとき |
| deleted | 削除したとき |
| restoring | ソフト削除をレストアするとき |
| restored |ソフト削除をレストアしたとき |

使い方もとても簡単です。グローバルスコープのように、`boot()`で登録するといいです。


```php
class Order extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::creating(function ($order) { // 作成するときに
	        // falseをリターンしたら作成されません
            return $order->isValid(); 
        });
        
        static::created(function ($order) { // 作成したときに
            $order->sendOrderSubmittedEmail();
        });
    }
}
```

## Special Thanks

- 記事書くようにインスパイアしてくれた[たくわん](http://data9824.com/)さん
- 推敲に手伝ってくれた[Maxmellon](http://maxmellon.github.io)さん

ありがとうございます！！ :D
[RTOS][iTRON]非タスクコンテキストからメッセージ送信

【使用環境】
[Windows版 iTRONサービスコール・ライブラリ - 金澤ソフト設計様](http://kana-soft.com/soft/win_itron/index.htm)

メールボックスは非タスクコンテキストからでもサービスコールができますが、
その場合、送信データを格納する変数は
static宣言するか、またはグローバル変数にしないとうまくいきません。

恐らく、非タスクコンテキストは
スコープが外れた時点で動的なローカル変数は無効化されるからかもしれません。

```C:C
/***非タスクコンテキスト***/
//static宣言が必要 
static T_MSGEX mbx_msgex;

（中略）

	result = snd_msg(MBX1_NO,(T_MSG *)&mbx_msgex );

```

もし間違っていたら指摘下さい。
パイプで渡された文字列の後方nバイトを取得する

tailでいける

```bash
$ echo 1234567890 | tail -c 5
7890
```

# 蛇足

- 指定文字から後方n文字は -c +n と指定する
- 先頭からは同様にheadを使う
- awk の substr の第三引数に負値は使えない（先頭からのみ）

# 参考

Linux - 文字列編集サンプル - Miuran Business Systems
http://www.m-bsys.com/linux/string-modify

Man page of TAIL
https://linuxjm.osdn.jp/html/GNU_textutils/man1/tail.1.html
[Vim] MacVim shift+space not working

After upgrade the mac os version to Yosemite, it seems like the <kbd>shift</kbd> + <kbd>space</kbd> not working in MacVim for Japanese Romaji.

At last I found out that with other language (English), it work.

So my solution is replacing the Japanese Romaji with English ABC.

Preference -> Keyboard , Click + button, then Select English -> ABC, Click Add button.

The ABC is the same with Romaji.
[golang]GoでbitFlyerのSDKっぽいやつを実装してみた

せっかくなので前回の記事をもとに、[bitFlyer Lightning API](https://lightning.bitflyer.jp/docs)のSDKを実装してGitHubに公開しました（プルリク歓迎）。

* 前回の記事

[[golang]GoでbitFlyerのAPIへアクセスしてみた](http://qiita.com/pokochi/items/0c572e6c3bf79126a851)

* GitHub

[GitHub bitFlyer](https://github.com/pokochi/bitFlyer)

* TODO

[新規の親注文を出す（特殊注文）](https://lightning.bitflyer.jp/docs#新規の親注文を出す特殊注文)の実装。
テストケースの作成
エラー処理のリファクタ
etc
HDの容量確保をする、ゴミを削除する方法「mac, ubuntu」

他にも削除できるものがあれば御連絡ください。


#GUIで作業する
管理ボタン押下で容量食ってるファイルを探せる。必要ないのは消しておく。

![スクリーンショット 2018-06-12 15.44.34.png](https://qiita-image-store.s3.amazonaws.com/0/64334/c35f85e3-708c-2e4d-eac0-56c9dbc3c863.png)


#コマンドで容量の確認
```
df -h
```

```
sudo /usr/bin/du -g -x -d 5 / | awk '$1 >= 5{print}'
or
du -sh /Library/*| sort -nr
```

#容量の確認(ubuntu)

```
sudo du -sb ./* | sort -n | numfmt --to=iec --suffix=B --padding=5
```

#削除(ubuntu)
autoremove
http://qiita.com/inohiro/items/5d358c30eb7bacb37c7c

#削除(mac)

####いらないアプリを消す
https://freemacsoft.net/appcleaner/

####一時ファイル削除
```
/private/var/tmp
```

####homebrewのキャッシュクリア
```
brew cleanup
```

すごい。ずっとやってなかったので11GBも空いた。

```
...
Removing: /Users/miyamoto/Library/Logs/Homebrew/x264... (68B)
Removing: /Users/miyamoto/Library/Logs/Homebrew/xtensor... (68B)
Removing: /Users/miyamoto/Library/Logs/Homebrew/xvid... (68B)
Removing: /Users/miyamoto/Library/Logs/Homebrew/xz... (68B)
Removing: /Users/miyamoto/Library/Logs/Homebrew/zeromq... (68B)
==> This operation has freed approximately 11.4GB of disk space.
```

### docker削除

dockerも容量を取りがち。

```
docker stop $(docker ps -q)
docker rm $(docker ps -q -a)
docker rmi $(docker images -q)
```


####macのキャッシュ削除



```
sudo rm -dfR /System/Library/Caches/* /Library/Caches/* ~/Library/Caches/*
or
sudo rm -rf /System/Library/Caches/* /Library/Caches/* ~/Library/Caches/*
```


### Javaを消す

言語でいらないものがあれば消す。

```
/System/Library/Java/JavaVirtualMachines/
/Library/Java/JavaVirtualMachines/
/Users/$USER/Library/Java/JavaVirtualMachines
```


### Adobeのキャッシュ削除


```
rm -rf ~/Library/Application\ Support
```


####ハイパネーション機能データ削除
```
sudo rm /private/var/vm/sleepimage
```
####iTunesの設定を変更して削減する方法
http://www.moreitfun.com/2015/04/04/how-to-delete-other-strage/

####iphone appのデータ削除
http://kotonova.com/1963

####xcodeデータ削除
http://qiita.com/hirayaCM/items/14dc021d4b27bdbfbb3d

https://qiita.com/nikadon/items/b7887250f804dd243a62



```
~/Library/Developer/Xcode/Archives
~/Library/Developer/Xcode/DerivedData
~/Library/Developer/Xcode/iOS DeviceSupport/
~/Library/Application Support/iPhone Simulator
```



```
~/Library/Logs
~/Library/Developer/CoreSimulator/Devices
```

https://apple.stackexchange.com/questions/272929/is-it-safe-to-delete-the-content-of-library-logs


####docker

https://qiita.com/junkjunctions/items/ad971fd84fb8c30816d6

```
rm -rf ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
```

####imovieデータ削除
http://tipstour.net/delete-imovie-temp-files

####その他
http://qiita.com/sea_mountain/items/b9a6af33bd50f0e344ef


<hr>

# macのメモリの解放


```
sudo purge
```


# 参考

https://qiita.com/akameco/items/9e5026e892661b75e7b3


https://qiita.com/shtnkgm/items/c96a58579ec406194fa8
Ubuntu 14.04 LTS 開発環境構築ログ #01

# 環境
|項目|内容|
|----|----|
|利用サービス|DTI ServersMan@VPS Entryプラン|
|メモリ|1GB|
|ストレージ|50GB|
|OS|Ubuntu 14.04 LTS Server|

# 初回ログイン
指定のIPアドレス、ポート番号に TeraTerm 等で SSH 接続(rootユーザ)
## root ユーザのパスワードを変更
```
# passwd
#
```
## 作業用ユーザを作成してパスワードを設定
### ユーザを作成
```
# useradd -m -s /bin/bash cazborg
# ls -l /home
drwxr-xr-x 2 cazborg cazborg 4096 Feb 20 00:48 cazborg
#
```
### 作成したユーザのパスワードを変更
```
# passwd cazborg
#
```

## 作業用ユーザを sudo グループに追加
```
# gpasswd -a cazborg sudo
#
```

## ホスト名を恒久的に変更
### ``/etc/hostname`` にホスト名とドメインを設定
```
# echo 'casper.local' > /etc/hostname
# cat /etc/hostname
casper.local
```
### ``/etc/hosts`` にも設定
```
# echo '127.0.0.1 casper.local casper' >> /etc/hosts
# tail -1 /etc/hosts
127.0.0.1 casper.local casper
```
### 再起動してホスト名を反映
```
# reboot
```
画像の文字とテキストを合わせる（非推奨）

##コーディングするときちょっと気になったフォントのこと
フォントのことを言うと、コーディングする際にfont-familyのことなんてほとんど考えない。
けど、背景画像に合わせてテキスト（デヴァイスフォント）を配置するとき、ふと気になって夜も眠れなくなってしまったのでとりあえず書いてみる。

###具体的な例をあげると、
・地域LPOとか言われるやつで地域別に訴求する文言を変えたいとき
・キャンペーンをさも今しかやってませんみたいに言うとき

![campaign.png](https://qiita-image-store.s3.amazonaws.com/0/106705/917fd890-24e2-947a-6996-c965cd987e00.png)

要はこんな画像に毎月末の数字を動的に表示させるんだけど、
…なんと！ぴったり合わせたはずのベースラインがずれている…？？
ということがありました。


###MeiryoとHiraginoではベースラインの位置が違う
既存のサイトで指定されていたのがこんな感じのスタイル

```css:css
font-family:"Meiryo", "Hiragino Kaku Gothic Pro", Arial, Verdana, sans-serif;
```
で、調べてみたらMeiryoとHiraginoではベースラインの位置が違うらしい。
というより「メイリオは特に広いディセンダを持っているようです。」とのことで、
悪いのはどちらかというとメイリオだった。
というお話。
※ディセンダ＝ベースラインの下のスペース

###結論
・背景画像の上に文字を重ねるときは、文章全部をデヴァイスフォントにしましょう。（画像に文字いれるな）
・あるいは、1~2pxくらいずれてもいいようにテキストを入れる部分に余裕を持たせましょう。
・動的に出す部分をテキストじゃなく画像にしましょう。
（↑この場合、すごい数の画像がいるはずなので、めんどくさかったらあきらめましょう。）

###余談
そもそもなんでこーなったかというと、職場ではデヴァイスフォント（テキスト部分）＝メイリオ だから。
あと、コーダーのpcにはヒラギノが入っていないから。
ヒラギノ入ってんのデザイナーくらいでしょ！スルーしよ、と思ったけどマックとかどーなの？（汗）
結論としてはコーディングというよりデザインの問題みたいになっちゃったけど
MSゴシックとかだったら位置がずれたりしないはず。
他にもありそうだけど検証できない…
Google for Mobile - Tokyo『デベロッパーのためのGoogle Play ポリシー』

# 『デベロッパーのためのGoogle Play ポリシー』

この記事は、2015/12/09に開催された「[Google for Mobile – Tokyo](https://events.withgoogle.com/google-for-mobile-tokyo/)([#gfmtokyo](https://twitter.com/search?q=%23gfmtokyo))」の下記セッションの紹介です。

> Develop Track / Session 10
> 『デベロッパーのためのGoogle Play ポリシー』
>  Google Play Android Developer Support　寺前 桜


# Why do we care about policies ? / なぜポリシーが重要か？

なぜポリシーが重要か？

- 「ユーザー」を守るため
    - Googleにとっての「ユーザー」とは「エンドユーザー」と「デベロッパー」
    - 「ユーザー」が安心・安全なアプリを公開・利用できるようにする


# Google Paly Policies

- [Google Play デベロッパー プログラム ポリシー](https://play.google.com/intl/ALL_jp/about/developer-content-policy.html)

- [Google Play デベロッパー 販売/配布契約書 (DDA)](https://play.google.com/intl/ALL_jp/about/developer-distribution-agreement.html)


# Policy Violation ? / ポリシー違反？

日本国内の主な「ポリシー違反」

- Fake ratings & reviews / 偽りの評価やレビュー
- Sexual contents / 性的表現
- Affiliate Spam / アフェリエイト スパム
- IP infringement / 知的財産権侵害
- Security Vulnerabilities / セキュリティ上の脆弱性


## Fake ratings & reviews / 偽りの評価やレビュー

> デベロッパーは、不正なインストール、レビューや評価に対する報酬やレビューや評価の捏造といった不正な手段やプロダクトに評価を付けたユーザーへのインセンティブの提供などによって、ストア内でのプロダクトの掲載順位を変更しようとしたり、プロダクトの評価やレビューを操作しようとしたりしてはいけません。
> 
> **Google Play デベロッパー プログラム ポリシー**
> **スパムとストア掲載順位**

- 高い評価の強要や評価に対して報酬を与えるなど、レビューの内容を誘導するものはNG。
- レビューしやすい環境を用意するのは問題ない。


## Sexual contents / 性的表現

> デベロッパーは、不正なインストール、レビューや評価に対する報酬やレビューや評価の捏造といった不正な手段やプロダクトに評価を付けたユーザーへのインセンティブの提供などによって、ストア内でのプロダクトの掲載順位を変更しようとしたり、プロダクトの評価やレビューを操作しようとしたりしてはいけません。
> 
> **Google Play デベロッパー プログラム ポリシー**
> **スパムとストア掲載順位**

- 日本の文化は、性的表現に対して寛容。
- Google Play はグローバルな場なので、グローバルな基準で判断される。
- アプリのアイコンや名前にも注意が必要。


## Affiliate Spam / アフェリエイト スパム

> 以下のような機能を主要な機能とするアプリを掲載してはなりません。
>   - アフィリエイトのトラフィックをウェブサイトに誘導する
>   - 自分で所有または管理していないウェブサイトのウェブ表示を提供する
>     （ただし、そのウェブサイトの所有者または管理者から許可を得ている場合を除く）
> 
> **Google Play デベロッパー プログラム ポリシー**
> **スパムとストア掲載順位**

- Google Playで公開するアプリは独自のコンテンツを提供する必要がある。
- 他者のウェブサイトを表示するだけのアプリはNG。
- 特に、ウェブサイトへのアフェリエイトアクセスを増加させることだけが目的のアプリはNG。


## IP infringement / 知的財産権侵害

> 他人の知的財産権 （特許権、商標権、企業秘密、著作権、その他の専有的権利を含む）を侵害したり、知的財産権の侵害を助長、誘導したりしないでください。
> 
> **Google Play デベロッパー プログラム ポリシー**
> **知的財産権**

- 不注意で知的財産権を侵害していることがある。
    - 例えば、音楽再生アプリで音楽CDのジャケット写真を表示中のスクリーンショットをGoogle Playのアプリページで使用していた。


## Security Vulnerabilities / セキュリティ上の脆弱性

> ネットワーク、サーバー、アプリケーション プログラミング インターフェース（API）、その他のインフラストラクチャの運用を損なう、または妨害する、またはこれらに不正にアクセスするコンテンツは認められません。
> 
> **Google Play デベロッパー プログラム ポリシー**
> **危険なプロダクト**
> **Google Play デベロッパー販売 / 配布契約書**
> **4.4 禁止される行為**

- Google Play Developer Console に「セキュリティアラート」が表示されるので、迅速に対応すること。
- 放置すると、アプリ削除の対象となる可能性あり。


# Support Resources

- [play.google.com/policy](https://play.google.com/policy)
![policysenter.png](https://qiita-image-store.s3.amazonaws.com/0/93531/3112f2c0-badb-8972-a9e1-ee00160e0d7e.png)

--- 

- [play.google.com/developerhelp](https://play.google.com/developerhelp)
![developerhelp.png](https://qiita-image-store.s3.amazonaws.com/0/93531/108bd09f-fd9a-b895-5fda-7ee86ac3a868.png)
[Ruby]Mechanizeでログイン機能があるサイトにログインする

#概要
webサイトとのインタラクションを自動化してくれるgem「Mechanize」を使って、ログイン機能があるサイトにログインし、ログイン後のページをNokogiriでスクレイピングした時のメモ

#環境
Ruby   2.2.2 

#参考
- [Mechanizeドキュメント](http://docs.seattlerb.org/mechanize/index.html)
- [Ruby Mechanize でスクレイピングをするときに User-Agent は必須](http://qiita.com/arribux/items/4c2b3382ca71f29a6b8a)
- [RubyのMechanizeとNokogiriで読書メーターをスクレイピング](http://qiita.com/baboocon/items/ffd930a75179e8751053)

#Mechanizeを使ってログインしていく
##1.必要なgemのインストール
```lang:cmd
gem install nokogiri
gem install mechanize
```

##2.Mechanizeを利用してログイン、Nokogiriを利用してスクレイピング
```lang:ruby
require 'nokogiri'
require 'mechanize'

agent = Mechanize.new
agent.user_agent_alias = 'Mac Safari 4'
agent.get('ログインページのURL') do |page|

  mypage = page.form_with(name: 'ログインフォームのname属性') do |form|
    # ログインに必要な入力項目を設定していく
    # formオブジェクトが持っている変数名は入力項目(inputタグ)のname属性
    form.loginid = 'ログインID'
    form.pwasswd = 'パスワード'
  end.submit

  doc = Nokogiri::HTML(mypage.content.toutf8)
  h1_text = doc.xpath('//h1').text
end
```
ツリーデータを再帰処理で整形して出力する

# はじめに

こんな感じにツリー形式でデータを出力をしたいと思います。

```
動物
－豚
－牛
植物
－野菜
－－はくさい
－－にんじん
－果物
－－りんご
－－いちご
```

データベースには以下のように保存してあるとします。今回は、配列で処理します。

|Id|ParentId|Caption|
|--:|--:|:--|
|1|0|動物||
|2|1|豚|
|3|1|牛|
|4|0|植物|
|5|4|野菜|
|6|5|はくさい|
|7|5|にんじん|
|8|4|果物|
|9|8|りんご|
|10|8|いちご|

上記表の１行をアイテムとします。

- Id : アイテムにつける一意（重複しない番号）のIdとします。
- ParentId : そのアイテムがぶらさがるアイテムのId。例えば、豚の場合は動物につながるので、豚の ParentId は、動物の 1 を指定します。0 を root （一番上位）とします。
- Caption : アイテムの名前とします。
- 
# 処理

再起処理を利用してデータを加工します。再起処理とは、関数内から自分自身の関数を呼び出して処理することをいいます。

```lang:php
<?php

// 入力元データ準備
$src = array(
	array('Id'=>1, 'ParentId'=>0,'Caption'=>'動物'),
	array('Id'=>2, 'ParentId'=>1,'Caption'=>'豚'),
	array('Id'=>3, 'ParentId'=>1,'Caption'=>'牛'),
	array('Id'=>4, 'ParentId'=>0,'Caption'=>'植物'),
	array('Id'=>5, 'ParentId'=>4,'Caption'=>'野菜'),
	array('Id'=>6, 'ParentId'=>5,'Caption'=>'はくさい'),
	array('Id'=>7, 'ParentId'=>5,'Caption'=>'にんじん'),
	array('Id'=>8, 'ParentId'=>4,'Caption'=>'果物'),
	array('Id'=>9, 'ParentId'=>8,'Caption'=>'りんご'),
	array('Id'=>10,'ParentId'=>8,'Caption'=>'いちご'),
);

// 出力先データ準備
$dst = array();

// 再帰で関数を呼び出します。
RecursionArray($src, 0, $dst, 0);

// 実行結果表示
echo('<pre>');
print_r($dst);
echo('</pre>');

// 再帰処理用の関数です。
function RecursionArray($src, $ParentId, &$dst, $hierarchy) {

	foreach($src as $v) {
		if ($v['ParentId'] == $ParentId) {
			$dst[] = str_repeat('－', $hierarchy).$v['Caption'];
			RecursionArray($src, $v['Id'], $dst, $hierarchy+1);
		}
	}

}
```

今回は、配列に結果を入れています。

```lang:実行結果
Array
(
    [0] => 動物
    [1] => －豚
    [2] => －牛
    [3] => 植物
    [4] => －野菜
    [5] => －－はくさい
    [6] => －－にんじん
    [7] => －果物
    [8] => －－りんご
    [9] => －－いちご
)
```

# さいごに

実際の利用には、並び順なども考慮する必要があると思われます。
globの起源

https://linuxjm.osdn.jp/html/LDP_man-pages/man7/glob.7.html
> 昔々 UNIX V6 では、ワイルドカードパターンを展開する /etc/glob と言うプログラムがあった。その後すぐに、 この機能はシェルに組み込まれるようになった。
> 今日では、この機能をユーザープログラムからも実行できるよう、 glob(3) というライブラリルーチンも存在している。 

https://en.wikipedia.org/wiki/Glob_%28programming%29#Origin

> The command interpreters of the early versions of Unix (1st through 6th Editions, 1969–75) relied on a separate program to expand wildcard characters in unquoted arguments to a command: */etc/glob*.[1] That program performed the expansion and supplied the expanded list of file paths to the command for execution. Its name is an abbreviation for "global command".[2] Later, this functionality was provided as a library function, **glob()**, used by programs such as the shell.
ご存じですか? sshd_config の PermintRootLogin の各種パラメータについて

構築中に色々と知見があったので、まとめます。

# PermitRootLogin

LinuxサーバでSSHを起動させた時に、 `/etc/ssh/sshd_config`　でこのパラメータをイジらない方はいないのではないでしょうか。

デフォルトでは次のようになっています。

```bash:/etc/ssh/sshd_config
#PermitRootLogin yes
```

これは、 **rootユーザでのログインを許可** している状態です。
そのため、大抵の場合(かどうかは知りませんが)、手っ取り早く以下のような状態にしてしまうことが多いかと思います。

```bash:/etc/ssh/sshd_config
PermitRootLogin no
```

コメントアウトを解除し、パラメータをnoに設定しています。
これでrootユーザのログインは全て拒否したことになりますね。

しかしこの `PermitRootLogin`。
yes/no 以外にも設定できるパラメータがあるのはご存知でしょうか。

## without-password

「rootでログインしたいけど、パスワードのみの認証だと不安・・・。」
そういった場合に利用できるのが、`without-password` です。
読んで字の如くですが、このパラメータを指定すると **rootユーザのみパスワード認証を拒否する**ことができます。
ではどうやって認証するのかというと、公開鍵認証を使うわけですね。
rootのパスワード認証を取りやめるだけでも不正アクセスをされるリスクがグンと下がると思います。

さて、これ以外にももう一つ、パラメータが存在します。

## forced-commands-only

「rootユーザでログインはしないけどroot権限でサーバにアクセスするコマンドは使いたい」といった場合には、 `without-password` より `forced-commands-only` がオススメです。
これは **パスワード認証不可で、rootユーザでの直接ログインもできませんが、root権限を利用したコマンドのみ受け付ける** というものになります。

「rootユーザでは一切ログインしないけど、root権限でコマンドを使いたい。」
そういった場合に利用できます。

具体的には、

- rootユーザでしかアクセスできないファイルをscpでサーバにコピーしたい
- rsyncを使ってサーバ間で同期を取りたい

といった時でしょうか。
特に同期を取る場合ですが、root権限でないと参照できないファイルもあります。
「 `/etc` 配下の設定ファイルを全部同期したい！」
といった場合はroot権限が確実に必要となると思います。
勿論 `without-password` だけでも全然OKです。
しかし、rootユーザで直接ログインする必要が一切ないのであれば、 `forced-commands-only` にしておいた方が安全でしょう。

# PermitRootLogin のまとめ


|パラメータ|説明|
|:--:|:--:|
|yes|rootユーザのログインを許可|
|no|rootユーザのログインを拒否|
|without-password|パスワードを使用したrootユーザのログインを拒否|
|forced-commands-only|rootユーザの直接ログインを拒否するが、root権限を使うコマンドのアクセスは許可|
<br />
<hr>

本当は authorized_keys についても一緒にまとめたかったのですが、既にまとめてる方がいたので今回はこれだけにしました。

以上です。
Retrofit2とSimpleXMLを組み合わせて使う

# Motivation
- 未だXMLでレスポンスが返ってくるAPIを使っておりまして、XML parserを頑張って実装していましたがだんだん辛くなってきたので、代替案を調べました
- せっかくなのでRetrofit2を使おうと思い立ち、レスポンスをXMLに変換するクラスも用意されているとのことだったので、**雑ですが**使い方をまとめておこうと思います

# 参考にしたサイト
- Retrofit2 x SimpleXML
    - https://futurestud.io/blog/retrofit-how-to-integrate-xml-converter
- なぜretrofit2なのか、ということが書かれている
    - https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/


# build.gradleへの記述

- converter-simplexmlを引き込んでいる所、excludeをいくつか指定している点に注意して下さい (これが無いとgradleがエラーを吐く)

```
dependencies {
    compile 'com.squareup.okhttp3:okhttp:3.1.2'
    compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'

    compile('com.squareup.retrofit2:converter-simplexml:2.0.0-beta4') {
        exclude module: 'stax'
        exclude module: 'stax-api'
        exclude module: 'xpp3'

    }
}
```

# 実装例

```
public interface FetchService {
    @GET("<APIのpath>")
    Call<ResponseClass> fetch();
}

private static List<ResponseClass> doFetch() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://xxxxxx")
            .client(new OkHttpClient())
            .addConverterFactory(SimpleXmlConverterFactory.create())
            .build();

```
- 上記以外にXMLのデータ構造をmappingしたmodelクラスが必要です


# 辛い所
- SimpleXMLのメソッド数が多すぎて (10000くらい)、65K limitに引っかかりやすくなる
- Multidexにするとbuild時間伸びるし、proguardよく分からないので、、、とりあえずproguard調べるかという状況です
Swiftはじめたい...その１９ swiftcでコンパイルエラー


# swiftcでコンパイルエラーが起きることがあります。

+ import Foundationとかがあるかどうかのようです。

```swift:hello.swift
print("Hello")
```
```shell:コンパイルOK
% swiftc -o hello.app hello.swift
```

+ import Foundationなどがあるとだめです。

```swift:hello.swift
import Foundation

print("Hello")
```
```shell:コンパイルエラー
% swiftc -o hello.app hello.swift
<unknown>:0: error: cannot load underlying module for 'CoreGraphics'
<unknown>:0: note: did you forget to set an SDK using -sdk or SDKROOT?
<unknown>:0: note: use "xcrun -sdk macosx swiftc" to select the default OS X SDK installed with Xcode
```

## xcrunを使う

+ エラーメッセージのようにxcrunでsdkを指定すればOKです。

```shell:これならOK
% xcrun -sdk macosx swiftc -o hello.app hello.swift
```

## SDKROOTを設定しても行けるみたい。

+ tschの場合

```shell:SDKROOTを設定すればswiftcだけでOK
% setenv SDKROOT  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk

% swiftc -o hello.app hello.swift
```

+ .tcshrcにsetenvしておけばOKです。


## まとめ

+ xcrun -sdk macosxのほうがいいかも？
PersonalForge(SVN)からGitHubへ移行する手順

SSH初心者がOSDNのPersonalForge(SVN)からGitHubへ移行する手順。
参考：[git-svnで秘密鍵を指定してアクセスしたい](http://this.aereal.org/entry/2011/12/03/080630)

GitHub Desktopのインストール先や環境に依存すると思いますが、
C:\Users\ユーザ名\.ssh直下のssh_configの内容を以下のように編集。

```
Host svn.pf.osdn.jp
	User <<ユーザ名>>
	IdentityFile ~/.ssh/<<秘密鍵のファイル名>>
```

```
$ git svn clone -s --prefix=svn/ svn+ssh://<<ユーザ名>>@svn.pf.osdn.jp/<<プロジェクト名>>
```

パスフレーズを求められますが無事成功。
Git for windowsも試しましたが、ssh_configの設定が反映されず。
Go言語のgoroutine


```go
package main
import (
  "fmt"
  "time"
)

func task1() {
  time.Sleep(time.Second * 2)
  fmt.Println("task1 finished!")
}

func task2() {
  fmt.Println("task2 finished!")
}

//goroutineを使う場合と、使わない場合では結果が異なる。
func main(){
  // task1()
  // task2()
  go task1()
  go task2()

  time.Sleep(time.Second * 3)
}
```

####channel

```go
package main
import (
  "fmt"
  "time"
)

func task1(result chan string) {
  time.Sleep(time.Second * 2)
  result<- "task1 result channel"
}

func task2() {
  fmt.Println("task2 finished!")
}

func main(){
  result := make(chan string)
  go task1(result)
  go task2()

  fmt.Println(<-result)
  time.Sleep(time.Second * 3)
}
```
Ruby on Railsの「config」まとめ [自分用メモ]

<h1>configまとめ</h1>

**config / initializers / secret_token.rb**
Webブラウザ上での通信をやりとりされる、セッションIDを暗号化する設定ファイルです。
ここに書かれている乱数を種にしてセッションIDが生成される。<br>

**config / secrets.yml**
公開したくないAPIキーなどの情報を書いておくとRuby on Railsアプリ内でアクセスできる。<br>

**config / initializers / devise.rb**
Deviseプラグイン用の設定ファイルです。公開したくないAPIキーなどの情報を書いておくとRuby on Railsアプリ内に組み込まれたdeviseでアクセスできる。
Couchbaseをインストール

NoSQLデータベースです。
MongoDBの変わりに使ってみましょう。
今回はMAC版を利用します。

[Couchbase](http://www.couchbase.com/nosql-databases/downloads)
上記からファイルをダウンロードしてダブルクリックしましょう。
サーバーが常駐するので初回のコンフィグに進みます。

![スクリーンショット 2015-11-08 14.29.24.png](https://qiita-image-store.s3.amazonaws.com/0/89997/1a9bca10-2c26-76e3-3172-df4a32b01ed3.png)

全部デフォルトでOK!
![Screen11081.jpg](https://qiita-image-store.s3.amazonaws.com/0/89997/630255d3-a378-557c-b80f-1473ac7041bf.jpeg)

次にサンプルを選択する画面があるので適当に選んでみましょう。

![Scrreen1108230.57.jpg](https://qiita-image-store.s3.amazonaws.com/0/89997/0c22b001-f583-0943-c278-f81713f03618.jpeg)

![スクリーンショット 2016-02-20 23.48.57.png](https://qiita-image-store.s3.amazonaws.com/0/89997/1269bf12-1883-7475-1fcd-17c34f769b87.png)

これだけで動くようになるなんて！
Ubuntu 14.04 に GCC 4.9 をインストールする

# あらまし

GCC 4.9がUbuntu 14.04標準パッケージとして用意されていない。
PPAからインストールを行う。

# PPAの追加

```
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
```

# パッケージのインストール

```
sudo apt-get update
sudo apt-get install g++-4.9
```

# update-alternatives の導入

```
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20

sudo rm /usr/bin/cpp
sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.8 10
sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.9 20

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++
```

# バージョン確認

```
$ gcc --version
gcc (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --version
g++ (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ cpp --version
cpp (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

# 参考

Getting + installing gcc/g++ 4.9 on Ubuntu?
http://askubuntu.com/questions/428198/getting-installing-gcc-g-4-9-on-ubuntu

Choose gcc and g++ version
http://askubuntu.com/questions/26498/choose-gcc-and-g-version

Handling the GNU Compiler Collection with debian alternatives
http://blog.renaud.io/2011/10/06/handling-the-gnu-compiler-collection-with-debian-alternatives/
PostgreSQLをアップグレードしたら動かなくなったのでやったこと

## 環境とか
- MacOSX El Capitan

Homebrewを使って、PostgreSQL9.4系から9.5系にアップグレード
主にチラシ裏のメモ書き

## 起こったこと

```
$ brew upgrade postgresql
```
と、なんの気なしにPostgreSQLをアップグレードしたら、

```
$ psql -l
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
```

という具合に怒られるようになりました。`$ rake db:migrate` とかもできないorz

`/usr/local/var/postgres/postmaster.opts` で新しいバージョン書き換えたりしても同じエラーメッセージが。。

最終的には

```
$ brew uninstall postgresql
$ brew install postgresql
$ rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8
$ postgres -D /usr/local/var/postgres
```

と、PostgreSQLを再インストールし、元々のPostgreSQLのディレクトリを削除し、初期化したあと起動してどうにか解決しました。

いつも場当たり的な対応してはまってるので、もっとちゃんとドキュメントとか読んで、何がどうなってるのかも理解しようとしなければ。。

参考
[Postgres could not connect to server](http://stackoverflow.com/questions/13410686/postgres-could-not-connect-to-server) - stackoverflow
0.5から始めるAWS CLI入門 - ②基本使用

AWS CLI勉強中の内容をまとめていきます。
PREV：**[0.5から始めるAWS CLI入門 - ①AWS CLIのインストールと基本設定](http://qiita.com/yarakaki/items/48e1245193ef7a942a7e)**
* * *
#記法

```:
$ aws ＜サービス＞ ＜コマンド＞ ＜オプション＞ ＜引数＞
```

#コマンド
キーペアを参照してみる

```:
$ aws ec2 describe-key-pairs
{
    "KeyPairs": [
        {
            "KeyName": "Main-key", 
            "KeyFingerprint": "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:gg:hh:ii:jj"
        },  
        {
            "KeyName": "Sub-key", 
            "KeyFingerprint": "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:gg:hh:ii:jj"
        }
    ]
}
```

#オプション
なんせ膨大ですし、実際に利用する時は[AWS CLI Command Reference](http://docs.aws.amazon.com/cli/latest/)を参照したほうがいいですね。

よく使いそうなfiltersとqueryだけ
##--filters
条件指定検索

```:
$ aws ec2 describe-key-pairs --filters "Name=key-name,Values=Main-key"
{
    "KeyPairs": [
        {
            "KeyName": "Main-key", 
            "KeyFingerprint": "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:gg:hh:ii:jj"
        }
    ]
}
```

Nameで指定するとこが若干違いますね
KeyName→key-name
やっぱり[AWS CLI Command Reference](http://docs.aws.amazon.com/cli/latest/)を参照したほうがいい
##--query
出力結果絞り込み

```:
$ aws ec2 describe-key-pairs --query 'KeyPairs[].KeyName'
[
    "Main-key", 
    "Sub-key"
]
```

queryの場合は項目を階層的に指定する
###複数項目出力
```:
$ aws ec2 describe-key-pairs --query 'KeyPairs[].[KeyName,KeyFingerprint]'
[
    [
        "Main-key",
        "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:gg:hh:ii:jj"
    ], 
    [
        "Sub-key", 
        "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:gg:hh:ii:jj"
    ]
]
```

###条件指定

```:
$ aws ec2 describe-key-pairs --query 'KeyPairs[?KeyName==`Main-key`]'
[
    {
        "KeyName": "Main-key", 
        "KeyFingerprint": "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:gg:hh:ii:jj"
    }
]
```

###別名を付ける
```:
$ aws ec2 describe-key-pairs --query 'KeyPairs[?KeyName==`Main-key`].{KN:KeyName,KF:KeyFingerprint}'
[
    {
        "KN": "Main-key", 
        "KF": "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:gg:hh:ii:jj"
    }
]
```


「<」「<=」「==」「>=」「>」「!=」などの演算子も利用できるので複雑ですね。
***

間違い、改善点などありましたらご指摘お願いします。

Next：**[0.5から始めるAWS CLI入門 - ③VPCの構築](http://qiita.com/yarakaki/items/39c035d3d66918726c61)**
swift 座標　判定位置

初めまして、Xcodのswiftの初心者です。

Image.viewがある範囲内に行くと一定の位置に移動する
プログラムを作っているのですが、普段座標の判定位置は
X,Yは00で右上ですが、赤い位置で反応したいと考えています。
![座標.png](https://qiita-image-store.s3.amazonaws.com/0/114476/411cbfb0-cbc6-f48e-0c5d-dc9bc469fa23.png)
center.xで・・・yはどうしたらよいのかわかりません
根本的に違うのでしょうか？
どのようにすればよいのでしょうか？
C++のmt19937は環境非依存だがdistributionは環境依存

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">C++11の乱数、mt19937はデフォルトのシード値まで決まっているのに、uniform_int_distributionの結果が環境依存で使い勝手が悪い。<a href="http://t.co/xdUwvgJCHz">http://t.co/xdUwvgJCHz</a><a href="http://t.co/6wpL2c9hbz">http://t.co/6wpL2c9hbz</a></p>&mdash; kusanoさん@がんばらない (@kusano_k) <a href="https://twitter.com/kusano_k/status/616293149007155200">2015, 7月 1</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

常に同じ乱数を使いたいという状況がある。例えば、テストケースをランダムに生成してテストしているときに「123番目の結果がおかしい」と共有できると便利だし、論文の実験プログラムなどは再現性が重要なので同じプログラムを他の人のところで動かしたら厳密に同じ結果が出てほしい。

Cの`rand()`はこの条件を満たさない。`srand()`に同じ値を与えて初期化すれば、環境が同じならば常に同じ値が返ってくるが、別の環境では値が異なる。

```cpp
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    srand(12345678);
    for (int i=0; i<8; i++)
        cout<<rand()<<endl;
}
```

をVisual Studio 2013でコンパイルして実行すると、

```
11188
29462
10945
26170
10388
28330
29356
10952
```

となるが、Linux上のgccやclangでコンパイルすると、

```
1077711487
1795553069
1809916401
67351997
301842236
286692564
1716894219
648068293
```

となる。乱数の値どころか、値の範囲まで異なる。これは困る。

C++では便利な&lt;random&gt;が追加された。その中には[mt19937](http://www.cplusplus.com/reference/random/mt19937/)というメルセンヌ・ツイスタの実装がある。アルゴリズムも決まっているし各種パラメタも決まっているのでどの環境でも同じ値が返ってくる。

このプログラム

```cpp
#include <iostream>
#include <random>
using namespace std;

int main()
{
    mt19937 rand(12345678);
    for (int i=0; i<8; i++)
        cout<<rand()<<endl;
}
```

は、Visual Studioでもgccでもclangでも

```
1055721139
3422054626
2561641375
1376353668
1540998321
825546192
1627406507
1797302575
```

を出力する。素晴らしい。

実際に乱数を使うときには、特定の範囲の乱数が欲しい。単なる一様分布であっても自分で書くとなると大変。`0`以上`n`未満の一様分布なら`%n`で良さそうなものだけど、`n`が大きくなると誤差が出てくる。例えば、mt19937の場合、最大値が`0xffffffff`なので、`n=0xffffffff`とすると`0`だけ他の値の2倍出やすくなる。&lt;random&gt;には種々の分布に従った乱数を得られるクラスが用意されているので、車輪の再発明をせずにこれを使えば良い。例えば、一様分布[uniform_int_distribution](http://www.cplusplus.com/reference/random/uniform_int_distribution/)で1から6の値を得るには次のように書く。

```cpp
#include <iostream>
#include <random>
using namespace std;

int main()
{
    mt19937 rand(12345678);
    uniform_int_distribution<int> dist(1,6);

    for (int i=0; i<8; i++)
        cout<<dist(rand);
    cout<<endl;
}
```

ところが、残念なことに、この実行結果は環境によって異なる。

Visual Studio 2013

```
25214162
```

gcc 6.0

```
25423233
```

clang 3.9

```
43521421
```

C++の仕様では決まっていないらしい。以前に[江添さん](https://twitter.com/ezoeryou)にちらっと訊いてみたところ、仕様にするほど決まり切った方法が無いのでは？とのことだった。悲しい。

再現性が重要なプログラムでは分布は自前で用意する必要がある。
Go言語のインタフェース


```go
type greeter interface {
  greet()
}

type japanese struct {}
type american struct {}

func (j japanese) greet() {
  fmt.Println("Kon")
}

func (a american) greet() {
  fmt.Println("Hello")
}

func show(t interface{}) {
  _, ok := t.(japanese)
  if ok {
    fmt.Println("I am japanese")
  } else {
    fmt.Println("I am not japanese")
  }
}

func show_2(t interface{}){
  switch t.(type) {
  case japanese:
    fmt.Println("I am japanese 2")
  default:
    fmt.Println("I am not japanese 2")
  }
}

func main() {
  greeters := []greeter{japanese{}, american{}}
  for _, greeter := range greeters {
    greeter.greet()
    show(greeter)
    show_2(greeter)
  }
}
```
Emacs+org-mode で楽して分報を続けるための設定

近ごろ、社内の Slack で分報が流行り始めていて、そのビッグウェーブに乗ってみたんですが三日くらいで飽きてしまいました。
たまに集中力が切れた時や詰まった時に呟く以外は「〜着手し始めた」みたいなのが大部分になってしまっていて、org-mode で TODO 管理して作業時間計測とかもしている身からすると二度手間で面倒くさくなってしまいました。
というわけで、org-mode で clock-in した時に勝手に呟いてくれるような設定をしました。

ちなみに、パッケージとして https://github.com/saidie/org-minrepo-slack に置いてみました。

## Slack に投稿する関数

Emacs 用の Slack クライアントはいくつかあるようなのですが、まともなのを選定したり Slack 連携させたりとかが面倒くさかったので、cURL で Webhook を使って送るようにしました。

```lisp
(defun oms/send-to-slack (url text &optional options)
  (let ((payload (json-encode (plist-put (or options '()) :text text))))
    (call-process "curl" nil 0 nil "-X" "POST"
                  "-H" "Content-Type: application/json" "--data" payload url)))
```

Webhook URL、投稿内容 (とオプション) を指定すると Slack に投稿してくれます。オプションは Webhook のパラメータをプロパティーリストで渡せるので、例えば、以下のように使えます。

```lisp
(oms/send-to-slack "https://hooks.slack.com/services/XXXXXXXXXXXXXXXX" "testだよ" '(:channel "#test"))
```

## clock-in したら Slack に投稿

タスクに clock-in したら Slack に投稿したいわけですが、clock-in したけどやっぱ他のタスク先にやろうとした時や操作ミスした時とか、即座に投稿されてしまうのはやや使いにくい感があります。また、家でやるような (センシティブな) タスクに clock-in した時に社内 Slack に通知されてしまうというのも避けたい所です。
というわけで、以下のような機能も盛り込みました。

- clock-in してある程度継続してタスクをやっていたら投稿
- 特定のタグ (デフォルトは `@OFFICE`) などがついているタスクのみ投稿

実装としては、以下の様な感じになります。

```lisp
;; clock-in からこの時間経過しても同じタスクをやっていたら投稿する
(defvar oms/notification-delay "3 min")

;; 投稿するテキストを返す関数
(defvar oms/text-function
  (lambda () (format "`%s` を始めた" org-clock-heading)))

;; 通知を送るべきタスクかをチェックする関数
(defvar oms/task-select-function
  (lambda ()
    (let ((tags (nth 5 (org-heading-components))))
      (and tags (string-match ":@OFFICE:" tags)))))

;; 投稿する関数
;; clock-in した時と同じタスクをやっていた時のみ
(defun oms/send-notification (old-task)
  (when (and (org-clocking-p)
             (eq old-task org-clock-current-task))
    (oms/send-to-slack oms/slack-webhook-url
                       (funcall oms/text-function)
                       oms/slack-options)))

;; clock-in した時に呼ばれる関数
;; 通知すべきタスクの場合は指定時間後に oms/send-notification を呼ぶようにする
(defun oms/register-notification ()
  (let ((current-task org-clock-current-task))
    (when (and (stringp oms/slack-webhook-url)
               (funcall oms/task-select-function))
      (message "will notify to Slack")
      (run-at-time oms/notification-delay nil
                   'oms/send-notification current-task))))
```

で、最後にこれを hook に登録すれば完成です。

```
(add-hook 'org-clock-in-hook 'oms/register-notification)
```

## 結果

何に着手しているかを書かなくて済むようになって、分報が大分気楽になりました。そして、呟きや嘆きに工数を割けるようになりましたとさ。

<img width="581" alt="org-minrepo-slack.png" src="https://qiita-image-store.s3.amazonaws.com/0/42655/585afb9d-28c2-004f-ffa3-51dcd3c6389d.png">

## つぶやき

- clock-out した時には特に何も出さないというライフハック
- 今後 DONE にしたら投稿するようにもしたい
環境変数 ENV['DATABASE_URL']を設定する方法　[自分用メモ]

# 環境変数ENV['DATABASE_URL']を設定する方法

Ruby on Railsの仕様では、ENV['DATABASE_URL']が定義されている場合、database.ymlに記載された内容がどのようなものであれ優先される。

基本的に環境変数 ENV['DATABASE_URL']は、database.ymlファイル内に、url指定で設定する。

1. herokuに設定されている環境変数を確認
heroku config<br><br>
  
2. 環境変数を設定する
*** 開発環境 ***
export 変数名=設定する値
export DATABASE_URL = "URL形式のデータベース情報"<br>
*** 本番環境 ***
heroku config:set 環境変数名="セットしたい値"
heroku config:set DATABASE_URL = "URL形式のデータベース情報"

※ database.ymlファイルの中身
production:
  url: <%= ENV['DATABASE_URL'] %>
jQuery 唯のメモ

# Lazy Loadで画像遅延読み込み
参考
https://syncer.jp/how-to-setting-lazy-load-images
http://www.webdesignleaves.com/wp/jquery/1335/

対象要素↓

```html
<a href="#"><img alt="Echo UBS Headquarter Zurich_thumbnailphoto" class="lazy" src="assets/img/main/dummy.png" data-original="assets/img/main/img9.jpg" ></a>
```

※src属性にダミー画像。1px の Gif 画像などを用意。
※実際の画像は、data-original属性で読み込む。

そのページの末端に記述↓

```js
<script type="text/javascript" src="assets/js/plugins/jquery.lazyload.min.js"></script>
<script>
$(function() {
    $("img.lazy").lazyload({
        effect: 'fadeIn'
    });
});
</script>
```

## 「a要素をクリックすると要素内のテキストが変化し、背景色も変わる。もう1度クリックすると元に戻る」って処理を施したい…。

**※背景色は、独自クラスを作成し、それに装飾。
※aタグ内の特定文字のみspanタグで囲み、そこだけ変化するようにする。
**

動作手順としては・・・

1. 処理対象要素を取得
2. 取得した要素に、デフォルトテキストを設定
3. クリックイベント。if文で、クリックした時にデフォルトテキストが新テキスト変更されるように設定、その際に既存クラスの消去と新クラスの追加処理もやる
4. elseでは、逆にデフォルトテキストと既存クラスが付与されるようにする。

** ※キモは、判定用変数のcount。

クリック対象要素↓

```html
<li>
<a href="#" class="btn-u btn-u-red rounded margin-bottom-5" id="liked"><i class="fa fa-heart"></i> 340 <span>Like</span></a>
</li>
```

外部jsに記述

```js
$('#liked').each(function() {
    var like = $('#liked span'); //処理対象要素を取得
    var count = 0;     //判定用変数
    var defaultText = like.text();     //取得した要素に、デフォルトテキストを設定
     $(this).click(function() {
        if ( count === 0 ){
            like.text('Liked');     //クリックした時にデフォルトテキストが新テキスト変更される
            count = 1;
            $(this).removeClass("btn-u-red");     //既存クラス消去
            $(this).addClass("btn-u-white");     //新クラス追加
        } else{
            like.text(defaultText);     //elseでは、逆にデフォルトテキストと既存クラスが付与される
            $(this).removeClass("btn-u-white");
            $(this).addClass("btn-u-red");
            count = 0;
        }
    });
});
```
Bootstrap 動作確認 唯のメモ

# ポップオーバーにHTMLタグも使えるようにする
参考
http://blog.shuffleee.com/2666/
http://bootstrap3.cyberlab.info/javascript/popovers.html

ポップオーバー対象要素↓

```html

<a href="#" class="btn-u btn-u-red rounded margin-bottom-5 popover" data-toggle="popover" data-content="<a href='08.html'>Please login</a>" data-placement="bottom"><i class="fa fa-check"></i> 121 Check in</a>

```

外部JSに記述↓


```js
$(function () {
    $('[data-toggle="popover"]').popover();
    $("[data-toggle=popover]").on('hover', function (e) {
    $("[data-toggle=popover]").not(this).popover('hide');
    });
});
```

そのページの末端に記述↓

```js
<script>
$('.popover').popover({
    html: true, // HTMLオプションをtrueにする
});
</script>
```