OmniAICreator/Qiita-1.07M huggingface dataset:
【メモ・超初心者向け】CocosCreatorでPrefabを動的に生成する

CocosCreatorを検証する機会があったのですがあまりにも記事が少ないので、自分用メモとして残します。

CocosCreatorで動的にPrefabを生成する方法を調べました。
超初心者向けの内容です。

```ruby:
cc.Class({
    extends: cc.Component,

    properties: {
        itemPrefab: {
            default: null,
            type: cc.Prefab
        },
    },

    // use this for initialization
    onLoad: function () { 
        // 新しいノードを生成
        var item = cc.instantiate(this.itemPrefab);
        // 新しく追加したノードを『Canvas』ノードの下に置く
        this.node.addChild(item);
    },
});
```

以上です。
注：Cocos Creator ver1.1.0で検証。今後やり方が変わる可能性が極めて高いです。
gulp + pug(jade)で静的ファイルをjsonで一気に書き出す


#出来たやつ
```
import rename from 'gulp-rename';

ar pageData = readConfig(`${CONFIG}/result.json`);
pageData = pageData.pages;
var tacks = [];
for (var key in pageData) {
    (function(key) {
        gulp.task(pageData[key].id, function() {
            return gulp.src(`${SRC}/jade/result/index.jade`)
                .pipe(jade({
                    locals: pageData[key],
                    pretty: true
                }))
                .pipe(rename("result/"+pageData[key].id + ".html")) //出力ファイル名を指定
                .pipe(gulp.dest(`${DEST}`)); //ファイル出力先を設定
        });
    })(key);
    tacks.push(pageData[key].id);
}

//その他のとまとめて
gulp.task('build', gulp.parallel('css', 'js', 'html', tacks));

```

#json を読み込む
```
var pageData = require(`${SRC}/config/result.json`);
```

#ファイルの名前を変更する
テンプレートの名前のままにするわけにはいかないから

```
import rename from require('gulp-rename');
.pipe(rename(pageData[key].id+".html"))
```


#参考サイト
##gulpinfoの書き方
http://aircolor.hatenablog.com/entry/2015/05/24/234307

##リネームとか基本的なの
http://sakamock.hatenablog.com/entry/2016/01/28/122644
TalendOpenStudio + SVNプラグイン

下記手順でローカルのTalendOpenStudio（TOS）が動かなくなるかもしれませんが自己責任でお願いします。

#ローカル環境の準備
Java:jdk1.8.0_45
Pleiades:pleiades-e4.5-cpp_20160312.zip
Talend Open Studio ESB:TOS_ESB-20160510_1709-V6.2.0.zip
※Javaのインストールは省略

#SVNの適用手順
1. ダウンロードしたPleiadesを解凍
2. ダウンロードしたTalendも解凍
3. 展開したPleiadesのフォルダよりdropins/Subversive/eclipseのfeaturesとpluginsをコピー
4. 展開したTalendのStudioに上記にてコピーしたfeaturesとpluginsを張り付け

上記でSVN Pluginの適用が完了

#ついでにSubversiveのメニューなどもろもろが英語なので日本語化
1. 展開したPleiadesのフォルダよりdropinsよりMergeDocをコピー
2. 展開したTalendのStudioに上記にてコピーしたMergeDocを張り付け
3. 自分の環境に合わせたTalendの実行ファイルに対応したiniファイルをエディタで開く（自分の場合には TOS_ESB-win-x86_64.ini かな）
4. TOS_ESB-win-x86_64.iniの最終行に下記一行追記

`-javaagent:MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar`

上記で日本語化も完了

#実行確認
1. TOS_ESB-win-x86_64.exeを実行
2. パースペクティブを開くのボタンを押下
3. SVNリポジトリー・エクスプローラが追加されているので選択（ここで無事にSVNのプラグインが追加されていることが確認できるはず）
4. リポジトリエクスプローラに新規リポジトリロケーションの追加
5. 追加されたロケーションよりTalendのプロジェクトフォルダをチェックアウト
6. ワープスペースの切替を選択
7. チェックアウトされたプロジェクトを選択
これで無事にSVNでの管理との連携が完了です。


	
#ここで注意
チェックアウトの際に別名でのチェックアウトもできますが、				別名にしてしまうとTalend側のプロジェクト選択時の名称と				実際にチェックアウトしたプロジェクト名に相違が出てしまい				開くことができないのであしからず。

#補足
上記の適用の仕方を見ていただいてわかったと思いますが
その他のEclipse Pluginももしかしたら・・・
とりあえずSpringbootをあっさり動かすメモ

#HomebrewでSpringCLIをインストール

brew tap pivotal/tap
brew install springboot

#SpringCLIの動作確認

spring --version

#groovyスクリプト(hello.groovy)を作成する。

    @RestController
    class WebApplication {

        @RequestMapping("/")
        String home() {
            "Hello World!"
        }
    }

#groovyスクリプト(hello.groovy)を実行する。

spring run hello.groovy

#localhostにアクセスして「Hello World!」の出力を確認する。デフォルトポートは8080

http://localhost:8080/

#ポート指定（9000）でgroovyスクリプトを実行する場合

spring run hello.groovy -- --server.port=9000

#JVMオプションを指定してgroovyスクリプトを実行する場合

JAVA_OPTS=-Xmx1024m spring run hello.groovy

#参考URL
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#cli-run
PHPのimenuの一覧から'All Methods'を取り除く

Public,Protected,Priveteの欄にも出てきたメソッドがAllにも出てきて見た目がすっきりしないので取り除きます。

```el
(add-hook 
  'php-mode-hook                               
    (assq-delete-all 
      (car (assoc "All Methods" php-imenu-generic-expression))
      php-imenu-generic-expression))
```
Pythonでフォームを受け取って色々やる

ごく簡単なHTMLからのフォームを受け取って、フォームの内容によって書き出す内容を変更する。というやつ。CGIで動かす場合には覚えておくと便利なので。

``` index.html

<form method="POST" action="cgi-bin/index.py">
<p><input type="radio" value="part_a" name="choise_pattern">パターンA</p>
<p><input type="radio" value="part_b" name="choise_pattern">パターンB</p>
<p><input type="radio" value="part_c" name="choise_pattern">パターンC</p>
</form>


```

上記のようなHTMLがあるとします。Pythonでフォームを受け取って、valueの値によって動作を分けてみます。テクニカルなことを一切せずにごくごくオーソドックスにやってみます。

``` index.py

import cgi

form = cgi.FieldStorage()
choose_pattern = form["choise_pattern"].value

print "Content-Type: text/html\n"

print """
<!DOCTYPE html>
<html lang="ja">
<head></head>
<body>
"""

if choose_pattern == "part_a":
    print "<p>", u"パターンAが選択されました", "</p>

elif choose_pattern == "part_b":
    print "<p>", u"パターンBが選択されました", "</p>

elif choose_pattern == "part_c":
    print "<p>", u"パターンCが選択されました", "</p>

print """
</body>
</html>
"""

```

本来なら何も選択されていなかった場合の処理がいるんですが、バリデートチェックを送信前にかけるとかで対処すればいいんじゃないかと。


これを応用することで選択したデザインによってHTMLを書き出して結合する、などといったサイトビルダーも作れます。


というわけで作りました。ホント作っただけ。
選択したデザインブロックをPythonスクリプトがフォームで受け取り、HTMLを吐き出し。
PREVIEWで即閲覧できるツール。

一応Bootstrap使ってそれっぽいデザインにしてみましたが、
どこに需要があるかは全く分かりません。

http://app.jiriki.co.jp/lp-creater/
Herd Simでつくったもの

<a href="https://www.assetstore.unity3d.com/jp/#!/content/26648" target="_blank">HerdSim</a>
というアセットの学習がてら前につくったのですがすぐに作るのをあきてしまってかなり放置されていたもの・・・。
HerdSimは群れのシュミレーションができます。あとは一定距離に近づくと逃げてはなれるともとの位置に戻ったりするアセットです。

ネズミや鶏が逃げたりするのをHerdSimを使用しています。
なのでネズミ、鶏の動きにかんしてはノンコーディングです。食べられたときなどの処理だけです。
<img src="http://ayumegu.daa.jp/img/Qiita/Eat.gif" width="500px">

本当は食べていろいろ大きくなるはずだったんだけれど・・・すぐに飽きてしまってしょうがないな・・・。
ちなみに赤いゲージがHPです。生きてるだけで減るので食べないと死んじゃいます。
黄色ゲージがスタミナ。走ると減ります。なくなると走れなくなります。

