OmniAICreator/Qiita-1.07M huggingface dataset:
PowerShell で、SharePoint Online の web サイトの情報を書き出してみた

# 目的
SharePoint Online では、Client Side Object Model(CSOM)を使って、
色々な情報を抜き出したり、書き込んだりすることができる。
これを使うと、簡単に管理作業が出来るので、これから色々なスクリプトを書いてみる。 

CSOMに関することは、サポートチームのblogで、
https://blogs.technet.microsoft.com/sharepoint_support/2014/10/19/sharepoint-online-powershell/

# 事前準備

以下のインストール

- PowerShell Ver 3.0 以上
- SharePoint Server 2013 Client Components SDK  
（ https://www.microsoft.com/en-us/download/details.aspx?id=42038 ）


# サンプル

設定する項目は、以下の二か所

\$SiteCollectionUrl ：サイトコレクションのURL
\$Account ：管理者権限のアカウント

```PowerShell
 # Read CSOM
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null

# SiteCollection URL 
$SiteCollectionUrl = "https://tenant-name.sharepoint.com" 
# $SiteCollectionUrl = "https://tenant-name.sharepoint.com/sites/subsite" 

# Account
$Account = "administratorsName@tenant-name.onmicrosoft.com" 
$SecurePassword = Read-Host -Prompt "Enter Your Password." -AsSecureString

# Create Credential
$Credential = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Account, $SecurePassword) 

# Create Context
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteCollectionUrl)
$Context.Credentials = $credential

# Create Web object
$Context.Load($Context.Web)
$Context.ExecuteQuery()

# Output 
Write-Host "Web Title : " $Context.Web.Title
Write-Host "Web Description : " $Context.Web.Description
Write-Host "Web Language : " $Context.Web.Language
Write-Host "Web WebTemplate : " $Context.Web.WebTemplate

# Dispose Context
$Context.Dispose()
```

# 参考
ClientContext クラス
https://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.client.clientcontext.aspx
ClientContext.Web プロパティ 
https://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.client.clientcontext.web.aspx
Goの構造体にメタ情報を付与するタグの基本

最近goを書き始めたので恐れず言語の基本的な内容を書きます。

