OmniAICreator/Qiita-1.07M huggingface dataset:
AD2 > DTR | RTS ON|OFF回路 > IO0 | RESET > 失敗のようだ

```txt:動作確認
Analog Discovery 2 (以下AD2)
Windows 8.1 pro (64bit)
```

ブレッドボードにおいて以下の回路図を実装
http://qiita.com/hotchpotch/items/8a6fe6b8b0026ac6218e

AD2にて以下のようにした

- 3.3V
  - Supplies使用
- 0.05sごとの {RTS:H, DTR:L}, {RTS:L, DTR:H}
  - Wavegen２系統を使用
  - Phaseを180度ずらして 10Hz 出力 (0.05s + 0.05s = 0.10s: 一周期)
- IO0 / RESET の波形観測
  - Scope1 / Scope2を使用

結果、よく分からない波形になった。
一応、黄色がIO0, 水色がRESET。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/6777e1a9-e6e2-dd0b-b399-a3a7d11cd050.png)

RTS, DTRの処理はやはり ESP8266 で実装した方がいいかもしれない。
AD2 > ２つの波形生成 > Synchronized | Run all

```txt:動作確認
Analog Discovery 2(以下 AD2)
Windows 8.1 pro (64bit)
```

AD2の波形生成機能を使ってDTR, RTSの0.05秒ごとの切替を作ろうと思っている。
実際に設定した波形は以下の通り。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/aedfc25d-61ad-fc18-f132-04353730826e.png)

Phaseを両方共0度にしているので、方形波は重なるはずだがずれている(下図)。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/88723c54-ec32-f2e1-7e4a-70fcfaff11a0.png)

<hr>

以下でできた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/c6b41f62-d6b3-dfd0-d763-4b91850cbde1.png)

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/7f2c9065-f667-8a59-f728-9e6627fc2cb8.png)
Asynchronous PHP with Symfony Controller example

Asynchronous programming has become a synonym for high performance in server side web applications in the recent years. This is largely due to the rising popularity of JavaScript and Node.js, in which everything is async by default.

PHP is nowadays very capable of asynchronous operations as well. Using Icicle co-routines is a very accessible way of doing async PHP, but there is still some things that are missing from the ecosystem.

It's only a matter of time until MySQL and other I/O gets full support for non-blocking async, so it's good to take a look at how you could start using <a href="https://icicle.io/">Icicle</a> for <a href="http://symfony.com/">Symfony Framework</a> controllers today:

<pre>
<code>
&lt;?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Icicle\Coroutine\Coroutine;
use Icicle\Loop;
use Icicle\Awaitable;
class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        $messages = array();
        $routine1 = new Coroutine($this->sayHello('Baby'));
        $routine2 = new Coroutine($this->sayHello('Ginger'));
        $routine3 = new Coroutine($this->sayHello('Posh'));
        $routine4 = new Coroutine($this->sayHello('Scary'));
        $routine5 = new Coroutine($this->sayHello('Sporty'));
        $messages[] = $routine1->wait();
        $messages[] = $routine2->wait();
        $messages[] = $routine3->wait();
        $messages[] = $routine4->wait();
        $messages[] = $routine5->wait();
        Loop\Run();
        // replace this example code with whatever you need
        return $this->render('default/index.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..'),
            'messages' => $messages
        ]);
    }
    public function sayHello($name){
        $delay = rand(1,5);
        $message = array("Hello! My name is " . $name, $delay);
        $promise = Awaitable\resolve($message);
        yield $promise->delay($delay);
    }
}

</code>
</pre>

Learn more about asynchronous programming in PHP:
<a href="https://www.symfony.fi/entry/going-async-in-symfony-controllers">Going Async in Symfony Controllers</a>
Phoenix 1.1.1 -> 1.1.4 の各リリースノート

# Motivation

`1.1.0`にアップデートしてからと言うもの、Elixirに触る期間がここ数ヶ月無かった。
久々にPhoenixでなんか作るかなーというモチベーションが沸いたのでPhoenixのWebサイトを見てみたら、バージョンが`1.1.4`まで進んでた。

全くキャッチアップできてなかった上に、何も考えずにアップデートして良いものなのか悩ましかったため、さくっとリリースノート読んで追いかけてみた。

# Release Notes (v1.1.1 to v1.1.4)

- v1.1.1
    - 2015/12/27
    - Bug fixesのみ
- v1.1.2
    - 2016/01/09
    - Enhancements
        - [Cowboy] Improve log report for errors from the UserSocket
        - [ChannelTest] Add refute_push and refute_reply
        - [Router] Improve error messages when calling Router helpers without matching clauses
        - [phoenix.new] Use brunch 2.1.1 npm integration to load phoenix and phoenix_html js 
- v1.1.3
    - 2016/01/21
    - Enhancements
        - [phoenix.gen] Support --binary-id option when generating scaffold
        - [phoenix.new] Don't include Ecto gettext translations if --no-ecto is passed
    - JavaScript client bug fixes
        - Ensure exports variable does not leak
        - Fix setTimeout scoping issue for Babel
- v1.1.4
    - 2016/01/26
    - Enhancements
        - [phoenix.new] Update dependencies and solve problem where Mix may take too long to resolve deps
        - [phoenix.new] Be more conservative regarding brunch dependencies
        - [phoenix.new] Provide `local.phoenix` task
        - [phoenix.digest] Add `?vsn=d` to digested assets

# 1.1.0 -> 1.1.4 へのアップデート

何も考えずやっちゃってよさげ。

```bash
$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez
$ vi mix.exs    #（phoenixのバージョンを1.1.4に変更）
$ mix deps.update phoenix
$ mix compile
```
テスト管理ツール選定


# はじめに

現在、数多くの**テスト管理ツール**がありますが、どの管理ツールを使えばいいのか。

Excel管理では限界があり、テスト実施者が見つけたバグ内容をチケット起票。起票チケットをアサイン担当者が確認し、チケット内容をどうするかFIXした後に、テスト実施者がチケット内容を確認する。

また以下の項目が最も大事である。


```ruby:
1.情報共有を
2.修正漏れを防ぐ
3.バグの再現
```

導入するにしても、コストや今利用しているツールとの相性などもありますので。
慎重に検討することが大事です、

# テスト管理ツール

## 1.Bugzilla
Mozilla Foundationが開発し、**TestLinkと連携**もできる。
ブラウザのテストに用いられていたシステムでもあります。
http://www.bugzilla.org/

