OmniAICreator/Qiita-1.07M huggingface dataset:
UnityのGUIDとは何なのか？

# GUIDとは何なのか？

## GUIDとは

UnityではAssetsディレクトリで管理する**Assetファイル(シーン・Prefab・スクリプト・ディレクトリ・リソースetc)全てにこのGUID(全世界のUnityプロジェクト内で唯一のID)が割り振られて**いて、Inspectorから他のPrefab等のAssetファイル参照時もAssetファイル内では単にGUIDが書かれている。つまり、ファイルパスではなく、この**GUIDでアセットを管理**している。

## オブジェクト同士の関係？

Editor上で設定された**オブジェクト同士の関係はmetaファイルに別のAssetのGUIDを書き込むことで保存**されている。GUIDがあるからこそ、Unityが配布するサンプルパッケージなどの互換性を保つことができている。PrefabのMaterialが**Missingになったり、MaterialからTextureが剥がれたりするのはだいたいGUIDが正常では無くなっているから**である。

## 表示の違い

Noneと最初から何もセットされていない状態で、Missingは何かがセットされていたがセットされていたGUIDが存在しない状態である。

## GUIDとUUIDの違い

UUIDとは**Universally Unique Identifier**のこと。ソフトウェア上で端末などのオブジェクトを一意に識別するために使用される。UUIDは128ビットの数値だが、16進法で表現されることが多い。元来、分散システム上で統制がなくても作成できる識別子として設計されており、将来にわたって重複や偶然の一致が起こらない前提で用いることができる。GUID(Globally Unique Identifier)またはグローバル一意識別子は、マイクロソフトによるUUIDの実装の一つである。広く普及しているため、UUIDの別名としても使われる。GUIDは16バイト(128ビット)の2進数値である。

## GUIDの生成方法？

AssetDatabase.GUIDToAssetPathでGUIDからファイルパスを取得できたり、AssetDatabase.AssetPathToGUIDでファイルパスからGUIDを生成できるが、ファイルパスをGUID生成時に使用しているわけではないので重複していなければ適当な文字列でも問題はない（ただし自前でGUIDを作成するとどこで重複が発生するか不明のためUnityの自動生成に任せるか、Unity上でツールを構築する方が安全である）。

## 参考サイト