構造体のタグについてです。
goの構造体には[タグ](https://golang.org/pkg/reflect/#StructTag)によって実行時に参照可能なメタ情報を付与することができます。

## タグの記述と取得

タグは文字列かRAW文字列によって記述し、`reflect`パッケージを利用して取得します。

```go
package main

import (
	"fmt"
	"reflect"
)

type Organization struct {
	Name     string `label:"名前"`
	Language string `label:"言語"`
}

func main() {
	organization := Organization{
		Name:     "gumi",
		Language: "Elixir",
	}

	fmt.Println(reflect.TypeOf(organization).Field(0).Tag)  // -> label:"名前"
	fmt.Println(reflect.TypeOf(organization).Field(0).Tag.Get("label"))  // -> 名前
}
```

文字列でもRAW文字列でも記述可能ですが、タグに名前を付ける場合は記述の中にダブルクォーテーションを書くことになるのでRAW文字列を使うほうが多いと思われます

```go
type Organization struct {
	Name     string "名前"
	Language string "言語"
}
```

```go
type Organization struct {
	Name     string `label:"名前"`
	Language string `label:"言語"`
}
```

## 複数のタグ情報の記述

空白によって区切ることで複数の情報を付与することができます

```go
type Organization struct {
	Name     string `label:"名前" json:"name" validate:"required"`
	Language string `label:"言語" json:"language" validate:"required"`
}
```

```go
tag := reflect.TypeOf(organization).Field(0).Tag
fmt.Println(tag.Get("label"))  // -> 名前
fmt.Println(tag.Get("json"))  // -> name
fmt.Println(tag.Get("validate"))  // -> required
```

ここで注意したいのは、空白で区切られるため`:`と`"`の間に空白を空けてはいけないということです。あたり前のことなのですが空白を空けてしまうとタグ名として認識されなくなってしまいます。

構造体を記述するときや他の言語でobject・map・dictなどを記述するときに`:`のあと空白を空けることに慣れていると誤ってタグの名前と値の間に空白を入れてしまいがちです。

## タグの用途

### 例1) json

`json`パッケージでは構造体をjson形式に変換する際`json`タグを参照してキー名として利用します。

```go
type Organization struct {
	Name     string `json:"organization_name"`
	Language string
}
```

```go
organization := Organization{
    Name:     "gumi",
    Language: "Elixir",
}

j, _ := json.Marshal(organization)
fmt.Println(string(j))  // {"organization_name":"gumi","Language":"Elixir"}
```

### 例2) Google App Engine で Cloud Datastore を使う

Google App Engine で Cloud Datastore を使うときは`datastore`タグでプロパティ名と構造体のそれぞれの情報を紐付けます。

```go
type Organization struct {
	Name     string `datastore:"Name"`
	Language string `datastore:"Lang"`
}
```

### 例3) バリデーション

[gopkg.in/go-playground/validator.v9](https://github.com/go-playground/validator)
このバリデーションライブラリを使っていますが、こちらのライブラリでは構造体のタグでバリデーションを指定できます。おそらく他のライブラリでも同じような実装になるのではないかと思います。

```go
type Organization struct {
	Name     string `validate:"required"`
	Language string `validate:"required"`
	Email    string `validate:"required,email"`
}
```

```go
organization := Organization{
    Name:     "gumi",
    Language: "Elixir",
    Email:    "test@example.com",
}

err := validator.New().Struct(&organization)
fmt.Println(err)  // -> <nil>
```

## 注意点

### 不要なところに空白を入れない

先程も書きましたが、不要な箇所に空白を入れると不具合の原因になります。また、バリデーションの例のように`,`区切りの値を入れる場合も空白を入れることはできません。一応バックスラッシュでエスケープもできるようですが、そうする意味は無いので空白を入れずに書くようにした方がいいと思います。

### コンパイル時にエラーを発見しにくい

タグは文字列で指定するので、goの構文的に問題がなければコンパイル時にエラーにならずに実行時に不具合に気づくので、typoや先ほどの空白に気をつける必要があります。
【sass】sassの使い方

# sass とは
sass では css が簡単に書けます。
sass ファイルは css に変換されます。

# sass の記法
###ネスト
sass では、{}で囲まれた状態をインデントで表します。

```
.title {
  color: gray;
}
```
```
.title
  color: gray
```

### ネストされたブロック

```
.body .title {
  color: gray;
}
```
```
.body
  .title
    color: gray
```

### &記法

```
.wrapper {
  width: 100%
}

.wrapper_inner {
  width: 90%;
}
```
```
.wrapper
  width: 100%
  &_inner
    width: 90%
```

### 変数

```
$gray: #6f7589

.title
  color: $gray
```

# その他 ccs3の機能で便利なもの
### 計算

```
width: calc( 100% - 10px )
```
NSOperationを使って複数のNCMBリクエストを実行し、メインスレッドに戻す方法

mBaaSで、複数オブジェクト操作APIの提供終了に伴い、for文等で複数オブジェクト操作を行った際に、処理が完了した後にメインスレッドに戻す必要性が出てきました。
http://info.biz.nifty.com/mb/2017/03/api-2.html

今回は、NSOperationを利用してその処理を行ってみようと思います。

# NSOperationのサブクラスを作成する

```objc:RequestOperation.h
#import <Foundation/Foundation.h>
#import <NCMB/NCMB.h>

@interface RequestOperation : NSOperation

@property (nonatomic) NCMBObject *object;
@property (nonatomic) BOOL isExecuting, isFinished;

- (id)initWithObject:(NCMBObject *)object;

@end 
```

```objc:RequestOperation.m
#import "RequestOperation.h"

@implementation RequestOperation

- (id)initWithObject:(NCMBObject *)object {
    self = [super init];
    if (self) {
        _object = object;
    }
    _isExecuting = NO;
    _isFinished = NO;
    return self;
}

- (void) start {
    self.isExecuting = YES;
    // データストアへの登録を実施
    [self.object saveInBackgroundWithBlock:^(NSError *error) {
        if (error){
            // 保存に失敗した場合の処理
        } else {
            // 保存に成功した場合の処理
        }
        self.isExecuting = NO;
        self.isFinished = YES;
    }];
    // 並列実行モードで動かす
    do {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                                 beforeDate:[NSDate distantFuture]];
    } while (self.isExecuting);
}

@end

```
# 処理を実行するクラスでの処理

```objc:プロパティ
@property (nonatomic) void (^finishedBlock) ();

```

```objc:処理を実行するメソッド内での処理
    NSOperationQueue* operationQueue = [[NSOperationQueue alloc] init];
    // NSOperationQueueのカウント数の監視を登録
    [operationQueue addObserver:self
                          forKeyPath:@"operationCount"
                             options:NSKeyValueObservingOptionNew
                             context:nil];
    
    for (int i = 0; i < 5; i++) {
        // testクラスのNCMBObjectを作成
        NCMBObject *object = [NCMBObject objectWithClassName:@"test"];
        // オブジェクトに値を設定
        [object setObject:@"value" forKey:@"key"];
        // リクエストの作成
        RequestOperation *operation = [[RequestOperation alloc] initWithObject:object];
        // 処理の開始
        [operationQueue addOperation:operation];

    }
    
    // 処理が完了した時のblock
    self.finishedBlock = ^(){
        // メインスレッドに戻ってきた時に行う処理
    };

```



```objc
// NSOperationQueueのカウント数に変化があると呼ばれる
- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {
    
    // operationCountが0になり処理が完了した時にメインスレッドでblockを実行する
    if ([keyPath isEqualToString:@"operationCount"]) {
        if ([[change objectForKey:@"new"] intValue] == 0) {
            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                self.finishedBlock();
            }];
        }
    }
}
```
# waitUntilAllOperationsAreFinishedメソッドについて
waitUntilAllOperationsAreFinishedメソッドを利用して、キューに入っているオペレーションが完了するのを待つ方法があります。
しかし、NCMBのsaveInBackgroundWithBlockはNSURLConnectionに[NSOperationQueue mainQueue]を設定しているため、waitUntilAllOperationsAreFinishedを利用して完了するのを待っても処理が実行されません。
そのため、今回はKVOを利用する方法になっています。
【Rails】haml の書き方

# hamlについて
haml だと html が簡潔に書けます。
haml ファイルが html に変換されます。

# hamlの記法
haml と erb の対応を書きます。
上が erb 、下が haml です。

### ネスト
haml では、<></>で囲まれている状態をインデントで表します。

```erb:erb
<div class="wrapper">
  <div class="inner">
    <p>
      インナーです。
    </P>
  </div>
</div>
```
```haml:haml
.wrapper
  .inner
    %p
      インナーです。
```

### <%= %>
```erb:erb
<%= @user.name %>
```
```haml:haml
= @user.name
```

### <% %>
```erb:erb
<% if @user.present? %>
```
```haml:haml
- if user.present?
```
#### タグ
```erb:erb
<p>ユーザー一覧</p>
```
```haml:haml
%p
  ユーザー一覧
```

### クラス
```erb:erb
<div class="title">タイトル</div>
```
```haml:haml
.title
  タイトル
```

### ID
```erb:erb
<div id="user_id">ユーザーのID</div>
```
```haml:haml
#user_id
  ユーザーのID
```

### 属性
```erb:erb
<div class="maintenance" style="color:lightgray">メンテナンス中</div>
```
```haml:haml
.maintenance{ style: "color:lightgray" }
  メンテナンス中
```

### コメントアウト
```erb:erb
<!-- ユーザー一覧 -->
```
```haml:haml
１）html に変換される
/ ユーザー一覧
２）html に変換されない
-# ユーザー一覧
```

# フィルター
フィルターとは、hamlファイル内で、haml以外のプログラミング言語を書けるようにする標識のことです。
先頭にコロン「：」が付いています。
http://haml.info/docs/yardoc/file.REFERENCE.html の Filters の所に一覧がのっています。

例
cssを入れる

```haml:haml
:css
  .title {
    color: gray;
  }
```

javascriptを入れる

```haml:haml
:javascript
  $(window).ready(function() {
    $('.title').css('color', 'green');
  });

  // ruby を埋め込む時は'#{ rubyコード }'
  root_url = '#{root_url}'
```
【問題解決】Windowsサーバのタスクスケジューラで「毎日」設定なのに3日ごとに実行されてしまう

# 環境
* Windows Server 2012

# 問題

以下のようなバッチファイルを、タスクスケジューラで「毎日」実行するように設定しました。
しかし、実際には毎日でなく3日ごとに実行されていました（batファイルのログで確認）。

```bat
REM 何らかのコマンドを実行
execute
REM Enterキーが押されるまで処理を一時停止
REM（処理が無事終了したことを確認するため、一時停止してコマンドプロンプトが閉じないようにする）
pause
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37903/8982e3ba-b228-1878-3000-f992afaf43bb.png)


# 「3日」はどこで設定されているか
「3日」という値は、「設定タブ->タスクを停止するまでの時間」に設定されていました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37903/fe3f89ce-cb4c-b936-3bbe-3cb912027647.png)


この値を「１日」に変更したら、毎日実行するようになりました。


# 毎日実行されない原因

「設定タブ」の「タスクが既に実行中の場合に適用される規則」が「新しいインスタンスを開始しない」になっていました（上図を参照）。
batファイルでは`pause`コマンドを使っているため、Enterキーを押すまでタスクは終了されません。
そのため「新しいインスタンス」が生成されず、毎日タスクが実行されませんでした。


# 解決方法

以下のいずれかの方法で解決できるでしょう。

- 「設定タブ→タスクを停止するまでの時間」を「1日」にする。
- `pause`コマンドを取り除いて、処理を止めないようにする
- 「設定タブ→タスクが既に実行中の場合に適用される規則」を、「新しいインスタンスを並列で実行」または「既存のインスタンスを停止」に設定する。
12 Steps to Happiness (幸福への12ステップ)

[Management 3.0](https://management30.com/) の [12 Steps to Happiness](https://management30.com/practice/happiness-steps/) は職場の仲間を幸福にするリーダーシップのトピックです。
[ファシリテーターのスライド](https://www.slideshare.net/StefanNsperling/the-happiness-of-workers-management-30)がとても参考になりますが、もう少し理解するために意訳しました。

# 12 Steps to Happiness

文章は **自分みずからの振る舞い** と **周囲への振る舞い** で構成されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/8369/06900dac-9e84-822b-9879-3bc525357b6a.png)
Source: Management 3.0 Practice Happiness Steps

## Thank (感謝)

Thank someone and be appreciative toward your colleagues, every single day.

(だれかに感謝します。そして、毎日あなたの職場の仲間に感謝します。)

## Give (贈り物)

Give something to another person or make it possible for others to offer gifts.

(他の人に何かを与えます。そして、他の人がプレゼントをできるようにします。)

## Help (手伝う)

Help someone who is in need of assistance, or enable colleagues to help each other.

(助けを必要としている人を助けます。また、職場の仲間が助け合えるようにします。)

## Eat well (健康な食事)

Eat well, and make good, healthy foods easily available for everyone.

(きちんと食べます。そして、みんなが健康的な食べ物を簡単に入手できるようにします。)

## Exercise (運動)

Exercise and work out regularly and make it easy for people to take care of their bodies.

(体操と定期的に運動します。そして、みんなが自分の体をケアできるようにします。)

## Rest (休息)

Rest well, sleep sufficiently, and enable colleagues to refresh their minds.

(よく休み、よく眠ります。そして、職場の仲間が心をリフレッシュできるようにします。)

## Experience (体験)

Experience new things, try stuff out, and let people run all kinds of experiments.

(新しいものを体験し、試してみます。そして、みんながいろいろな実験をできるようにします。)

## Hike (散策)

Hike outdoors, enjoy nature, and allow people an escape from the office and the city.

(屋外で散策し、自然を楽しみます。そして、みんながオフィスや街から脱出できるようにします。)

## Meditate (瞑想)

Meditate and get people to learn and adopt mindfulness practices.

(瞑想します。そして、みんなに学んでもらってマインドフルネスの習慣を取り入れます。)

## Socialize (社交)

Socialize, relate to other people, and make it easy for colleagues to develop connections.

(社会的活動で、他の人と関係を深めます。そして、職場の仲間達がつながりやすくします。)

## Aim (目標)

Aim for a goal and get people to understand and realize their own purpose.

(目標を目指します。そして、みんなに自分の目的を解ってもらって実現します。)

## Smile (スマイル)

Smile whenever you can, appreciate humor, and get colleagues to engage in fun activities.

(できるだけいつでもスマイルで、ユーモアを認めます。そして、同僚に楽しい活動をエンゲージします。)

---

**12 Steps to Happiness** も[ムービング モチベーターズ](https://management30.com/practice/moving-motivators/)のようにカードゲームで遊べたらよいですね:exclamation:
Railstutorial 4版　覚書 第２章

herokuのデプロイで躓く。
###第２章

- git push heroku master時にWARNING:がでる

```
###### WARNING:
remote:        No Procfile detected, using the default web server.
remote:        We recommend explicitly declaring how to boot your server process via a Procfile.
remote:        https://devcenter.heroku.com/articles/ruby-default-web-server
```

解決方法
ルートディレクトリに以下のファイルを作成する。

```
./Pro-life

web: bundle exec puma -C config/puma.rb
```

**参考にしたサイト**
[Procfile ってどこにある？Procfile の作成からpumaの設定まで](http://mooooooooooriiiiii.hatenablog.com/entry/2017/04/15/143244)



###Rails4からの変更点
rakeコマンドがなくなる

###個人的なまとめ
- rails shellを読むこと　重要

- 遷移の仕方

```
index(GET)----------------->destory(DELETE)
 |
 |--------------|
new(GET)       edit(GET)
 |              |
create(POST)   update(PATCH)
 |              |
show(GET)--------

/users----------------->/users/:id
 |
 |--------------|
/users/new   /users/:id/edit
 |              |
/users       /users/:id
 |              |
/users/:id--------
```


- rails routesコマンドと同じことができる。
```
http://localhost:3000/rails/info/routes
```
リッチテキストを編集できるtextViewライブラリの紹介

#はじめに
リッチテキストを編集できるtextViewライブラリを検討したときのメモを以下に公開します。最有力候補になったのは、RichEditorViewでした。

#[RichEditorView](https://github.com/cjwirth/RichEditorView)

![RichEditorView](https://github.com/cjwirth/RichEditorView/raw/master/art/Demo.gif)

- Swift2(masterブランチ)、Swift3(swift-3)
- [BSD3](http://qiita.com/tadsan/items/99d816e78ca429093b75#bsdライセンス3条項)ライセンス
- TextViewの代わりとして使えます。
- UIInputViewControllerでは、指数などの入力操作が行える。[機能一覧](https://github.com/cjwirth/RichEditorView/tree/swift-3#features)があります。
- iOS10.3.1以降でコンテンツのない場合にタッチしても編集モードに移行できない問題があります。すでに[プルリク](https://github.com/cjwirth/RichEditorView/pull/118)が提出されています。一行修正すると、iOS10.3.2でも正常に動作します。
- UIInputViewControllerのメニュー項目をカスタマイズしたい場合、RichEditorOptionItem.swiftの書き換えが必要になります。

#[ZSSRichTextEditor](https://github.com/nnhubbard/ZSSRichTextEditor)

![ZSSRichTextEditor](https://camo.githubusercontent.com/3f9c01eba9c69d030a69faaa1a2e01a733244627/687474703a2f2f636c2e6c792f696d6167652f3369343134303367323030422f64656d6f2e676966)

- objc
- MIT
- これにインスパイアされて前掲RichEditorViewが生まれた。
- RichEditorViewで削られている機能が搭載されている。守備範囲はこちらのほうが広い。
- UIViewController由来で、VCの形で提供されます。TextViewの代わりに使えません。画面一つとして使うなら便利ですね。

#[SECoreTextView](https://github.com/kishikawakatsumi/SECoreTextView)

![SECoreTextView](https://camo.githubusercontent.com/47685920a45270fca5674575ca43255e87db5f29/68747470733a2f2f7261772e6769746875622e636f6d2f6b697368696b6177616b617473756d692f5345436f726554657874566965772f6d61737465722f53637265656e73686f74732f694f535f31302e706e67)

- objc
- [MIT](http://qiita.com/tadsan/items/99d816e78ca429093b75#どれがあなたの状況をよく表しますか)ライセンス
- Xcode 8.3.2でサンプルのRichTextEditorの実機へのインストールを試みると、-fembed-bitcode is not supported on versions of iOS prior to 6.0のビルドエラーが発生します。Deployment Targetが5.0に指定されているので、8.0などに上げてあげば、ランできます。
- そのままですと、Deprecationsの警告が出ています。'kCTParagraphStyleSpecifierLineSpacnig'について。
- UIInputViewControllerで画像挿入や太字などの操作を行えます。
- iOS10以降で画像挿入機能を使おうとすると、NSPhotoLibraryUsageDescriptionキーの記述が不足しているためクラッシュします。
- テキストのダブルタップで文字列の選択ができないなど、標準のTextViewとの挙動の違いがあります。

#おわりに
リッチテキストを編集できるtextViewライブラリを全力で探しましたが、まだ把握できていないものがあるかもしれません。ここにないライブラリでおすすめがあれば、コメント欄から教えていただけると幸いです。比較検討してまたメモを追記したいと思います。
Microsoft.Jet.OLEDB.4.0でCSVに実数をSQLでInsertすると小数点以下２桁未満が切られる

一般には `schema.ini` というファイルを CSVファイル群が格納されているディレクトリに置きます。そこで CSVファイルの各カラムの型を Single とか Double とか明示します。
（schema.ini については、そのまんまググれば情報が出てくるかと思います）

が、今回 Single のカラムに「`1.23456`」という値を INSERT 文で入れても「`1.23`」で切られるという現象がありました。

原因は `schema.ini` の各テーブルの設定に `NumberDigits` という項目を明示していなかったためでした。

[テキスト データ ソース ドライバーを初期化する](https://msdn.microsoft.com/ja-jp/library/office/ff834391.aspx?f=255&MSPPError=-2147217396)
**NumberDigits**

    Indicates the number of decimal digits in the fractional portion of a number. 
    If this entry is absent, the default value in the Windows Control Panel is used.

    数値の少数部分の十進数の数を示す。この項目が空の場合はコントロールパネルの値が使われる

`NumberDigits` を定義していないと、

	OS のコントロールパネル
	→ 地域と言語
	→ 追加の設定
	→ 小数点以下の桁数

の値が `NumberDigits` として採用されるようです。Windows7 , 8.1 ではこの値が 2 になっており、手動で9などに変更すると連動して、CSVに出力される桁数が増えました。今回の対応としては、OSの設定で左右されるのは問題なので、各テーブルごとの NumberDigits を全て9にすることにしました。

正直、CSVの入出力は基本SQLでやるものではありませんね。本件はDBを使ったシステムをDB-Less にする必要があったため、てっとり早い方法をとりましたが。

以上、誰かがググった時のために（日本語情報、まるでなかったので）
railsのkaminariのデザインを変える方法

railsで、paginationが作れるgem kaminariのデザインを変える方法です。

# やり方は簡単
・https://github.com/kaminari/kaminari  にいく
・READMEの「Customizing the Pagination Helper」に書いてあるこやつ↓を流す
```rails g kaminari:views default```
・```app/views/kaminari/```にkaminariのviewが出てくる
・いじる


# 参考元

kaminariのgithub
https://github.com/kaminari/kaminari

[nysalor](http://qiita.com/nysalor)さんの、
kaminari徹底入門
http://qiita.com/nysalor/items/77b9d6bc5baa41ea01f3
Excel VBA お使いの方へ Range.Text に注意（まさしくセルに現在表示されている文字列が返されます）

「まさしくセルに現在表示されている文字列が返されます」って、だから何のこっちゃ...ですが、少々驚きましたので共有します。
（ご存知の方は案外多いかもしれませんが）

数値を表示しているセルで、列の幅が不足していると井桁マーク ## で省略表示されます。

```VisualBasic
Sub SampleCode()
    MsgBox ActiveSheet.Range("A1").Text & vbCrLf & Format(ActiveSheet.Range("A1").Value)
End Sub
```

![pic.png](https://qiita-image-store.s3.amazonaws.com/0/100206/6ff9f5be-5862-4f39-c92c-b4712c3ea51c.png)

アクティブなセルA1に数値 123123 が入っていてかつ、幅が全桁表示できないほど狭い状態（画像のような状態）で上記マクロを実行させると

![pic2.png](https://qiita-image-store.s3.amazonaws.com/0/100206/2df4d60e-692b-4829-8e71-eed334c30532.png)

[Range.Text](https://msdn.microsoft.com/ja-jp/library/office/ff840217.aspx) は省略された表示（"###"）で返されていることがわかります。

Range.Text は、単に値 ([Range.Value](https://msdn.microsoft.com/ja-jp/library/office/ff195193.aspx)) に書式 ([Range.NumberFormat](https://msdn.microsoft.com/ja-jp/library/office/ff196401.aspx)) などが反映された文字列が入っていると思い込んでおりました...が、違いました。
ちなみに、列の幅が数値表示に対して十分な場合（数値が省略表示されない場合）は、数値が文字列として返されます。

![pic3.png](https://qiita-image-store.s3.amazonaws.com/0/100206/162f1945-f575-8d6f-e8d6-9b037187fbfb.png)

![pic4.png](https://qiita-image-store.s3.amazonaws.com/0/100206/e392253d-8bc5-5ec7-b4e5-71aeb1e332da.png)

以上です。
HoloLensのメニューやデバイスポータルからリセットできなくなってしまった場合

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

**Microsoft HoloLens デバイスをリセットしたい**という時は、HoloLensを起動後のメニューからや、ブラウザを経由してデバイスポータルからリセットする方法がありますが、万が一その方法が使えない状況に陥ってしまった場合のトラブルシューティングをご紹介します。

それは「**Windows Device Recovery Tool**」というWindows デスクトップアプリケーションのツールを用いる方法です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/a74d0069-42a0-e03b-686c-84ac14da5d7c.png" width="300">
## このツールを使用するために必要なもの
* HoloLensデバイスをPCに接続するためのUSBケーブル
* Windows 7、Windows 8、Windows 8.1、またはWindows 10が正常に稼働しているPC。
* 最低4GB以上の空き容量
* 安定しているインターネット回線

## 操作方法 
1. Webブラウザから [Windows Device Recovery Tool ダウンロード先](http://go.microsoft.com/fwlink/p/?LinkId=522381)にアクセスしてツールをダウンロードする。※2017年4月17日現在のファイルサイズ: 2.3MB

2. ダウンロードしたファイルを実行する。
3. 起動したらPCにHoloLensデバイスをUSB接続する。
4. 「**電話の選択**」画面の中央に「Microsoft HoloLens」が表示されたら、そのアイコンをクリックする。
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/990efdb2-15b1-40dc-4612-5d6b08b60522.png" width="300">
5. 「**Windowsセキュリティの重要な警告**」ウィンドウが表示されたら「**アクセスを許可する(A)**」を選択して次に進む。
6. 「**電話の情報**」画面で「**モデル:HoloLens**」になっていることを確認し、「ソフトウェアをインストール」を選択する。 ※2017年5月1日現在、Build:10.0.14393.576です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/b4858402-d1e4-0760-52cd-82e126880366.png" width="300">
7. パッケージのダウンロードが開始される。 ※ここでダウンロードされるファイルサイズ目安は41.36MBです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/c2185500-5dc1-26b3-fcbb-54d3da01504c.png" width="300">
>**注意事項**：ダウンロード中は、HoloLensを使用したり、UBSケーブルを切断しないようにする
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/414e34bd-ae1b-cd40-15f6-d10a96907a69.png" width="300">
8. しばらくすると、**インストール結果**が表示される。「**操作は正常に終了しました**」になっていれば無事にHoloLensの初期化は完了です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/1855f8cb-7373-20fa-3003-368496c963d7.png" width="300">

あとはHoloLensデバイスの電源を入れ、正常に起動するか確認してみてください。初期出荷時と同じ状態になっているので、Wi-fi環境のある場所で、初期起動時に行う環境設定や各種セットアップを行ってみてください。
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/5d74bff0-5954-3287-fb67-d2b10d47b559.jpeg" width="300">

## 参考文献 
*  [Windows Device Recovery Tool: FAQ](https://support.microsoft.com/ja-jp/help/12379/windows-10-mobile-device-recovery-tool-faq)

## Have a nice Geek Life♪
※Twitterで最新情報発信中 @ayatokura
ページアクセスでリクエストが2回発生する

開発中のRailsアプリケーションで特定のページにアクセスするとリクエストが２回発生するケースがありました。
この記事は、その時の原因について書いたものです。
同じような現象に悩んでいる方の参考になれば幸いです。

注意：内容については実際のソースコードではなく、サンプルを用いて記述しています。

# 環境

- Rails 5.1.0
- Ruby 2.4.0
- OSX
- ブラウザ（ GoogleChrome, Firefox, Safari ）

# 発生内容

```ruby:ログ
Started GET "/" for 127.0.0.1 at 2017-05-01 16:12:57 +0900
Processing by HomeController#index as HTML
  Rendering home/index.html.erb within layouts/application
  Rendered home/index.html.erb within layouts/application (7.5ms)
Completed 200 OK in 119ms (Views: 106.6ms)


Started GET "/" for 127.0.0.1 at 2017-05-01 16:12:58 +0900
Processing by HomeController#index as HTML
  Rendering home/index.html.erb within layouts/application
  Rendered home/index.html.erb within layouts/application (0.8ms)
Completed 200 OK in 64ms (Views: 52.0ms)
```

`Homecontroller`の`index`アクションにアクセスしたところ、何故かログに2回アクセスが発生していました。
このままでは無駄にリソースを使うどころか、もしアクセス時に何かしらデータベースにデータを挿入する場合には2重で作成されてしまいます。

# 原因

結論として`view`が原因でした。
サンプルのため、かなり簡略化していますがコードはこんな感じです。

```html+erb:index
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
<div style="background-image: url();"></div> <%# ココ %>
```

`background-image: url()`の箇所でurlの指定がないからでした。

1. アクセスする
2. レンダリングする（1回目）
3. `background-image: url()`の箇所でもう一度レンダリングする（2回目）

また、今回のケースでは`background-image`が原因でしたが、`href`などでも発生したことがあるようです。
詳しくは参考を確認ください。

# 参考

- https://blog.hello-world.jp.net/ruby/2867/
- http://blog03.4649.me/archives/218

調査したところ、結構前からある問題みたいですが、未だ対応されてないんでしょうか。。。
外部接続だとSinatraはデフォルトの状態では繋がらない。あとlocalhostのあるあるミスも。

#実行環境
- ローカルOS macOS Sierra 10.12.4
- リモートOS　CentOS 6.4
- Ruby 2.4.2
- Sinatra 1.4.8
- VirtualBox 5.1.18
- Mac上のiTerm(3.0.15)から[ssh接続](http://qiita.com/boscoworks/items/56d2ab2a9c5b1b100ce6)してCentOSにアクセス

#詰まった点

[このチュートリアル記事](https://x-team.com/blog/how-to-create-a-ruby-api-with-sinatra/) に沿ってSinatraを初めて触っていたら、Hello WorldをWeb上に表示するという最初の最初で詰まってしまった。


```ruby:Hello.rb
require 'sinatra'
require 'sinatra/reloader'

get '/' do
"Hello World!"
end
```
```
$ ruby Hello.rb

[2017-05-01 13:41:03] INFO  WEBrick 1.3.1
[2017-05-01 13:41:03] INFO  ruby 2.4.1 (2017-03-22) [x86_64-linux]
== Sinatra (v1.4.8) has taken the stage on 4567 for development with backup from WEBrick
[2017-05-01 13:41:03] INFO  WEBrick::HTTPServer#start: pid=14881 port=4567
```
と表示されたので、Mac側のChromeで、

```
http://localhost:4567
```
と叩くが、表示されない。


#解決（2段階）
##1段階目

Mac側（つまりリモートホスト側）のlocalhostに繋いでもCentOS側のlocalhostに繋がらないのは当たり前。

こんな初歩的なミスに30分悩んでしまった。

`ifconfig`コマンドで得られるIPアドレス（ホストオンリーアダプターのIPアドレス）を代わりに入力すると

```http
http://１９２.168.〇〇.〇〇〇:4567
```
繋が...らなかった。なぜ。


##2段階目
丁寧に調べてくださっている方の[記事](http://qiita.com/u1_fukui/items/b86b21f6ed39f4c10d5d)によると、


Sinatra ver1.4.0以降は、development環境だと、localhostからのアクセスしか受け付けないのがデフォルトとなったようだ。

プログラム中に

```ruby:Hello.rb
set :environment, :production
```
を追加して実行環境を変更するか、

全てのIPアドレスを許可するためのオプションをつけて実行すると、

```linux
ruby main.rb -o 0.0.0.0 -p 4567
```
or

```ruby:Hello.rb
set :bind, '0.0.0.0'
```
とすると、

通じた！


その他参考にしたサイト
-
- [Sinatra app is not starting the internal webserver](http://stackoverflow.com/questions/36095299/sinatra-app-is-not-starting-the-internal-webserver)
Mac (10.9〜10.12) で PDF を結合など (Fink)

#1. XCode のインストール

`$ xcode-select --install`

XCode ライセンスを承諾する必要があります。これは、

`$ sudo xcodebuild -license`

と入力し、

`agree`

と入力します。

#2. Fink のインストール

[Install Fink](https://raw.githubusercontent.com/fink/scripts/master/srcinstaller/Install%20Fink.tool)

を開き、テキストとしてデスクトップに保存します。

その後、ターミナルを開き、以下のコマンドを入力します。

`$ cd Desktop` 書類フォルダに保存した場合は、 `$ cd Documents`

`$ chmod +x Install\ Fink.tool.txt`

`$ ./Install\ Fink.tool.txt`

いくつか質問されますが、だたいリターンキーを押すだけでも大丈夫です。

JDK と X11 のインストール方法が途中で示されます。「詳しい情報...」をクリックしてインストールしてください。その後、ターミナルに戻って、再び


`$ ./Install\ Fink.tool.txt`

とします。
	
#3. pdftk と PDFKitTool のインストール

ターミナルで、

`$ fink install pdftk` (pdftkの場合)

`$ fink install pdfkittool` (PDFKitToolの場合)

と入力します。

pdftk は /sw/bin/pdftk, PDFKitTool は /sw/bin/PDFKitTool としてインストールされます。

#4. PDF ファイルの結合

pdftk の場合、

`$ pdftk input1.pdf input2.pdf output output.pdf`

PDFKitToolの場合、

`$ PDFKitTool load input1.pdf input2.pdf cat output output.pdf`

です。
Android端末からSqliteのDBファイルを取得する方法

# 1.adbの起動
adbを起動する。複数の端末が接続されている時は-sで端末を指定する。

パスを通して、DOSプロンプトから実行するのが現実的です。
自分の場合のパスはこんな感じ
C:\Users\yoshiei1\AppData\Local\Android\sdk\tools;
C:\Users\yoshiei1\AppData\Local\Android\sdk\platform-tools;
↑
多分上の２つのうち、どちらかにadbがあると思われる。どっちにあるかは
昔のことなので忘れました。。。

![image](https://qiita-image-store.s3.amazonaws.com/0/137470/5cf13656-0ae8-32a9-b579-5b0ba8e08c7c.png)
↑
こんな感じでadbを起動。-dが居るのか不明。無くても動いた。

# 2.パッケージを指定する
![image](https://qiita-image-store.s3.amazonaws.com/0/137470/c8f2e4a6-36f8-ba99-3c96-21f2dcda861a.png)

# 3.databaseファイルの位置を確認する。
とりあえずlsを実行してdatabaseファイルの場所を確認する。
![image](https://qiita-image-store.s3.amazonaws.com/0/137470/d8706988-8a37-c462-fd03-4170b4ccfe20.png)

位置がわかったらディレクトリを移動する。

# 4.目的のDBファイルをsdcardへcatする。

ここで自分の場合はnexsu5を使っていてsdcardディレクトリなんて無いんじゃね？
と思ってしまっていたが、ちゃんと存在しておりました。。ここで大分時間をロスしてしまった。。。

　cat db_name > /sdcard/hoge.db (名前は適当)

# 5.pullコマンドでデータゲット

cat が終わったら、exitでrun-asを終了する。
次にpullで先程catしたファイルをPC側に持ってくる。

![image](https://qiita-image-store.s3.amazonaws.com/0/137470/c6751003-e807-302c-b2ac-e955a697b47d.png)

これでめでたくsqliteのDBを取得することができました。
(￣ー￣)ｂｸﾞｯ!
admin-on-restのTextInputでplaceholder表示

[TextInput.js](https://github.com/marmelab/admin-on-rest/blob/master/src/mui/input/TextInput.js) を見るとoptionsプロパティがmaterial-ui/TextFieldに渡るとある。
[TextField.js](https://github.com/callemall/material-ui/blob/master/src/TextField/TextField.js)にhintTextというのがあって、それがplaceholder的なもの。

なので以下のように指定するとよい。

```js
<TextInput source="name" options={{hintText: "Yamada Taro"}}/>
```
rails5でDeviseのconfigure_permitted_parametersの書き方

Rails5でのconfigure_permitted_parametersの書き方に変更があったようなので、かいておきます。

以下例

```Ruby
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    //Rails4
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username) }

    //Rails5
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
  end