![FireShot Capture 1 - Home __ Bugzilla __ bugzilla.org - https___www.bugzilla.org_.png](https://qiita-image-store.s3.amazonaws.com/0/55160/c4cd3dac-f2c6-7482-1a63-354faa5486dc.png)


## 2.Redmine
Ruby on Railsで開発されております。チケット一覧で、担当者がどんなことをやっているかが一番わかりやすいですね。作業時間も自動で計算してくれます。Tracより使いやすい意見も。
![FireShot Capture 2 - Overview - Redmine - http___www.redmine.org_.png](https://qiita-image-store.s3.amazonaws.com/0/55160/b8818220-8a5d-c0d2-629f-35257c9d3590.png)
http://www.redmine.org/

## 3.Trac
Edgewall Softwareが開発し、こちらもTestLinkと連携もできる。
![FireShot Capture 017 - The Trac Project - trac.edgewall.org.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/94a18d43-cdc3-3777-0b20-dfa7c648947c.png)

https://trac.edgewall.org/

## 4.JIRA
Atlassianが開発。
HipChatとJIRAの連携が可能。チケットのステータスなどの通知も。
小規模チームであれば10ドル
![FireShot Capture 018 - JIRA Software - 機能 - Atlassian - www.atlassian.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/cd6cddb5-eb5b-629d-731a-52fb8115f52e.png)

https://ja.atlassian.com/software/jira/pricing?tab=host-in-the-cloud

## 5.CAT
株式会社SHIFTが開発。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/54b68f58-c6cf-4851-bbc4-789e737c16f2.png)
https://www.catcloud.net/

## 6.TestRail
Gurockが開発
![FireShot Capture 016 - テスト管理ツール TestRail - ソフトウェア品質保証 - テクマトリックス株式会社 - www.techmatrix.co.jp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/9d34f3ad-855e-4f78-2c63-322d48bc71d8.png)
https://www.techmatrix.co.jp/product/testrail/index.html

## 7.qangaroo
株式会社テクノデジタルが開発。
クラウドの管理ツールであり、Backlogとの連携できる。現在は日本語版のみの提供となっています。

https://qangaroo.jp/
オーバロードした関数をbindする

次の様なクラス(構造体)が有るとして

```cpp
struct A {
    void echo() {}
    void echo(int) {}
};
```

次のようなコードを書く。

```cpp
A a;
std::bind(&A::echo, &a);
std::bind(&A::echo, &a, 10);
```

すると

```
No matching function for call to 'bind'
```

と怒られる。


## 対応方法
次のように書けば大丈夫

```cpp
std::bind<void (A::*)()>(&A::echo, &a);
std::bind<void (A::*)(int)>(&A::echo, &a, 10);
```

または

```cpp
std::bind(static_cast<void (A::*)()>(&A::echo), &a);
std::bind(static_cast<void (A::*)(int)>(&A::echo), &a, 10);
```
ズンドコキヨシ with Scss

```scss:scss
@charset "UTF-8";
body {
  &::before {
    $generated: "";
    $zundokoLoop: true;
    $zundokoCount: 0;
    @while $zundokoLoop {
      $choise: "ドコ";
      @if random() < 0.5 {
        $choise: "ズン";
        $zundokoCount: $zundokoCount + 1;
      } @else {
        @if $zundokoCount >= 4 {
          $zundokoLoop: false;
          $choise: $choise + "キ・ヨ・シ！";
        }
        $zundokoCount: 0;
      }
      $generated: $generated + $choise;
    }
    content: $generated;
  }
}
```
（もう少し短く書けるので後で直す。）
安全に環境変数をリポジトリに入れてcap deployする方法

## はじめに
データベースの接続情報などは、ベタ書きでは無く環境変数を通じて取り扱った方が取り回しが良い気がします。

```yaml:config/database.yml
production:
  url: <%= ENV['DATABASE_URL'] %>
```

dotenvを使えばRailsのenvironmentごとに環境変数を分けることが出来、更に便利感あります。

```bash:.env.production
DATABASE_URL=mysql2://user:password@db.example.com/database
```

じゃあ、このファイルの取り扱いはどうしましょう？そのままリポジトリにプッシュする？
最重要機密なのでプッシュするのは怖いです。

ではサーバに直接置いとく？
いや、環境変数だって変更したい時があります。その時にサーバに入って更新するのは面倒です[^1]。

[^1]: Chefで環境変数を設定するようにしEncrypt a Data Bag Itemとかする方法もアリだと思いますが、ここでは取り扱いません

ということで、ここではdotenvファイルを暗号化したものをリポジトリにプッシュすると共に、その鍵をサーバに置いておき、デプロイ時にサーバの方で復号化および環境変数の反映を行う方法を示します。

## 用意するもの
- dotenv gem (環境変数反映)
- gibberish gem (暗号化, 復号化)
- capistrano gem (デプロイ)

## 手順
### 1. 鍵を用意
暗号化に使う鍵を用意します。ここではなんとなく[Chefのやり方](https://docs.chef.io/data_bags.html#secret-keys)に則って用意します。

```bash
openssl rand -base64 512 | tr -d '\r\n' > config/encrypted_data_bag_secret
```

### 2. 環境変数を暗号化、復号化するRake タスクを用意
```rb:lib/tasks/env.rake
namespace :env do
  key_path = Rails.root.join 'config', 'encrypted_data_bag_secret'

  actual_path = Rails.root.join ".env.#{Rails.env}"
  decrypted_path = actual_path.to_s + '.decrypted'
  encrypted_path = actual_path.to_s + '.encrypted'

  task :encrypt do
    cipher = Gibberish::AES.new File.read(key_path)

    decrypted = File.read(decrypted_path)
    encrypted = cipher.encrypt(decrypted)

    File.write(encrypted_path, encrypted)
  end

  task :decrypt do
    cipher = Gibberish::AES.new File.read(key_path)

    encrypted = File.read(encrypted_path)
    decrypted = cipher.decrypt(encrypted)

    File.write(decrypted_path, decrypted)
  end

  task :deploy do
    cp decrypted_path, actual_path
  end
end
```

## 3. dotenvファイルを用意
ここではProduction環境のdotenvファイルを作成します。

```bash:.env.production.decrypted
DATABASE_URL=mysql2://user:password@db.example.com/database
```

### 4. dotenvファイルを暗号化
これで.env.production.encryptedに暗号化されたdotenvファイルが作成されます。

```bash
RACK_ENV=production bundle exec rake env:encrypt
```

### 5. cap deploy時にdotenvファイルが反映されるように設定
```rb:config/deploy.rb
namespace :deploy do
  task :env => [:set_rails_env] do
    on roles(:app), in: :parallel do |host|
      info '[deploy:env] Deploy Environment'
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, 'env:decrypt'
          execute :rake, 'env:deploy'
        end
      end
    end
  end
end
before 'deploy:updated', 'deploy:env'
```

### 6. 機密情報をPushしないように設定
```bash:.gitignore
/.env.*.decrypted
/config/encrypted_data_bag_secret
```

### 7. サーバに鍵を置く
```bash
scp config/encrypted_data_bag_secret app:/var/www/app/shared/config/encrypted_data_bag_secret
```

### 8. デプロイ
```bash
bundle exec cap production deploy
```

### 9. 動作確認
お願いします ( _ _)
電子工作 > Link > トランジスタ > 2PC4081R > データシート


## 2PC4081R-T/R

[データシート](http://cache.nxp.com/documents/data_sheet/2PC4081.pdf?pspll=1)

現在所有しているトランジスタ 2SC1815 との違いはまだ良く分からない。
http://qiita.com/7of9/items/085739a9e0323ddd43c9

DTR, RTSによるESP8266のIO0, RESET動作を 2SC1815 で実行しようとしているが、結果が2PC4081R-T/Rと同等となるのだろうか。
Spotlightのインデックス再作成


さっき、いつものようにSpotlightからアプリケーションを起動しようかなと思ったのですが、なぜか該当するアプリケーションが見つからないという現象がありました。

多分、最近そのアプリケーションを更新したからかなーと思ったのですが、Spotlightから見つからないと、不便なので調べてみました。

すると、どうやら以下のコマンドを実行することで、Spotlightのインデックス再作成が行えることを確認しました。

```shell-session
$ sudo mdutil -E /
```

上記、コマンドを実行したところ、無事に問題が解決しました。
ズンドコキヨシ with Tcl

Tclの勉強


参考 http://pyomeha.blog42.fc2.com/blog-entry-6.html
参考 http://bitwalk.sitemix.jp/tcltk_intro_tcl_control.php
参考 http://wiki.tcl.tk/1549


## 実装内容

2進数で`0b11110`となった時にキヨシる。

| 値 | 文字 |
|:-:|:-:|
| 0 | ドコ |
| 1 | ズン |

ドコとズンを反対にしていると1つ目でキヨシる場合がある(0b00001)ので、こうした。

無限ループはideoneに迷惑なので上限100回とした。

chainという文字列変数はコードの残骸であるが、これはこれで後の参照時に有効かもしれないので残している。

## code v0.1
http://ideone.com/cRQ5TD

```tcl
proc random_get {} {
  return [expr int(rand()*2)]
}

proc is_zundoko { val } {
  set chk [expr ($val % 32)]
  if {$chk == 30} { # 0b11110 
    return 1
  } else {
    return 0
  }
}

set array(0) "ドコ"
set array(1) "ズン"

set idx 0

set chain ""
set val 0
while {$idx < 100} {
  set rnd [random_get]
  append chain $rnd
  set val [expr ($val*2)]
  if { $rnd == 0 } {
    puts $array(0)
    # no increment
  } else {
    puts $array(1)
    incr val 1
  }
  set judge [is_zundoko $val]
  if { $judge == 1 } {
    puts "キヨシ!"
    break;
  }
  incr idx 1
  set val [expr $val % 32]
}

#puts $val
#puts [expr $val % 32]
```

```txt:結果
Success	time: 0 memory: 15768 signal:0
ドコ
ドコ
ドコ
ドコ
ドコ
ドコ
ドコ
ドコ
ズン
ドコ
ズン
ドコ
ドコ
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ズン
ドコ
ズン
ズン
ズン
ズン
ドコ
キヨシ!
```

今回の勉強が近いうちに Vivado で発揮されるはず。
【しずおかアプリ部】活動ログ　第17回

![しずおかアプリ部2.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/8ce7f7f0-2e63-b402-3a5f-de151874e3ee.jpeg)

■開催日
２０１６年３月１２日（土）　１６：００～１８：００


■参加者
７名


■活動内容（概要）
・部員さん　静岡アプリコンテスト最優秀賞おめでとう！

・菅原プレゼン「Unityはじめるよ　～フェイスアニメーション編～」

・保坂プレゼン「Cocos2d-xで作る物理演算ゲーム ～軌跡の点線を入れてみる編～」

・部員さんオススメ GearVR体験


■活動内容（詳細）

・菅原プレゼン「Unityはじめるよ　～フェイスアニメーション編～」
　キャラクターの顔のアニメーションを表現する技法を紹介。
　キャラの顔に、表情用のポリゴンを重ねたモデルを用意。
　スクリプトからテクスチャのUV座標をずらし、アニメーションさせる。
　表情を表現するのに重要な「目」「口」を別のテクスチャにして、
　組み合わせて利用する方が、画像枚数を減らせて効率が良い。

　資料：[第17回_プレゼン資料(Unityはじめるよ～フェイスアニメーション～).pdf](http://monolizm.com/sab/pdf/第17回_プレゼン資料(Unityはじめるよ～フェイスアニメーション～).pdf)



・保坂プレゼン「Cocos2d-xで作る物理演算ゲーム ～軌跡の点線を入れてみる編～」
　チキンが飛んだ軌跡に点線を表示させる方法を紹介。
　DrawNodeを使う。
　数フレーム沖にチキンの座標を取得しDrawNodeに追加し描画。
　DrawNodeは追加した情報を毎フレーム描画し続けてしまう。
　
　資料：[第17回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム～やり直し処理を入れてみる編～).pdf](http://monolizm.com/sab/pdf/第17回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム～やり直し処理を入れてみる編～).pdf)



・部員さんオススメ GearVR体験
　TempleRunを体験!
　酔い易いが、VRとの相性が良くムコウのセカイに浸れる一本。
rex0220 テーブルヘッダ固定表示・プラグイン（販売停止）

※[rex0220 ちょっと便利なプラグイン](https://qiita.com/rex0220/items/45883f15ccd34a68b8af) の「F24 テーブルのヘッダ固定」で固定表示ができます。

kintone の縦横に長いサブテーブルは、入力・確認ともにやっかいなものです。
簡単にテーブルヘッダ部の固定表示が出来るプラグインを作成しましたのでご紹介します。
またショートカット機能によるページスクロールが便利です。

個数限定で試用版を公開中です。
[kintone テーブル固定表示プラグイン](https://rex0220.stores.jp)

#詳細画面の表示例
![tablefixed1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/8dce200a-bd11-61a0-0fea-3a77b7989b6c.png)

#編集画面の表示例
![tablefixed2.png](https://qiita-image-store.s3.amazonaws.com/0/100572/46c46b0c-c6af-14e0-1a44-98d88b9c2369.png)

#画面表示・スクロール制御機能
![tablefixed3.png](https://qiita-image-store.s3.amazonaws.com/0/100572/a93341c3-60ea-c809-4d4c-1ae5846a8832.png)

ショートカット画面スクロール機能により、横に長くて件数の多いテーブルのスクロールが簡単


![tablefixed4.png](https://qiita-image-store.s3.amazonaws.com/0/100572/694f40a8-07fc-1a64-91ea-1a727d4cac0d.png)

編集画面において、右左へマウスで移動が面倒です。
１クリックまたはショートカットで移動できます。

#ショートカット一覧
- 左端へ [ctrl+left]
- 左へ [ctrl+shift+left] 1ページ分左スクロール
- 右へ [ctrl+shift+right] 1ページ分右スクロール 
- 右端へ [ctrl+right]
- ページ先頭　[ctrl+up]
- １ページアップ [ctrl+shift+up]
- １ページダウン　[ctrl+shift+down]
- ページ最終　[ctrl+down]
- 詳細画面通常表示 [ctrl+,]
- 詳細画面ワイド表示 [ctrl+.]


矢印キーが十字に配置しているキーボードだと使いやすいと思います。

#詳細画面　表示幅の切り替え

![tablefixed5.png](https://qiita-image-store.s3.amazonaws.com/0/100572/3315b537-0cd7-a24d-5f90-a36cac95d2aa.png)

詳細画面において、テーブルは横幅が短い表示となります。
項目数が多いテーブルだと、項目幅が短く１行の長さが高くなり、参照しにくい場合があります。
これを編集画面と同様の表示幅に切り替えます。

操作内容により、使いやすいモードで表示できます。


#プラグインの追加

![tablefixed6.png](https://qiita-image-store.s3.amazonaws.com/0/100572/7edc4527-0450-12fa-4c3b-286d4927dd01.png)

#プラグインの設定
![tablefixed7.png](https://qiita-image-store.s3.amazonaws.com/0/100572/66a5e8bf-7a3c-69e9-606a-68187833424c.png)

- 詳細画面表示時の幅を指定します。（テーブルのサイズより大きな値で調整してください）
- 対象テーブルのヘッダ固定列数を指定します。
- テーブルの項目に変更があった場合は、再設定してください。

#注意事項
- Kintone の新デザインでのみ、動作します。旧デザインでは、動作しません。
- 既に、JavaScript によるカスタマイズを行っているアプリの場合、処理が競合して、エラーになる場合があります。
その場合は、該当するアプリでプラグインの使用を中止してください。
(メモ) init-loader で問題が起きた時: ひたすら分割して、問題が起きてそうなところで C-x C-e

ほぼ作業メモ。

init_loader を使っていると、新しい環境で動かない場合などが、わりと存在する。たとえば、使うOSを変えた場合とか、 Emacs のバージョンを上げた場合とか。

init_loader でその原因究明でわりと時間がとられたりなどすること。問題なのは、init.el (と、それがロードする init_loader) でこけると、最悪の場合は素の emacs で作業することになるため、効率が非常に落ちる。で、じゃあどうするか。


# やること (やってること)

問題が起きた `nn-hoge.el` を機能ごとに分割する。

# なぜ？

init_loader は、問題が発生した `nn-hoge.el` については、読み込みをスキップして、その他のモジュールはそのまま読み込んでくれる。 Fault Tolerant になる。

あとは、読み込みができなかったモジュールにいって、そのファイルのS式を上から `C-x C-e` していくと、何が原因だったかわかる。


# 最後に

もっといい方法は、他にあるかもしれない。
Serversman@VPS CentOS 7 に samba をインストールする方法

rootで下記を実行する。

    yum install samba samba-client samba-common -y

コンフィグファイルを編集する。

    cd /etc/samba/
    cp -prf smb.conf smb.conf.org
    vi smb.conf

ファイル最下部に下記を追加する。

    [Share]
    path = /var/www/html
    browsable =yes
    writable = yes
    guest ok = no
    read only = no

ファイアウォールを通す。

    firewall-cmd --permanent --zone=public --add-service=samba
    firewall-cmd --reload


下記を実行する。

    systemctl enable smb.service
    systemctl enable nmb.service
    systemctl restart smb.service
    systemctl restart nmb.service

下記コマンドでsamba用パスワードを設定する。

    smbpasswd -a root

サーバのIPアドレスに対して、Windows側からアクセスする。

接続できない場合は、SELinuxを無効化する。

    vi /etc/selinux/config
    SELINUX=disabled

サーバを再起動する。

    reboot


以上。
GyazoAPIをNode.jsで使ってみる


## gyazo

スクリーンショットを即座にWeb上にアップロードしてくれるサービスです。

ブログなどを書くときにPCの画面キャプチャを使いたいときってよくあるんですけど、通常のスクショ昨日はローカルに保存されて、それを毎回アップロードする形になり、結構手間がかかります。

gyazoだとスクショ撮影 -> URL発行がすぐなので記事書くときに重宝しています。

僕はかなり前から使っていますが、Qiitaなどで記事を書くときにすごく便利です。

![](https://i.gyazo.com/4b6f5081702e7a9ae91b6df8b0c65723.png)

## gyazoのapi

APIがあるため、プログラムから画像をgyazoにアップロードすることが可能です。

https://gyazo.com/api?lang=ja

![](https://i.gyazo.com/1593254959338f9ed18c5f954f105baa.png)

実際に使ってみましょう。

## アクセストークンを取得しましょう。

https://gyazo.com/oauth/applications のNew Applicationから新規のアプリケーションを作成しましょう。 ユーザー登録がまだの方はして下さい。

![](https://i.gyazo.com/f7410fe7e70a79fd72afcb1cf11b2fe0.png)

nameとCallbackURLを指定してSubmitしましょう。
割と適当で大丈夫です。
(api-testという名前にしました)


一覧に作成したアプリケーションが表示されます。
![](https://i.gyazo.com/1ef8523bda585d9974241fc6fac16791.png)


![](https://i.gyazo.com/283a7ce6c03b4677bc99b89d436a1147.png)

* Your access tokenの値をコピーしましょう。
![](https://i.gyazo.com/1946757c70fcda33b357fa888c0ee904.png)


これでアクセストークンの取得ができました。
(ちなみに例で出したapi-testのアクセストークンは既に死んでます)

## Node.jsから制御する

* 準備

```bash
$ mkdir gyazo
$ cd gyazo
$ npm init --yes
```

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

```bash
$ npm i --save gyazo-api
```

* 画像の用意

試しに、同じフォルダに画像を用意します。

![](https://i.gyazo.com/b8fb6825bb703e25f3d03b52cc7b8fd7.png)

例として`image.png`を用意しました。

* サンプルを記述

先ほど取得したアクセストークンを適宜プログラムに書き換えましょう。

`client.upload()`の引数にはファイルまでのパスを記載しますが、今回はapp.jsとiamge.pngが同じ階層にあるため`./image.png`と記述しています.

```app.js
'use strict'

const Gyazo  = require('gyazo-api');
const client = new Gyazo('先ほど取得したアクセストークン');

client.upload('./image.png', {
  title: "my picture",
  desc: "upload from nodejs"
})
.then((res) => {
  console.log(res.data.image_id);
  console.log(res.data.permalink_url);
})
.catch((err) => {
  console.error(err);
});

```

* 実行

```bash
$ node app.js
0b6e001f7ec88b114cba986620e07836
https://gyazo.com/0b6e001f7ec88b114cba986620e07836
```

無事にアップロードできました。


>参考
> [OAuth版Gyazo APIのNode.jsラッパー作った](http://shokai.org/blog/archives/9465)

##まとめ

めちゃ簡単に画像をアップロードできました！
gyazoをもっと活用しよう。
メインモニタが明るすぎるのでElectronで暗くしてみた


くだらないものを作ったので放流しておく。

メインモニタの性能の問題で、輝度を1番低く設定してもそんなに暗くなってくれず
周りが暗くなると目が辛くなるのでElectronで対応することにした。
と言ってもやっていることは非常に単純で

- 何もコンテンツが無い透過なアプリを1枚作る
- 画面の最前面に表示する

というくらい。
コードは最低限こんな感じ。

追記:
コメントいただいた部分と、画面サイズ周りが適当すぎたので変更しました。

```javascript:electron.js
'use strict';

const app = require('app');
const BrowserWindow = require('browser-window');

let mainWindow = null;

let windowStyle = {
    transparent: true,
    frame: false,
    alwaysOnTop: true
};

app.on('window-all-closed', () => {
    if (process.platform != 'darwin')
    app.quit();
});

app.on('ready', () => {
    mainWindow = new BrowserWindow(windowStyle);
    mainWindow.loadURL('file://' + __dirname + '/index.html');
    mainWindow.setIgnoreMouseEvents(true);
    mainWindow.maximize();

    mainWindow.on('closed', () => {
        mainWindow = null;
    });
});
```

```html:index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        body {
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, 0.4);
        }
    </style>
</head>
<body>
</body>
</html>
```

こんな感じのが
![before.png](https://qiita-image-store.s3.amazonaws.com/0/8771/dd5ad4a7-489a-fcd5-cb1d-8c57e588ee5a.png)

こうなってくれて、目に優しい
![after.png](https://qiita-image-store.s3.amazonaws.com/0/8771/a7f42d04-7f3e-1d86-af47-8f4ddb57786d.png)


マウスを使うとElectron側にフォーカスが取られるとか明るさを調整できないとかあるのを何とかしたいですね。
MySQL 5.7でrootユーザのパスワードを再設定

今回は、MySQL5.7でrootユーザのパスワードを忘れてしまったときに再設定を行う手順がこれまでのバージョンといくつか異なる部分があったので備忘録として投稿します。

# 環境
* MySQL ： 5.7.11
* CentOS : 7.1

# 1. MySQLにパスワード入力なしでログインできるよう設定
はじめに、パスワード入力なしでMySQLにログインできるようにします。

* パスワード入力なしでログインできるように **/etc/my.cnf** に **skip-grant-tables** を追加します

```op:my.cnf
[mysqld]
.
.
skip-grant-tables
.
.
```

* my.cnfファイルの修正内容を反映させるためMySQLを再起動します<br>
※ CentOS 7系の環境なので **systemctl** コマンドを利用しています

```bash
$ sudo systemctl restart mysqld.service
```

* 以下のコマンドでパスワード入力なしでMySQLにログインします

```bash
$ mysql -u root
```

# 2. rootユーザのパスワードを再設定
続いて、MySQLのrootユーザのパスワードを再設定するため、MySQLで以下のコマンドを入力していきます。

* 使うデータベースを標準のmysqlのものに変更します

```mysql
mysql> use mysql
Database changed
```

*  パスワードを再設定します

```mysql
mysql> UPDATE user SET authentication_string=password('新規パスワード') WHERE user='root';
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1
```

* 再設定したパスワードをMySQLに反映させます

```mysql
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
```

* MySQLからログアウトします

```mysql
mysql> quit
Bye
```

# 3. MySQLにパスワード入力ありでログインするように戻す
最後に通常通り、パスワード入力をしてMySQLにログインするように手順1で設定した内容を戻します。

* **/etc/my.cnf** の **skip-grant-tables** を削除します

```op:my.cnf
[mysqld]
.
.
skip-grant-tables  # 削除
.
.
```

* my.cnfファイルの修正内容を反映させるためMySQLを再起動します

```bash
$ sudo systemctl restart mysqld.service
```

* 以下のコマンドを入力し、リセットしたパスワードを入力してログインできれば完了です

```bash
$ mysql -u root -p
Enter password: 
```

# 参考文献
1. MySQL5.0以降でルートパスワードをリセットする -でじうぃき, http://onlineconsultant.jp/pukiwiki/?MySQL5.0%E4%BB%A5%E9%99%8D%E3%81%A7%E3%83%AB%E3%83%BC%E3%83%88%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%99%E3%82%8B, Online; accessed 12-March-2016.
2. MySQL 5.7.6以降でのパスワードリセット _ Sunny land of rain, https://blog.otofune.com/596.html, Online; accessed 12-March-2016.
ズンドコキヨシ with RxSwift

# 元ネタ

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>&mdash; てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160">March 9, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# RxSwiftで書いてみた

`ズン`か`ドコ`が延々と流れてくる`ズンドコ川`を作って、`scan`で直近5件の配列を作り、`[ズン,ズン,ズン,ズン,ドコ]`になるまで`takeWhile`したらできました。[RxSwift 2.2.0](https://github.com/ReactiveX/RxSwift/releases/tag/2.2.0)で動きます。

```swift
import RxSwift
import Foundation

enum ズンドコ: UInt32 {
    case ズン
    case ドコ
}

let ズンドコ川 = Observable<Int>.interval(0.5, scheduler: MainScheduler.instance)
    .map { _ in ズンドコ(rawValue: arc4random_uniform(2))! }

_ = ズンドコ川
    .doOnNext { print($0) }
    .scan([]) { Array(($0 + [$1]).suffix(5)) }
    .takeWhile { $0 != [.ズン, .ズン, .ズン, .ズン, .ドコ] }
    .subscribeCompleted { print("キ・ヨ・シ！") }
```

# 実行例

0.5秒ごとに出力されるのでズンドコ感があり、結構ドキドキします。

```
ドコ
ズン
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ズン
ズン
ズン
ドコ
キ・ヨ・シ！
```

# リズム感を増す

今のままだと`ドコ`と`キ・ヨ・シ！`が同時に出力されてしまい、少しリズム感に欠けます。`takeWhile`でストリームが終了したあとに

```swift
    .concat(Observable.never().take(0.5, scheduler: MainScheduler.instance))
```

みたいに0.5秒で終わるストリームを`concat`すると、よりよいリズムになるでしょう。

# Playgroundで実行するには

`interval` を動かし続けるために以下を追加してください。あと「RxSwift-iOS」ではなくて「RxSwift-OSX」のほうをビルドしておく必要があります。

```swift
import XCPlayground

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
```

# 他の言語の例

http://qiita.com/search?q=ズンドコキヨシ
http://qiita.com/shunsugai@github/items/971a15461de29563bf90

# [追記] 改良してみた

より自己満足感を増した最終版を作りました。
[ズンドコキヨシ with RxSwift 最終版と試行錯誤の歴史](http://qiita.com/bricklife/items/57719545f8391ff916b0)
複数の polygon 領域の結合（geojsonファイル）

こんにちは。
geojsonファイルの中の複数の polygon 領域を結合（dissolve, union, merge）させました。```ogr2ogr``` コマンド（```GDAL```）を使っています（処理結果は dissolved.json となります）。

```console
$ ogr2ogr -f GeoJSON -explodecollections dissolved.json two_rectangles.json -dialect sqlite -sql "select ST_Union(geometry) as geometry from OGRGeoJSON"
```


<img width="395" alt="dissolved.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/54617/b7120040-d0ff-a312-6e65-801e63fc1374.jpeg">

この処理前ファイルは、

```two_rectangles.json
{"type":"FeatureCollection","features":[
 {"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.4,43.9],[-98.4,44.9],[-95.5,44.9],[-95.5,43.9],[-98.4,43.9]]]}},
 {"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.9,44.4],[-97.9,45.4],[-95.0,45.4],[-95.0,44.4],[-97.9,44.4]]]}}]}
```
前回使用したコマンド結果を利用する

## 前置き
bash・zshは前回利用したコマンドを`!!`変数に記録しています.

この`!!`をevalすることで, コマンドの出力を確認しつつ出力を再利用する形でスクリプトを実行することが出来そうです.

## 例
```zsh
$ date +"%m月%d日" # => 03月12日

$ touch `!!`.txt

$ ls # => 03月12日.txt
```

rubyに限定されてしまいますが, 今回の作業ブランチで作成したspecを再実行するときに利用できます.

```zsh
$ git diff dev --name-only | grep spec | grep -v factories

$ rspec `!!`
```
【備忘録】便利なExcel関数や使い方


Excelで便利な関数や使い方を備忘録として整理する。
Excelのバージョンや使用環境によっては対応していないこともあるので予めご了承くださいませ。

-

## 1.セル内文字列の末尾n文字を削除して表示する

例）B2セルの文字列から２文字を削除した内容をB3セルに表示させる。

![kobito.1457767302.609625.png](https://qiita-image-store.s3.amazonaws.com/0/33479/bcc6176e-653f-e359-47ba-9b0b67fa5b6a.png "kobito.1457767302.609625.png")

使用する関数は下記。

`=LEFT(B2,LEN(B2)-n)`　※ nには任意の数字を指定

![kobito.1457767520.145107.png](https://qiita-image-store.s3.amazonaws.com/0/33479/41391294-a6e1-57e8-e51e-fb0a33a514d6.png "kobito.1457767520.145107.png")

-

## 2.セルの文字列を伏字化させる

例）セルに表示させたくない情報（PWなど）を伏字で表示させる。

![kobito.1458530343.398171.png](https://qiita-image-store.s3.amazonaws.com/0/33479/a2b3f33d-0692-fcfe-0446-c85102af8b81.png "kobito.1458530343.398171.png")

セルの書式設定を変更することで、伏字（****）表示に変更する。

[セルの書式設定]→[表示形式]→[ユーザ定義]を選択し、
`"********";"********";"********";"********" `と入力する。

![kobito.1458530638.964498.png](https://qiita-image-store.s3.amazonaws.com/0/33479/7e5a9058-5624-bac1-42aa-51593a90a9b9.png "kobito.1458530638.964498.png")

↓

![kobito.1458530662.137030.png](https://qiita-image-store.s3.amazonaws.com/0/33479/cd055908-ab3f-6616-a448-d329e0a5ae4e.png "kobito.1458530662.137030.png")
Windows7からWindows10へのアップデート検証（その２）

# 前回まで

その１では、七難八苦の末にWindows10検証環境の構築まで辿り着いたところまででした。

今回はアップデート後に動作確認を行った、各種機能やアプリケーションの挙動について書きたいと思います。

# Windows自体の設定や機能について

## 壁紙設定について

Windows7の時に、複数の壁紙が指定時間で切り替わる設定を行っていましたが、アップデート後は、その中の一枚が表示されたまま固定設定になってしまっていました。
設定を戻す画面には、設定で「テーマ」を検索すれば辿り着けました。
キーワードさえ思いつけば、設定画面を表示するのは簡単ですね。

## リモートデスクトップ

今まで接続していた先の設定をちゃんと記憶していて、特に設定やり直すことなくリモートにログインできました、問題なしです。

## 日本語入力

Googleの日本語入力を利用していたのですが、アップデート後に日本語が入力できなくなりました。
標準のMS-IMEは使えましたが、Googleを使いたいので、再インストールを試みたところ、機能するようになりました。

## ウインドウをドラッグ中の挙動

ドラッグして移動中もウインドウの中が表示される設定にしていたのですが、枠だけ移動する設定に変わってしまいました。
これはどこで設定するかを見つけるのにちょっと苦労したのですが、「パフォーマンス」と検索ワードに入れたら出てきました。

## 個人設定

デスクトップで右クリックすると選べる「個人設定」ですが、エラーになりました。
ディスプレイドライバやユーティリティ絡みかと思って、Radeonからダウンロードして再インストールを実行しても直らず、最終的に以下のツールで修復したら直りました。

[[設定] が起動しない、または、かわりに ストア が起動してしまう](http://answers.microsoft.com/ja-jp/windows/forum/windows_10-other_settings/%E8%A8%AD%E5%AE%9A/992c18df-263f-426a-bd5d-499f8e752fd2?auth=1)

## シャットダウン

何故かシャットダウンしても再起動になることが数回ありました。
必ずではないので、もしかしたら押し間違えの可能性もあるのですが、1回だけではないので、何かありそうです。
再起動してしまったら、ログイン前の画面から直でシャットダウンを選べば電源が落ちました。

## プリンター

印刷できなくなりました。
プリンタドライバーの再インストールを行うことにより、復旧しました。

## スキャナー

スキャンできなくなりました。
これもスキャナードライバの再インストールで復旧しました。

# アプリケーション関連

## Vivaldi

アイコンをいくらクリックしても起動しなくなりました。
別のブラウザでダウンロードして再インストールしたら起動するようになりました。

## Chrome

起動はしましたが、記憶させていたスタートアップのWEBページの情報が全部消えました。
また、SNSやQiitaなどで文字入力していると、頻繁にフリーズして全く使い物になりません。
緊急対処として、メモ帳で書いてからコピペして貼るしかなかったです。

これもChrome再インストールで直るかもしれませんが、まだやっていません。
面倒なのでとりあえずMicrosoftEdgeを使っちゃってます、乗り換えるかも？

## Thunderbird

起動してメールの受信は問題なしです。
まだメールを書く機会が無いので、作成と送信機能は不明ですが、おそらく何かあっても再インストールで復旧しそうです。

## LINE

問題なく起動して、動作しました。

## Canon MyImageGarden

プリンタ付属の写真印刷とかする為のアプリですが、問題なく使用できました。

## skype

問題なく起動して、動作しました。

## Crystal Disk Info

問題なく起動して常駐、動作しました。

## DropBox

問題なく起動して常駐、動作しました。

## VirtualCloneDrive

問題なく起動して常駐、動作しました。

# 検証結果から

以上、基本機能やアプリの挙動を一通り確認しましたが、問題はたくさん発生したものの、どれも再インストールや再設定や公式の修復ツールで復旧できました。

他にも頻繁に使わない機能やアプリがあって、すべては試せていませんが、この程度であればWindows10に乗り換えても、問題なく毎日のやりたい事をこなせそうです。

ただ万が一の保険として、Windows7のままのSSDは、消さないでしばらく保存しておこうと思います。
よほどの大問題でも発生しない限りは、Windows7に戻る事はないと思いますが。
ServersMan@VPS[CentOS 7 (64bit)]githubのssh接続方法（key作成と登録）

Serversman@VPS に root でログインする。

    cd /root

下記コマンドを実行する。

    ssh-keygen -t rsa -C "自分のメールアドレス"

いろいろ聞かれるが、すべて Enter でよい。
終わったら、作成されたキーの内容をコピペする。

    cat .ssh/id_rsa.pub

githubのサイトにログインする。

    https://github.com/

settings > SSH keys で、コピペしたキーの内容を登録する。名前は任意。
これでサーバから SSH にて github に接続できるようになる。あとは、
git clone git@github.com:*****/*****
などを実行すればよい。
RxSwiftでダブルタップ


# やったこと

[如法会](https://nyoho.doorkeeper.jp/events/41038)に参加した。「Swiftと機械学習おうちでもくもく会」だったので、RxSwiftの練習をした。
そんなわけで、RxSwiftでダブルタップの処理に挑戦した。

```swift
import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {

    @IBOutlet weak var sampleButton: UIButton!
    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        sampleButton.rx_tap
            .buffer(timeSpan: 1, count: 2, scheduler: MainScheduler.instance)
            .filter { $0.count == 2 }
            .subscribeNext { _ in
                print("Doulbe tap")
            }.addDisposableTo(disposeBag)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
```

[RxSwift で UIKit を扱う基本](http://qiita.com/usamik26/items/2bbd0b8d304ab42b2279)を参考にしてRxSwiftに入門した。

# わかったこと

主なロジックはここ。
```swift
        sampleButton.rx_tap
            .buffer(timeSpan: 1, count: 2, scheduler: MainScheduler.instance)
            .filter { $0.count == 2 }
            .subscribeNext { _ in
                print("Doulbe tap")
            }
```

`rx_tap`は`rx_controlEvent(.TouchUpInside)`のことでTouchUpInsideのイベントだけに限定されてイベントが発生するみたいであった。他のイベントでごにょりたいのであれば、これをつかえばよさそうである。

[buffer](http://reactivex.io/documentation/operators/buffer.html)は1秒に1回ほど、イベントをまとめるようにしたが、イベントが起きない場合でも1秒に1回イベントが起きてしまう。そのためfilterを掛ける必要がある。

`subscribeNext`は`.Next`なイベントがやってきたときだけ処理する内容が登録できるようだ。

`debug`を挟めば、イベントをログに挟めてとても便利であった。

# 次にしたいこと

* このままでは、同じボタンに`rx_tap.subscribeNext`で処理をしてもダブルタップ時にシングルタップのイベントを2つ創出してしまう。なんとかしたい。
* その他の[オペレーター](http://reactivex.io/documentation/operators.html)の動きも確認したい。
npmのトレンドを知る

<a id="SS">
[![スクリーンショット_2016-03-12_15_42_27.png](https://qiita-image-store.s3.amazonaws.com/0/28576/bc58eb20-c009-8ca8-985c-08468520169f.png)](http://npm-today.berabou.me/#/?_k=qtdns3)

ローレベルのAPI
---
その日に更新された[^1]npmのパッケージは、下記URLから知ることが出来ます。

* https://registry.npmjs.org/-/all/static/today.json

あるいは、下記コマンドからnpmのskimdbに直接アクセスします。

```bash:2016-03-12の場合
curl https://skimdb.npmjs.com/-/all/since\?stale\=update_after\&startkey\=1457708400000\&endkey\=1457794800000 -H 'host:registry.npmjs.org'
```

> 参考：[日ごとの人気パッケージを知りたい - watilde/npm#4](https://github.com/watilde/npm/issues/4#issuecomment-192640770)

上記のjsonには、[npmjs公式の右メニューStats](https://www.npmjs.com/package/react)のように、ダウンロード件数が存在しません。

これは、[npm/download-counts](https://github.com/npm/download-counts#readme)から知ることができます。

```bash
curl https://api.npmjs.org/downloads/point/last-day/react
# {"downloads":53949,"start":"2016-03-11","end":"2016-03-11","package":"react"}
```

以上を組み合わせて、「その日更新されたパッケージのダウンロード件数」を知ることが出来ます。

[npm-count](https://github.com/59naga/npm-count#readme)
---

> [npm-count API Reference - a npm/download-counts wrapper](https://cdn.berabou.me/npm-count/docs/)

```bash
npm install npm-count
```

前述の、ローレベルのAPIの利用を簡略化するためのモジュールを公開しました。

```js:top10.js
const npmCount = require('npm-count');

npmCount.fetchTrending('2015-03-12')
.then((trending) => {
  // sort by downloads desc, name asc
  const top10 = trending
  .sort((a, b) => {
    if (a.downloads > b.downloads) {
      return -1;
    }
    if (a.downloads < b.downloads) {
      return 1;
    }
    if (a.name.toLowerCase() > b.name.toLowerCase()) {
      return -1;
    }
    if (a.name.toLowerCase() < b.name.toLowerCase()) {
      return 1;
    }

    return 0;
  })
  .slice(0, 10)
  .map((pkg) => (
    {
      name: pkg.name,
      downloads: pkg.downloads,
    }
  ));

  console.log(top10);
});
```

`.fetchTrending`は、第一引数を前述のskimdbの引数に変換します（必須です）。

```bash
node top10.js
# [ { name: 'set-immediate-shim', downloads: 47693 },
#   { name: 'nth-check', downloads: 29911 },
#   { name: 'events-to-array', downloads: 12687 },
#   { name: 'jszip', downloads: 6314 },
#   { name: 'rework-plugin-function', downloads: 2835 },
#   { name: 'uglifyjs', downloads: 1207 },
#   { name: 'union-find', downloads: 1082 },
#   { name: 'strip-debug', downloads: 898 },
#   { name: 'ember-backoff', downloads: 625 },
#   { name: 'jasmine-focused', downloads: 349 } ]
```

`.fetchLastDay`から、`api.npmjs.org`の最終日を取得できるので、`.fetchTrending`デフォルト値を得たい場合は利用して下さい。

```js
const npmCount = require('npm-count');

npmCount.fetchLastDay()
.then((lastday) => {
  console.log(lastday);// 2016-03-11
});
```

[npm-today.berabou.me](https://github.com/beraboume/npm-today.berabou.me#readme)
---
`npm-count`にGUI[^2]を施したものが、<a href="#SS">冒頭のスクリーンショット</a>で載せたWEBアプリケーションです。

殆ど１ページ構成で、リンクはnpmjsへ移動します。移動済みのモジュールは灰色になります（目視の巡回を効率化させるため）。
`filter by name, authors, keywords...`は検索欄です。入力後、エンターキーで結果をフィルタリングします。
リソース削減のため、500位以降は無視、jsonはgzipで保存しています。

issueの報告やPRは`npm-count`ともども受け付けていますので、よろしくお願いします。

[^1]: UTC一日前の集計結果です。
[^2]: `React`+`Material-UI`+`Redux`+`ReactRouter`など…サーバーは`express`+`mocha`、クライアントは`webpack-dev-server`で開発を行いました。
formで異なるテーブルに値を格納するやり方　[ 自分用メモ ]

1. アソシエーション有りの場合
参考サイト
http://ruby-rails.hatenadiary.com/entry/20141208/1418018874<br><br>

2. アソシエーション無しの場合
参考サイト
http://easyramble.com/rails-fields-for.html<br><br>

他、<br>Rails4アプリケーションプログラミング P127~<br>Rails ドキュメントhttp://railsdoc.com/references/fields_for
【備忘録】Snapmirrorコマンド


NetAppの機能の1つである `Snapmirror` 。
この機能を使用する時に使うコマンドについて整理（キュレーション）する。

随時、追記していきます。

-

## ライセンス確認

````コマンド
ontap> license
````

## Snapmirrorのステータス確認

````コマンド
ontap> snapmirror status
````
plantuml と Google Document で設計書を描く 

# 動機
ソフトウェア設計にUMLはつきもの。
ここで図と設計文書をどう描くか　＝　UMLを描くエディタ・文書化するツールの組み合わせ　がとても重要。
ベストプラクティスが未だ見つけられていない。

## PlantUML
コードベースでUMLを描けるツール。JAVAでできてる。
http://ja.plantuml.com/

UMLを描くツールでは、VISIO、astah、Excel、PowerPointなど使ってきた。
が、コードで図が描けるという快適性が今のところ最強。

なので、plantimlを使いたい。


# PlantUML Gizmo

https://chrome.google.com/webstore/detail/plantuml-gizmo/gkhhgpmifdpiagjagcbconfnnhkmomnp
GoogleDocs 上で plantuml のプレビュー、挿入を可能にするプラグイン。
GoogleDocsに挿すので、アカウントが共通ならブラウザまたいで使用可能（FireFox、Chromeで試した）。

## なぜPlantUML Gizmoが良いか
基本的に設計文書としては、以下の要求がある。これらを満たせるのがスバラシイ。
- 文書＋図がドキュメント内で閉じた方が読みやすい。図は別ファイル参照とかFackin
- 図を書き換える度に別なエディタで編集が手間。そもそも元ファイルが共有されてなくて編集できないなんてことも。
さらにpalntumlに関して
- plantumlのプレビューができる
- plantumlのテンプレが選べる
- 挿入済みの図を編集できる

## できないこと
GoogleDocs だし、アドオンもPlantUMLのサイトにアクセスするのでオフラインでは使えない。
あと、GoogleDocsよく知らないけど、バージョン管理とかはできないのかな。

## 使い方
チュートリアルがある。
https://www.youtube.com/watch?v=sXshJ4BPJt8
### 導入
使用したいアカウントで
https://chrome.google.com/webstore/detail/plantuml-gizmo/gkhhgpmifdpiagjagcbconfnnhkmomnp
からアドオンをインストール。

### 使い方
Add-ons から Start を選択。
<img width="364" alt="スクリーンショット 2016-03-12 15.36.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/54261/fce5c839-b8cf-e1a1-abed-5ecf10b9f610.png">

テンプレが選べる。よくコマンドを忘れる自分にはかなり便利。

<img width="280" alt="スクリーンショット 2016-03-12 15.38.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/54261/db591159-901f-f116-556e-210151b63c5f.png">

編集中にプレビューされる

<img width="292" alt="スクリーンショット 2016-03-12 15.40.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/54261/2963d4d2-173d-3f85-892b-5162008ed96a.png">

書いたら、Insertでドキュメントに挿入。
図を選択してEdit Selected を選ぶと、編集もできる。

<img width="451" alt="スクリーンショット 2016-03-12 15.42.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/54261/ff1a8a21-ef40-4c41-085d-2565514e26e3.png">

plantuml自体のコマンド等は公式サイト参照。
http://plantuml.com/

# まとめ

これで、設計文書内でUMLの編集ができるようになった。
まだざっくりとしか試していないので、運用してからの使用感等あったら追記したいと思います。
Serversman@VPS CentOS 7 (64bit)を日本語設定にする方法

下記コマンドを実行する。

    localectl status

初期値は下記のようになっている。

    System Locale: LANG=C

使える日本語を表示

    localectl list-locales | grep -i ja

設定を変更

    localectl set-locale LANG=ja_JP.utf8

変更を反映

    source /etc/locale.conf

設定が変わったことを確認

    localectl status

以上
[WPF]ScrollViewerが入れ子のときマウススクロールが効かない問題への対処法

## 問題

ScrollViewerの中にScrollViewer（またはScrollViewerを内包するListViewやDataGrid)があるとき、マウススクロールが意図した通りに行われません。



## 原因

入れ子になったScrollViewerの下位ScrollViewerにMouseWheelEventが常にHandleされているため、上位ScrollViewerにスクロールイベントが到達しないことが原因です。



## 対処法

### その１：TemplateからScrollViewerを除外する

下位にあるScrollViewerを使った要素からScrollViewerを取り除くことで対処する方法です。

```xml:xaml
<ListView>
    <ListView.Template>
        <ControlTemplate>
            <ItemsPresenter/>
        </ControlTemplate>
    </ListView.Template>
    ...
</ListView>
```

### その２：MouseWheelEventを強制的に発生させる

上位ScrollViewer（またはMouseWheelEventを扱う要素）がMouseWheelEventを捕捉できるように下位のScrollViewerより先にMouseWheelEventを捕捉し、改めてイベントを送出します。

```csharp:Behavior

public sealed class BubbleScrollEvent : Behavior<UIElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.PreviewMouseWheel += AssociatedObject_PreviewMouseWheel;
    }

    protected override void OnDetaching()
    {
        AssociatedObject.PreviewMouseWheel -= AssociatedObject_PreviewMouseWheel;
        base.OnDetaching();
    }

    void AssociatedObject_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        e.Handled = true;
        var e2 = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
        e2.RoutedEvent = UIElement.MouseWheelEvent;
        AssociatedObject.RaiseEvent(e2);
    }
}
```

```xml:xaml
<SomePanel>
            <i:Interaction.Behaviors>
                <viewsCommon:BubbleScrollEvent />
            </i:Interaction.Behaviors>
</SomePanel>
```

### 注意点

DataGridの場合はTemplateを書き換えるとRowHeaderがなくなってしまい表示が崩れます。
これは対処法その２を使うことで回避可能です。



## 参考

ここに掲載したコードは下記リンクのページから引用しています。

http://stackoverflow.com/questions/31633680/how-to-prevent-listview-from-stealing-scroll-activity-on-datagrid-parent
Raspberry Pi セットアップマニュアル（備忘録）Part 2

今後の再セットアップやメンテ時に役立つよう、作業記録をマニュアル化したいと思い作成した自分用の備忘録メモ的な記事です。
##**Raspberry Pi セットアップマニュアル（備忘録）Part 2**
#####**〜初期設定の変更、日本語環境のインストール〜**
-----
######使用機種・環境（2016年3月現在）
```
Raspberry Pi 2 B+
OS:Raspbian Jessie（NOOBS 1.8.0にてインストール）
microSDカード：32GB（class10）
USBキーボードとUSBマウス（インストールおよび初回起動時に必要）
USBメモリ(16GB) （外付けhdd的用途で使用予定）
micro USBケーブルとUSB電源アダプタ
※電源アダプタはスマホ充電用のものとかでOK。あるいはPCのUSB端子でもいける。

母艦PC／Mac mini (Late2012)
OS:OS X El Capitan 10.11.3
```
-----
前回 Part 1 ではインストールから初回起動まででした。
今回はそのまま引き続き初期設定を行います。

-----

###初期設定の変更
メニューバー左端の _Menu > Preference > Raspberry Pi Configuration_ を立ち上げる。

ウィンドウ内の各タブの項目を下記のように設定変更する。

System

> Password: ユーザーパスワードを変更する

> Boot: To CLI にする(後々マウスもキーボードも外して母艦PCから操作するためデスクトップを立ち上げる必要ないため)

> Auto login: Login as user 'pi' のチェックマークを外して無効にする

Interfaces

> SSH: と Serial: が最初から Enable になっているはず。SSH は必須になるのでもし Diable だったら Enable に変更。その他の設定は必要に応じて任意で。

Performance

> Overclock: High(1000MHz) に変更した。後々拡張するため。

Localisation

> Locale: ja(Japanese) / JP(Japan) / UTF-8

> Timezone: Japan (Asia / Tokyo が設定される)

> Keybord: Japan / Japan

> WiFi Country: (WiFi機器を接続する時でいいので、今は何もしない)

その他、ここで設定しなかった項目はいつでも後で必要に応じて任意で設定。
最後に右下の OK を押すと 再起動を促されるので Yes

----------
###**CLIからデスクトップ起動**
```
raspberrypi login: pi
Password:

pi@raspberrypi:~$ startx
```

デスクトップが立ち上がるが、日本語環境が完全でないため文字化けする。
ゴミ箱アイコンの表示はトウフ3文字で、メニュー項目を見ても全てトウフ文字になっている。

###**日本語環境のインストール**

LXTerminal を立ち上げる。
まず、念のために update と upgrade を実行　(※とても時間がかかる場合あり）

```
pi@raspberrypi:~$ sudo apt-get update
pi@raspberrypi:~$ sudo apt-get upgrade
```
日本語フォントと日本語環境 ibus-anthy をインストール。

```
pi@raspberrypi:~$ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

pi@raspberrypi:~$ sudo apt-get install ibus-anthy
```
再起動
```
pi@raspberrypi:~$ sudo reboot
```

再度デスクトップに入る

```
raspberrypi login: pi
Password:

pi@raspberrypi:~$ startx
```

ゴミ箱アイコンの下がちゃんと「ゴミ箱」と表示されればOK。

----------

これで初期設定の変更、日本語環境も整いました。

次回Part3で、母艦MacからSSH接続でコントロールするための設定をします。
RGBチャンネル毎にNL-meansを実行

NL-Means (NLM)でカラー画像を雑音除去する際の注意点に気がつきました。OpenCV2のfastNLMeansDenoigingColored()で、修善寺桜とメジロの写真の雑音除去を行った所、桜の花弁やしべの色が飛んでしまいました。

原因を考えてみたのですが、おそらくfastNLMeansDenoigingColoredの内部ではRGBを輝度値(L)に変換した後、パッチ間の類似度を計算し、RGBすべてのチャンネルに対して共通の重みで平滑化を行っているのではないかと考えました。その結果、花弁やしべの色がパッチ間の類似度の計算にあまり反映されずに色が薄まってしまったと考えられます。

そこで、RGBそれぞれのチャンネルに対して独立にNLMを適用すればこの問題を回避できるのはないかと考え実験してみました。

![fig.png](https://qiita-image-store.s3.amazonaws.com/0/114365/31dd54ee-13ec-3a0e-6114-bb70ee8b0820.png)

色チャンネル毎にNLMを適用することで花弁やしべの色を保存しながら雑音が除去できているのがわかります。

ソースコードは以下です。
https://github.com/kibo35/restoration/blob/master/NLM/nlm_for_each_color.py

（追記）
ktgw0316様、ご指摘ありがとうございました。デバッグして頂いたコードで退色の問題が解決されることを確認いたしました。

fastNLMeansDenoigingColoredで処理後の画像が退色したように見えたのは，第二引数のdstが抜けていたためでした。
Java8 Stream でズンドコ

Java8 ストリーム脳だけど Window がスマートに書けない苦しみ…
最終出力は手抜きになったけど大丈夫だ問題ない

```java
public class ZundokoCheckerWithJava8Stream {
	public static void main(String[] args) {
		final Window<String> window = new Window<>(5);

		Stream.generate(() -> Math.random() <= 0.5 ? "ズン" : "ドコ")
			.map(window::next)
			.peek(System.out::println)
			.filter(z -> z.isPresent() && String.join(",", z.get()).equals("ズン,ズン,ズン,ズン,ドコ"))
			.findFirst();
		System.out.println("キ・ヨ・シ！");
	}

	public static class Window<T> {
		final int size;
		final List<T> elements;

		public Window(int size) {
			this.size = size;
			elements = new ArrayList<>();
		}

		public Optional<List<T>> next(T element) {
			while (wakuwoakeru())
				;
			elements.add(element);
			return peek();
		}

		private boolean wakuwoakeru() {
			if (elements.size() < size) {
				return false;
			}

			elements.remove(0);
			return true;
		}

		public Optional<List<T>> peek() {
			if (elements.size() < size) {
				return Optional.empty();
			}
			return Optional.of(elements);
		}
	}
}
```




```text:出力例
Optional.empty
Optional.empty
Optional.empty
Optional.empty
Optional[[ドコ, ドコ, ドコ, ドコ, ズン]]
Optional[[ドコ, ドコ, ドコ, ズン, ズン]]
Optional[[ドコ, ドコ, ズン, ズン, ズン]]
Optional[[ドコ, ズン, ズン, ズン, ドコ]]
Optional[[ズン, ズン, ズン, ドコ, ズン]]
Optional[[ズン, ズン, ドコ, ズン, ズン]]
Optional[[ズン, ドコ, ズン, ズン, ズン]]
Optional[[ドコ, ズン, ズン, ズン, ズン]]
Optional[[ズン, ズン, ズン, ズン, ズン]]
Optional[[ズン, ズン, ズン, ズン, ドコ]]
キ・ヨ・シ！
```
PHPでテキストファイルを扱う場合のtips

# PHPで標準入力とファイル指定両方扱う

```php

if ($argc<2) {
	// 標準入力からデータを取得
	$file='php://stdin';
} else {
	// 最初のパラメータにファイルを指定した場合
	$file=$argv[1];
}
main($file);

function main($file)
{
	$fp=fopen($file,'r');
	if (! $fp) {
		echo "can't open ($file)\n";
		return;
	}
	while(($ln=fgets($fp))!==false) {
		$ln=chop($ln);
		proc($ln);
	}
}
```

# 複数の区切り文字を分割(multiexplode)
 ※ PHPドキュメントそのまま

```php
function multiexplode ($delimiters,$string) {

    $ready = str_replace($delimiters, $delimiters[0], $string);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
}
$val = multiexplode(array("=","[","]",",","（","）"), $line);
```
1つもストックされてないQiita記事を見つける

# 方法
[Qiitaの検索ページ](http://qiita.com/search)で以下のように検索します。
結果は[こちら](http://qiita.com/search?q=stocks%3A%3C1&sort=rel)。

```text:
stocks:<1
```

以下のようにタグを指定することもできます。

```text:
stocks:<1 tag:JavaScript
```

また、大小を逆にしてストック数順に並べると、ランキングみたいなものも見れます。

```text:
stocks:>0 tag:JavaScript
```

# 最後に
全部ストックすればみんな幸せなんじゃないですかね（適当）
ccchartでヒートマップを描いてみる

また長いこと投稿していなかったのですが、尊敬する及川さんがQiitaに入られたので記念カキコ。Qiitaの益々の発展を祈念いたします。

さて、最近　[github の /toshirot/ccchart](https://github.com/toshirot/ccchart) に置いてから多少マメに更新している [ccchart](http://ccchart.com/)  の v1.12 でヒートマップを実装しました。

こんな感じです。

![ccchart heatmap](https://camo.githubusercontent.com/78e5158564cc88e1a21dcfc8ffe15917e080d2fa/687474703a2f2f636363686172742e636f6d2f746573742f686561746d61702f312e31312e303762342d686561746d61702d6d6b352e706e67)

あるいは、写真を埋め込んでこんなこともできます。

![ccchart heatmap photo](https://camo.githubusercontent.com/7dfba7eefe664e3b0bccbc059d2811eb624bd9ac/687474703a2f2f636363686172742e636f6d2f746573742f686561746d61702f70686f746f2e706e67)

スクリプトのサンプルはたとえばこんなです

```lang:html
<script src="http://ccchart.com/js/ccchart.js" charset="utf-8"></script>
<canvas id="hoge"></canvas>

<script>
var chartdata1 = {

  "config": {
    "title": "heatmap",
    "type": "heatmap",
    "bg":"#eee"
  },
  "data":[
    ["X", 0, 48, 48, 228, 210, 177, 203, 207, 188, 191, 206, 206, 184, 195, 148, 212, 212, 210, 191, 214, 221, 196, 202, 200, 205, 196, 214, 195, 214, 165, 183, 175, 170, 187, 168, 167, 162, 166, 170, 168, 181, 173, 156, 149, 132, 167, 158, 168, 153, 107, 133, 164, 97, 114, 171, 187, 162, 155, 150, 175, 178, 170, 149, 168, 149, 184, 168, 166, 170, 185, 168, 160, 162, 166, 182, 181, 163, 184, 155, 140, 147, 171, 184, 156, 153, 194, 185, 178, 180, 183, 153, 192, 179, 189, 186, 208, 187, 184, 187, 175, 170, 200, 235, 166, 219, 159, 171, 168, 188, 188, 171, 192, 166, 164, 158, 173, 163, 182, 169, 163, 157, 182],
    ["Y", 0, 45, 144, 137, 137, 121, 122, 133, 126, 121, 119, 140, 129, 115, 99, 132, 130, 127, 123, 134, 135, 139, 130, 128, 129, 127, 131, 128, 126, 116, 121, 112, 107, 123, 107, 111, 107, 117, 116, 107, 114, 120, 108, 99, 85, 106, 102, 112, 95, 75, 88, 96, 69, 70, 100, 112, 102, 90, 99, 117, 114, 96, 96, 102, 103, 97, 103, 103, 112, 102, 109, 123, 103, 108, 111, 91, 94, 102, 104, 86, 91, 108, 114, 110, 102, 114, 116, 103, 113, 120, 98, 115, 110, 114, 118, 130, 114, 130, 115, 106, 109, 130, 131, 112, 130, 100, 114, 109, 115, 115, 115, 110, 101, 107, 111, 106, 109, 107, 104, 101, 95, 106]

  ]
};

ccchart.init("hoge", chartdata1);
</script>

```

キャンバス hoge に chartdata1 で指定したデータを表示しています。data の X と Y は位置情報です。

jsfiddleで上記コードをいじって表示の変化をみたい方は下記でどうぞ。
http://jsfiddle.net/UkdvS/588/

上の椅子の写真のように、もし、連続する画像の差分データを xy で渡してやれば写真の上にヒートマップを表示できるので、たとえば「防犯カメラの動体検知」などの表現も可能です。

もちろん、リアルタイムが売りのccchartなので、下記のリンクのようにリアルタイム受信して刻々と変化するヒートマップを見ることもできます。

http://ccchart.com/index.htm#101

この場合、データを送り出す WebSocketサーバー が別途必要になりますがその辺は「[ccchartへWebSocketから流し込む](http://qiita.com/toshirot/items/a461cdc8c2079d9b8530)」の記事などをご覧ください。


ちなみにバージョンは現在 ccchartは v1.12 になってまして update の履歴はこんな感じです。
http://ccchart.com/update.htm

最近は github も一応使わせて頂きつつあって ccchart はこの辺で見れます。
https://github.com/toshirot/ccchart

という感じで、まぁ、記事というより ccchart の暫定メモみたいなものになってしましましたが、何よりも Qiita は使いやすいなぁと再確認するなうでありました＾＾