- [Unityのプロジェクトはなぜ壊れるのか。原因と対策](http://madnesslabo.net/utage/?page_id=5640)

すいません、結構前に書いた記事なので、どこから情報を引っ張ってきたかはこれ以上覚えてないです…。
LISP は単純な文法か？


# 前説

プログラミング言語 LISP について名前を知っているという人は多いと思います。 また「括弧がいっぱいだが文法は単純」だとか「関数型言語の元祖っぽい」だとかいったことも良く知らているでしょう。 しかし、逆に言えばその程度しか知らないという人が (プログラミングの素養がある人であっても) 圧倒的多数なのではないでしょうか。 この記事はそういった層に向けて LISP の基本的な部分を解説しようとする試みのひとつです。 特に「文法が単純」という部分に着目して解説します。

LISP はジョン・マッカーシ氏が提案したプログラミング言語です。 また、そこから派生した多くの言語群のこともまた LISP と呼ばれています。 つまり、単に LISP と言ったときには何らかの LISP の仕様のことを指しているのではなく、無数の言語を一括りにした呼び名であるということです。 とは言え、現代でも使われている LISP 系の言語は

- Common Lisp
- Scheme
- Clojure
- Emacs Lisp

くらいのもので、他はかなり細々としたものだと思います。

私自身は Scheme に傾倒しているので具体的な仕様としては Scheme を中心に解説しますが、考え方は他の LISP 系言語にもおおよそ当て嵌るはずです。 ただ、膨大にある LISP 系言語には例外的な特徴を持つものもあるので全てに当て嵌るわけではないことは断っておきます。

# 関数

LISP を構成する最も重要で基本的な要素は関数です。 (Scheme では__手続き__という用語を用いていますが、この記事では LISP の伝統に従い関数という用語で一貫させることにします。) 何らかの入力に対して結果を返す仕組みです。

簡単な例として足し算をする式を書いてみます。

```
(+ 1 2)
```

これは一般的な中間記法で言えば `1+2` と同じ意味です。 括弧で表現されているのは__リスト__で、先頭要素の関数に後続の引数を与えて呼出されるという仕組みです。

# 構文

一方で、入力に対して結果を返すだけでプログラムを構成することは難しいことは明らかです。 例えば変数を定義する必要があるときはこのように書きます。

```
(define x 1)
```

これで x という変数を定義すると同時に数値の `1` と結びつけることが出来ました。 ですが、 `define` は関数ではありません。 定義する前には x という変数は作られていないのですから、それを `define` という関数に渡すというのは辻褄が合いません。

では `define` が何なのかというと構文です。

LISP では関数の呼出しも構文も共に括弧で表現され、それを区別するものは名前だけです。 どういう名前が構文でどれが関数なのかというのを見分ける一般的な規則というものもありません。 自由に名付けることが出来ますし、処理系が提供するそれらもある程度の作法はあるにせよ割といいかげんな名前が付いています。

私自身は自然に受け入れてしまったのですが、関数呼び出しと構文が見た目で区別が付かないまま混在するというのは最初は混乱する人は多いようです。

# 複雑な構文

構文も関数と同様に括弧で囲まれているだけというわけではなく、もっと複雑な形式を持っている場合があります。 例として、一時的な変数を導入する `let` 構文の用例を示します。

```
(let ((a 1)
      (b 2))
  (+ a b))
```

これは `a` と `1` を結びつけ、 `b` と `2` を結びつけている状態で `a` と `b` を足すという意味です。

しかしながら、 `(a 1)` という部分を抜き出しても __`a` と `1` を結び付ける__という意味はありません。 `((a 1)(b 2))` もまた、これだけでは意味を成しません。 この括弧はあくまで `let` 構文の一部なのであって、単独で抜き出すことは出来ないのです。 構文はその内側の括弧の使い方の規則を決める場合があります。 それはそれぞれの構文によって違うので覚えておかなくては正しく使えません。

つまり、 LISP のプログラムは括弧で表現されるリストであり、そのリストを構成させるための字句規則 (Ｓ式) は単純な規則を持っていますが、リストの上で表される構文はそれぞれ独自の規則を持っているというわけです。 文法の複雑さが字句ではなくリストの上に移動しただけで、全体としての複雑さはすごく単純というわけでもないのです。 (とは言え、現代的なプログラミング言語の中では単純な方だとは思いますが。)

このことは XML を知っている人に対しては well-formed と valid の違いと考えれば理解しやすいと思います。 リストとして正しく読み取れるかという規則と、読み取ったリストが LISP プログラムとして正しいかは別物なのです。

# 構文を作る

名前で区別がつかないとは言っても用意されている (有限の) 構文を覚えてしまえば良いのだろうと考えた人もいるかもしれません。 しかし、構文を作ることも出来ます。 それが悪名高い (しかし LISP の力強さを支える重要な要素である) マクロです。

新しく定義した構文がどんな構造を持っているのかは、もちろんその定義によります。 新しい構文が増えるのです。 場合によってはひどく混乱したプログラムになってしまうこともあるかもしれません。

しかし、 LISP プログラムの中でまるっきり別のパラダイムを持ち込んでプログラミングしたいといったことさえ可能にします。

今では各分野に適したプログラミング言語があるので LISP の上に全く別のパダダイムを作り上げる必要がある場面はもうあまりないとは思いますが、様々な分野をまたいだ横断的なプログラムを書く場合や、まだその問題領域を解決するのに適切なパラダイムが確立していないといったときには新しい構文を作る能力が活躍します。

とはいえ、可能であればマクロを使うのは避けるべきだと考えられています。

# まとめ

LISP の字句的な文法は他のプログラミング言語と比べれば単純ですが、文法全体で見ればそうでもないです。
Amazonの注文確認のgmailから、googleカレンダーにその受け取り時刻の予定を自動で入れる

http://gawawa124.hatenablog.com/entry/2017/06/15/155242 と同様の内容です。

Google Apps Scriptデビューしました。
未読のAmazonからの注文確認メールを2時間おきに確認して、Googleカレンダーにその受け取り時刻の予定を自動で入れています。
2時間おきというのは任意で変更できて、Google Apps Scriptエディタの時計のアイコンからトリガーを設定させればできます。
便利。

コメントは意図や出力例、つまずいたところを書きました。
よろしくお願いいたします。

```
function createAmazonEvent() {
  var criteria = "is:unread from:(Amazon.co.jp) ご注文の確認";
  var dateExp = /\d{2}\/\d{2}\s\d{2}:\d{2}/g; // ex. 06/15 16:00
  var dateExpWithSubString = /(\d{2})\/(\d{2})\s(\d{2}):(\d{2})/; // ()をつけることで部分文字列として返却される
  
  GmailApp.search(criteria).forEach(function(thread) {
    var messages = thread.getMessages();
    messages.forEach(function(message) {
      var body = message.getPlainBody(); //getBodyだとHTMLメールのため
      
      if (!(body.match(/お届け予定/))) {
        // Kindleの注文を除くため
        return;
      }
      
      var year = message.getDate().getFullYear();
      var myArray = body.match(dateExp); // ex. [06/15 16:00, 06/15 18:00]
      var [sMatched, sMonth, sDay, sHour, sMin] = myArray[0].match(dateExpWithSubString);
      var [eMatched, eMonth, eDay, eHour, eMin] = myArray[1].match(dateExpWithSubString);
      var startDate = new Date(year, sMonth - 1, sDay, sHour, sMin);
      var endDate = new Date(year, eMonth - 1, eDay, eHour, eMin);
      CalendarApp.getDefaultCalendar().createEvent("Amazon荷物", startDate, endDate);
      message.markRead();
    });
  });
}
```

参考記事：
http://blog.shotarok.com/post/2016-12-09-auto_creation_of_eikaiwa_events
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
https://developers.google.com/apps-script/reference/calendar
androidでキーボードを開くと、landscapeとportraitが切り替わることがある


css で縦と横でサイズを変更しようと設定していた為、ソフトウェアキーボードを開いた時、ラベル部分が2行になる現象が発生していた。

```css
@media only screen and (orientation : landscape) {
}
@media only screen and (orientation : portrait) {
}
```


対処法を思いつかなかったので、とりあえず white-space: nowrap; で2行にならないようにして回避した
Unityの.metaファイルとは何なのか？

# .metaファイルとは何なのか？

## metaファイルとは

**Assetファイルと対になった、メタ情報が書かれたファイル**のこと。Assetを一意に識別することができるguidや、画像の圧縮フォーマット、またAsset同士の関係も保存されている。

Unity上での振る舞い方がmetaに保存されることによって**元のAssetを変更することなく振る舞いを変えることができる**。metaファイルが見つからないときは初期値が書かれた状態で自動生成されるため、**1つのAssetには必ず1つmetaファイルがある**。

## metaファイル削除しちゃったら？

metaを削除すると設定項目が消えてしまうのでデフォルトの状態に戻る。自動生成の場合、スクリプトPrefabのときはメタ情報にはguid程度しか書かれていないため、バージョン管理する際はこの.metaファイルも一緒に追加する。ここでmetaをコミットせずプッシュを行うと**他の人全員がmetaを自動生成する惨事に成る**。また、Assetファイルを操作したい時はUnity上のprojectウィンドウから操作するべき。

## Finderから操作を行なったら？

Unity管理外(Finder等)から操作をすると、.metaファイルが更新されず、**設定値が壊れてしまう**場合がある。(例えばFinderからリネームした場合、.metaファイルが作り直されるため、guidが再生成されたためにInspectorのPrefab参照が外れたり、音、画像の設定値が初期化されるなど)

## 全てがmetaで設定が行われているのか？

全てのAssetの設定がmetaファイルで保存されているわけではなく、
Prefabやシーンファイル(.unityファイル)などは直接ファイル側に保存される。
(完全に外からImportされたAsset(fbxなど)の設定はmetaに書き込まれ、
Unity自身が生成したAsset(Prefabなど)は直接ファイルに書き込まれる)

## metaのフォーマット？

metaのフォーマットを**force text**に設定しておくと、prefabやsceneといったバイナリフォーマットのファイルをテキストで確認することができる。シーンのマージは難しいが、prefabのマージはなんとかなる可能性がある。

## メタファイルに対応するファイルがないと？

メタファイルの参照元のファイルがない場合、メタファイルは削除される。そのため、Finderでメタファイルだけ残してファイルを更新することでファイルの上書きが可能。この用途以外ではprojectビューからファイルを操作するべきである(Projectビューではファイルを上書きできない)。例えばアセットの移動、名前変更、削除など。

## gitでバージョン管理？

gitでバージョンコントロールを設定する際に複数人のメタファイルに対する設定が異なる場合、pull毎に違う内容が返ってくることがある。例えばForceTextにしている人とBinaryで設定している人がいた場合、メタファイルが自動的に変化してしまう。またVersion Controllの設定がmetaの人とasset serverを設定している人やUnityエディタのバージョンが異なる人も変化してしまうので注意が必要。

Unityはフォルダに対しても一つのmetaファイルを生成する。しかしGitでは中身が空のフォルダは管理の対象外とみなされる。そのためGitでコミットする際にフォルダは変更対象に入っていないけどmetaファイル変更対象に入っているという事態が発生する。空のフォルダのmetaファイルはコミットしないよう気をつけるべき。

## メタファイルの保存タイミング？

メタファイルはシーンの保存やプロジェクトの保存、Unity Editor終了のタイミングで上書き保存される。なのでこれらを行っていない状態でエディタがクラッシュして落ちると.metaデータが古いままの可能性がある(場合によってはprefabの中身がなくなる(業務で体験しました))。エディタ拡張で自動セーブ機能など実装すれば解決が可能。

## ちなみにGUIDについてもっと詳しく？

[GUIDとは何なのか？](http://qiita.com/4_mio_11/items/bb9da89dce629527a64b)

## 参考資料

- [Unityのmetaファイルについての勉強会を行いました](https://developer.aiming-inc.com/study/unity-meta-study/)
- [Unity開発者が複数人で開発を進める上で覚えておくと幸せになる９つの事](http://tsubakit1.hateblo.jp/entry/20140613/1402670011#metaファイルが更新されるケース)
- [Unityのプロジェクトはなぜ壊れるのか。原因と対策](http://madnesslabo.net/utage/?page_id=5640)
backlogのAPIを使って課題を追加する方法（PHP編）

[cloudpack あら便利カレンダー 2017](https://cloudpack.github.io/benri2017/) の12日目です。

## 用意する情報
backlogのAPIを使って課題を追加するには以下のIDとkeyを用意します。

* spaceId
* apiKey
* プロジェクトID（projectId）
* 課題の種別のID（issueTypeId）

これらの情報を取得する方法は以下
#### spaceId
https://○○○○○○.backlog.jp
○○○○○○の部分がspaceId

#### apiKey
個人設定のAPIから登録するとAPIキーを取得できる。
[Backlogを使いこなそう APIの設定](http://www.backlog.jp/help/usersguide/personal-settings/userguide2378.html)
https://○○○○○○.backlog.jp/EditApiSettings.action

#### プロジェクトID
「プロジェクト設定ページ」をクリック
URLにプロジェクトIDが書いてある
ex.
https://○○○○○○.backlog.jp/ListIssueType.action?project.id=○○○○○○

#### 課題の種別のID
「プロジェクト設定ページ」に種別の一覧があるので、こちらから追加する課題に設定したい種別をクリック
URLに課題の種別のIDが書いてある
ex.
https://○○○○○○.backlog.jp/EditIssueType.action?issueType.id=○○○○○○

## 設定可能な値
課題の設定値を追加することが出来る。
[backlogのドキュメント　課題の追加](https://developer.nulab-inc.com/ja/docs/backlog/api/2/add-issue/)
こちらの「リクエストパラメーター」の箇所に書いてある。

必要に応じて`$params`に追記すれば良い。
今回は必須項目と課題の詳細のみ追加した。

## ソース


```php
    public function createProject()
    {
        $summary = "課題のタイトル";
        $description =　"課題の詳細";

        $spaceId = '{spaceId}';
        $apiKey = '{apiKey}';

        $params = array(
            'projectId' => '{projectId}',
            'issueTypeId' => '{issueTypeId}',
            'priorityId' => '3',　//課題の優先度（3は中）
            'summary' => $summary, //課題の件名
            'description' => $description, // 課題の詳細
        );
        $url = 'https://' .$spaceId .'.backlog.jp/api/v2/issues?apiKey='.$apiKey.'&'. http_build_query($params, '','&');
        $headers = array('Content-Type:application/x-www-form-urlencoded');
        $context = array(
            'http' => array(
                'method' => 'POST',
                'header' => $headers,
                'ignore_errors' => true,
            )
        );
        $response = file_get_contents($url, false, stream_context_create($context));
        return;
　　　　　　　　｝
```
コマンドラインで、nkfを使わずにSHIFT_JISファイルをUTF-8環境で開く



# 概要

nkfコマンドがインストールされていないutf-8のunix環境で、SHIFT_JISファイルを参照したい。

ターミナルの文字コードを変更してみたりといった悪戦苦闘をしてきましたが、これが一番お手軽でした。

~~完全に、備忘録レベルです・・・。~~

# 手順

### 標準出力

```
iconv -f SJIS -t UTF8 ファイル名
```

以上です。でも、これだけだと標準出力になってしまうので・・・

### たとえば、less

```
iconv -f SJIS -t UTF8 ファイル名 | less -S
```

### たとえば、UTF-8のファイルを作成
```
iconv -f SJIS -t UTF8 ファイル名 > 新ファイル名
```

などなど・・・。ご自由にアレンジしてください。
Unityのレイキャストとは何ぞや？(自分用)

# Unityのレイキャストって何だろう？

## 最初に

このメモは自分用に残しているので大雑把な箇所が多いです。基本的にUnity公式から公開されているレイキャストに関するチュートリアル動画を文書化したものとなっています。ご了承ください。

## [レイキャストとは](https://docs.unity3d.com/jp/540/Manual/script-GraphicRaycaster.html)

<span style="color: red; ">**レイキャスト**</span>とはある地点から透明な線を特定の方向に引いて、そのRay上のどこかでコライダがあるか検知をするものです。例えば、ゲームであれば銃から弾を発射して敵に攻撃する場合などに用います。

Unityでは特に<span style="color: red; ">**オブジェクトにタッチなどを行なった場合の当たり判定の実装**</span>として使われています。レイキャスターはキャンバス上にある全てのグラフィックを監視し、透明な線がどのオブジェクトにヒットしたのかを決定します。また、判定を行いたくない、つまり<span style="color: red; ">**レイキャストをブロックするオブジェクトのタイプやマスクを設定する**</span>こともできます。

関数は以下の通りです。

`Physics.Raycast(Vector3 origin,Vector3 direction,out RaycastHit hitInfo, float distance, int LayerMask);`

最初に、Rayの原点はワールド空間座標のどこかの地点となっています。今回の場合は銃の銃口の前の地点を選んでVector3変数のoriginとしてXYZを格納します。しかしワールド空間座標の向きは撃つ方向に向いていないため、二つ目の引数、directionに向きを格納する必要があります。この二つのVector3変数によりRayが構成されます。さらにRay変数により代用が可能であり、このデータ型で二つのVector3変数を格納できます。

`//Ray myRay = new Ray(Vector3 origin, Vector3 direction);
//メインカメラ上のマウスカーソルのある位置からRayを飛ばす。
Ray myRay = Camera.main.ScreenPointToRay(Input.mousePosition);
Physics.Raycast(myRay,out RaycastHit hitInfo, float distance, int Layer Mask);`

RaycastHit変数はコライダの衝突に基づいて情報を格納します。これによりコードの中で検索をかけて、どのオブジェクトがRayと交差するか判定できます。

最後に必須ではない関数が二つあります。一つはDistanceであり、Rayの長さが決まり、省略した場合はRayの長さはデフォルトでInfinityとなります。そしてレイヤーマスク(Layer Mask)です。これはUnityのレイヤーシステムにおける特定のレイヤー番号であり、もしRayに無視させたいオブジェクトがある場合そのレイヤーに配置することが実現できます。

## Raycastの使い方

参考になりそうなブログのリンクまとめ(自分用)

- [RayCastその1、使い方【Unity】](http://kan-kikuchi.hatenablog.com/entry/RayCast1)
- [【Unity】Rayの使い方まとめ](http://megumisoft.hatenablog.com/entry/2015/08/13/172136)

## 参考

- [Raycasting - Unity Official Tutorials](https://www.youtube.com/watch?v=EINgIoTG8D4)
JS学習

# JS Learning

## React

* [Debug Tool](https://github.com/facebook/react-devtools)

    ### react-native
    * [Start with Docs](https://facebook.github.io/react-native/releases/next/docs/getting-started.html)
    
    * [Standalone Debugger Tool](https://github.com/facebook/react-devtools/tree/master/packages/react-devtools)
    
    * [Awesome project](https://github.com/jondot/awesome-react-native)

    ### Redux
    
    * [State control](http://redux.js.org/docs/basics/Reducers.html)
    * [Examples](http://qiita.com/erukiti/items/e16aa13ad81d5938374e)

## Angular2

* [Docs](https://angular.io/docs/ts/latest/)

## Vue.js

* [Docs](https://vuejs.org/)

## Mithril.js

* [Mithril](http://mithril-ja.js.org/#what-is-mithril)
* [modernizr](https://modernizr.com/)


## What is strict mode

* ['use strict'](https://developer.mozilla.org/ja/docs/Web/JavaScript/Strict_mode)

## Compiler

* [Babel](https://babeljs.io/)
* [Coffee](http://coffeescript.org/)
* [Typescript](https://www.typescriptlang.org/)
* [ClojureScript](https://clojurescript.org/)

## Some Platform  

###Create Microservice

* [StdLib](https://stdlib.com/) 


## Ansyn function management
* [Rx JS](http://reactivex.io/rxjs/)

## lib for Moment
* [MomentJS](https://momentjs.com/)

## encapsulation css and React Components
* [React CSS Modules](https://github.com/gajus/react-css-modules)

## Webpack separate js and rails
* [Webpack](https://webpack.github.io/)
* [Explains](http://qiita.com/necojackarc/items/afa674ab10aafa9784eb)


## Important architecture

* [Flux architecture](https://facebook.github.io/flux/docs/in-depth-overview.html#content)


## Animation

* [Best SVG lib](http://noeticforce.com/Javascript-libraries-for-svg-animation)
* [CSS3 animation](https://www.w3schools.com/css/css3_animations.asp)
* [CSS transform](http://www.htmq.com/css3/transform.shtml)
* [SVG explain](http://www.h2.dion.ne.jp/~defghi/svgMemo/svgMemo_03.htm)
    * [stroke](http://www.webcreatorbox.com/tech/svg-stroke/) 
* [PixJS](http://www.pixijs.com/)
* [GreenSock](https://greensock.com/)
    * [Example](https://codepen.io/supah/pen/mweXge)
* [Terminal Animation](http://dailyjs.com/post/terminaljs)
    * [Example](https://codepen.io/ines/pen/MoaRYM)

## WebCreate

* [webflow](https://webflow.com/)

## Data handle 

* [immutable](https://facebook.github.io/immutable-js/)
VSCodeのctagsでRubyソースをコードジャンプする

この記事は
===

* VSCodeでRubyのコードジャンプしたかったので探したらctagsを統合しているプラグインを発見したので動かしてみました

VSCodeのインストール
===

* [適当に入れてください](https://code.visualstudio.com/)

ripper-tags gemのインストール
===

* [ripper-tags gem](https://github.com/tmm1/ripper-tags)をインストール
* rubyに特化して割ときちんとctags情報を生成してくれるものみたいです

```
gem install ripper-tags
```

* どこに実行ファイルが入ったか見ておきましょう

```
which ripper-tags
```

vscode-ruby-ctagsプラグインのインストール
===

* VSCodeの拡張機能インストールのところから[vscode-ruby-ctags](https://github.com/otoniel-isidoro/vscode-ruby-ctags)をインストールします
* VSCodeの設定ファイルに下記を追記します。
  * ```executePath```にはさっき見ておいたripper-tagsのパスを書きます

```package.json
"ctags": {
    "executePath": "/path/to/ripper-tags",
    "options": "--tag-file=.tags --recursive --force --exclude=/assets/ --exclude=.bundle --exclude=.git/ --exclude=coverage/ --exclude=.arcanist-extensions/ --exclude=log/ --exclude=tmp/ --exclude=bin/",
    "fileName": ".tags"
}
```

ctagsファイルの生成
---

* 対象のコードをワークスペースに開きます
* ```ctrl+alt+g``` (Macは```cmd+alt+g```)でctagsファイルを生成します
* ソースが大きいと結構時間がかかります

コードジャンプ!!
---

* 準備ができたらクラス名とかメソッド名とか選択して```ctrl+alt+t``` (Macは```cmd+alt+t```)でコードジャンプできます

![movie](https://camo.githubusercontent.com/68e05e00543ff1cffd8bcaf1d9f01893f73119ff/687474703a2f2f692e67697068792e636f6d2f6c304d595133626c6241385544443077382e676966)

最後に
---

* ctagsだからしょうがないんだけど都度生成し直さないとインデックス情報が古くなっていくみたいです
* 自動で追随してくれないかなぁ。。
Visual Studio / WPF > Resources / Style > x:Keyを指定しない Implicit keyの例

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
```

[XAML Resources](https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/xaml-resources)
> Styles, DataTemplates, and Implicit Keys
...
>The implicit key from the standpoint of requesting it is the [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type?view=netframework-4.7) of the control itself. The implicit key from the standpoint of defining the resource is the [TargetType](https://docs.microsoft.com/en-us/dotnet/api/system.windows.style.targettype?view=netframework-4.7) of the style. 

Styleに関して、x:Keyを指定せずにTargetTypeで定義しておけばStyleを変更できるとのこと。

```MainWindow.xaml
<Window x:Class="_170615_t1450_ImplicitKey.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170615_t1450_ImplicitKey"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="Button">
            <Setter Property="Background">
                <Setter.Value>
                    <LinearGradientBrush>
                        <GradientStop Offset="0.0" Color="AliceBlue"/>
                        <GradientStop Offset="1.0" Color="Salmon"/>
                    </LinearGradientBrush>
                </Setter.Value>
            </Setter>
            <Setter Property="FontSize" Value="18"/>
        </Style>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <Button Width="100" Height="28" Content="Button1"/>
            <Button Width="100" Height="28" Content="Button2"/>
            <Button Width="100" Height="28" Content="Button3"/>
        </StackPanel>
    </Grid>
</Window>
```

![2017-06-15_14h57_03.png](https://qiita-image-store.s3.amazonaws.com/0/32870/58d37208-ce1d-0dd2-8c19-c69199dd4c2f.png)

### 関連リンク

http://www.atmarkit.co.jp/ait/articles/0906/16/news105_3.html
> スタイルの暗黙的な適用
TableViewで色々な設定

####1.UITableViewで表示するセルの数が少ない場合,余分な横線を削除する方法:

    tableView.tableFooterView = UIView()

####2.UITableViewで高さの設定
cellの高さの設定

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 68
    }
sectionの高さの設定

    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 68
    }

UITableViewのCellの高さを自動調整してくれるUITableViewAutomaticDimension

        tableView.estimatedRowHeight = 68
        tableView.rowHeight = UITableViewAutomaticDimension
Pentaho Data Integrationのインストールと基本設定

#目的
オープンソースのBIツール「Pentaho」のETLツールであるPDI(Pentaho Data Integration)のインストール手順と基本的な設定項目を整理する。


#PDIって？
目的にも書いてしまったけど、一言でいうと「オープンソースのBIツールであるPentahoがもつETLツール」です。
Pentaho自体は、OLAP、定形レポート、ダッシュボード、ETL、ユーザ管理等のプラットフォームを含むBIスイート製品ですが、そのなかのETL機能をPDIと呼びます。

PDI自体は、Spoon(ETLの処理をデザインするクライアントツール)、Pan&Kitchen(デザインしたETL処理をバッチ実行するツール)、Carte(ETL処理を実行するサーバ機能）で構成されているETLツールです。
基本的な機能としては、有償版と無償版で同じです。
(有償版と無償版での大きな違いは、Spoon上でデータの可視化ができるかどうかというところです）


#今回の環境
PDI 7.1
Java Version 8 Update 131
※OSはJavaが動けばなんでも良い、またJavaはとりあえず最新版を入れておけば大丈夫

#Javaのダウンロードとインストール
Javaは以下からダウンロードしてメニューに従ってインストールしておく。
https://java.com/ja/download/

#PDIのダウンロードとインストール
以下からダウンロードする。
http://community.pentaho.com/
![pdi_install_1.png](https://qiita-image-store.s3.amazonaws.com/0/186651/bf9f113c-8256-b4b8-dedb-49cd50180b6b.png)

"Download Section"をClickして、以下のへ移動し"Data Integration"からダウンロードする。
![pdi_install_2.png](https://qiita-image-store.s3.amazonaws.com/0/186651/cad0b18a-a7ef-a1ee-b8bb-f153226febf6.png)

ダウンロードしたZIPファイルを解凍してできる"data-integration"ディレクトリを適当な場所に配置して完了です。

#起動方法
Spoon(ETL処理をデザインするクライアントツール)の起動は以下のように行ないます。

```
$ cd data-integration
$ ./spoon.sh
```

以下のように起動すればOKです。
![pdi_install_3.png](https://qiita-image-store.s3.amazonaws.com/0/186651/058b5e08-3694-2300-aad7-37dab0047c65.png)


#設定
####日本語化
Toolsメニュー > Optionsを選択し、"Preferred Language"を"Japanese"に変更してSpoonの再起動。
![pdi_install_4.png](https://qiita-image-store.s3.amazonaws.com/0/186651/73dea020-6a0a-b3e7-ad68-b87e26830525.png)
<BR>

####メモリの割り当て
spoon.sh内の"-Xmx1024m"を変更してSpoonの再起動。

```
$ vim data-integration/spoon.sh

if [ -z "$PENTAHO_DI_JAVA_OPTIONS" ]; then
    PENTAHO_DI_JAVA_OPTIONS="-Xms1024m -Xmx2048m -XX:MaxPermSize=256m"
fi
```
<BR>

####各種JDBCドライバの配置場所
以下にドライバを置いて、Spoonの再起動。

```
data-integration/lib/配下
```
<BR>

####kettle.properties
kettle.propertiesは起動しているJVM上で共通的に使用できるパラメータです。
SpoonやPan、Kitchen等は必ずkettle.propertiesを読み込むようになっているので、ここに共通的に使用したい値を設定しておくことで各ETL処理内で使いまわすことができます。
左辺がパラメータ名で右辺が値です。ETL上では"${パラメータ名}"で右辺の値を呼び出すことが可能です。
また、Spoon上のEditメニュー > Edit the kettle.properties fileから、Spoon上で直接kettle.properteisファイルを変更することも可能です。

```
$ vim ~/.kettle/kettle.properties

KETTLE_COMPATIBILITY_IMPORT_PATH_ADDITION_ON_VARIABLES=N
KETTLE_REDIRECT_STDERR=N
```
<BR>
Ruby yieldの処理の流れ

## 概要
Railsを使っていてyieldがたまに出てきたりしていて一瞬処理を思い出すために止まったことが時々ありました。
その際、処理を思い出す手助けとして自分が見たときに理解できるように書いてみました。

また「yieldとは」などは省かせていただき、処理の流れの説明がメインとなります。
## yieldの処理の流れ
例えば
4文字固定の文字列を作らなければいけない場合、
入力された文字列が4文字未満の時は前に"0"を入れて4文字にします。
この場合、yieldを使用すると下記のようなコードになります。

```
def test(val)
  case val.size
    when 1
      str = "000"+val
    when 2
      str = "00"+val
    when 3
      str = "0"+val
    else
      str = val
  end
  yield str if block_given?
end

a = "a" 
b = "bb" 
c = "ccc" 
d = "dddd" 

puts "1文字の場合" 
test(a){|output|
  puts output.inspect
}
#=>1文字の場合
#=>"000a" 

puts "2文字の場合" 
test(b){|output|
  puts output.inspect
}
#=>2文字の場合
#=>"00bb" 

puts "3文字の場合" 
test(c){|output|
  puts output.inspect
}
#=>3文字の場合
#=>"0ccc" 

puts "4文字の場合" 
test(d){|output|
  puts output.inspect
}
#=>4文字の場合
#=>"dddd" 
```
処理の流れとして

```
test(a){|output|
  puts output.inspect
}
```
を実行した際に`test(val)`メソッドに処理が移動します。
そこで`case val.size`で対象の文字列数を取得して各ケースに分けます。

最後にblock_given?でブロックが存在したらyieldの処理を行う流れです。
僕は最初このブロックってなんだろうと思っていました。
ここでいうブロックは

```
{|output|
  puts output.inspect
}
```
このまとまりがブロックになります。
このブロックが存在すると`yield str`が実行されブロック内の`output`にstrが代入され"000a"と表示されます。

## Railsでの使用例
このようなyieldですが、実際にどのように使えるのかサンプルコードを書いていました。
対象はRailsを想定しています。
例えば

```ruby:app/models/stock.rb
class Stock
  def insert_string(val)
    case val.size
      when 1
        str = "000"+val
      when 2
        str = "00"+val
      when 3
        str = "0"+val
      else
        str = val
    end
    yield str if block_given?
  end
end
```

```ruby:app/contoller/stocks_controller.rb
class StocksController < ApplicationController
  def create
    stock = Stock.new
    stock.insert_string(params[:name]){|str|
      stock.name = str
    }
    stock.save
  end
end
```
これでnameの値が4文字未満なら前に"0"を追加させて4文字にして、そのデータをStockのnameに格納してsaveができます。

Railsはおまけですが、これでyieldの処理の流れは完了とないます。
slider メモ　fade var

```js
  var fadeA = {
    width : 1000,
    height : 600,
    index : 0,
    parent : $("親要素"),
    activeA : $("子要素"),

    play : function(){
      fadeA.parent.find(fadeA.activeA).hide();
      fadeA.parent.find(fadeA.activeA).filter(":first-child").stop().fadeIn(1000);

      function interVal(){

        fadeA.parent.find(fadeA.activeA).filter(":first-child").fadeOut(1000)
        .next(fadeA.activeA).fadeIn(1000)
        .end().appendTo(fadeA.parent);

      }
      setInterval(interVal, 2000)
    },
  }
  fadeA.play();
```

ポイントは、
表示させておく画像は何か？
次に表示させる画像は何か？
最後に、繰り返させるために、appendさせるです。

では、参考までに
iOSアプリ テキストコピーメニューの日本語化

<h1>概要</h1>
アプリでテキスト長押しで出てくるコピーメニューが、
英語表記になってしまうのを日本語に。
その他、AppStoreの情報欄の言語が英語になっている。
どこかのテキストが英語に変換されている等の現象がありました。
今回は送信ボタンの｢送信｣の文字が｢submit｣になっていました。

<h1>環境</h1>
Xcode8

<h1>設定の変更</h1>
1-1.PROJECTファイルのinfoを開く
1-2.Localilzations下部の+を押す
1-3.Japaneseを選択
1-4.Englishが必要なければ-で消す

2-1.PROJECTファイルのinfoを開く
2-2.Localization native development regionをJapanに変更


以上ですが、シミュレータでは英語のままでした。
シミュレータ自体の言語設定が英語だからかな？と思ってます。
Visual Studio / WPF > Resources > link > Nonstring keys for resources are used by certain feature areas in WPF

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
```

Resourcesで気になった部分を太字で表記。

[XAML Resources](https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/xaml-resources)

> Each resource in a resource dictionary must have a unique key. When you define resources in markup, you assign the unique key through the [x:Key Directive](https://docs.microsoft.com/en-us/dotnet/framework/xaml-services/x-key-directive). Typically, the key is a string; however, you can also set it to other object types by using the appropriate markup extensions. **Nonstring keys for resources are used by certain feature areas in WPF, notably for styles, component resources, and data styling**.

具体例に関しては未調査。

### link

[Resources and Code](https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/resources-and-code)
> Using Objects as Keys
> Most resource usages will set the key of the resource to be a string. However, various WPF features deliberately do not use a string type to specify keys, instead this parameter is an object. The capability of having the resource be keyed by an object is used by the WPF style and theming support. The styles in themes which become the default style for an otherwise non-styled control are each keyed by the Type of the control that they should apply to. 

Nonstring keysの例としてTypeでStyleを指定している例が紹介されている。
Laravel5.4 に codeception2.3.3を導入する

Laravelのプロジェクトでテストコードを書くことになり、codeceptionを利用することにしたので、導入までのメモ書きです。

## 前提
ローカル環境は以下です。

- PHP7
- Laravel5.4
- MySQL5.7.18
- composer1.4.1

## codeception
Laravelのルートでインストールします。

```
cd /path/to/LaravelProject
composer require codeception/codeception --dev
```


codeceptionのセットアップをします。

```
composer exec codecept bootstrap
```

とりあえずテストを走らせます。

```
composer exec codecept run
```

↑こちらのコマンドではエラーになる、、、以下エラー。

```
Script codecept handling the __exec_command event returned with error code 1
```

なので直接実行します。

```
/path/to/LaravelProject/vendor/bin/codecept run
```

まだ何もテストを書いていないので、動作確認のみです。


## MySQL
MySQLにログインしてテスト用DBを作成します。

```
mysql -u root -p
CREATE DATABASE {DBNAME} CHARACTER SET utf8mb4;
```

## Laravel
テスト用のdotenvを用意します。

```
cd /path/to/LaravelProject
cp .env .env.testing
vi .env.testing
```

以下に書き換えます。

```
APP_ENV=testing
APP_KEY={YOUR_KEY}

DB_CONNECTION=mysql
DB_HOST={YOUR_HOST}
DB_PORT=3306
DB_DATABASE={YOUR_DBNAME}
DB_USERNAME={YOUR_USER}
DB_PASSWORD={YOUR_PASSWORD}
```

ここで自分は、テスト用DBに開発用DBの内容をdumpしました。

```
mysqldump -uroot -p {MY_DBNAME} > {MY_DBNAME}.dump
mysql -uroot -p {MY_TESTING_DBNAME} < {MY_DBNAME}.dump
```

### ymlの編集
`/path/to/LaravelProject/tests/` にymlが出来上がっているので編集します。
unitとfunctionalしかいじらなかったので、受入テストのテストコードを実施する場合は別途対応する必要があります。

- unit.suite.yml

```
# Codeception Test Suite Configuration
#
# Suite for unit or integration tests.

actor: UnitTester
modules:
    enabled:
        - Asserts
        - \Helper\Unit
        - Laravel5:
            part: ORM
            environment_file: .env.testing
            run_database_migrations: true 
```

- functional.suite.yml

```
# Codeception Test Suite Configuration
#
# Suite for functional tests
# Emulate web requests and make application process them
# Include one of framework modules (Symfony2, Yii2, Laravel5) to use it
# Remove this suite if you don't use frameworks

actor: FunctionalTester
modules:
    enabled:
        - Laravel5:
            environment_file: .env.testing
            run_database_migrations: true
        - \Helper\Functional
```

これであとはテストコードを書くだけです。
以下にテストコード作成の参考記事を記載しております。

## テストコード作成の参考記事
- [Codeceptionというテストフレームワークを使ってPHPのテストをする](http://qiita.com/Esfahan/items/44c38b15c36e1adb05ff)
Zapierのインスタントトリガを使ってクラウドサービスの異常時にほぼリアルタイムにChatWorkへ通知する仕組みを作ってみた

Zapierにはインスタントトリガというものがあってこれを利用すると、ほぼリアルタイムにWEBサービスを連携することができます。

今回、インスタントトリガを使ってクラウドサービスの異常時にほぼリアルタイムにChatWorkへ通知する仕組みを作ってみました。

詳細は下記より確認できます。
http://dev.classmethod.jp/non-programming/zapier-instant-trigger-chatwork/
アプリの運用サーバーにログインをして、動作確認をする

![wfc20161109076.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/fd661b3f-e8af-4884-4f40-1d4859c93a98.jpeg)

SaaSForceは、開発環境のサーバーとテストサーバー（アプリケーションを運用するサーバー）が別なので、アプリの動作チェックをするときは一度ログアウトをしてから、「テストサーバー用のIDとパスワードで」テストサーバーにログインしなおさないといけません。

なお、ログアウトは、右端にあるアイコンからできるようになっていて、このアイコンはパスワードの変更も簡単にできるからセキュリティと言う面から便利といえます。

![wfc20161109077.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/812808fe-4f8a-9398-55b4-2d4d55ae8286.jpeg)

蛇足ながら、テストサーバーのIDとパスワードは「ユーザーとグループの「ユーザー」のところをクリックすると分かります。

![wfc20161109078.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/9879f0b6-2698-9db3-1918-d6ee25a79a8f.jpeg)

ログアウトするとこのような画面に切り替わるので、「ログイン画面へ」と言うボタンを押して、テストサーバー用のIDとパスワード、そして、確認コードを入力してログインをします。

なお、確認コードの「o（オー）」と「０（ゼロ）」の違いが分かりにくいので、これらが出た場合は確認コード再取得をするといいでしょう。

![wfc20161109079.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/07e2504b-7fbc-570c-20cf-4587494019cd.jpeg)

ログインをするとこのような画面になります。

![wfc20161109083.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/0d944058-4900-9ee6-fd1b-d859390c2f82.jpeg)

「テスト」と言う部分にマウスをあわせると、今まで作ったアプリケーションの一覧が出るので、動作確認をしたいものを選びます。

![wfc20161109080.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/dfe213a9-5f8f-08d4-ffd0-feca7b333dd5.jpeg)

この画面が検索画面で、データーを検索するときに使いますが、今はデーターがないので、「新規」を押して入力画面に移行します。

![wfc20161109081.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/5b831e63-eb29-f527-eef0-8b4838477f23.jpeg)

こちらが入力する画面になります。

![wfc20161109082.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/ca764969-4775-bb44-953a-abc03674c37c.jpeg)

実は、現時点ではパスワードや時間など、使い方が判明していない機能が複数あり、今後分かり次第ご紹介したいと思います。

ラジオボタンはなぜ失敗したのか、ちょっと調べる必要がありますね。

もしかしたら、リンクのようにテーブル項目定義で作るとうまく働かないというパターンかもしれません。
concrete5 でマーケットプレイスからダウンロードしたテーマやアドオンをカスタマイズする方法


元は concrete5 日本語フォーラムの記事ですが、人気があるので Qiita に格上げしました。
https://concrete5-japan.org/community/forums/design/post-13866/

みなさんも、何か concrete5 に関する質問があれば、最初に日本語フォーラムに投稿下さい。一番確実に答えが得られるスペースです。



# 1. テーマをカスタマイズできるようにコピー

マーケットプレイスから入手したテーマをカスタマイズ

Step 5 まで行わないとエラーが出るので、直接サーバー上でファイルを触らず、完了までローカルで作業されることをおすすめします。

1.`/packages/XXXXX/themes/XXXXXX/` の中身を `/application/themes/XXXX/` としてコピー

2.`/application/themes/XXXXXX/page_theme.php` を開きます

3.「`namespace Concrete\Packages\XXXXX\Theme\XXXXX;`」を下記の法則で変更します

変更元
`namespace Concrete\Packages\XXXXX\Theme\XXXXX;`
変更後
`namespace Application\Theme\XXXXX;`

4. namespace の部分を変更した page_theme.php を保存します

5. SFTP などでサーバーにUP

# 2. その他の block などのファイルをカスタマイズできるようにコピー

1.`/packages/XXXXX/blocks/XXXXXX/` の中身を `/application/blocks/XXXX/` としてコピー。

※ ただしカスタマイズを行いたいブロックのみに限定させる

2.`/packages/XXXXX/blocks/XXXXXX/`の各フォルダの中に controller.php が入っていたら、下記の手順で namespace の変更を行う。

3-1.`/application/blocks/XXXXXX/controller.php`を開きます

3-2.「`namespace Concrete\Packages\XXXXX\Block\XXXXX;`」を下記の法則で変更します

変更元
`namespace Concrete\Packages\XXXXX\Block\XXXXX;`
変更後
`namespace Application\Block\XXXXX;`

3-3. namespace の部分を変更した controller.php を保存し、アップロードします

他にもいろいろあるのですが、ひとまず基本的な変更方法は以上です。


この記事が役に立ったら、「 **CMS は concrete5 が一番**」と頭の中で10回唱えてください。

CMS は断然 [concrete5](https://concrete5-japan.org/)で決まり。[コンクリートファイブジャパン株式会社](https://concrete5.co.jp)がサポートできます。
画面作成②画面レイアウト作成

![wfc20161109068.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/bed3f9c2-ca5a-e636-0c31-41bb76edc271.jpeg)

画面作成①の続きになります。

前回までに「画面項目定義」が終わっているので、同じように左側にある「画面作成」を押してからその下にある「画面レイアウト作成」を選択します。

そして、今作っている画面の「編集」をクリックして別画面を開きます。

もしくは、前回の最後の画面、「画面項目定義」にあるアイコンを使って、直接「画面デザイン」の画面に移行することも可能です。

![wfc20161109069.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/f8e2d107-aa07-26e5-8ddb-c37850fdb71e.jpeg)

この、「画面レイアウト設計へ遷移」と言うアイコンです。

押すと、やはり別画面が開きます。

![wfc20161109070.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/0f0818f6-183b-9537-2d88-826a0e8ff8c1.jpeg)

このような画面で、作業をします。

![wfc20161109071.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/384abdc8-9092-9c3f-db5e-64d42d6f247e.jpeg)

基本的に、各パーツの設定は、そのパーツを右クリックすると出てくるようになっています。

最後に、保存をするのを忘れないように気をつけてください。

アイコンが他の物と同じ色なので、分かりにくいですが、このフロッピーなところです。

![wfc20161109075.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/6c88c134-031a-9708-665c-0f7fccfb441c.jpeg)

これを押し忘れると、全部飛びます。

自動保存は、付いていないようです。

保存後に「レイアウト保存」と言う画面がポップアップして、それで「OK」を押して終わりです。
digの結果が「Truncated, retrying in TCP mode.」になるとき

とあるURLをブラウザで開こうとすると名前解決ができなかったので、その時の調査についての備忘録

# 簡易ネットワーク図

```
[クライアントPC（Mac）]-----[無線AP（WLX202）]-----[スイッチ(SWX2200-8PoE)]-----[ルータ(RTX1210)]-----[インターネット]
```

# 調査
## digコマンドを打ってみた

```
> dig xxx.com（ドメインは伏せてます）
;; Truncated, retrying in TCP mode.
;; Connection to 192.168.1.1#53(192.168.1.1) for xxx.com failed: connection refused.
```
connection refusedになる。
そもそも1行目の「Truncated, retrying in TCP mode.」ってなんだろう？

参考: https://harasou.jp/2016/02/21/dns-packet-over-512/

```
サーバは、UDP の問い合わせに対し応答が512バイトを超える場合、
応答するレコードを 512バイト以下に切り詰めた上で、切り詰められたこと示すビット(TC)を立て、UDP の応答を返す。
クライアント側は、その TCビットを確認すると再度、同じ問い合わせをTCPで行い、全てのレコードがつまった応答を受け取る。
```

つまり、今回の名前解決をした時に、UDPで問い合わせたけども、応答パケットが512byte以上になっていたのでtruncateしました、再度TCPで問い合わせ（TCPフォールバック）をしてね、ということらしい

しかし、その結果TCPでは接続できませんよと怒られた模様

## ルータ(RTX1210)上から名前解決できるか？
ルータにログインし、nslookupコマンドを打ってみると名前解決成功！
DNSサーバまではアクセスできていることがわかった

## クライアントPCのDNSをパブリックDNSにしてみたらどうか
Google Public DNS（8.8.8.8）をmacのDNSの項目に設定
<img width="671" alt="スクリーンショット 2017-06-15 10.25.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/63214/d01d43fa-5ecf-0b89-c715-d7924565cbfa.png">

この状態でdigコマンドを打ってみた

```
> dig xxx.com（ドメインは伏せてます）
;; Truncated, retrying in TCP mode.
;; Connection to 192.168.1.1#53(192.168.1.1) for xxx.com failed: connection refused.

; <<>> DiG 9.8.3-P1 <<>> xxx.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54041
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0
（以下略）
```
ルータ（192.168.1.1）では名前解決できなかったが、Google Public DNSではできた
PC、ルータ間で何か起こっていそう

## YAMAHAの公式ページで調べてみた
「rtx1210 dns tcp非対応」でググってみた
ひっかかったのはYAMAHAの公式サイト

参考: http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/dns-recursive-server.html

```
RTシリーズのDNSリカーシブサーバ機能は、UDPによる配送にしか対応していません。 
ほとんどの場合はこれで問題ありませんが、ごくまれにレコードが大きくなって、TCPによる配送に切り替わってしまうと、
それを扱えないためにアドレスが引けないということが起こります。
このような場合は、RTシリーズのDNSリカーシブサーバ機能を使わないようにして下さい。
```

DNSリカーシブサーバ機能を使っているとTCP通信はできない・・・

ブラウザからRTX1210にアクセスし、「詳細設定」→「DNSサーバー」を確認

![スクリーンショット 2017-06-15 10.37.37.png](https://qiita-image-store.s3.amazonaws.com/0/63214/64d8680a-f2fb-2730-8213-d0a61e11f10a.png)

「DNSサーバ機能が有効になっています。（リカーシブサーバー）」

（＾ω＾）

# まとめ＆感想
* YAMAHA系ルータのDNSリカーシブサーバは、TCPフォールバックによる通信を通さない
* YAMAHAのサイトにも書いていたが、名前解決の応答パケットが512byteを超えることはまれ
* DNSのリカーシブで恩恵を受けている部分もあるので、なるべくならこの機能は切りたくない
* なので、名前解決できないドメインがあったら一時的にパブリックDNSを使おうと個人的に思ってます


以上
concreat5の制作用メモ

#concreat5の個人的なメモ
concreat5を勉強していて、忘れないための個人的なメモです。
Wordpressでやってたことをconcreat5ならどうしているか？という内容が多いかも。
concreat5→c5
Wordpress→wp
と略します。
##テーマの作り方
wpと同様テーマの概念がある。
/application/themes/
に作る方法と,
パッケージ(wpのプラグインみたいなもの)
の中のテーマフォルダに作る方法がある。
/packages/cloneamental/themes/
packagesに作るほうが、後の事を楽な気がします。
デフォルトの制作パッケージを作ってそれをベースに作るのがいいです。
https://github.com/concrete5japan/sakan
こちらのものをベースに初期のテンプレートを作成するといいと思います。
##ブロックという概念がある
bootstrapでいうとことのコンポーネントをまとめたような、ブロックという概念がある。
これは説明しにくいので実際に触って使えば理解できると思う。
このブロックをベーズに作成します。
wpのようにタイトルとか日時とかをphpで書けるけど、そういったものもブロックで追加をします。
##オーバーライド(上書き)の概念がある
/concrete/
/application/
の2つを使用して作っていきます。こちらはほぼ同じディレクトリの構成になっています。
/concrete/にコアなファイルがあるので、こちらは変更しないようにします。
変更したい場合は/concrete/の変更したい場所を/application/の同じディレクトリに作成します。
そしてその複製したファイルを変更すると、それが反映されます。
##ブロックの変更(オーバーライド)
ブロックはデフォルトで用意されていますが、htmlが固定なのでそのままではなかなか使用しにくいです。
なのでブロックをこちらでオーバーライドします。
/application/block/
に任意のブロックのview.phpを複製します。
/application/block/ブロック名/view.php
のような感じです。
で、そのview.phpを変更するとその内容が反映されます。
ただしそれでは1種類のブロックに対して、1個しかカスタマイズできません。
そのためにカスタムテンプレートが用意されています。
/application/block/ブロック名/templates/任意のファイル名.php
を追加して、ブロックを配置後にそのテンプレートを適用します。
そうするのそのテンプレートで反映されます。
このカスタマイズができれば、簡単なサイトなら作れると思います。
##スタック
スタックは共通で使えるブロックです。
スタックを管理できる場所があり、そこにブロックを配置しておき、スタックを作成します。
それを任意の場所に配置を行います。
ヘッダーやフッターのようにphp側の記述で全体の共通部分に出力できるのと何が違うのか？ということですが、説明します。
スタックの場合は任意の場所に配置できます。
どこの場所に入れるかわからないけど、全体で同じ内容のブロックを使いたいという場合に便利です。
ヘッダーやフッターのように全体に入れる場合は、表示したく無い場所では条件分岐をしないといけないし、複数使用することやページの途中に入れることも難しいです。スタックあればそれがドラッグ&ドロップで好きな場所に配置できるので非常に便利です。
しかも内容を修正する場合も1度に変更できるのでかなり便利です。
wpでもできますがphpを記述したり、固定ページの場合で表示する場合に色々大変だったります。
##ブロックのエリアの指定
下記ののようにするとブロックの配置ができます。

```<?php
$a = new Area('【エリア名】');
$a->display($c);
?>
```

共通で配置したい場合は

```<?php
$a = new GlobalArea('【グローバルエリア名】');
$a->display($c);
?>
```

##デフォルトでブロックを配置しておく
新規のページを追加した場合にあるページのタイプでは、デフォルトでブロックを配置しておきたい場合もあります。
その場合は
ページとテーマ→ページタイプ
までいってから
任意のページタイプの『出力』をクリックします。
そのページに使用するテンプレートのデフォルトを編集をクリックします。
その後普通の編集画面になるので、そこに任意のブロックを配置しておくと、デフォルトのブロックを反映することができます。
コンポーザーのから投稿を設定する方法は、コンポーザーのブロックをドラッグ&ドロップして、そのエリアにブロックを配置します。
コンポーザーの説明はまた今度書く。
CakePHP2のModel::find()で渡すconditionsにSQL文を混ぜ込む方法



苦肉の策というか、完全にバッドノウハウだと思うけど、役に立つことあるので。
完全にsql文を書いちゃうなら```Model::query()```が使えるけど conditionsにちょいややこしいSQLをまぜたいだけのときに使う手です。


```
$sql = '(key1, key2) IN ((1,2), (3, 4))';				
$conditions = [
	[
		$sql . ' AND 1' => '1', // SQL文をconditionsに混ぜ込む苦肉の策
	]
];
```

こんな感じで 配列キー側に ```' AND 1```  値に ```'1'``` をつけてSQLを混ぜ込む。

さらにそれをひとつの配列にする（あとで$conditionsにORとかNOTつけたときに副作用でないように）

こうしとくとSQLに展開されたときにって感じに展開されるんで、SQL文で書いた条件が使える。

```
((key1, key2) IN ((1,2), (3, 4)) AND 1 = '1')

```

こんな変な書き方せずにconditionsにsqlも混ぜ込めるようになってると楽なんだけどなぁ。
【FileMaker】カテゴリごとに管理番号を振る （追記あり）

今回は、管理部門でよくありそうな、カテゴリごとに管理番号を振っていくケースです。

例えば、
カテゴリ：AB,CD,EF,GH,IJ
という管理部門ごとに、物品番号を振っていく、などのように、
物品番号：AB0001,AB0002,CD0001,EF0001,EF0002,EF0003,,,,,
という管理番号を自動で作成したい、という時の実装です。

単純に連番であれば、フィールドの設定でシリアル番号が活用できますが、カテゴリごとに振る場合は、データの連番であるシリアル番号だと思ったことができませんよね。

この場合の実装は、３つの作業あります。
(1)連番を振りたいカテゴリごとに自己参照をする
(2)集計のフィールドを持つ
(3)スクリプトトリガで管理番号を作成する
です。
この３つを実装すると、↓のようにカテゴリごとに連番が作成できます。
<img width="547" alt="FMkanri1.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/9a8ea3df-e757-33bd-f201-aed603a36496.png">

では、実装していきましょう。

# (1)連番を振りたいカテゴリごとに自己参照をする
「自己参照」、難しい言葉ですよね。
ここでは「同じ仲間、集まれ！」という手つなぎをしていると理解できていれば、OKです。
リレーションシップ画面で、同じテーブルのオカレンスを作り、カテゴリでリレーションを張ります。
<img width="655" alt="FMkanri2.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/9b4ea2fb-bd56-0cbe-891a-078f62469cd4.png">
↑これで、「同じ仲間」が集まれます。

# (2)集計のフィールドを持つ
集計は、いくつかやり方があると思いますが、今回は手っ取り早く集計フィールドを持ちました。
データの中から、「同じ仲間」をカウントします。
<img width="908" alt="FMkanri3.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/ce35563d-6e68-8162-a6cb-ef6972ec083c.png">

# (3)スクリプトトリガで管理番号を作成する
(1)と(2)の準備を行ったことで、カテゴリごとに連番が振れるようになりました。
これらのリレーション（手つなぎ）と集計を使って、スクリプトを仕上げます。

カテゴリが選択された際、同じカテゴリの数を数えて連番を作ります。
<img width="880" alt="FMkanri4.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/d37aa2c2-aa26-4762-640b-83787d1cebf6.png">
管理番号を構築する際、連番の桁数が決まっていることが多いので、その桁数になるように、Right関数を使っています。
今回は、4桁の連番という仕様にしました。
このやり方を覚えておくと、いろんな場面で使えますよ。

この実装の時注意することは、「自己参照」している先の集計を使う、というところです。
<img width="709" alt="FMkanri6.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/c85d12b4-66aa-046b-69d6-bb7531af9ca1.png">
ちょっと難しいですよね。。。

↓自己参照で集まっているというイメージは、こんな感じでしょうか。
<img width="947" alt="FMkanri7.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/783d4bc9-3260-66a6-c214-0cac42de4c49.png">
（あ、子供でないわんわんもいる。。。）

# 入力してみる
<img width="394" alt="FMkanri5.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/d96fc5f4-92a4-9442-7957-2662785e625f.png">
どうでしょう？
カテゴリごとに管理番号が振られているのがわかりますね。

では、楽しいFileMakerライフをお過ごしください。

# 追記 (2019/07/08)
続編を書きました。
[【FileMaker】続・カテゴリごとに管理番号を振る　インポート編](https://qiita.com/tyuma/items/4078d650b16dde563170)
こちらもぜひ参考にしてください。

# 追記 (2019/07/26)
続々編を書きました。
[【FileMaker】続々・カテゴリごとに管理番号を振る　最大値に追加]
(https://qiita.com/tyuma/items/6c78b30567a3cda84049)
こちらもぜひ参考にしてください。


# 追記 (2019/10/22)
続々々編を書きました。
[【FileMaker】続々々・カテゴリごとに管理番号を振る　名称を表示しつつコードの方を管理番号に採用](https://qiita.com/tyuma/items/ab79dd72fe1b01fa7b69)
こちらもぜひ参考にしてください。

# 追記 (2023/11/08)
お待たせしました！
こちらの記事で紹介している手順の動画が完成しました！
今更、、、ですが、公開から６年以上経ってもこの記事をとても多くの方にご覧いただいていることから、作り方の手順を別な方法でも残したいと思い、動画にしました。
ぜひ、参考にしてください！

https://youtu.be/0tWzU1Femo0
Gitで過去のコミットを修正して履歴をきれいに保存する方法

# Gitで過去のコミットを修正して履歴をきれいに保存する方法
## 手順1
git add で修正したいファイルをステージングしたあとに
マージしたい先のコミットハッシュを指定した以下のコマンドを実行

```
git commit --fixup=<commit>
```
## 手順2
改変したい歴史の範囲を指定(ここではHEAD~5)を指定して
コミットをきれいにマージしてくれるコマンド

```
git rebase -i --autosquash HEAD~5
```
※改変したい先の１つ前までを指定するとよい

## 手順3
エディタに表示されるので保存して終了すればOK。
(ただしく指定ができていればfixupの文字が表示されるはず)

```
pick 05aed73 some commit
fixup e609512 fixup! some commit
pick 9961eb5 meow
```

なにか間違ってるとこあったら指摘plz!
gcloudコマンドをサーバにインストールして認証する


GCPコンテナをサーバ側で操作したくなったりしたので、gcloudコマンドの導入方法をメモしておく。

まず、Ubuntu/CentOS7に対応しているパッケージがあるので、それをインストールする。今回はCentOS7を利用したメモ。Debian/Ubuntuは[公式ドキュメント](https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu?hl=ja)を参照。

## リポジトリを追加

```
$ sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
[google-cloud-sdk]
name=Google Cloud SDK
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
       https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOM
```

## gcloudをインストール

```
$ sudo yum install google-cloud-sdk -y
```

## サービスアカウント認証

「IAMと管理」→「サービスアカウント」で適切な役割を付与してサービスアカウントを作成。 `example@example-project.iam.gserviceaccount.com` というメールアドレスがサービスアカウントID。認証ファイルをJSONファイルでダウンロード。

```
$ gcloud auth activate-service-account \
    example@example-project.iam.gserviceaccount.com \
    --key-file /path/example-project-1234.json \
    --project example-project
```

認証情報を確認。

```
$ gcloud auth list

                Credentialed Accounts
ACTIVE  ACCOUNT
*       example@example-project.iam.gserviceaccount.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
```

Good :)

ちなみにgcloudコマンドの設定ファイルは `~/.config/gcloud/` ディレクトリにある。この中にクレデンシャルファイルも置いてある。
Kotlinスタートブックを読んだ

# 読んだ本について

[Kotlinスタートブック -新しいAndroidプログラミング](https://www.amazon.co.jp/Kotlinスタートブック-新しいAndroidプログラミング-長澤-太郎/dp/4865940391)

- 著者：[長澤太郎](http://taro.hatenablog.jp)
- 出版：2016年7月

## 想定環境

- Kotlin 1.0.2
- IntelliJ IDEA Community Edition 2016.1
- Android Studio 2.0.0

## 参考

- [「Kotlinスタートブック - 新しいAndroidプログラミング」を執筆したよ〜](http://taro.hatenablog.jp/entry/2016/06/16/203136)
- [読んだ : Kotlin スタートブック ― 新しい Android プログラミング / 長澤 太郎 著](http://vividcode.hatenablog.com/entry/book/kotlin-start-book)
- [【書評】KotlinスタートブックはKotlin開発の基準になる](http://yyyank.blogspot.jp/2016/07/20160719-kotlinmeetup-jkug.html)

# 感想

## きっかけ

もともとKotlinのことが好きで、[公式リファレンス](https://kotlinlang.org/docs/reference/)を読んだりQiita記事を読んだりして勉強してました。そんななか[AndroidがKotlinを公式サポート](https://android-developers.googleblog.com/2017/05/android-announces-support-for-kotlin.html)するようになって、ふと立ち寄った普通の本屋さんでこの本がPOP付きで推されていたので、思わず買ってしまった次第です。

## 第1部：初めてのKotlin

Kotlinの特徴や開発環境の導入方法が非常にコンパクトにまとめられています。入門書にありがちな、クソほどどうでもいい導入手順を大量のスクリーンショットと共に説明していたりすることがないので、ストレスなく読み進められました。冒頭にも書いてありますが、対象読者がJavaやAndroidを知っている人なので、それらからの差分だけ効率的に吸収したい人にとってはとてもいい本だと思います。

特に、第3章のKotlinガイドツアーでは、Kotlinの特徴をふんだんに反映したサンプルプログラムが記載されています。とりあえずKotlinの学習をしようか迷っている人はこの章だけでも読んで、Kotlinのスマートさを体験してみるといいと思います。

## 第2部：Kotlin文法詳細

[公式リファレンス](https://kotlinlang.org/docs/reference/)に書かれている内容を、日本語の詳しい解説付きで説明されているようなイメージです。サンプルコードもページ内に記載されているので理解の進みが早いです。個人的には変位(Variance)の話は英語のリファレンスを読んでもイマイチ分からなかったんですけど、これで分かったような気がします。そして、これも冒頭に書いてあることですが、基本的な文法は第1部にコンパクトにまとめられているので、その知識とJavaの知識さえあればKotlinが書けるような構成になっています。第2部の内容はより深く知りたい人向けという感じです。

ただ、この本が執筆された当時のバージョンは1.0.2で、今は1.1.2-5なので、いくつかの細々したトピックについては後から補完しておきましょう。

## 第3部：サンプルプログラミング

Kotlinを使ったAndroidアプリのサンプルが紹介されています。Kotlinが公式の開発言語となったのでとても需要の高い内容になっていると思います。Android開発経験者を対象としている割には少し導入部分が丁寧すぎるかなとも思いましたが、Kotlinらしい書き方とその効果について詳しく説明があるのでとても勉強になります。

後半は、既存のライブラリ（Retrofit・RxAndroid・GSON・Glide・RxLifecycle・Espresso・Dagger2・Mockito・Kotter Knife・Kotlin Android Extensions・Data Binding・Anko）をKotlinから呼び出す際のサンプルが紹介されています。そもそも私の場合はそれらの半分も使ったことがないので、Kotlin以前にライブラリの使い方が動くサンプル付きで勉強できたのでよかったです。

## Appendix

細々したTipsや一覧表が載っています。どこまで網羅されているかは分かりませんが、JavaとKotlinを共存させる際の注意点についてもまとめられているので、Javaで書いているプロジェクトはそのままに、徐々にKotlinで書いたクラスを導入していくといった使い方も可能になります。

# まとめ

Kotlinとは何かを知りたい人・がっつり勉強がしたい人・Androidの開発に使いたい人、どんな人にも役に立つ1冊だと思いました。オススメです。

ところで、表紙にある赤べこってなんなんでしょうか。あと、この本は界隈では「赤べこ本」とか呼ばれているんでしょうか。「Kotlinやるんだったら赤べこ本は必携だよね～」とか言って恥をかかないか心配です。
Ubuntuのシェルをzshに変更する


## はじめに

Vagrantの開発環境で使ってるUbuntuのシェルをローカルのシェルで使っているzshに合わせたいと思ったので、その変更方法をまとめておきます。

## 環境

* OS X
* Vagrant
* Virtualbox
* Ubuntu


## 方法

### 1.zshをインストールする

`sudo apt-get install zsh`

インストールが終わり、コマンドで`zsh`とするとシェルをzshに切り替えることが出来ます。

ただしこれだと毎度`zsh`とコマンドを打たないといけないので、ログインシェルを変更します。

### ログインシェルを変更する

`which zsh`と入力
おそらく`/usr/bin/zsh`のように出るかと思います。
このzshまでのパスをコピーして、

`chsh`を入力。すると以下のようなメッセージが出てきます。

```
Changing the login shell for root
Enter the new value, or press ENTER for the default
	Login Shell [/bin/bash]: ここに先ほどコピーしたzshまでのパスを貼り付け
```

以下入力後

```
Changing the login shell for root
Enter the new value, or press ENTER for the default
	Login Shell [/bin/bash]: /usr/bin/zsh
```

以上でおしまいです。
ログインシェルを変更したことで、今まで`.bash_profile`に書いていた設定が反映されずエラーになるかと思うので、`.zshrc`に移行させればall doneだと思います。

## 追記

@kakiha_hitoshi さんより
一行で出来るとコメントがありましたので、記載します。

```
$ chsh -s $(which zsh)
```
MySQL 行ロック、テーブルロックの確認

MySQL 行ロック、テーブルロックの動きを確認

#行ロック
```SQL:メインSQL
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
UPDATE table_name SET field_name = field_name + 1 WHERE id = 1;
SELECT SLEEP(10);
COMMIT;
```

↓↓↓　「メインSQL」実行中は、IDが同じで更新処理なので、アクセスNG

```SQL:SQL
UPDATE table_name SET field_name = field_name + 1 WHERE id = 1;
```

↓↓↓　「メインSQL」実行中は、IDが同じであるが、読み込み処理なので、アクセスOK

```SQL:SQL
SELECT count_share from table_name WHERE id = 1;
```
「REPEATABLE READ」なので、処理完了後にカウント数が更新される。

↓↓↓　「メインSQL」実行中は、IDが違うので、アクセスOK

```SQL:SQL
UPDATE table_name SET field_name = field_name + 1 WHERE id = 2;
SELECT field_name from table_name WHERE id = 2;
```

テストの為に、GLOBALにしているが、実使用の際は「SESSION」で！

```SQL:SQL
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
```

#テーブルロック

```SQL:メインSQL
LOCK TABLES fdn_content_count WRITE;
UPDATE table_name SET field_name = field_name + 1 WHERE id = 1;
SELECT SLEEP(10);
UNLOCK TABLES;
```

↓↓↓　「メインSQL」実行中は、IDが同じなので、アクセスNG

```SQL:SQL
UPDATE table_name SET field_name = field_name - 1 WHERE id = 1;
```

↓↓↓　「メインSQL」実行中は、IDが違うけど、アクセスNG

```SQL:SQL
UPDATE table_name SET field_name = field_name - 1 WHERE id = 2;
```
【Visual Studio Code】 拡張機能をすべて無効にして起動する方法

皆さん、こんにちは。戸倉彩です。

Visual Studio Code をインストールした後に拡張機能をインストールして使われている方も多いことと思います。**拡張機能を無効にしたい場合** には、アクティブバーの **拡張機能アイコン** から手動で **「無効にする」** に設定することもできますが、今回はまとめて **『すべての拡張機能を無効化した状態で起動する方法』** をご紹介します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/be9bbaf1-1ac7-14f7-6164-baaec59910ab.png" width="500">　

デフォルト画面を確認したい場合や、一時的に拡張機能を利用したくない場合に覚えておくと便利です。

# 拡張機能を無効にして起動する方法

下記のオプションを付けてコマンド実行する

```
code --disable-extensions
```

Visual Studio Codeは拡張機能をすべて無効化した状態で起動します。拡張機能の設定をチェックしてみると、すべての拡張機能が無効化された状態になっていることが確認できます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/3849e690-a3d3-647e-d84e-a2141521afd6.png" width="300">

有効にしたい場合には **[再読み込み]**　をクリックして、拡張機能を有効化してください。
または、オプション無しで起動しなおすことで、従来の拡張機能の設定が適用された状態で起動させることができます。

## 備考
PowerShellをお使いの方は、こちらを実行するためのps1ファイルを[GitHub/ayatokura](https://github.com/ayatokura/vscode-tips/blob/master/PowerShell/start_vscode_without_extension.ps1)に置いておきました。ご自由にお使いください。
## Have a nice Geek Life♪
※Twitterで最新情報発信中 @ayatokura