end

```
フロントエンド技術の変化激しすぎィ！ついていけねえよ！って人向けのメッセージ

# この記事の動機

当方フロントエンド好きなエンジニア。

[フロントエンドが嫌い](http://anond.hatelabo.jp/20170501085956) という増田がホッテントリ入りしてて、中身を読んでみると正論と言える内容もあるものの、幾つか勘違いもあって悲しくなった。

勘違いされたままなのは悲しい。
そこで、フロントエンドに浅く接している人に対して、ストレスなくフロントエンド技術の変化の激しさに対処出来るよう、フロントエンドエンジニアからの弁明とも言えるメモを残すことにした。

# 毎年のように流行りのフレームワークやらツールやらが変化してない？

あなたが感じるこのフィーリングは正しい。
実際何が*流行っているか*という点では、毎年のように変化が起こっている。

ただし、"○○○が流行ってきたから、前まで使っていた△△△はクソ。"という考えは正しくないし、○○○が△△△よりも必ずしも優れているというわけではない。

フロントエンドの世界では、UXやデザインの違いによってとても分類しきれない程の要件がある。
SPAと一口に言っても、実装しなければならない要件はアプリケーションごと全く異なる。

そういった個別の要件に対して、△△△しか無かった頃は不便を感じながら作らざる得なかったものが、○○○が登場したお陰で楽になる。楽をした人はスゲェとなる。スゲェと思った人は感動を周りに伝えたい。そうすると同じような不便を感じていた人たちもスゲェとなる。これがまるで、流行しているかのように外野は感じられる。

しかし、△△△も登場した頃は同じことが言えていた。ある要件には△△△が充足し、それでOKだというアプリケーションは**ある**のだ。

そして、そもそもJavaScriptに関わる人はとてもたくさんいる。Webのサーバーサイド言語は山ほどあるが、Webのフロントエンド言語はJavaScriptしかない。
Webの技術者にとってJavaScriptは必修科目といえる。人が集まれば声はでかくなる。○○○が解決する問題が非常にニッチだったとして、母数が多ければ喜ぶ人の数も多くなり、この狭いWebエンジニアコミュニティの中では流行と言えるくらいの盛り上がりになるかもしれない。

でも、それら流行も実際は**これまで解決が難しかったとある要件を少し上手に解決できるようになった**だけな話がほとんどである。

Fluxの登場や、React、WebpackやSASSなども、従来のアプローチだと不便が生まれていた要件に対して、よりスマートに解決出来るようになっただけの話。
MVCや、Jquery、Gulp、生のCSSだって要件に対して必要十分ならそれを選べばいいし、何も間違ってはいない。

# フロントエンドのやつらはいくらなんでも新しもの好き過ぎないか？

このフィーリングも正しい。
私たちは新しもの好きだし、機会があればどんどん新しいものを実戦投入したい。
時々外の人から叩かれるくらい新しもの好きだ。

しかし、私たちはただ新しもの好きだというわけではなく、理由があって新しいものを使いたいと思っている。
意外かもしれないがJavaScriptの世界はまだまだよちよち歩きの状態で、いいものを作ろうと思えば様々な不便に直面する。
そして多くのWebサービスが、競合サービスと機能や体験の質で仁義なき戦いをしており、ユーザーにとって使いやすいものを少しでも早く作らなければ負けてしまう状況だ。

こうした不便やプレッシャーを常に抱えているため、少しでも楽をするため、少しでも早くいいものを作るために、今より良いアプローチがあるならすぐに切り替えたいと思っている。

フロントエンドの世界にはまれに、古いアプローチで作られたシステムを見るとクソだと断じるエンジニアもいるが、彼らは不便と戦い、プレッシャーを乗り越えた末にそう考えるようになった、ある意味この業界の犠牲者だ。
許してやってくれとは言わないが、私は一定の理解が出来る。

# 変化が激しすぎて追いつくのしんどい…もう勉強したくない…

心から同情するし、私も常々そう思っている。

IE4の頃からJSを書き始め、**決定版**の登場をもう10年以上待ち続けている。しかし、10年たった今も相変わらずのカオスだ。
そして10年もJSに費やしたが、通用するのはここ1年で得た知識だけだ。それくらいJSの世界は変化が激しい。パラダイムシフトも頻繁に起きているため、ある瞬間から突然過去実践してきたアプローチが不要になったりする。

しかし、私はJSと出会えたことを感謝している。
正直言って変化が起きた瞬間は*ゲェ…またか…*と思うが、調べていくうちに私が感じていた不便をスマートに解消してくれていることに気がつく。そうするともう、自分は好奇心の虜になっている。*こう言うやり方があったか…*、*こうすりゃよかったのか…*、そんな発見と後悔の先には、知的感動が待っている。

私も30台に入り立派なオッサンとなったが、こうして知的感動が得られるのは、プログラミング以外にあまりない。
頻繁に知的感動を与えてくれるJavaScriptは、何者にも代えがたい。

変化は楽しい。フロントエンドの人間は皆そう思っていると思う。

# 最後に

同じエンジニアであっても、考え方は分野ごと微妙に違う。
特にフロントエンドにどっぷり浸かってる人と、JavaScriptをメインに書かない人との正義は大きく異なると思う。
しかし、お互いがお互いの正義をぶつけあい、歩み寄らないのでは物事は何も進まない。

なんとなくでいいので、我々の気持ちも汲んでくれるとありがたい。
我々もJSメインじゃないエンジニアの気持ちも汲めるようにしよう。

# 追記

Twitterのツッコミをみて気がついたが、1998年くらいからJSを書き始めているのでほぼ20年と言っていいのか…
当時中2。スーパーハカーになりたいとかいうクソみたいな動機のお陰でここまでやってくることになるとは。
【修正済み】Rails 5.1.0 から rails server の -p オプションより環境変数 PORT が優先される模様

**注) 2017/05/02 現在、コマンドライン引数を優先する PR が master ブランチにマージされました。**

時間ができたので、とあるプロダクトの Rails を 5.1.0 にアップデートして試験を始めようとしている今日この頃です。

テストのために foreman を使って各種プロセスを立ち上げたところ、なぜか API サーバに繋がりません。ログをよくよく見てみると、listen しているポートが期待通りではありませんでした。ある事情から、API サーバは foreman が用意してくれるポート番号を使わず、固定のポート番号を使っているのですが、そのポート番号指定が無視されています。

以下の通り、環境変数 `PORT` をセットしている状態で `rails server` のポート引数 `-p` を与えても無視されます。

```
$ rails --version
Rails 5.1.0
$ export PORT=3456
$ echo $PORT
3456
$ rails s -p 3333
=> Booting WEBrick
=> Rails 5.1.0 application starting in development on http://localhost:3456
=> Run `rails server -h` for more startup options
[2017-05-01 16:09:44] INFO  WEBrick 1.3.1
[2017-05-01 16:09:44] INFO  ruby 2.4.1 (2017-03-22) [x86_64-darwin16]
[2017-05-01 16:09:44] INFO  WEBrick::HTTPServer#start: pid=37581 port=3456
```

Rails 5.0.2 ではコマンドライン引数が優先されています。

```
$ rails --version
Rails 5.0.2
$ echo $PORT
3456
$ rails s -p 3333
=> Booting WEBrick
=> Rails 5.0.2 application starting in development on http://localhost:3333
=> Run `rails server -h` for more startup options
[2017-05-01 16:11:24] INFO  WEBrick 1.3.1
[2017-05-01 16:11:24] INFO  ruby 2.4.1 (2017-03-22) [x86_64-darwin16]
[2017-05-01 16:11:24] INFO  WEBrick::HTTPServer#start: pid=43415 port=3333
$ rails s
=> Booting WEBrick
=> Rails 5.0.2 application starting in development on http://localhost:3456
=> Run `rails server -h` for more startup options
[2017-05-01 16:11:40] INFO  WEBrick 1.3.1
[2017-05-01 16:11:40] INFO  ruby 2.4.1 (2017-03-22) [x86_64-darwin16]
[2017-05-01 16:11:40] INFO  WEBrick::HTTPServer#start: pid=44602 port=3456
```

ざっくりコードを眺めた限り、以下の通り環境変数を優先している様に見えます。

```ruby:railties/lib/rails/commands/server/server_command.rb
# https://github.com/rails/rails/blob/master/railties/lib/rails/commands/server/server_command.rb#L186-L188

        def port
          ENV.fetch("PORT", options[:port]).to_i
        end