東京ジャングルみたいなものを作りたかったんだと思う・・・多分。
最近書き途中の下書きが邪魔になってきたので投稿・・・。
Elm v0.17の時点の学習メモ  1日目


## モチベーション

[Evan Czaplicki「脱FRP。またはThe Elm ArchitectureからSignalを消した件」 - 以下斜め読んだ内容](http://vwxyz.hateblo.jp/entry/2016/06/05/234137 "Evan Czaplicki「脱FRP。またはThe Elm ArchitectureからSignalを消した件」 - 以下斜め読んだ内容") を読んで、関数型のおもちゃから、かなり実用指向な舵取りをしているようにみえ、現時点でどれぐらい使い物になるか試してみよう、という気になった。

いつもの言語(JS)から距離があるので、徳が積めそう。

前提: 定期的にハローワールド程度はどう書くのか、ということは調べていたので、まったくの初見ではない。

## 読んだ資料

- http://guide.elm-lang.org/  基本的な概念
- http://www.elm-tutorial.org/en/ ユースケースごとの例
- https://qiita.com/tags/elm 実際どういうコードが書かれているかの雰囲気を見ていた

guide~ は適当に読み飛ばした部分が多いので、詰まったらまた読み返す。elm-tutorial よさそうと思っただけで、まだやってない。
注意点として、0.16より前のコードはあんまり動かない。


副読

- Evan Czaplicki「脱FRP。またはThe Elm ArchitectureからSignalを消した件」 - 以下斜め読んだ内容 http://vwxyz.hateblo.jp/entry/2016/06/05/234137
- farewell-to-frp http://elm-lang.org/blog/farewell-to-frp

## Install

3つある

- `npm install elm -g`
- `cabal install elm`
- http://elm-lang.org/install からバイナリを落とす

cabal でいれたやつは消しにくいので、nodeがあれば elm, そうでなければ 

## あるとよい知識

- Haskell
    - 全体的にサブセットぽさ + 正格評価 + UI構築に特化したDSLぽさ
    - Haskellだと思って触るとHaskellじゃなくて苛々するし、全く新しい言語だと思うとHaskellのお約束だから察しろ、で説明省かれるし、すごいH本の9章ぐらいまで読んでおくと良い。
- Redux
    - evancz曰く「Reduxにあんな形で丸パクリされたのは痛恨のミス」ということらしいが、この知識があると Html.App.program がまんま Redux だということがわかる。
- Rx.Observable
    - subscriptions で扱うものがそれっぽい
    - 0.16以前はSignalでもっと抽象化されていたらしい
- 仮想DOM
    - elm-lang/html パッケージ は https://github.com/Matt-Esch/virtual-dom がベース
    - 純粋関数型仮想と仮想DOMの相性は最高、とのこと http://qiita.com/Kinokkory/items/0e10588ccc7b11224d3d
    - 体感的にも設計面でそうなると言いたいことわかるけど、現実的にパフォーマンスチューニングで純粋関数邪魔そうという予感もある。どっちに転ぶかなー

## コマンド

- elm-make: ビルドコマンド
- elm-reactor: 動的にビルドしてくれる開発用サーバー

## 次に調べること

- JSとのインターフェースの持ち方
- パッケージの作り方
- ライフゲーム書いてみる

明日やるかも
毎日持ち歩いているもの

鞄ありのとき
- macbook ※鞄に入れてる
- iphone ※鞄に入れてる
- ipad mini ※鞄に入れてる
- apple watch ※腕につけている
- chipolo(http://chipolo.net) ※鞄に入れてる
- earin(http://www.earin.com) ※ポケットに入れているか耳
- narrative clip2(http://narrativeapp.com) ※体につけている

鞄なしのとき
- iphone ※ポケットに入れてる
- apple watch ※腕につけている
- chipolo(http://chipolo.net) ※ポケットに入れてる
- earin(http://www.earin.com) ※ポケットに入れているか耳
- narrative clip2(http://narrativeapp.com) ※体につけている

earinはkickstarter買った（£129.00）
kickにしては珍しく完成度が非常に高い。
http://matome.naver.jp/odai/2145628951475766301
↑タイトルはつり

chipoloはよく壊れるけどかわいいので使っている。
- 家の鍵（自分と家内）
- 車の鍵

narrative clip2は使い始めたばかりだけど非常に便利。
電源ボタン無し。とにかく撮り続ける。
取りたくない時はポケットに入れておくとかレンズを下向きに暗い状態にしておけばレジュームになる。
usbで充電している時に勝手に転送。勝手に分類。
サービス上ではgoogle+みたいに大雑把に分類されるので大雑把に削除。細かいことは気にしない（気にするレベルの枚数じゃないから）
状況や人をだれかに伝えるとき「これ」とそのものを見ることが出来るので便利。

今後の野望
あとは現金（小銭やお札）とカード類（クレジットカードやポイント、印鑑証明や免許証など）がapple payになれば言うこと無い。

おまけ
- dropcamは素晴らしい。
https://nest.com/camera/meet-nest-cam/
アメリカのクレジットカードでなければ課金が通らない。
こんなの使ってもだめ。
https://www.usunlocked.com
- Wireless Sensor Tagsは壊れやすいので使うのやめた。
http://wirelesstag.net/kumostat.html
- elgatoのeveは良い
https://www.elgato.com/en/eve
HomeKitにも対応していて何かと良い。（さすがに音声で温度聞いたりはしないけど）
- automaticを車につけている
素ではアクティベート出来なかったけど連絡したら対応してくれた。
https://www.automatic.com/home/
- irobotのscoobaは壊れやすい
irobotの魅力は壊れにくいことなのに、scoobaは結構すぐ壊れる。本家のサイトのプロダクトに無くなっちゃったけど、mint（braava）に切り替えるのかな。
http://www.irobot.com/For-the-Home/Floor-Scrubbing/Scooba-OLD.aspx
- peterman's eyeの鞄を使っている
http://www.jpeterman.com

せめて1つくらいは日本の製品を持ち歩きたい。。
ルーティングにカッコの有無で挙動の違い


「基礎Ruby on Rails」で

```rb:config/routes.rb
get 'lesson/:action/(/:name)' => 'lesson'
```

()をつけて`(/:name)`と記載していた。
この()って必要なのか？挙動を確認してみました。
確認に使ったコントローラーのコードは以下のとおりです。

```rb:app/controllers/lesson_controller.rb
class LessonController < ApplicationController
  def step1
    render text: "こんにちは、#{params[:name]}さん"
  end
end
```

##()をつける
下記のパス両方に対応してました。

- `localhost:3000/lesson/step1/sato`
- `localhost:3000/lesson/step1?name=sato`

##()をつけない
ルーティングを下記のように()なしにしてみました。

```rb:config/routes.rb
get 'lesson/:action//:name' => 'lesson'
```

- `localhost:3000/lesson/step1/sato` => ○
- `localhost:3000/lesson/step1?name=sato`　=> ルーティングエラー


##結論
：()をつけると`?=値`などの記述にも対応してくれるようです。
Docker Pythonイメージのwheezyって何？

Docker超小ネタですみません。

## Q. [Pythonイメージ](https://hub.docker.com/_/python/)のtagにある `-wheezy` って何？

無印はDebian 8 (jessie)系なので、Debian 7(wheezy)系を使いたい人向けに提供されている（と思われる）。


### なんのこと？

これ:
![docker-python-wheezy.png](https://qiita-image-store.s3.amazonaws.com/0/49113/742532dc-c803-6a2a-59d0-218b74e6ac10.png)

### 証拠

```bash
$ diff -u <(curl -sSL https://raw.githubusercontent.com/docker-library/python/9383f7d4d2f96068e8957651aa3588fee8b48f71/2.7/wheezy/Dockerfile) <(curl -sSL https://raw.githubusercontent.com/docker-library/python/9383f7d4d2f96068e8957651aa3588fee8b48f71/2.7/Dockerfile)
--- /dev/fd/63	2016-06-08 12:09:22.000000000 +0900
+++ /dev/fd/62	2016-06-08 12:09:22.000000000 +0900
@@ -1,4 +1,4 @@
-FROM buildpack-deps:wheezy
+FROM buildpack-deps:jessie

 # remove several traces of debian python
 RUN apt-get purge -y python.*
```

## Docker所感

アプリケーションとOSの間でバージョンの組み合わせ問題が発生し始めているんだけど、どうやって解決していくかが鍵。
データの損失と復元

<a href="http://jp.easeus.com/infographics/data-loss-and-data-recovery.html" title="データの損失と復元―インフォグラフィック - EaseUS"><img src="http://jp.easeus.com/images/jp/pic-data-loss-bg-jp.png" alt="データの損失と復元" /></a><p> <a href="https://jp.easeus.com" title="データ復元ソフト">EaseUS</a>より</p>

ファイル復旧なら、[EaseUS Data Recovery Wizard](https://jp.easeus.com/data-recovery-software/drw-free.html)を試してみましょう。[ゴミ箱 復元 windows7](https://jp.easeus.com/file-recovery/recover-windows-7-deleted-file.html)、[SDカード 認識しない](https://jp.easeus.com/storage-media-recovery/recover-unrecognized-sd-card.html)、[エクセル復元](https://jp.easeus.com/file-recovery/where-does-excel-save-backup-files.html)等にも完璧に対応しております。
ログアウト後の遷移先を状況に応じて変更


ApplicationContoroller に以下のような private メソッドを追加、戻り値として遷移先のpathを返す。

```app/controllers/application_controller.rb 

  # scope が :admin_user の場合は admin_user のログイン画面に遷移
  def after_sign_out_path_for(resource_or_scope)
    return new_admin_user_session_path if resource_or_scope == :admin_user
    root_path
  end

```

## 参考

https://github.com/plataformatec/devise/wiki/How-To:-Change-the-redirect-path-after-destroying-a-session-i.e.-signing-out
VisualStudioのディレクトリパス設定を少しだけ楽にする

VisualStudioを使ってプログラミングしていると、プロジェクトのプロパティからインクルードやライブラリのディレクトリパスを設定することがあると思います。

その設定を少しだけ楽にする方法があったので紹介。

##ReleaseやらDebugやら・・・
ディレクトリパスを通すときに面倒くさいのが、DebugビルドかReleaseビルドかで通すパスを変えなければいけないパターンが多いことです。
中には64bitか32bitかで変える必要もあり、4パターン設定しなければならないなんてことも。
毎回それを設定していて面倒くさいと思った人も多いかと思います。

が、実は1つの設定だけで全ての構成で適用できる方法があったので紹介。

##マクロを使う
仮に、C:API\bin\の場所にライブラリフォルダがあったとします。
bin以下はDebugやRelease、さらにx64やx86で分かれていて、その中にlibファイルがあるとします。

例：
C:API\bin\
　x86\
　　Debug\
　　Release\
　x64\
　　Debug\
　　Release\

今までは構成毎にパスを変更していましたが、実はマクロ機能を使うことができます。

今回のような場合だと、以下のように書くことが出来ます。
C:\API\bin\\\$(Platform)\\\$(Configutation)

これで、構成毎にパスが変換されます。
ちなみに、マクロの一覧はパスを書くウィンドウの右下のマクロを押すと見ることが出来ます。
Win10で【デバイス エラーコード43 Unown eknDevic】の解決策

エラーコード43というのは、デバイスには問題があると報告されて、Windowsシステムがデバイスを止めるの場合に現れるエラーコードです。でも心配しないで、デバイス自身が問題あるわけではなくて、デバイスハードウェアやデバイスドライバーの動作がおかしいかもしれません。
<h2>Win 10デバイスマネジャーを診断する</h2>

１．スタートメニューの隣の「WebとWindowsを検索」で「デバイス　マネージャー」と入力して検索します。「デバイス　マネージャー」を開くと、パソコンにインストールされたすべてのデバイスがリストで表示されます。
２．エラーが発生したデバイスを右クリックして、「アンインストール」を選択します。（デバイスがアンインストールされるというメッセージが出て、「OK」）
３．デバイスマネジャーでパソコン名を右クリックして、ハードウェア変動を「スキャン」します。マネジャーがシステムをスキャンして自動的にデバイスを再インストールします。
４．デバイスを右クリックし「プロパティ」を選択します。「全般」でデバイスが正常に動作しているかどうかを確認します。
<h2>パソコンのバッテリーを外してから再起動する</h2>

ラップトップの場合、パソコンのバッテリーを一旦取って、五分間ほど待つとバッテリーを入れてパソコンを再起動することで、USBエラーを修復することもあります。より詳しくはこちら:[USBメモリ修復方法](https://jp.easeus.com/storage-media-recovery/recover-data-from-broken-usb.html)
<h2>USBドライバーをアップデートする</h2>

最新バージョンのデバイスドライバーをインストールしてください。エラーコード43解決に効くかも知れません。（既に最新バージョンのデバイスドライバーをインストールした場合、一旦アンインストールしてから再度インストールしてください）
<h2>システムを前のバージョンにリストアする</h2>

時々、システムの更新もエラー43を起すかもしれません。下記のプロセスのようにすればシステムをリストアできます。
コントロールパネル　→　　システム　→　システムプロテクション　→　システムリストア

どうしてもUSBが認識されない時、せめてその中のデータやファイルを救出したいです。そんな場合に対し、皆さんに無料データ復旧ソフト<a href="https://jp.easeus.com/data-recovery-software/drw-free.html"><strong>EaseUS Data Recovery Wizard Free</strong></a>を皆さんに薦めます。簡単に認識できないUSBからデータを復旧できます。ちなみに、[SDカードデータ復旧](https://jp.easeus.com/storage-media-recovery/recover-deleted-sd-card-data.html)にも対応しております。
ruby string例/メモ

```ruby:string.rb
class WordIndex
    def initialize
      @index = {}
    end
    def add_to_index(obj, *phrases)
      phrases.each do |phrase|
        phrase.scan(/\w[-\w']+/) do |word|   # extract each word
          word.downcase!
          @index[word] = [] if @index[word].nil?
          @index[word].push(obj)
        end
      end
    end
    def lookup(word)
      @index[word.downcase]
    end
  end
 
class Song
  include Comparable
  @@plays = 0
  attr_reader :name, :artist, :duration
  attr_writer :duration
  def initialize(name, artist, duration)
    @name     = name
    @artist   = artist
    @duration = duration
    @plays    = 0
  end
  def to_s
    "Song: #@name--#@artist (#@duration)"
  end
  def name
    @name
  end
  def artist
    @artist
  end
  def duration
    @duration
  end
  def duration=(new_duration)
    @duration = new_duration
  end
  def duration_in_minutes
    @duration/60.0   # force floating point
  end
  def duration_in_minutes=(new_duration)
    @duration = (new_duration*60).to_i
  end
  def play
    @plays  += 1   # same as @plays = @plays + 1
    @@plays += 1
    "This  song: #@plays plays. Total #@@plays plays."
  end
  def record
    "Recording..."
  end
  def inspect
    self.to_s
  end
  def <=>(other)
    self.duration <=> other.duration
  end
end
class SongList
  def initialize
    @songs = Array.new
    @index = WordIndex.new
  end
  def append(song)
    @songs.push(song)
    @index.add_to_index(song, song.name, song.artist)
    self
  end
  def delete_first
    @songs.shift
  end
  def delete_last
    @songs.pop
  end
  def [](index)
    @songs[index]
  end
  def with_title(title)
    for i in 0...@songs.length
      return @songs[i] if title == @songs[i].name
    end
    return nil
  end
  def with_title(title)
    @songs.find {|song| title == song.name }
  end
  def lookup(word)
    @index.lookup(word)
  end
  def create_search(name, params)
    # ...
  end
end 
song_file = DATA
songs = SongList.new
song_file.each do |line|
  file, length, name, title = line.chomp.split(/\s*\|\s*/)
  name.squeeze!(" ")
  mins, secs = length.scan(/\d+/)
  songs.append(Song.new(title, name, mins.to_i*60+secs.to_i))
end
puts songs.lookup("Fats")
puts songs.lookup("ain't")
puts songs.lookup("RED")
puts songs.lookup("WoRlD")
```
php serialize例/メモ

```html:serialize.php
<?
echo "<PRE>";
$post = serialize($_POST);
$fromdbpost = $post;


$rowvalue = unserialize($fromdbpost);
echo $rowvalue["a"];
echo "<br>";
echo $rowvalue["b"];
echo "<br>";
echo $rowvalue["c"];
echo "<br>";
echo $rowvalue["d"];
echo "<br>";
echo $rowvalue["e"];

?>
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
 </head>
 <body>

 <form name="form1" method="POST" action="?act=1">
 <input type="text" name="a" value="a">
 <input type="text" name="b" value="b">
 <input type="text" name="c" value="c">
 <input type="text" name="d" value="d">
 <input type="text" name="e" value="e">
 <input type="button" value="ddddd" onclick="this.form.submit()">
 </form>


  
 </body>
</html>
```
phpメール送信例/メモ

```php:mail.php
// SETUP
$to[] = 'test@testtest.jp';
$to[] = 'testtest2@yahoo.co.jp';
$from_email= 'sender@address.co.jp';
$from_name = '送信者名';
$subject = 'メールのタイトル';

$body = "

このメールは、自動で送信されるメールです。

資料を送信致します。
添付ファイルをご参考して下さい。

以上です。
";

$attach_file = "/path/path/path/file.dat";

// send the email
foreach( $to as $to_email ) {
sendmail_jpn($to_email, $subject, $body, $from_email,$from_name, $attach_file);
sleep(1);
}

echo "送信完了";

//関数-----------------------------------

function sendmail_jpn($to, $subject, $message, $from_email,$from_name, $filepath)
{
$mime_type = "application/octet-stream";

// 添付ファイルのエンコード
$filename = basename( $filepath );

// マルチパートなので、パートの区切り文字列を指定
$boundary = '----=_Boundary_' . uniqid(rand(1000,9999) . '_') . '_';

// 件名のエンコード
$subject = mb_convert_encoding($subject, 'ISO-2022-JP', 'SJIS');
$subject = mb_encode_mimeheader_ex($subject);

// 本文のエンコード
$message = mb_convert_encoding($message, 'ISO-2022-JP', 'SJIS');

// toをエンコード
// $to = mb_convert_encoding($mail['to']['name'], "SJIS", "SJIS");
$to = "=?ISO-2022-JP?B?" . base64_encode($to) . '?= <' . $to . '>';

// fromをエンコード
// $from = mb_convert_encoding($mail['from']['name'], "SJIS", "SJIS");
$from = "=?ISO-2022-JP?B?" . base64_encode($from_name) . '?= <' . $from_email . '>';

// 添付ファイルのエンコード
$filename = mb_convert_encoding($filename, 'ISO-2022-JP', 'SJIS');
$filename = "=?ISO-2022-JP?B?" . base64_encode($filename) . "?=";

// ヘッダーの指定
$head = "";
$head .= "From: {$from}\n";
$head .= "MIME-Version: 1.0\n";
$head .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\n";
$head .= "Content-Transfer-Encoding: 7bit";

$body = "";

// 本文
$body .= "--{$boundary}\n";
$body .= "Content-Type: text/plain; charset=ISO-2022-JP;" .
"Content-Transfer-Encoding: 7bit\n";
$body .= "\n";
$body .= "{$message}\n";
$body .= "\n";

// 添付ファイルの処理
$body .= "--{$boundary}\n";
$body .= "Content-Type: {$mime_type}; name=\"{$filename}\"\n" .
"Content-Transfer-Encoding: base64\n" .
"Content-Disposition: attachment; filename=\"{$filename}\"\n";
$body .= "\n";

$fp = fopen( $filepath, "r" ) or die("Error on mailing. (attachment file cannot open)");
$contents = fread( $fp, filesize($filepath) );
fclose( $fp );
$f_encoded = chunk_split(base64_encode($contents)); //添付ファイルをbase64エンコードする
$body .= "{$f_encoded}\n";
$body .= "\n";

if (mail($to, $subject, $body, $head)) {
echo 'sendmail_jpn : OK.';
} else {
echo 'sendmail_jpn : FAILURE.';
}
}

// mb_encode_mimeheaderのバグ対策用
function mb_encode_mimeheader_ex($text, $split_count = 34) {
$position = 0;
$encorded = '';

while ($position < mb_strlen($text, 'ISO-2022-JP')) {
if ($encorded != '') {
$encorded .= "\r\n ";
}
$output_temp = mb_strimwidth($text, $position, $split_count, '', 'ISO-2022-JP');
$position = $position + mb_strlen($output_temp, 'ISO-2022-JP');
$encorded .= "=?ISO-2022-JP?B?" . base64_encode($output_temp) . "?=";
}

return $encorded;
}
```
Nginxによるリバースプロキシの設定方法

Nginxをリバースプロキシとして利用するための方法と個人用メモ

## プロキシ設定

Nginxをリバースプロキシとして利用するためには、/etc/nginx/conf.d に設定ファイルを配置すればよい
ファイル名は {ConfigName}.conf
今回は server.conf としてファイルを配置した

以下のように server.conf を用意して Nginx を再起動する

```nginx:server.conf
server{
    server_name    example.com;

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location /example/ {
        proxy_pass    http://localhost:8080/app/;
    }

    location /example2/ {
        proxy_pass    http://example2.com/example/;
    }
}
```

proxy_set_header の記述により、転送先にアクセス元のIPやホスト情報を通知する
location は複数記述可能
クッキーの書き換えも可能で、書き方は proxy_cookie_path /abc/ /edf/; のようになる

## rewriteディレクティブ

rewriteディレクティブを記述することで apache の mod_rewriteと同様のことができる

書き方は rewrite regexp replacement option となっている
具体例は以下

```nginx
rewrite /reg/(.*) /replace/$1 last;
```

option には以下のどれかを指定可能

|オプション|説明|
|--------------|-----|
|last|rewriteルールが適用されるとURLを上書きして処理を終了|
|break|URLを上書きして処理を続行|
|redirect|HTTP 302 temporary redirect を返す|
|permanent|HTTP 301 redirect を返す|

## 参考サイト

- Nginxでリバースプロキシを設定する http://9ensan.com/blog/server/sakura-vps-nginx-reverse-proxy/
- Nginxのrewrite機能でURLの書き換えをしてみる http://komeiy.hatenablog.com/entry/2014/12/10/231714
- nginxとTomcatの連携 http://sekai.hatenablog.jp/entry/2013/02/13/185900
- nginx と Tomcat の連携 http://fujishinko.exblog.jp/8362059/
- Web開発/本番環境構築についてまるっとまとめるWIKI http://sakudevel.wiki.fc2.com/wiki/Nginx
Instagramの写真持ってきてスライドショー/メモ

スライドショー - http://als.musings.it 
クライアント-number-id - http://jelled.com/instagram/lookup-user-id 
クライアントID - https://instagram.com/developer/clients/manage/

```html:instagram.html
<!DOCTYPE HTML>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="stylesheet" type="text/css" media="screen" href="als.css" />
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" src="jquery.als-1.7.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function() {
        $.ajax({
          //url: 'https://api.instagram.com/v1/tags/タグ/media/recent?count=33&client_id=クライアントID',
          url: 'https://api.instagram.com/v1/users/クライアント-number-id/media/recent?client_id=クライアントID&count=33',
          cache: false,
          dataType: 'jsonp'
        }).done(function( msg ) {
          var result = new Array();
          $.each(msg.data, function(index, value) { 
            var link = value.link;
            var imageUrl = value.images.low_resolution.url;
            var instaId = value.id;
            result.push('<div class="multiple"><a href="'+link+'" target="_blank"><img border="0" src="'+imageUrl+'" width="210" /></a></div>');
          });
          $(".slider").html(result.join(""));
          $('.autoplay').slick({
            dots: false,
            slidesToShow: 6,
            slidesToScroll: 1,
            autoplay: true,
            autoplaySpeed: 2000,
          });
        });
      });
    </script>
  </head>
  <body>
 
    <div class="slider autoplay" style="height:210px;"></div>
   
  </body>
</html>
```
【WPF】ViewModelからユーザーコントロールのオブジェクトを取得する

ViewModelからユーザーコントロールのオブジェクトを取得する際に
やり方がわからず躓いたのでメモ。
※ReactivePropertyを使用しています。
http://blog.okazuki.jp/entry/2015/02/22/212827

アプリの構成は以下の通り。
・MainWindow
・SubControl
・Sub2Control
MainWindowはSubControlを呼び、SubControlはSub2Controlを呼んでいる。


今回は、SubControlのButtonが押下された時にイベントをSubControlViewModelで受け取り、
Sub2Contorlのオブジェクトを取得したい。

```SubControl.xaml
<Grid>
 <Button Header="Get Sub2Heith"　Command="xxx"/>
 <local:Sub2Control x:Name="Sub2Control"/>
</Grid>
```

```SubControlViewModel.cs
xxx.Subscribe(x =>
{
     var window = Application.Current.Windows.OfType<Window>().FirstOrDefault(w => w is MainWindow);
     var mw = (MainWindow)window;
     var stackPanelsHeight = mw.SubControl.Sub2Control.ActualHeight;
}
```
##SubControlViewModel.csの説明
###Applicationクラス
>Windows Presentation Foundation (WPF) アプリケーションをカプセル化します。
名前空間:   System.Windows
アセンブリ:  PresentationFramework (PresentationFramework.dll 内)

Application.Current
→ApplicationのCurrentプロパティはstaticなので、Applicationのオブジェクトを作成する必要がない。

Application.Current.Windows
→現在のAppDomainのApplicationオブジェクトから、インスタンス化されたWindowを取得
>ウィンドウがuser interface (UI) スレッド上でインスタンス化されると、直ちに Window 参照が Windows に自動的に追加されます。ワーカー スレッドによって作成されたウィンドウは追加されません。 Window 参照は、Closing イベントが処理されてから Closed イベントが発生するまでの間に、自動的に削除されます。
既定では、Windows プロパティに追加された最初の項目が MainWindow となります。
このプロパティは、Application オブジェクトを作成したスレッドからのみ使用できます。

スレッドについては下記参照
http://article.higlabo.com/ja/thread_fundamentals.html
tryメソッドに触れてみた

# tryメソッドに触れてみた
例）entriesテーブルにアクセスする

entriesテーブルには100レコードあるものとする。

```
@entry = Entry.find_by_id(101) # 101は存在しないid
@entry.id
```

こうすると、`RuntimeError`が発生。
このとき、

```
@entry.try(:id)
```

とすると、返される結果nilになり、仮にヒットしないレコードであったととしても、プログラムでエラーにならない。
なので

```
@entry && @entry.id
```

とか書いてた部分が

```
@entry.try(:id)
```

と書くことができる。

というわけで、条件文とかで

```
if (@entry && @entry.id) || [なんか他の条件]
```

とか書いてたところも

```
if @entry.try(:id) || [なんか他の条件]
```

と書けて綺麗になれる。

綺麗は作れる(物理)
体重計をハックして無線化してみた

# ことのはじめ
体重の情報をサーバーで収集したかったため検討をはじめた。
自分で歪みゲージ単体を買ってきて体重情報を取るのはメカ構造も検討しなければならないため、既存の体重計をハックすることにした。

# 体重計を分解する
使った体重計はこちら（[タニタHD660](http://www.yodobashi.com/%E3%82%BF%E3%83%8B%E3%82%BF-TANITA-HD660-WH-%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E3%83%98%E3%83%AB%E3%82%B9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC-%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88/pd/100000001001380543/)）。ヨドバシ.comで1000円くらいで買えた。
後述するが体重計には４つの歪みゲージが内蔵されている。
[スイッチサイエンスで歪みゲージ](https://www.switch-science.com/catalog/501/)を買うと一個1000円近くするにも関わらず、この体重計を買うことで4つの歪みゲージとメカのハウジングが1000円で手に入るのだから、なんとお得なことかお分かりいただけるだろう。

このHD660は裏のネジを回すだけで簡単に蓋が外せる。
4隅の赤丸部分が歪みケージの配置場所。歪みゲージからは3本の線（赤、白、緑）がでており、それぞれが中央の基板に向かって配線されている。
![image](https://qiita-image-store.s3.amazonaws.com/0/95321/1f081e16-5bcb-dcd1-cbb5-afba4eace203.png)

回路を見るために中央のパネル部（基板）を裏返す。
赤で囲ってある部分が歪みゲージの線が着地しているところ。
![image](https://qiita-image-store.s3.amazonaws.com/0/95321/0a9026dd-e6b8-194e-4523-e15dab1afb90.png)

これらがどのように結線されているのかテスターを当てながら確認したところ。
下図のようになっていることが分かった。
(一番左の歪みゲージの向きは見やすいように90度回転させている。また、W, G, Rはそれぞれ線の色:White, Gree, Redを表している。)
![image](https://qiita-image-store.s3.amazonaws.com/0/95321/a66887bf-5402-e4ad-25b3-468e4f9f7985.png)
これによってこの4つのひずみゲージによって下図のようなホイートストンブリッジが構成されていることが見えてきたので、結線先の分からない一番左のGと左から3番目のGがセンスラインであるという目星をつけた。
![image](https://qiita-image-store.s3.amazonaws.com/0/95321/6d9f8a16-4a89-2f3d-935c-d124374e3223.png)
この2点間の電圧をテスターで測定してみる。

- 体重計に何も載せない時（体重計の数字が0を示していたとき）、2点間の電圧はおよそ-0.8mVだった。
- 体重計に載ったとき、およそ0.6mVだった。

# 回路を作成する
この結果を受けてブロック図を作成。
体重計からの微小電圧(-1mV ~ 1mV)を回路によって0V ~5Vに増幅、それをArduinoのADCで測定し、サーバーに投げる。
![image](https://qiita-image-store.s3.amazonaws.com/0/95321/2567e4cf-f62f-dd7d-34cb-03bc0a76dd49.png)

体重計とArduinoを仲介する回路が必要なので、その回路を作成する。
作成指針は、

- 入力に負電圧があるので、仮想GNDを用いることで最終的な出力が正電圧しか出ないようにする。
- 入力がpk-pkで2mV程度、出力目安がmax5Vなので、1000倍程度に増幅する必要がある（実際は回路を作った後に調整）
- ホイートストンブリッジの出力は差動出力なので、差動増幅器を用いる。

差動増幅器についてはディスクリートで組んでも外付け抵抗をマッチングさせないと精度がだせない上に配線が面倒なので[秋月にある計装アンプIC（LT1167CN8）](http://akizukidenshi.com/catalog/g/gI-02789/)を用いた。

![image](https://qiita-image-store.s3.amazonaws.com/0/95321/ddbc12d5-07fb-a284-f841-86d72666f6c4.png)

当初面倒くさいあまりC1、C2をつけていなかったが見事に発振したのでつけた。本当はもっと大きい値のほうが安定するが手持ちが0.1uFしかなかった。また、C1,C2をつけるだけだと余計にLM358Nが発振するので出力抵抗R4をつけた。

回路の動作に関しては電圧波形のイメージ図（LTSpiceでのシミュレーション結果）をみると理解しやすい。
このシミュレーションでは仮想GND（回路図上のVGND）の電圧を2.5V、計装アンプのゲインを1000倍に設定している。
ごらんの通りVGNDを中心に出力電圧が振幅している様子が分かる。
回路図にあるR5は可変抵抗にしているので、VGNDのレベルを動かせる。体重計が0kg（電圧入力でいうと-1mV程度）のときに、VOUTの電圧が0Vを下回らないように調整する。
ゲインは入力電圧のmax値（ここでは1mVとしているが、かなり体重の重い人がのるとそれを超えるかも）が入った際に、出力のVOUTが飽和しない範囲で調整する。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/95321/ce202f46-d1f7-f33b-3b2c-8849fb998a8a.png)

# 電圧から体重に変換する
事情があってここまではやっていないのだが、次のようにして変換できるはず。
今回は、体重計のパネルは生きているので、

- Aさんに体重計に載って貰う。パネルの体重を確認。ADCの読み取り値を確認。
- Bさんに体重計に載って貰う。以下同じ
- Cさんに...以下同じ

これでプロットしていけば、体重計と電圧値の相関（おそらくリニア）が分かるので電圧値から体重計に変換できるようになる...はず。

# データをサーバーにあげる
HTTPサーバーを立てて、ArduinoYunからHTTP通信してあげればよいと思う。
本題ではないので割愛。
[ArduinoYunについては、こちらを。](http://qiita.com/shozaburo/items/fa07bbb2c24ea6bd371b)
[iOS] UICollectionView のレイアウトクラスを作成して「Pinterest」風のレイアウトを実現する[Swift版移植]

#この記事について
この記事では、写真共有ウェブサイト「Pinterest」風のレイアウトを iOS、Swiftで実現するためのものです。

具体的には以下の画像のような、「高さの異なるセルが敷き詰められているレイアウト」になります。
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/22218/3d6aa499-f258-3b8a-d402-efb98c857bd1.png)

尚、内容としては下の記事をSwiftに置き換えただけのものですので、解説などはそちらを参照ください。
http://dev.classmethod.jp/smartphone/iphone/ios-pinterest-layout/

ソースコードは、こちらで公開しています。
https://github.com/k-neo/StaggeredGridLayout

---
### 筆者参考
札幌圏でリモート開発、在宅勤務を中心としたシステム開発の会社を経営しています。

[ローラハウス](http://laurahouse.net)
Raspberry Pi -RASPBIAN- のswapを無効化

# 概要
Raspberry Pi -RASPBIAN- のSwapを無効にする方法の覚書
# 目的
マイクロSDカードの延命。
スワップは高速化への貢献が少ないわりにSDカードに負担をかけるとのこと。
# 環境
raspberry pi2(jessie)
# 基本方針
SwapをDisableする
リブートしてもDisable状態は継続されること。
簡単に復活できる道も残しておくこと。
# 実際の手順
## 1. dphys-swapfile
RaspbianではSwapの制御は/soin/dphys-swapfileで行っているらしい。
$ free
             total       used       free     shared    buffers     cached
Mem:        882800     400092     482708      12776      38404     195952
-/+ buffers/cache:     165736     717064
Swap:       102396          0     102396
$ sudo dphys-swapfile swapoff
$free
             total       used       free     shared    buffers     cached
Mem:        882800     402544     480256      12820      39272     197656
-/+ buffers/cache:     165616     717184
Swap:            0          0          0
ちなみスワップを復活する場合は、
$ sudo dphys-swapfile swapon
でOK。RAM容量不足でエラーになる場合のおまじない。
## 2.サービスの静止
/soin/dphys-swapfileは自動起動されるよう設定されているので、ラズパイを再起動するとスワップが復活する。
$ insserv -s | grep dphys-swapfile
S:03:2 3 4 5:dphys-swapfile
そこで自動起動を停止。
$ sudo insserv -r dphys-swapfile
# 結果
再起動して確かめてみる。
$ free
             total       used       free     shared    buffers     cached
Mem:        882800     732492     150308      12780     237420     323308
-/+ buffers/cache:     171764     711036
Swap:            0          0          0
# 参考にさせて頂いたWEBページ
http://raspberrypi.stackexchange.com/questions/169/how-can-i-extend-the-life-of-my-sd-card
http://denshikousaku.net/extend-life-expectancy-of-raspberry-pi-sd-card
http://hanposaki.blog.so-net.ne.jp/2013-01-07
世界地図と各国別の人口数例

```html:world.html
<html>
  <head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1", {packages:["geochart"]});
      google.setOnLoadCallback(drawRegionsMap);

      function drawRegionsMap() {
        var data = google.visualization.arrayToDataTable([
          ['Country', 'Human'],
          ['Japan', Math.floor((Math.random() * 1000000))],
          ['United States', Math.floor((Math.random() * 1000000))],
          ['Germany', Math.floor((Math.random() * 1000000))],
          ['United Kingdom', Math.floor((Math.random() * 1000000))],
          ['Italia', Math.floor((Math.random() * 1000000))],
          ['France', Math.floor((Math.random() * 1000000))],
          ['Canada', Math.floor((Math.random() * 1000000))],
          ['Spain', Math.floor((Math.random() * 1000000))],
          ['Aus', Math.floor((Math.random() * 1000000))],
          ['Brazil', Math.floor((Math.random() * 1000000))],
          ['Portugal', Math.floor((Math.random() * 1000000))],
          ['Rusia', Math.floor((Math.random() * 1000000))],
          ['Mexico', Math.floor((Math.random() * 1000000))],
          ['India', Math.floor((Math.random() * 1000000))]
        ]);

        var options = {};
        var chart = new google.visualization.GeoChart(document.getElementById('regions_div'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="regions_div" style="width: 900px; height: 500px;"></div>
  </body>
</html>
```

![Cap 2016-06-08 10-54-37-786.png](https://qiita-image-store.s3.amazonaws.com/0/113820/fc98c9ee-e723-81c8-a32e-0a5d18f37857.png)
BootCampでBreakキーを入力したい

MacBook Air(usキーボード)でBoot Campしてる
Breakを入力したい。
`fn + control + esc`[^1]で入力できる。



スクリーンキーボード(oskコマンド)でも可。
Breakキーは表示されていないが、Ctrl押した後にPauseでBreakが入力される
スクリーンキーボードは 
`win + R, osk`
または
`win, osk`
で起動できる。

※MacBook Air (Mid 2013), Boot Camp バージョン6.0, windows 10 Home

***
[^1]: レジストリーで左controlにしたcaps lockキーを押しても効かない。本体のcontrolと書いてあるキーを使うと効いた。
PHP POSTで受信

```php:page1.php
<?php
echo "page1";
$postdata = http_build_query(
    array(
        'data1' => 'hello',
        'data2' => 'world'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context  = stream_context_create($opts);

$result = file_get_contents('page2.php', false, $context);
var_dump($result);
```

```php:page2.php
<?php
echo "page2";
var_dump($_POST);
```

page2から$_POSTで受け取ったデータを見るとdata1（hello）とdata2（world）が
あることが分かります。
HTC Viveでカメラがオブジェクト内に入ったらフェードアウトする方法

# HTC Viveでカメラがオブジェクト内に入ったらフェードアウトする方法

unityでの話です。
やったことがないので見たことないのですがサマーレッスンとかで使われてる手法だそうです。
すでに、SteamVR Assetが入ってる前提です。

## SteamVR_Fadeをカメラに入れる

![1.png](https://qiita-image-store.s3.amazonaws.com/0/79067/4cbcb577-5545-6ea6-ef93-9264b1240511.png)

入れる場所は
[cameraRig] → camera(head) → camera(eye)
です。

## 衝突判定用のColliderを作成

[cameraRig] → camera(head)に衝突用のColliderが入ったGameObjectを作成します。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/79067/76280555-759a-025a-a793-929b4f99f050.png)

ついでにtrigger検知用にRiggidbodyも入れておきます。
（大きさは任意ですが、0.3ぐらいがなんとなくちょうどよかった）

## 衝突判定用のスクリプトを作成したGameObjectに入れます

名称はなんでも良いのですが、[feadCheck]という名前にしました

```csharp
using UnityEngine;
using System.Collections;

public class FaedCheck : MonoBehaviour
{

    public void OnTriggerEnter(Collider other)
    {
       SteamVR_Fade.Start(Color.black, 0.5f);        
    }

    public void OnTriggerExit(Collider other)
    {
       SteamVR_Fade.Start(Color.clear, 0.5f);
    }
}

```
めざせpythonライブラリマスター （49）psidialogs

#【ライブラリ説明】
　ダイアログ画面が簡単に表示できる

#【プログラム】
```py:psidialogs_message.py
# -*- coding: utf-8 -*-

from psidialogs import message

message('Hello!')
```
<img width="112" alt="message.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/3d195b05-3978-2a7a-e1db-601400a74db1.png">

```py:psidialogs_file.py
# -*- coding: utf-8 -*-

from psidialogs import ask_file

ask_file()
```
<img width="497" alt="file.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/a3da4864-f75e-b305-4206-2f87020be148.png">

```py:psidialogs_string.py
# -*- coding: utf-8 -*-

from psidialogs import ask_string

ask_string(message='Enter something.')
```
<img width="160" alt="string.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/3ce8b2c1-1570-c595-4185-c2212918fd8c.png">

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/psidialogs/0.1.0)
　[github](https://github.com/ponty/psidialogs)
　[API](http://ponty.github.io/psidialogs/api.html)
quillでモデルのdatetimeにJodaTimeを使おうと思ったらdecode出来ないとコンパイラに怒られる場合の対処法


##対処

case classが例えば以下のようだった時にcreated_atやupdated_atのDateTimeが`org.joda.time.DateTime`への変換が出来ないらしくimplicit valで変換させる方法で対処しました


```scala
case class Article (
  id: Int,
  title: String,
  url: String,
  created_at: DateTime,
  updated_at: DateTime
)
```

これをそのままコンパイルすると

> Source doesn't know how to decode 'u.page_created_at: org.joda.time.DateTime'

のようにエラーが出てしまいました

ので

`db.run()`を使っているスコープ内に

```scala
  implicit val decodeDateTime = mappedEncoding[Date, DateTime](new DateTime(_))
  implicit val encodeDateTime = mappedEncoding[DateTime, Date](_.toDate)
  
  def findById() = {
    db.run( ArticleDao.find(1) )
  }
  
```

と書いておけばDBから取得するタイミングでJodaTimeへの変換が可能になりました


##参考
[getquill/quill java8 date apis #111](https://github.com/getquill/quill/issues/111 "getquill/quill java8 date apis #111")
bookedの操作手順

#概要
予約管理システムbookedの操作手順です。
[bookedのインストール手順](http://qiita.com/ykoji1112/items/14995071ff991ec7e533)
でbookedインストール作業が終わっていることを前提とします。

#最初にやること
####１．admin/passwordでログインします。
　adminはApplication管理者なので、全ての管理を行うことが可能です。
####２．スケジュールの管理者を登録します。
　管理タブ⇒スケジュールを押します。
　スケジュールの管理者を「Schedule Administrators」に変更します。
　デフォルトでは、「--なし--」となっています。
####３．グループの管理者を登録します。
　管理タブ⇒グループを押します。
　Application,Group,Resource,Schedule
　４つ全てのグループ管理者を「Group Administrators」に変更します。
　また、Resource Administratorsのグループロール(役割)を開き、「Resource Admin」を選択します。
####４．ユーザーのタイムゾーンを登録します。
　管理タブ⇒ユーザーを押します。
　インストール時のConfig.phpで、「Asia/Tokyo」で指定していても、ユーザーは「America/Chicago」で登録されています。
　ユーザを選択して、タイムゾーンを「Asia/Tokyo」で登録します。
####５．アプリケーション設定を登録します。
　管理タブ⇒カスタマイズ⇒アプリケーション設定を押します。
　app.title　アプリケーションのタイトルを登録します。
　name.format　{last} {first}　を登録します。ユーザ名を表示する際に、名字　名前で表示するようになります。

#管理者の権限範囲
Application管理者,Group管理者,Resource管理者,Schedule管理者の４つの管理者権限があります。
それぞれどのようなことができるか。
####Application管理者
全ての操作が可能です。
####Group管理者
ユーザ登録、グループ登録が可能です。
####Resource管理者
リソースの登録が可能です。

####Schedule管理者
スケジュールの登録が可能です。
また、スケジュールに属したリソースの登録が可能です。

#マスタ登録
##スケジュールを登録する
スケジュール登録は、「何の範囲で予約管理するか」を登録します。
例）本社・支社１・支社２

##リソースを登録する
リソース登録は、「何を予約管理するか」を登録します。
例）会議室、車

##ユーザを登録する
ユーザ登録は、「誰が予約（管理）するか」を登録します。
例）管理者、一般ユーザ

##備品を登録する
備品登録は、「スケジュールに存在する備品」を登録します。
”スケジュール”に存在する備品であって、”リソース”に存在する備品ではないです。
例えば、
会社（スケジュール）で保有しているプロジェクターを管理するものであり、
会議室（リソース）に置いてあるプロジェクターを管理するものではないです。

会社には椅子が１００脚、プロジェクターが１台あった場合、
会議室Ａで、椅子を１０脚、プロジェクターを１台借りる
会議室Ｂで、椅子を２０脚借りる事が出来るが、プロジェクターは借りることができない。
という使い方をします。

備品には、スケジュール内の共有資産を登録すべきでしょう。
ただし、備品が借りることができるか、できないかの判断は
実際に予約してみるまで分かりません。
上記の例では、会議室Ｂを予約したタイミングで初めて分かります。
予約状況で閲覧したいのであれば、リソースとして登録するしかありません。
gulp-renameでファイル名を親ディレクトリ名にリネームする

#やりたいこと

これを

```
src/css/common/import.css
src/css/hoge/import.css
```

こうrenameしたい

```
src/css/common.css
src/css/hoge.css
```

#これでできた
gulpfile.js

```
    .pipe(rename(function (path) {
        if (path.extname) {
            if (path.dirname === '.') {
                path.dirname = '';
            }
            path.basename =  path.dirname ;
            path.dirname = '';
        }
    }))
    .pipe(gulp.dest('./src/css/'));
```


#実装にいたるまで
とりあえず「gulp rename file name to parent directory name」でGoogle検索してみたら画像のような検索結果が出てきたので、それを手当たり次第試してみる。

「お！いけそう」となったのがこちらだったので、これを改造しました。以上です。
[How can I prefix a file name with it's parent directory using Gulp? - stackoverflow](http://stackoverflow.com/questions/34948576/how-can-i-prefix-a-file-name-with-its-parent-directory-using-gulp)

![gulp rename file name to parent directory name   Google 検索.png](https://qiita-image-store.s3.amazonaws.com/0/58268/e0ab4223-e30f-f53d-90c4-a97ea1549358.png)


#余談
[path](https://www.npmjs.com/package/path)を使うという方法もあるようなのですが、dirnameが"."になってうまくとれていなかったり、他のgulpタスクが動かなくなったりしますた。
「なんでだよぉぉ...！」と思っていたのですが、結果的にgulp-renameだけで解決したので良し！
Check! Azure CLI のモードを切替える (ARM/ASMモードによって使えるコマンドが異なる)

こんにちは、オークファンの @dz_ こと大平かづみです。

Prologue - はじめに
====
別の端末に Azure CLI をインストールしたところ、 使いたいコマンド (`azure vmss`) がない！？と困ってしまいました。

原因は、モードが違ったのでした。

なお、Azure CLI のインストールについては、こちら「[Check! Mac で Azure CLI を使おう](http://qiita.com/dz_/items/ab9f686a629a0b8fbf51 "Check! Mac で Azure CLI を使おう")」をご参照くださいませ。

Azure CLI のモードについて
====

Azure CLI には以下のモードがあります。それぞれ使えるコマンドが異なるので、目的にあったモードに切り替えて使いましょう。

- ARM (Azure Resource Manager)
- ASM (Azure Service Manager)

Azure Resource Manager については、 @kazumihirose さんのブログにまとまっています。ご参考くださいませ。

- [Azure Resource Managerでリソース管理しよう その1](https://www.kzmx.net/azure/311/ "Azure Resource Managerでリソース管理しよう その1  |  デプロイ王子のクラウド寺子屋")
- [Azure Resource Managerでリソースを管理しよう その2](https://www.kzmx.net/azure/401/ "Azure Resource Managerでリソースを管理しよう その2  |  デプロイ王子のクラウド寺子屋")
- [Azure Resource Managerでリソースを管理しよう その3](https://www.kzmx.net/azure/933/ "Azure Resource Managerでリソースを管理しよう その3  |  デプロイ王子のクラウド寺子屋")
- [Azure Resource Managerでリソースを管理しよう その4](https://www.kzmx.net/azure/1066/ "Azure Resource Managerでリソースを管理しよう その4  |  デプロイ王子のクラウド寺子屋")

Azure CLI のモードを切り替える
====

```bash
# 現在のモードを確認する(この場合は `asm` が設定されている)
$ azure config list mode

info:    Executing command config list
info:    Getting config settings
data:    Setting  Value
data:    -------  -----
data:    mode     asm  
info:    config list command OK
```

```bash
# ARMモードに変更する
$ azure config mode arm

info:    Executing command config mode
info:    New mode is arm
info:    config mode command OK
```

```bash
# 再度、モードを確認する
$ azure config list mode

info:    Executing command config list
info:    Getting config settings
data:    Setting  Value
data:    -------  -----
data:    mode     arm  
info:    config list command OK
```

`azure --help` で目的のコマンドが含まれるか確認してみてください。

Epilogue - おわりに
====
最初、Azure CLI のバージョン違いか？と疑ったんですが、モードでした〜。気づけて良かったです！
Bitcodeを有効にしたらCrashlyticsでmissing dSYMsと表示される

# Crashlyticsにクラッシュログが表示されない？

Bitcodeを有効にした場合、そのままではAppStoreからダウンロードされたアプリはCrashlyticsにクラッシュログが表示されません。

通常dSYMはアーカイブした際に生成されるのですが、
Bitcodeが有効になっていると、Apple側でアプリがリコンパイルされるため、その時に新しいdSYMが生成されます。

CrashlyticsはそのdSYMを知るすべがないため、missing dSYMsと表示されるのです。

# dSYMをダウンロードする

XcodeのOrganizerからもダウンロードできますが、iTunes Connectにアクセスするのが手っ取り早いと思います。

アプリを選択し、アクティビティから該当するビルドを選択しましょう。
以下の様な画面が表示されたら、「dSYM をダウンロード」というリンクをクリックすれば最新のdSYMがダウンロードできます。

![Download_dSYM.jpg](https://qiita-image-store.s3.amazonaws.com/0/12896/ef721f86-89c4-87fd-c795-2e586376f3ce.jpeg)

# dSYMをアップロードする

Crashlyticsに表示されている警告上のリンクをクリックするか、
Fabricの設定ページからAPPS>該当アプリ>Missing DSYMsと進み、
ダウンロードしたzipファイルをそのままアップロードすれば完了です。

しばらく待てばクラッシュログが表示されるようになります。

# 参考
- [Missing dSYMs — Fabric iOS documentation](https://docs.fabric.io/ios/crashlytics/missing-dsyms.html "Missing dSYMs — Fabric iOS documentation")
初心者向けApache設定ファイルの見方

#### ドキュメントルート(Document Root)
DocumentoRoot = http://localhost/
で置き換えられる部分のこと

DocumentRoot: /var/www/aaa
Request URL: http://localhost/index.html
実際のファイル: /var/www/aaa/index.html

#### サーバルート(Server Root)
Apacheが使用する様々な設定ファイルなどが置かれているディレクトリのこと

/etc/httpd/conf/httpd.conf内で相対パス記載されているものは、サーバルート以下で探すと見つかる

#### httpd.conf
Apacheの設定ファイル。
Directive(指示という意味)という構文を使って書かれている
- ディレクティブは1行につき1つ
- 大文字小文字の区別はない

#### ディレクティブ
ディレクティブは
全体の設定値(Apache全般に関わる設定)と
範囲指定の設定値(一部のファイル、ディレクトリ、モジュールに関する設定)
の2種類に分かれる

#### モジュール
Apacheはモジュール化されているので、機能を拡張するには、コアサーバにモジュールをロードさせなければならない。
モジュールはLoadModuleディレクティブを使用して追加できる
モジュールの設定は<IfModule>を使って、対象のモジュールが存在したときだけ、設定を反映させることができる

#### セクションコンテナ
ディレクティブで範囲指定を行うために、セクションコンテナを使う
例えばディレクトリのセクションコンテナなら

```
<Directory />
       Deny from All(ディレクティブの内容)
</ Directory>
```

その他のセクションコンテナは、

|Directive|mean|
|:--:|:--|
|Directory|\ <Directory /var/www/html\>〜\</ Directory\>のように、具体的なディレクトリを指定して使う。ワイルドカードを使用することもできる|
|\<Directory<br>Match\>|正規表現で指定されたディレクトリとサブディレクトリに適用される。\<DirectoryMatch "^.*b$"\>|
|\<Files\>|ファイルを指定する|
|\<FilesMatch\>|正規表現に一致するファイルを指定する|
|\<Location\>|URLとして送られた文字列に適用される|
|\<Location<br>Match\>|URLに対する正規表現に適用される|

#### ディレクティブの中身

|Option|mean|
|:--:|:--|
|AllowOverride|.htaccessで設定を上書きする、しない|
|Options| 追加したいオプションをスペース区切りで続けていく|
|Order allow<br>,deny|アクセス制限関連|
firefoxからemacs上の辞書を引く

firefoxでwebページ中の単語を選択して、emacsにあるツールで辞書を引く。

firefoxの設定
[AppLauncher](https://addons.mozilla.org/ja/firefox/addon/applauncher/?src=userprofile) Add onをインストールする。

AppLauncherの設定
windowsの場合
[SDIC](https://www.google.com/search?q=emacs+sdic):
Name `SDIC`
Path `....\emacs\bin\emacsclientw.exe`
Arguments `-a`
`....\emacs\bin\runemacs.exe`
`-n`
`--eval`
`(sdic-describe-word "<<Shift_JIS|&text;>>")`
他のOSではemacsclientのパスを設定し、Shift_JISの部分を適切な文字コードにする。

[Lookup](https://www.google.com/search?q=emacs+lookup.el):
Name `Lookup`
Arguments
...
`(lookup-word "<<Shift_JIS|&text;>>")`
NameとArgumentsの最後の行以外は同じ。以下同様。

[Google Translate](http://qiita.com/styzo/items/72197ad6717eb9266315):
Arguments
`(google-translate-enja-or-jaen "<<Shift_JIS|&text;>>")`

[Microsoft Translator](http://qiita.com/styzo/items/a17bda8f3dc141eb3322):
Arguments
`(microsoft-translator-auto-translate "<<Shift_JIS|&text;>>")`

[Google TranslateとMicrosoft Translatorを一度に実行](http://qiita.com/styzo/items/94db6c8cc8b9bf4ea19e):
`(google-microsoft-translate "<<Shift_JIS|&text;>>")`

emacsの設定
各辞書引きツールをインストールする。

```el:init.el
(server-start)
```
firefoxで単語などを選択→右クリック→AppLauncher→SDICなどを選択。
emacs上に結果が表示される。

参考:
[firefoxで表示しているページをemacsで表示する](http://qiita.com/styzo/items/8c0b940c9425dbd5d8e8)
Zybo > Chronicles blog 34 > NeoPixel driverの設計 > 25-bit shift register

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-34-Driving-Adafruit-RGB/ba-p/466228

> The Adafruit NeoPixel uses self-clocking waveforms with transitions in different places depending on whether the bit value to be output is a one or a zero. We’ll use a 25-bit shift register to hold and output the waveform pattern for each of the Adafruit Neopixel bits. I’ve defined two constants, which are used to pre-load the shift register with the required one or zero pattern depending on the bit to be output. (See the attached code and test bench).
 
RGB24ビットの値を出力するために25-bit shift registerを使用。

1bit多いのは「出力しない」を含めるのかは未消化。
Zybo > Chronicles blog 34 > NeoPixel driverの設計 > state machine / shift register

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-34-Driving-Adafruit-RGB/ba-p/466228

NeoPixel driverの設計（振る舞い）を以下に定義している。

> 1. Read address 0 within the block RAM to determine the number of pixels in the array
1. If the number of pixels is not 0:
1. Read the next address to obtain the red, green, and blue byte values for the first pixel to form a 24-bit word value for the pixel.
1. Determine which waveform (one or zero) to output for the most significant bit of the 24-bit value read from memory.
1. Output that waveform to the NeoPixel string.
1. Increment the word-position counter (e.g. msb-1, msb-2….)
1. Determine which waveform to output for the next bit. 
1. Repeat steps 6 and 7 above until the all 24 bits have been output.
1. Check if the correct number of 24-bit pixel values has been output.
1. If more 24-bit pixel values remain, repeat steps 3 to 9 above after incrementing memory address for the next pixel.
1. If the correct number of pixels has been output, wait for the reset time to allow the pixels to latch in the pixel values.
1. Repeat steps 1 to 11.

- pixel数の読み出し
- 最初のpixelのRGB値読出し
- 出力の確認
- 以降のpixelのRGB値読出し

上記のような処理に必要なのが state machine / shift register

> - A state machine to interface with the dual-port RAM, to sequence the output bits, and to keep track of the number of pixels to be output (see my article in Xcell Journal issue 81, “How to Implement State Machines in Your FPGA”) 
- A shift register to generate the NeoPixel waveforms
Zybo > Chronicles blog 33 > [PS] to [Neo Pixel Driver] through [Dual Port RAM]

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-33-Driving-Adafruit-RGB/ba-p/461850

> Naturally, this means we need to pass data between the PS and PL sides of the device, which is part of the whole idea of this learning exercise after all. The PS-PL communication solution I have in mind is a <font color=red>dual-port RAM</font>, which allows the PS to write the pixel values via one side and the PL to read out values via the other port.

…

使用するIP coresは以下

> - AXI Interconnect – provides flexibility of AXI connections within the PL side, for this solution only one AXI master is needed.
- AXI Bram controller – This allows a for AXI interconnection to the interface to a BRAM, allowing the PS to write into BRAM attached to this controller.
- <font color=red>Dual-Port BRAM</font> – With one port connected to the AXI BRAM controller and the other to the custom NeoPixel driver.

blogにはblocking diagramも記載されている。
技術英語 > wall wart > 電源アダプタの1形態らしい

https://reference.digilentinc.com/zybo/refmanual

> An external power supply (<font color=red>wall wart</font>) can be used by plugging into to the power jack (J15) and setting jumper JP7 to “wall”.

wall wartで画像検索すると電源アダプタが出てくる。

http://eow.alc.co.jp/search?q=wall+wart&ref=sa
> 〈俗〉電源アダプター◆壁のコンセントに直接差し込むタイプ

Oxford Dictionaries Online と Merriam-Webster には掲載されていなかった。
linuxコマンドメモ

予備知識

- czvf：アーカイブ
    - -C：指定したディレクトリに移動
    - ex.  ```tar czvf /dest/backup1.tar.gz -C /src .``` 
        - /srcディレクトリに移動してから、配下のファイル群を/dest/backup1.tar.gzにアーカイブする
- xzf：解凍
    - ex.  ```tar xzf /src/backup.tar.gz -C /dest ``` 
        - /destディレクトリに移動してから /src/backup.tar.gzを解凍する




[tarコマンドについて詳しくまとめました 【Linuxコマンド集】](https://eng-entrance.com/linux-command-tar)


# サブディレクトリの全てのファイルの中で、「content」を含むファイルを探す。

```bash
find . -type f | xargs grep "conten"
```

find複数条件
拡張子がjava, jsの中から*.zzz.jsは除きたい

```bash
> ls
AAA.java  AAA.js  AAA.zzz.js  BBB.java  BBB.js  BBB.zzz.js

> find . \( -name '*.java' -o -name '*.js' \) -not -name "*.zzz.js"
./AAA.java
./AAA.js
./BBB.java
./BBB.js
```

folder01以下の全てをカレントディレクトリにコピーする

```bash
cp -r "/Users/foo/folder01" ./
```

# logもしくはlogsディレクトリ内のファイル「*.log.*」を探して、削除

```bash
find ./ -type f -path "*/log/*" -path "*/logs/*" -name "*.log.*" | xargs rm -rf 
``