```

一方で、バインドするアドレスについてはコマンドライン引数を優先している様に見えます。

```ruby:railties/lib/rails/commands/server/server_command.rb
# https://github.com/rails/rails/blob/master/railties/lib/rails/commands/server/server_command.rb#L190-L197

        def host
          if options[:binding]
            options[:binding]
          else
            default_host = environment == "development" ? "localhost" : "0.0.0.0"
            ENV.fetch("HOST", default_host)
          end
        end
```

- [CLI arg "host" has precedence over ENV var "host" by maclover7 · Pull Request #28513 · rails/rails](https://github.com/rails/rails/pull/28513)

さて、Issue/PR を漁らないといけませんね。
~~面倒くさいのでそういうものと認識してスルーしたい気分です。~~

### 追記

細かい事は気にせず、勢いに任せて PR を作ってみました。

- [CLI arg `--port` has precedence over env `PORT` by koshigoe · Pull Request #28943 · rails/rails](https://github.com/rails/rails/pull/28943)

(修正内容以前に、ガイドラインを守れているか自信がありません…。)

**2017/05/02 マージされました。**
ICommand や IValueConverter のパラメータで InvalidCastException が発生しちゃう問題

使っているフレームワークにもよると思いますが、ICommand や IValueConverter で InvalidCastException に出くわすことがありました。

#InvalidCastExceptionが発生するパターン
パラメータの値を XAML 上に直値で書いている場合です。
##Command
```csharp
public class Command<T> : ICommand
{
    public Command (Action<T> exec) => _exec = exec;
    private Action<T> _exec;
    public void Execute(object prm) => _exec((T)prm);
    // 一部省略
}
```

```xml
<!--
 こんな定義
 IncrementValueCommand = new Command(x => Value += x);
-->
<Button Command="{Binding IncrementValueCommand}" CommandParameter="1" />
```
##Converter

```csharp
public class AddConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object prm, CultureInfo culture)
    {
        return (double)value + (double)prm;
    }
    // 一部省略
}
```

```xml
<!--  Resource 定義は省略  -->
<Grid>
  <Border Name="bd1" />
  <!-- bd1 よりちょっと大きくしたい -->
  <Border Name="bd2"
          Width={Binding ElementName=bd1,
                         Path=ActuralWidth,
                         Converter={StaticResource addConverter},
                         ConverterParameter=10} />
</Grid>
```

#何がだめか？
`CommandParameter="1"` や `ConverterParameter=10` の数字部分は string として扱われます。
なので、実際には以下のような引数でメソッドを呼び出したことになります。

```csharp
IncrementValueCommand.Execute("1");
```

```csharp
addConverter.Convert(bd1.ActualWidth, typeof(double), "10", ConverterCulture);
```
#なぜ string 型になるのか？
そもそも XAML で書かれたプロパティは string 型として扱われていて、そこから各プロパティの型へと変換されていきます。
そこで使われるのが、[TypeConverter](https://msdn.microsoft.com/ja-jp/library/system.componentmodel.typeconverter.aspx) クラスです。
例えば、次のような XAML の場合、大雑把にいうと下のような C# コードに変わります。

```xml
<Border Margin="1, 10, 1, 10" Height="100" />
```
```csharp
new Border
{
    Margin = ThicknessConverter.ConvertFrom("1, 10, 1, 10"),
    Height = DoubleConverter.ConvertFrom("100"),
}
```
Margin は Thickness 型、 Height は double 型なためそれぞれのコンバータを引き当てることができますが、
ICommandSource.CommandParameter も Binding.ConverterParameter もどちらも **object 型で定義されているため、変換されずそのまま文字列が入ってしまう** のです。

#解決案
こんな感じで TypeConverter を使ってやります。
ちなみに、[TypeDescriptor.GetConverter](https://msdn.microsoft.com/ja-jp/library/system.componentmodel.typedescriptor.getconverter.aspx) で TypeConverter をとってくることができます。
##Command
```csharp
public class Command<T> : ICommand
{
    public Command (Action<T> exec) => _exec = exec;
    private Action<T> _exec;

    private static TypeConverter _typeConverter = TypeDescriptor.GetConverter(typeof(T));

    public void Execute(object prm)
    {
        var tPrm = (prm is T)
            ? (T)prm
            : (T)_typeConverter .ConvertFrom(prm);
        _exec(tPrm);
    }
    // 一部省略
}
```

## Converter
```csharp
public class AddConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object prm, CultureInfo culture)
    {
        var dPrm = (prm is double)
            ? (double)prm
            : (double)DoubleConverter.ConvertFrom(prm);
        return (double)value +  dPrm;
    }
    // 一部省略
}
```
Physics-based Animation


> [Animation and Graphics Overview](https://developer.android.com/guide/topics/graphics/overview.html)を訳したもの
日本語変なのは直しておく

Androidアニメーションには種類がある

#### [Property Animation](https://developer.android.com/guide/topics/graphics/prop-animation.html)
Android 3.0（APIレベル11）に導入された
画面に表示されないオブジェクトを含むあらゆるオブジェクトのプロパティをアニメーション化できる
システムは拡張可能で、カスタムタイプのプロパティもアニメーション化できる
 
#### [View Animation](https://developer.android.com/guide/topics/graphics/view-animation.html)
ビューに対してのみ使用できる
設定が比較的簡単
大体はこれでOK

#### [Drawable Animation](https://developer.android.com/guide/topics/graphics/drawable-animation.html)
Drawableリソースを次々に表示すること
Drawableリソースで表現しやすいものをアニメートする場合に便利
GIFアニメーションみたいなの

## [Physics-based Animation](https://developer.android.com/guide/topics/graphics/physics-based-animation.html)
４つめのアニメーションとして [Support Library 25.3.0](https://developer.android.com/topic/libraries/support-library/revisions.html#25-3-0) （2017/3）で追加された
[dynamic-animation](https://developer.android.com/reference/android/support/animation/package-summary.html)
ユーザーの入力に動的に反応するアニメーションを作成するための一連のAPIを提供する新しい物理ベースのアニメーションライブラリ

Physics-based animation は物理学の法則に基づいて、アニメーションにおける高度なリアリズムを実現している。
日々の生活では、変化が起こると、それは私たちが認識するのが自然である物理的な変化を伴います。 同様に、より自然に見え、中断されていないアニメーション、そして勢いを維持するアニメーションは、私たちには容易に認識されます。
アニメーションは力で動く。 力が平衡に達するとアニメーションが静止します。 新しいアニメーションAPIセットには、より自然で見やすいアニメーションを表現するためのフィジカルが組み込まれており、高度なコース修正とジャンクの削減が期待できます。

Physics-based animationを使うことで、より自然に見えるアニメーションを作ることができる。

| Animatorベースのアニメーション | physics-based APIsのアニメーション |
|:-----------|------------:|
| ![targetchange_oa.gif](https://qiita-image-store.s3.amazonaws.com/0/33505/1830af8c-9d19-2da6-8f69-42febe185a30.gif "targetchange_oa.gif") | ![targetchange_pba.gif](https://qiita-image-store.s3.amazonaws.com/0/33505/d3b1f0bb-ca6b-7f1d-305a-20af1fe48fdf.gif "targetchange_pba.gif") |
引用: https://developer.android.com/guide/topics/graphics/physics-based-animation.html

Androidフレームワークは、android.support.animation APIを通じて物理ベースのアニメーションをサポートします。
関連するクラスは次のとおりです。

* [android.support.animation](https://developer.android.com/reference/android/support/animation/package-summary.html)
このパッケージは、ビューをアニメーション化するための主要なAPIです。 
物理ベースのアニメーションを作成および管理するためのクラスが含まれています。
* [DynamicAnimation](https://developer.android.com/reference/android/support/animation/DynamicAnimation.html)
物理ベースのアニメーションパッケージの基本クラス。
このクラスは、すべてのアニメーションのアニメーションライフサイクルと共通の設定を管理します。
* [SpringAnimation](https://developer.android.com/reference/android/support/animation/SpringAnimation.html)
DynamicAnimationクラスの直接のサブクラスです。
このクラスは、指定されたビューのプロパティをアニメーション化するスプリングアニメーションを作成します。
* [SpringForce](https://developer.android.com/reference/android/support/animation/SpringForce.html)
このクラスは、アニメーションで使用される減衰比や剛性などのスプリングのプロパティを定義します。
Cognos リストをプロンプトで選択した項目で「昇順・降順」に並び替える

##概要
Cognos BI & Analyticsで、リストのソートを項目指定&ソート順指定で行いたい時のやり方です。

ソート項目のプロンプトで「数量」を選択し、ソート順のプロンプトで「降順」を選択した例です。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/8ce96a4c-cfc4-2483-ee52-03754c9cedc3.png)

ソート項目のプロンプトで「収益」を選択し、ソート順のプロンプトで「昇順」を選択した例です。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a4867941-6be4-251b-40ac-7c20c38905f4.png)

##実装
リストのクエリーに以下の式の定義となる、「ソート制御」というデータアイテムを追加します。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a8d8a0bd-0723-1b15-c289-15e4ccd37102.png)
- 実際の式
case ?pSort?
　when '降順' then
　　case ?pItem?
　　　when '数量' then [数量]
　　　when '単価' then [単価]
　　　when '収益' then [収益]
　　　when '総利益' then [総利益]
　　　when '計画収入' then [計画収入]
　　end
　when '昇順' then
　　case ?pItem?
　　　when '数量' then [数量]\*-1
　　　when '単価' then [単価]\*-1
　　　when '収益' then [収益]\*-1
　　　when '総利益' then [総利益]\*-1
　　　when '計画収入' then [計画収入]\*-1
　　end
　end

リストのプロパティで「グループ化とソート」から、下記の様に「ソート制御」のデータアイテムを配置します。
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a99f5461-528a-138b-b517-8c777bdecb55.png)

昇順の場合に、数値データに-1を掛けているのがポイントです。
データアイテムが多くなるとcase文で全部書くのは厳しいですが、簡単に実装できるやり方なので、ご活用頂ければと。
rootグループに属しているのに見れないファイルのディレクトリのパーミッションをfindで再帰的に一括変更する

# はじめに
rootグループに属しているのに見れないファイルのディレクトリのパーミッションをfindで一括変更したくなりました。
具体的には/etcをGitで管理しているときに、zshがGitの変更を検出しようとディレクトリを探索するのですが、パーミッションにより弾かれてしまいました。
セキュリティポリシーにもよりますが、rootグループに属しているユーザであれば閲覧は良いかなと思います。

![Screen Shot 2017-05-01 at 15.31.29.png](https://qiita-image-store.s3.amazonaws.com/0/47327/b59da160-a7ec-ddd3-b362-10218a516baf.png)


# コマンド
実はこのコマンド、何度も調べているのですがよく忘れるのでメモ。
`-exec`を`-ok`にするとコマンドの確認ができます。便利。
以前はFreeBSD系で調べたりしましたが、OSによってfindのオプションが変わるので注意です。
今回の環境はCentOS7です。

```bash
$ sudo find /etc -type d -exec chmod g+rx {} \;
```

上記は`-type d`でディレクトリに実行権限までつける、というものでした。
下記は所有者rootのファイルにグループのrをつける、というコマンド。

```bash
$ sudo find /etc -user root -perm +o+r -exec chmod g+r {} \;
```

ファイルに実行権限つけるとlsした時にファイルが（ターミナルによって）赤くなって困ったり、Gitでコミットが発生したりと大変なので注意です。
Qiitaでディラック記法を綺麗に表示する方法

# はじめに

量子コンピュータの勉強をはじめるにあたって、[ディラック記法](https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%A9-%E3%82%B1%E3%83%83%E3%83%88%E8%A8%98%E6%B3%95)[^braket]をQiita（MathJax）で綺麗に表示する方法が必要になった。この記事ではディラック記法をQiitaのMathJaxで綺麗に表示する方法について述べる。

[^braket]: ブラケット記法とも言うが、この記事ではディラック記法で統一する。

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

# やり方

1. 記事の冒頭に次のような数式を挿入する
        
    ```latex
$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$
    ```
2. 必要なところで次のように使う

    ```latex
\ket{\psi} = \alpha\ket{0} + \beta\ket{1}
    ```
3. 次のように表示される

    $$
\ket{\psi} = \alpha\ket{0} + \beta\ket{1}
    $$

ディラック記法の中に分数などが入っても、次のように正しく表示できる。

```math
\bra{\phi} = \bra{\frac{1}{a}} \\
\ket{\sigma} = \ket{\frac{1}{a}}
```

$\braket{\alpha}{\beta}$を次のように書ける。

```latex
\braket{\alpha}{\beta} \\
\braket{\lambda\left(\array{1 \\ 0}\right)}{\beta}
```

```math
\braket{\alpha}{\beta} \\
\braket{\lambda\left(\array{1 \\ 0}\right)}{\beta}
```

# まとめ

量子コンピュータに関する記事でよく利用するディラック記法をQiitaで綺麗に表示することができた。量子コンピュータに関する記事をQiitaで書く際の参考になると思う。

# 参考文献

- [braket.sty](http://ftp.jaist.ac.jp/pub/CTAN/macros/latex/contrib/braket/braket.sty)
Rubyで漢字をひらがなに変換する

# はじめに
Rubyでボットを作っている時に、スクレイピングしてきたデータを全てひらがなにして管理したいと思い、手入力面倒だなーと渋ってる間に、[読み方は？](https://yomikatawa.com) という素敵なwebサイトを見つけたのでこれを利用して漢字をひらがなに変換しようと思った。

# 方法
RubyのGem `Mechanize` を使用してHTTPSリクエストを送って帰ってきたHTMLを解析するだけ。
なので言語とか正直関係ない。

# コード

mechanizeをインストール

```console:terminal
gem install mechanize 
```
以下、メインのコード
漢字をひらがなに変換するには
`to_hiragana(kanji)`
だけで十分です。その他はおまけです。

```ruby:main.rb
require 'mechanize'

AGENT = Mechanize.new
BASE_URL = 'https://yomikatawa.com/kanji/'

def to_hiragana(kanji)
  AGENT.get(BASE_URL + kanji).search('#content p').first.inner_text
end

def to_romaji(kanji)
  AGENT.get(BASE_URL + kanji).search('#content p')[1].inner_text
end

# 検索結果が正しくない可能性がある時、alertがでるのでそれを所得するメソッド
# ひらがな所得時に確実性をもたせたい時に使う。
def certain?(kanji)
  AGENT.get(BASE_URL + kanji).search('.alert').empty?
end

to_hiragana('薔薇')
#=> ばら

to_hiragana('鶏')
#=> にわとり

to_romaji('薔薇')
#=> bara
```
Heroku adding VIM

Step 1 Create the script

vi vim-on-heroku.sh 
'#!/usr/bin/env bash
curl https://s3.amazonaws.com/heroku-jvm-buildpack-vi/vim-7.3.tar.gz --output vim.tar.gz
mkdir vim && tar xzvf vim.tar.gz -C vim
export PATH=$PATH:/app/vim/bin

Step 2 Send file to Heroku

git add .
git commit -m "add VIM"

In Heroku
? heroku run bash
? . vim-on-heroku.sh

<img src="https://content.screencast.com/users/kamao/folders/Jing/media/d4b14953-5e8e-4761-8f80-a43700d1ca4a/00000780.png" alt="vim">

Reference:
https://gist.github.com/sfate/2889158#file-vim-on-heroku-sh
JavaScriptで連番・等差数列・等比数列の入った配列を簡単につくる（GoogleAppsScript対応版）

`[0, 1, 2, 3]` や `[1, 2, 4, 8, 16]` のような配列をなるべく1行で作りたい時のメモ

- コツ
    - 種となる配列をnew Array(num)で作成するのではなくArray.apply(null,new Array(num))で作成する
    - new Array(num)で作成してしまうとmapが反応してくれません

# 連番

- 長さ20の0から始まる連番をつくって`arr`に入れる

```js
var length=20;
var start=0;
var arr = Array.apply(null,new Array(length)).map(function(v,i){ return start+i;});
```

- 結果

```js
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0]
```

# 等差数列

- 長さ20で、初項4、公差2の等差数列をつくって`arr`に入れる

```js
var length=20;
var initial=4;
var diff=2;
var arr = Array.apply(null,new Array(length)).map(function(v,i){ return initial+(i*diff);});
```

- 結果

```js
[4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 22.0, 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 38.0, 40.0, 42.0]
```

# 等比数列


- 長さ20で、初項4、公比2の等比数列をつくって`arr`に入れる

```js
var length=20;
var initial=4;
var ratio=2;
var arr = Array.apply(null,new Array(length)).map(function(v,i){ return initial*Math.pow(ratio,i);});
```

- 結果

```js
[4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0, 131072.0, 262144.0, 524288.0, 1048576.0, 2097152.0]
```

# 解説

- new Array(length).mapでは駄目な理由
    - `new Array(length)`で作成した配列は、各要素に値が入っていません。
    - mapによる処理は **値の入っている要素に対してしか発生しません** 。
        - https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map
    - 以上のことから例えば`new Array(10).map(～)`とやっても何も実行されない結果となります。
- Array.apply(null,new Array(length)).mapならよい理由
    - `Array.apply(null,new Array(3))`は`Array(null,null,null)`のように解釈されます
    - この結果、`[null, null, null]`のように **各要素に`null`が入った** 配列が生成されます。
    - mapは値の入っている要素であれば（それがnullであっても）反応するため、`Array.apply(null,new Array(3)).map(～)`とすれば、各要素に対してmapによる処理が実行されます。
Scratchの「回転方法」

Scratchに最初から実装されている「回転方法」についてまとめてみました。

#スプライトの回転#
##回転座標##
Scratchでは、真上を0度、真下を180度、右を90度、左を-90度としています。
言い換えると、スプライトの角度は、真上を基準（0度）に、-179度～180度の範囲をとることになります。

##回転命令の種類##
スプライトの回転に関する命令は、「○度回す」と「○度に向ける」の2種類があります。
（厳密にいえば、「○度回す」は時計回りと反時計回りの2つにわけられますが、ここではまとめて扱います）

この2つの命令の違いは、回転角度を絶対的に指定するか、相対的に指定するかの違いです。

- 「○度回す」：現在の回転角度に対して、追加で○度回転させる
- 「○度に向ける」：現在の回転角度に関わらず、スプライトを○度回転させた状態にする

ここで、スプライトの回転角度を保持する内部パラメータをθとすれば、

- 「α度回す」：θ = θ + α
- 「β度に向ける」：θ = β

と書くことができます（=は代入の演算子）。

#「回転方法」#
##謎の命令「回転方法を () にする」##
Scratchには、回転に関する命令としてもう一つ、「回転方法を () にする」という命令があります。
多くのScratch入門において、この命令は以下のような状況下で登場します：
>スプライトが右方向（=90度の方向）へ移動しつづけ、画面の右端に到達したら、
>スプライトを左方向（=-90度の方向）に向けて、左方向へ移動するようにします。
>このとき、スプライトが左方向を向くと上下がひっくり返った状態になってしまうので、
>「回転方法を『左右のみ』にする」の命令を併せて実行すれば、
>上下ひっくり返るのを防ぐことができます。

#プログラマとしての疑問#
・・・確かにその通りなのですが、ここで画像を扱ったことのあるプログラマとしては色々疑問が湧いてくるわけです。

- それって「回転」じゃなくて「左右反転」なのでは？
- 「上下反転」をしたい場合はどうすればいいの？
- 「回転方法を () にする」の選択肢にある『回転しない』って何？

##Scratch wikiには…##
[Scratch wikiの当該ページ](http://jp.scratch-wiki.info/wiki/%E5%9B%9E%E8%BB%A2%E6%96%B9%E6%B3%95%E3%82%92_()_%E3%81%AB%E3%81%99%E3%82%8B_(%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF))にはこのように書かれていました：
>回転方法を () にするブロック（動きブロック／スタックブロック）は、
>プロジェクトで選択中のスプライトについて、見た目の回転方法 を設定するブロックである。
>なお、どの回転方法が選択されている場合でも、変数「向き」の値自体は保持されており、
>変更できる（回転方法によっては、画面表示が固定されるため
>「向き」が変更できないように見えるが、「向き」の値自体は変わっている）。

・・・つまり、

- 「回転方法を () にする」という命令は、スプライトの回転の「見え方」を変える命令
- あくまでも「見え方」を変えるだけなので、回転角度の内部パラメータの値は操作しない

ってこと？

#検証#
[テスト用のスケッチ](https://scratch.mit.edu/projects/158200966/)を書いてみました。

##方法##
緑の旗をクリックしても何も起こりません。
「中を見る」をクリックし、直に命令をダブルクリックして使ってください。

![20170501-1.png](https://qiita-image-store.s3.amazonaws.com/0/179111/7c896663-6124-7d4e-57b8-f4352db716b6.png)

- 回転角度は45度刻みで行う前提になっています。
- スプライトの猫の頭上には、回転角度の内部パラメータに対応する数値が表示されています。

コスチュームを見ていただければわかりますが、
それぞれの角度によって頭上の数値が変わるコスチュームを用意し、
角度が変更されたときに、内部パラメータに対応したコスチュームに変更することで
この機能を実装しています。（なんと原始的！）

これで、上3つの命令

- 「回転方法を『左右のみ』にする」
- 「回転方法を『回転しない』にする」
- 「回転方法を『自由に回転』にする」

のそれぞれを実行した後で、回転命令を実行するとどうなるのか、確認してみます。

##結果##
「回転方法を『左右のみ』にする」
![20170501-2.png](https://qiita-image-store.s3.amazonaws.com/0/179111/98666383-76ce-2de0-66f8-0e8f0ed88ebd.png)
※なお、-1度及び-179度は、-153度～-45度と同様、反転表示になった。

「回転方法を『回転しない』にする」
![20170501-3.png](https://qiita-image-store.s3.amazonaws.com/0/179111/b789514a-8e15-633f-1e1c-5c8fb88ef3aa.png)

「回転方法を『自由に回転』にする」
![20170501-4.png](https://qiita-image-store.s3.amazonaws.com/0/179111/1ebdc63a-5727-641d-13cb-9db9e2661690.png)

##結論##
- 「回転方法」とは、スプライトの回転角度のパラメータに対して**どのように画像を表示させるか**を指示する命令。
    - 『自由に回転』が最も単純で、回転角度のパラメータの通り、画像を回転させて表示
    - 『回転しない』は、文字通り、回転角度のパラメータを無視し、常にデフォルトの角度で表示（ただし『デフォルトの角度』とは**90度**のこと）
    - 『左右のみ』が最も奇怪（少なくとも私にとっては）で、
        - 回転角度のパラメータが0度～180度：90度で表示
        - 回転角度のパラメータが-1度～-179度：90度の表示を**左右反転させて表示**

なお、最初から実装されている命令には、「反転」という命令はないらしく、したがって、上下反転だけを行うことはできないっぽい。