OmniAICreator/Qiita-1.07M huggingface dataset:
技術英語 > リスニング > Endress+Hauser > The Temperature Law: E+H = degC > Part 1

@ Endress+Hauser > The Temperature Law: E+H = degC
https://www.youtube.com/watch?v=vnLyPVAb81s&list=WL&index=45

上記、温度測定の技術に関しての面白そうな動画があったのでリスニングしてみた。

赤文字ははっきり聞き取れない部分。
青文字はそのように聞き取れるが、文法的にしっくりいかない部分。

(00:00-)
Many people think that temperature measurement is simple. All you need are a few micrograms of platinum or thermo-coupled material and <font color=red>heaprest</font>. You can measure the correct temperature. But, thermometer doesn't necessary equate to thermometer, nor does temperature equate to temperature.

(00:34-)
The sensor, the heart of every temperature measurement point. For a long life, it must be very precisely built and well protected in its application. Always up-to-date, and continuously monitored. That is what we, the people for process automation, take care of. We make sure that it always delivers the correct temperature.

(1:12-)
Basically, the sensor is only a resistor, whose value changes in line with the temperature. But how does it show us the exact value. For example, a hundred ohm at 0 degree celsius. First of all, pure platinum, a hundred times thinner than the human hair, is placed on to a highly pure ceramic substrate.

(1:35-)
The so-called wafers are produced in dust-free clean rooms. Using processes from semiconductor technology, numerous small temperature dependent resistors are produced on the wafers. A highly precise laser trims them to the exact resistance value. In this case, a hundred ohm at 0 degree celsius.

<hr>
heaprest か heaplest という単語は初めて聞いた。
検索してもそれらしいものは見つからず。

platinum(白金）や thermo-coulpled materialでの温度測定というのは関連図書で出てくる。
Ruby gemをScrutinizerで品質管理

Qiitaで流れてきた記事に、[PHP開発でCIするならScrutinizer使ってみよう](http://qiita.com/k-motoyan/items/a63d7add9dc35ae8317a)というのがありました。気になってサイトを見てみると、Rubyにも使えることがわかったので、自作の[`jkr2255/prop_logic`](https://github.com/jkr2255/prop_logic)に導入してみました。

基本機能などはほぼ同じなのでそちらに任せることにして、自分がやってみて気になった点や、Ruby特有の事情だけまとめてみます。

# ユーザー登録
ユーザー登録のプロセスは、次の3段階でした。

0. GitHubログイン
0. 名前やメールアドレスの登録
1. メールアドレスの認証

GitHubやTravis CI同様、「パブリックリポジトリに使うだけなら完全に無料」ですので、支払い情報をそもそも登録する必要もありませんでした。

# プロジェクトごとの設定
RSpecが入っていれば自動で回してくれるので、とりあえずは何も設定しなくても動くかもしれませんが、標準では **Ruby 1.9.3**が選ばれてしまいました。今回の`prop_logic`はRuby 2.0.0以降に対応するものですので[^1]、そこは設定が必要でした。

設定方法としては、Travisのように`.scrutinizer.yml`ファイルを作ることもできますし、Webインターフェースからも設定できます。

## カバレッジの取得
Rubyでカバレッジを取得する場合、[`scrutinizer-ocular`](https://github.com/scrutinizer-ci/ocular.rb)というGemを入れる必要があります。`.gemspec`の`.add_development_dependency`で追加した上で、`spec_helper.rb`に2行を追加します。

```rb:spec/spec_helper.rb
require 'scrutinizer/ocular'
Scrutinizer::Ocular.watch!
```

それを使うように設定したら、以下のようになりました。

```yaml:.scrutinizer.yml
checks:
    ruby: true
filter:
    excluded_paths:
        - 'spec/*'
build:
    environment:
        ruby: '2.2.3'
    tests:
        override:
            -
                command: 'bundle exec rspec spec'
                environment:
                    'SCRUTINIZER_CC_FILE': 'my-coverage'
                coverage:
                    file: 'my-coverage'
                    format: 'rb-cc'
```


# 測定結果
[このようになりました](https://scrutinizer-ci.com/g/jkr2255/prop_logic/)。強制ではないとはいえ、ローカルにRubocopを入れていたこともあって、スコア9.5、そしてテストカバレッジも99%を記録しました[^2]。例によってバッジも用意してあるので、`README.md`に貼り付けることもできます。


[^1]: Ruby 1.9.3を超える文法やメソッドを使っている、というわけでもないのですが、ウィークリファレンスが不安定なためにテストが通りません。
[^2]: 残り僅かの部分は、`require`を書き換えないと呼ばれない部分だと思います。
arduinoでusb device

#概要
arduino leonardoでusbキーボード、usbマウスをエミュレートしてみた。
#写真
![MVC-002S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/84ef9247-c12c-a3fc-c1b8-b2f41166d600.jpeg)

#写真
![badusb.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/f6a85066-9d96-ad5e-43f4-6a5f52668d9d.jpeg)

#サンプルコード
```
void setup()
{
	pinMode(8, INPUT_PULLUP);
	Serial.begin(115200);
	while (!Serial);
	Keyboard.begin();
	Mouse.begin();
	Serial.println("Start");
}
void loop()
{
	int x, y;
	if (digitalRead(8) == HIGH)
	{
		//Serial.println("off");
	}
	else
	{
		Serial.println("on");
		Keyboard.press(KEY_LEFT_GUI);
		delay(100);
		Keyboard.press('r');
		delay(500);
		Keyboard.releaseAll();
		delay(500);
		Keyboard.print("mspaint");
		Keyboard.press(KEY_TAB);
		Keyboard.press(KEY_RETURN);
		delay(500);
		Keyboard.releaseAll();
		delay(700);
		Mouse.press();
		for (float r = 0; r <= 3.1415 * 2; r += 0.01)
		{
			x = sin(5.0 * r) * 5.0;
			y = cos(8.0 * r) * 5.0;
			Mouse.move(x, y, 0);
			delay(10);
		}
		Mouse.release();
	}
	delay(100);
}

```
UITextViewでplaceholderを実装する（Swift）


UITextFieldにはplaceholderがありますが、UITextViewにはありません。
今回は、UITextViewでもplaceholderを使えるように、新しいクラスを作って見ました。


##実装方法
1. UITextViewを継承した新しいClass（ファイル）を作成
2. UITextViewにCustomClassとしてPlaceHolderTextViewを指定
3. ソースコードでplaceholderの文字と文字色を指定


##ソースコード
```ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textView: PlaceHolderTextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        textView.placeHolder = "文字を入力してください"
        textView.placeHolderColor = UIColor(red: 0.1, green: 0.1, blue: 0.1, alpha: 0.8)

    }

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

``` PlaceHolderTextView.swift
import UIKit

public class PlaceHolderTextView: UITextView {
    
    lazy var placeHolderLabel:UILabel = UILabel()
    var placeHolderColor:UIColor      = UIColor.lightGrayColor()
    var placeHolder:NSString          = ""
    
    required public init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
    }
    
    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    
    override public func awakeFromNib() {
        super.awakeFromNib()
        
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "textChanged:", name: UITextViewTextDidChangeNotification, object: nil)
    }
    
    override public func drawRect(rect: CGRect) {
        if(self.placeHolder.length > 0) {
            self.placeHolderLabel.frame           = CGRectMake(8,8,self.bounds.size.width - 16,0)
            self.placeHolderLabel.lineBreakMode   = NSLineBreakMode.ByWordWrapping
            self.placeHolderLabel.numberOfLines   = 0
            self.placeHolderLabel.font            = self.font
            self.placeHolderLabel.backgroundColor = UIColor.clearColor()
            self.placeHolderLabel.textColor       = self.placeHolderColor
            self.placeHolderLabel.alpha           = 0
            self.placeHolderLabel.tag             = 1
            
            self.placeHolderLabel.text = self.placeHolder as String
            self.placeHolderLabel.sizeToFit()
            self.addSubview(placeHolderLabel)
        }
        
        self.sendSubviewToBack(placeHolderLabel)
        
        if(self.text.utf16.count == 0 && self.placeHolder.length > 0){
            self.viewWithTag(1)?.alpha = 1
        }
        
        super.drawRect(rect)
    }
    
    public func textChanged(notification:NSNotification?) -> (Void) {
        if(self.placeHolder.length == 0){
            return
        }
        
        if(self.text.utf16.count == 0) {
            self.viewWithTag(1)?.alpha = 1
        }else{
            self.viewWithTag(1)?.alpha = 0
        }
    }
    
}

```
技術英語 > [Up till now], it's all been theory. [I never thought it would actually happen].

@ Star Trek Voyager > THRESHOLD

実現したばかりのワープ10を実用することになって Chakotay が

> Up till now, it's all been theory. I never thought it would actually happen.

up till now という言い方は初めて聞いた(意識した)
http://ejje.weblio.jp/content/up+till+now

I never thought it would actually happen
は使いそうだ。

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

http://qiita.com/7of9/items/cdca4a566bee1e0f40cc
> I assure you, Captain, it will not happen again.
HTML,CSS勉強メモ #13 〜画像付きリストが横にならずにハマる〜

前回からずっとハマっています・・・

##**進度**##
<dl>
<dt>mainの画像付きリストを横並びにしたい</dt>
<dd><p>レッスン内では画像付きリストは縦に並べ、説明をその横に付ける形になっているが、
これを画像を横並びにして、説明をその下に付けたい。</p>
</dd>
</dl>


##**メモ**##
<dl>
<dt>ハマってるその１</dt>
<dd>とりあえず`li`に`float;left;`をつけてみたけど、横並びにならない。</dd>
<dt>ハマってるその２</dt>
<dd>`css`を最初から見直し、`width`を％で指定しているところをPXに直す。

* そもそもなぜ％で指定したのか
 * 伸縮させても`main-container`の中央配置を維持させようとしたからです。
最初PXで指定したところ、伸縮に合わせてついてきてしまったので％で指定していました。
 * 上記の改善

```css
main-conteiner{position: absolute;             
               top:0;
               bottom:0;
               right:0;
               left:0;
               margin: auto;
}
```
これで常に中央配置を保てる技を見つけました。

* `menu`の幅を％からPXにしたところ、中央配置が崩れた。
 * 今ここです。

ひとまず頭の中整理させるために一度メモっときます。
＊ちなみに書きながら最初の画像付きリストについて、もしかして`li`に`float`つけたのがいけなかったのでは？と思い、試しに`li>img`に付けてみたところ効きました。
しかしレイアウトはだだ崩れなのでmenuの問題が解決したら考えてみようと思います。
結局`width`の指定の仕方は関係なかったってことですね・・・
arduinoでusb host その5

#概要
arduino unoにusb hostつないで、arduino leonardoのデバイス　ディスクプリターをとってみた。
#写真
![MVC-001S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/bc51ac57-f90f-d7b2-0ad7-cf9a45c53b41.jpeg)

#結果
```
Start

Addr:1(0.0.1)


01
--

Device descriptor>>
Descriptor Length:      12
Descriptor type:        01
USB version:            0200
Device class:           00
Device Subclass:        00
Device Protocol:        00
Max.packet size:        40
Vendor  ID:             2341
Product ID:             8036
Revision ID:            0100
Mfg.string index:       01
Prod.string index:      02
Serial number index:    00
Number of conf.:        01

Configuration descriptor>>
Total length:           0064
Num.intf:               03
Conf.value:             01
Conf.string:            00
Attr.:                  80
Max.pwr:                FA
Unknown descriptor>>
Length:         08
Type:           0B
Contents:       0002020201000904

Interface descriptor>>
Intf.number:            00
Alt.:                   00
Endpoints:              01
Intf. Class:            02
Intf. Subclass:         02
Intf. Protocol:         00
Intf.string:            00
Unknown descriptor>>
Length:         05
Type:           24
Contents:       0010010524
Unknown descriptor>>
Length:         05
Type:           24
Contents:       0101010424
Unknown descriptor>>
Length:         04
Type:           24
Contents:       02060524
Unknown descriptor>>
Length:         05
Type:           24
Contents:       0600010705

Endpoint descriptor>>
Endpoint address:       81
Attr.:                  03
Max.pkt size:           0010
Polling interval:       40

Interface descriptor>>
Intf.number:            01
Alt.:                   00
Endpoints:              02
Intf. Class:            0A
Intf. Subclass:         00
Intf. Protocol:         00
Intf.string:            00

Endpoint descriptor>>
Endpoint address:       02
Attr.:                  02
Max.pkt size:           0040
Polling interval:       00

Endpoint descriptor>>
Endpoint address:       83
Attr.:                  02
Max.pkt size:           0040
Polling interval:       00

Interface descriptor>>
Intf.number:            02
Alt.:                   00
Endpoints:              01
Intf. Class:            03
Intf. Subclass:         00
Intf. Protocol:         00
Intf.string:            00
Unknown descriptor>>
Length:         09
Type:           21
Contents:       010100012265000705

Endpoint descriptor>>
Endpoint address:       84
Attr.:                  03
Max.pkt size:           0040
Polling interval:       01


```
指定したユーザーが SharePoint ファーム内のどのグループに(直接)所属しているか洗い出す 身元調査PowerShellスクリプト


が、これだ ☟☟☟

```
$UserName = "琴奨菊 和弘"
Write-Host ("{0} 君の所属しているサイトSPグループが、コレだ ☟☟☟" -F $UserName )
Get-SPSite | %{ $_.AllWebs | %{ $_.Groups | %{ ($g = $_).Users | ? DisplayName -eq $UserName | %{ Write-Host $g } } } }
```
SharePoint CSOM で「最近使った項目」の中のアイテムを消し去る


SharePoint アプリ、じゃなかった SharePoint アドインを追加すると、勝手にサイドメニューに追加されるので消したかったのです。今回は C#です。

```csharp
// サイドナビゲーション取得
NavigationNodeCollection navLocalNodes = clientContext.Web.Navigation.QuickLaunch;

// 最近使った項目から消し去るために探す
IEnumerable<NavigationNode> ndRecent
    = clientContext.LoadQuery(
        navLocalNodes.Include(
            n => n.Id,
            n => n.Children.Include(
                n2 => n2.Url, n2 => n2.Title
            ).Where( n2 => n2.Title == "(消し去りたい見出し)" )
        ).Where( n => n.Id == 1033 ) // 最近使った項目のIDを指定
    );
// いったんサーバーからお取り寄せ
clientContext.ExecuteQuery();

// グルグルと
ndRecent.ToList().ForEach( n =>
{
    n.Children.ToList().ForEach( n2 =>
    {
        // 最近使った項目から消し去る
        n2.DeleteObject();
        n2.Update();
    });
});
// さようなら
clientContext.ExecuteQuery();

```
NSAttributedStringを前向きな気持で扱うためのライブラリを作りました

# イントロ
[NSAttributedString](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSAttributedString_Class/)で表示テキストへ装飾しようと思うと、以下の様な記述をすると思います。

```swift
let label = UILabel(frame: CGRectMake(0,0,100,50))
let str1 = NSMutableAttributedString(
    string: "Hoge", 
    attributes: [
       NSForegroundColorAttributeName: UIColor.redColor(),
       NSFontAttributeName: UIFont.systemFontOfSize(14)
    ]
)
let str2 = NSMutableAttributedString(
    string: "Fuga", 
    attributes: [
       NSForegroundColorAttributeName: UIColor.blueColor(),
       NSFontAttributeName: UIFont(name: "Helvetica", size: 17)!
    ]
)
str1.appendAttributedString(str2)
label.attributedText = str1
```

この記述方法に対して、いくつかやりにくさを感じていました。

* attributesとして設定できるものが[String: AnyObject]なので、定数名と値として設定できる型を覚えておくなり調べるなりする必要がある
* 単純にUILabelやUITextViewへテキストを入れるだけに比べ、やたらコード量が膨れ上がる
* あとから読み返したり人が書いたコードを読んだ時、どう表示されるのかすぐにイメージ出来ない

仕事でWebサイトっぽい装飾のUIを求められやすいのですが、そんな時は大体NSAttributedStringを使うようにしています。結構よく使うにもかかわらずずっと苦手意識を持っており、「できるだけ使いたくないなぁ...」と思いながら渋々コードを書いてきました。この憂鬱な気持ちから開放されるために、NSAttributeStringを生成するためのライブラリを開発しました。

https://github.com/kazuhiro4949/StringStylizer

# 使い方
同じテキスト表示をこのライブラリで行うと以下のようになります。

```swift
let label = UILabel(frame: CGRectMake(0,0,100,50))
label.attributedText = "Hoge".stylize().color(.redColor) .size(14).attr +
                       "Fuga".stylize().color(.blueColor).size(17).font(.Helvetica).attr
```

メソッドチェーンで文字列に対してスタイルを適用していき、最終的に"attr"を呼ぶとNSAttributedStringへ変換されます。NSAttributedStringを"+"で連結できるようしているため、異なるスタイルが適用された文字列を足していく感じで書けます。

範囲指定もできるようにしており、さきほどの文字列は

```swift
let label = UILabel(frame: CGRectMake(0,0,100,50))
label.attributedText = "HogeFuga".stylize()
                         .range(0..<4)       .color(.redColor) .size(14)
                         .range(4..<UInt.max).color(.blueColor).size(17).font(.Helvetica)
                         .attr
```

とも書けます。

# 特徴

+ メソッド名と引数によって、どんな属性が指定できて値には何を入れたらいいかはっきりする
+ メソッドチェーンを使い、思考の流れに沿って線形的にスタイルを指定していけるので書きやすい
+ 文字列と属性をNSAttributedStringへ渡すのではなく、文字列に対して属性を適用していくよう書けるため読みやすい

# 実装
インターフェース部分は基本的にはBuilder Pattern(Effective Java versionとか言われているほう)で作っています。

また、このクラスでは状態の違いによって振る舞いを変えたかったのですが
、その時の参考にPhantom Typeという手法を利用しました。

* 範囲選択をしたらその後必ずひとつ以上のAttributeの適用を行う
* Attributeの適用後はNSAttributedStringへの変換や新たな範囲選択ができる

@taketo1024さんの[「Swift で Phantom Type (幽霊型)」](http://qiita.com/taketo1024/items/71e3272211f08d7e0cde)がなんか使えそうだと思って、型パラメータの違いによって呼べるメソッドを出し分ける、という実装にしました。

はじめに必ずStringへstylize()を呼ぶようにしているのは、一旦こちらで用意したクラスへ変換した上で、その中に用意された色々なメソッドを呼べるようにしたかったためです。また、最終的にNSAttributedStringを作るためには明示的にattrを呼ぶ必要があるようにしました。あくまでもこのライブラリの役割は、StringからNSAttributedStringを作るところまでに絞っています。

![](https://cloud.githubusercontent.com/assets/18266814/14271674/4d5bb9de-fb36-11e5-819c-cb2061d49be4.png)



# 最後に
まだバグとかあるかもしれませんが、NSAttributedStringに対して自分と同じ苦しみを感じていらっしゃる方は是非使ってみてください。皆さんが気持ちよくプログラムを書いていく時の力になれれば幸いです。
cacooで知っていると便利な技


#ロック

ドラッグ＆ドロップして移動させたいのに、背景動いちゃう！というときに、右クリックしてロックというのをすると、あら不思議、そのオブジェクトをロックすることができます。
![Cursor_と_Untitled_1__jinejer人事管理画面ワイヤー_-_Cacoo.png](https://qiita-image-store.s3.amazonaws.com/0/44315/f8896de6-23b3-be7f-65c9-d0f1072eb1af.png "Cursor_と_Untitled_1__jinejer人事管理画面ワイヤー_-_Cacoo.png")


#オブジェクトの複製
Command + d 
結構便利な技

#背景シート
テンプレートを使うときに背景に指定できる。
WEBのテンプレートや、仕様書を作るときに必ず背景が決まっているときに指定するととっても重宝する。

![スクリーンショット 2016-04-09 2.22.25.png](https://qiita-image-store.s3.amazonaws.com/0/44315/0d4243e3-1192-147e-3ff3-b33fa4941d62.png "スクリーンショット 2016-04-09 2.22.25.png")

#パネルの表示を消す
Tab キー

最近まで知らず、、、
小さい画面で操作してると、どうしてもパネルが邪魔になる。そんなときにTABを押すと消える。再度押すと表示される。GOOD!!いや、GOD！！

#ヘルプ
よーくヘルプをみてみよう、、、いろいろ載ってる。

![スクリーンショット 2016-04-09 2.26.38.png](https://qiita-image-store.s3.amazonaws.com/0/44315/a721ae96-07f5-8da4-f227-a81f6a0cd764.png "スクリーンショット 2016-04-09 2.26.38.png")


気が向いたら追加してみます。
validator.mapping.cache.doctrine.apcはSymfony 2.8から

[公式ドキュメント](http://symfony.com/doc/current/reference/configuration/framework.html#reference-validation-cache)にも出てくる`validator.mapping.cache.doctrine.apc`サービスはSymfony 2.8からしか使えません。

```yml:config.yml
framework:
    validation:
        cache: validator.mapping.cache.doctrine.apc
```

2.7でも使えるものと思い込んでいましたが2.7でこのように定義してもサービスなしエラーになってしまいます。

## 2.8より前のバージョンでは
サービスが用意されていないので自前でサービス定義します。
以下サービス定義の一例

```yml:config.yml
framework:
    validation:
        cache: validator.mapping.cache.doctrine

services:
    validator.mapping.cache.doctrine:
        class: Symfony\Component\Validator\Mapping\Cache\DoctrineCache
        # ApcCache
        arguments: [@doctrine_cache.apc]
        # FilesystemCache
        #arguments: [@doctrine_cache.filesystem]

    doctrine_cache.apc:
        class: Doctrine\Common\Cache\ApcCache
        calls:
            - [setNamespace, [%validator.mapping.cache.prefix%]]

    doctrine_cache.filesystem:
        class: Doctrine\Common\Cache\FilesystemCache
        arguments:
            - %kernel.cache_dir%/validation
            - .php
        calls:
            - [setNamespace, [%validator.mapping.cache.prefix%]]
```
AuthComponentでログインしているときとしていないときでビューの出しわけ

CakePHPのAuthComponentで、ログイン機能を実装している状態とします。
AuthComponentは`login()`メソッドの他にも使い易い機能があります。
今回はその中でも、`user()`を使用します。
これは、*現在ログインしているユーザーの情報を取得する*メソッドです。
`user()`については、下記の記事が分かりやすいので、さらに知りたい方はご覧になってください。
<a href="http://qiita.com/kazu56/items/a54596e963d9e2b71f2e" target="_blank">【CakePHP】Authコンポーネント</a>
# ログインユーザーの情報を取得
今回実装したいページの関数内にて、ログインユーザーの情報を取得します。

```php:UsesController.php
public function index() {
    // ...

    // ログインユーザーの情報を取得
　　$user = $this->Auth->user();

    // ビューに渡す
    $this->set('user', $user);

　　// 中に入っている配列を確認（必要なければ消してください。）
    var_dump($user);

    // ...
}
```

もし中に入っている値を確認したければ、`var_dump`で確認しましょう。
# ビューにて出しわけ
今回は、**ログイン状態のときはログアウトを**、**ログインしていないときはログインを**出すようにします。

```php:index.ctp
if (isset($user)) {
    // ログインしているとき
    // ログアウトへのリンクをだす
    echo $this->Html->link('ログアウト', array('controller'=>'users','action'=>'logout'));
} else {
    // ログインしていないとき
    // ログインへのリンクをだす
    echo $this->Html->link('ログイン', array('controller'=>'users','action'=>'login'));
}
```

ログインしている状態のとき、`$user`には値が入っており、逆にログインしていないときは入っておりません。
そのため、`isset`を利用します。
`isset`は変数が存在しているか調べる関数です。
<a href="http://www.phpbook.jp/func/var/index4.html" target="_blank">変数が存在するかどうかの判別(isset)</a>
<a href="http://php1st.com/1402/" target="_blank">isset関数とempty関数と「!」の違い</a>
AuthComponentを利用した、ちょっとしたリンクの出しわけでした。
PHP オススメのライブラリ


フレームワーク関係のものを除く

## データ操作

### Carbon

時刻操作のためのライブラリ

https://github.com/briannesbitt/Carbon

````
$ composer require nesbot/carbon
````

### php-markdown

PHP製のマークダウンパーサ

https://github.com/michelf/php-markdown

````
$ composer require michelf/php-markdown
````

### faker

ダミーデータ生成用のライブラリ

https://github.com/fzaninotto/Faker

````
$ composer require fzaninotto/faker
````

## HTTP 関連

### Guzzle

HTTP リクエスト送信のためのライブラリ

https://github.com/guzzle/guzzle

````
$ composer require guzzlehttp/guzzle
````

### Gouttte

HTTP スクレイピングのためのライブラリ

https://github.com/FriendsOfPHP/Goutte

````
$ composer require fabpot/goutte
````

## 環境制作・開発補助

### Monolog

ログライブラリの決定版

https://github.com/Seldaek/monolog

````
$ composer require monolog/monolog
````

### PHPUNIT

PHPテストツール

https://github.com/sebastianbergmann/phpunit

````
$ composer require phpunit/phpunit
````


### psysh

PHPを対話的に実行できるツール

https://github.com/bobthecow/psysh

````
$ composer require psy/psysh
````

## 外部サービス

### AWS SDK

AWS 関連の機能がPHPから操作できる

https://github.com/aws/aws-sdk-php

````
$ composer require aws/aws-sdk-php
````

### Google API Client

Google APIがPHPから操作できる

https://github.com/google/google-api-php-client

````
$ composer require google/apiclient
````

### Facebook php-sdk

Facebookの機能がPHPから操作できる

https://github.com/facebook/facebook-php-sdk-v4

````
$ composer require facebook/php-sdk-v4

````

### Sendgrid

メール送信サービス Sendgrid のSDK

https://github.com/sendgrid/sendgrid-php.git

````
$ composer require sendgrid/sendgrid

````
ssh先でコピーしたいファイルがあった時の楽そうなコピーの仕方

sshでサーバに入ってファイルを見ている時に，コピーして手元に持ってきたい場合が多々あるけど，
いまいち良い方法がなかった気がする．愚直にやると，

```
ssh hogehoge-server
cd /hoge/hoge/search/ # (なにかファイルを探して)
pwd
# (logoutして元のclient側で）
scp hogehoge-server:/hoge/hoge/search/ /tmp
```
とかになる．
sshで入っているその場ですぐにコピーしたいと思うと，ssh-agentで入っておいて，client側の公開鍵をclientのauthorized_keysに入れておけばいい．ssh-agentは下の記事が参考になる．
http://qiita.com/isaoshimizu/items/84ac5a0b1d42b9d355cf

```
ssh -A hogehoge-server
cd /hoge/hoge/search/ # (なにかファイルを探して)
scp target-file iory@(client側のip):/tmp
```
でできるようになる．
Tableau Publicからデータに接続できずクラッシュする


自宅でもTableauを使ってみようと思い立ち、Tableau Publicをインストールしてみた。
xlsxやcsvのデータへ接続しようとすると、コケる。

環境
Dell Inspiron15
Windows10 64bit

>Tableau は動作を停止しました
発生した問題により、プログラムが正しく動作しなくなりました。プログラムを閉じてください。

データへの接続時に Tableau が応答を停止する
http://kb.tableau.com/articles/issue/error-program-stopped-working-correctly?lang=ja-jp

解決しない。


イベントビューアーからエラーログを確認。

>障害が発生しているアプリケーション名: tabpublic.exe
障害が発生しているモジュール名: ntdll.dll

Tableau 9.2 crashes whenever moving worksheets
https://community.tableau.com/thread/196103

Dell コンピューターでファイルを開くまたはファイルを保存したときのエラー "Tableau が動作を中止しました"
http://kb.tableau.com/articles/issue/error-tableau-has-stopped-working-opening-or-saving-file-on-a-dell?lang=ja-jp

「Dell Backup and Recovery」をいったんアンインストール。

Tableau Publicからxlsxに接続できた。
MacとiPhoneでlocalhost接続を行う方法（iOS9）

Web開発やアプリ開発をする上で、実機でローカルホスト接続を行いたい場面があると思います。

#実行環境

・iOS9 
・OS X El Capitan 10.11.3 
・Wi-fi接続

今回の実行条件としてiPhoneとMacが同じネットワーク上に接続していることが必須となります。

Lightningケーブルで接続する必要はありません。

#Macのローカルホスト名を確認

まずはじめに、接続先となるMacのローカルホスト名を確認します。

ローカルホスト名は「システム環境設定」から「共有」を選択し、コンピュータ名が書いてあるテキストボックスの下に書いてあります。

![ios-osx-local-1-min.png](https://qiita-image-store.s3.amazonaws.com/0/89348/981e96b4-a31e-b402-8740-92ebc95a90c5.png)


「**.local」と書いてある文字列がそうです。右側の編集ボタンを押して違う名前に変更することも可能です。

#Safariからローカルサーバーへ接続

ローカルホスト名が確認できたらMac上のブラウザから`http://localhost`と接続するように、localhostの部分をMacのローカルホスト名に置き換えて`http://**.local`と入力して接続します。

![ios-osx-local-2-min.jpg](https://qiita-image-store.s3.amazonaws.com/0/89348/ade6b89b-963b-4eb7-cb58-8d008d262cb5.jpeg)


これでiPhoneからローカルホスト接続ができると思います。もし接続がうまくいかない場合は、同じネットワークに接続しているか、 またはポート番号を設定していて間違っていないかを確認しましょう。

#アプリからローカルサーバーへ接続

ここまででiPhone上のブラウザからローカルサーバーへ接続するのは可能になったわけですが、Xcodeで作成したアプリから接続するには あとひとつ設定を行わなければいけません。

なぜなら、作成したアプリの設定では、App Transport Securityの影響でhttp接続の**.localのローカルサーバーとは通信できないからです。

そこで設定を変更する為に、作成したアプリのinfo.plistを開いて以下の項目を記入します。

~~~
<key>NSAppTransportSecurity</key> 
<dict> 
　<key>NSAllowsArbitraryLoads</key>
　<true/> 
</dict>
~~~

Xcodeのリスト表示上では、このように表示されれば設定は完了です。

![ios-osx-local-3.png](https://qiita-image-store.s3.amazonaws.com/0/89348/9ecf36cb-16a0-fe5b-6e32-d9a3bf7bf2ed.png)


以上で、iPhoneアプリからでもMac上のローカルサーバーへ接続できると思います。
MediaWiki APIを使ってhubotにwikiらせた

Slack上でbotにwikiの情報を調べさせる方法を紹介します。

![hubot-slack-wiki-1-min-1024x364.png](https://qiita-image-store.s3.amazonaws.com/0/89348/a5df519d-0a9b-9c1e-c82e-c7ab090f1966.png)

情報を取得する手段として、MediaWiki APIでリクエストを送りその結果をJSON形式で受け取ります。

MediaWikiの公式ドキュメントはこちら
https://www.mediawiki.org/wiki/API:Main_page

#MediaWiki APIの仕様

APIを使用する上で必要最低限の仕様を簡単にまとめておきます。

##URLフォーマット

日本語版のWikipediaを利用するには、以下のURLにリクエストを送ります。

~~~
http://ja.wikipedia.org/w/api.php?パラメータ1=値1&パラメータ2=値2&...&パラメータn=値n
~~~

##パラメータの種類

今回は以下のパラメータを利用します。

|パラメータ	|意味|	値|
|---|---|---|
|action|	操作|	query, edit,...|
|format|	出力フォーマット|	 json, xml, ...|
|prop|	記事の各構成要素を取得|	info, extracts, revisions,...|
|redirects|	転送設定|	1(あり),0(なし)|
|exchars|	文字数|	整数|
|explaintext|	文字の修飾を外す|	1(あり),0(なし)|
|titles|	記事タイトル|	URLエンコードされてた文字列|

#ソースコード

はじめに全体のソースを貼ります。コピペで動作します。

requestクライアントが入っていない場合はインストールしてください。

~~~
npm install request
~~~

以下、ソースコード

~~~coffeescript
request = require('request');

module.exports = (robot) ->
robot.hear /wiki (.*)/i, (msg) ->
keyword = encodeURIComponent msg.match[1]
request.get("https://ja.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&redirects=1&exchars=300&explaintext=1&titles=#{keyword}", (err, res, body) ->
if err or res.statusCode != 200
return msg.send "アクセスできなかったよ"

data = JSON.parse(body)
for id, value of data.query.pages
msg.send "#{value.extract}" 
)
~~~

それでは各処理の説明をします。

~~~
keyword = encodeURIComponent msg.match[1]
~~~

APIでリクエストする際に日本語はURLエンコードしなければいけないので、入力されたキーワードを変換しています。

~~~
request.get("https://ja.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&redirects=1&exchars=300&explaintext=1&titles=#{keyword}", (err, res, body) ->
　　if err or res.statusCode != 200
　　　　return msg.send "アクセスできなかったよ"&nbsp;
~~~

実際にリクエストしているのがこの処理です。上で紹介したパラメータを”＆”で繋げ、titlesの部分にはURLエンコードされたキーワードを使用します。

エラーか２００（成功）以外のステータスコードが返ってきた場合には「アクセスできなかった」というメッセージを出力させます。


~~~
data = JSON.parse(body)
for id, value of data.query.pages
msg.send "#{value.extract}" 
~~~

データの取得に成功したらjsonデータを解析し変換します。日本語の文字列も正しく表示されます。取得したjsonデータはfor ofを使うことで結果の部分を抜き取れます。


以上で「wiki [キーワード]」と入力するとhubotがウィキれるようになります。


#参考

http://qiita.com/yubessy/items/16d2a074be84ee67c01f
XCPlaygroundを試してみる２　〜アルキメデスの螺旋〜


![スクリーンショット 2016-04-09 01.11.59.png](https://qiita-image-store.s3.amazonaws.com/0/40693/100c9744-15d8-8206-1294-8030e020f34e.png "スクリーンショット 2016-04-09 01.11.59.png")


やや手抜きで作っています。

```MyPlayground

//: Playground - noun: a place where people can play

import UIKit
import XCPlayground

var view = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))


class customLayer : CAShapeLayer {
    
    override init() {
        super.init()
    }
    
    override init(layer: AnyObject) {
        if let layer = layer as? customLayer {
        }
        super.init(layer: layer)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func drawInContext(ctx: CGContext) {
        //背景
        let c = UIColor.whiteColor()
        CGContextSetFillColorWithColor(ctx, c.CGColor)
        CGContextAddRect(ctx, self.bounds)
        CGContextDrawPath(ctx, .Fill)
        
        let cc = UIColor(hue: 240/360, saturation: 1.0, brightness: 1.0, alpha: 1.0)
        
        var x : CGFloat = 0
        var y : CGFloat = 0
        var r : CGFloat = 0
        var b : CGFloat = 0
        
        b = 0
        r = 0
        x = 5 * r * cos(r) + CGRectGetMidX(view.frame)
        y = 5 * r * sin(r) + CGRectGetMidY(view.frame)

        for a in 1.stride(to: 4500, by: 1) {
            b = b + 1/sqrt(pow(x,2) + pow(y,2))
            r =  CGFloat(2 * Double(b))
            x = 5 * r * cos(r) + CGRectGetMidX(view.frame)
            y = 5 * r * sin(r) + CGRectGetMidY(view.frame)
            CGContextAddEllipseInRect(ctx, CGRectMake(x, y, 2, 2))
            CGContextSetFillColorWithColor(ctx, cc.CGColor)
            CGContextDrawPath(ctx, .Fill)
            
        }
    }
}

let c = customLayer()
c.frame = view.frame
view.backgroundColor = UIColor.blueColor()
view.layer.addSublayer(c)
c.setNeedsDisplay()


XCPlaygroundPage.currentPage.liveView = view

```

######参考

[螺旋を等間隔でプロットしたい。](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11120914211)

このページのベストアンサーの人のような思考がしたいもんだ
Pentaho Data Integrationでズンドコキヨシ

[ズンドコキヨシ](http://qiita.com/shunsugai@github/items/971a15461de29563bf90#comments)が流行っているのでPentaho Data Integrationで実装してみました。
普通に作っても面白くないのでGUIプログラミングに拘った独自の制限を付け加えました。

#独自の制限
* ズ、ン、ド、コ、キ、ヨ、シの入力以外にキーボードを使わない
* Java, JavaScriptを使わない

Transformation
![transformation.jpg](https://qiita-image-store.s3.amazonaws.com/0/101760/792bdd7c-14d9-d088-3c30-477d06650890.jpeg)

Jobと結果
![job.jpg](https://qiita-image-store.s3.amazonaws.com/0/101760/d7d9155a-2643-aca6-5a52-8c6514da63c0.jpeg)

#ソーソコード
[Github](https://github.com/hitokuno/Zundoko-Kiyoshi-Pentaho)に置きました。
レガシーなPerlスクリプトのrequireで起こる関数の衝突事故を回避する

いわゆるバッドノウハウ。
同じ関数が書かれた.plファイルをそれぞれ呼び出す方法。

```bash:lib1.pl
#!/usr/bin/perl
use strict;
sub test1 {
  print "lib1 call test1\n";
}
1;
```

```bash:lib2.pl
#!/usr/bin/perl
use strict;
sub test1 {
  print "lib2 new call test1\n";
}
1;
```

```bash:old/lib2.pl
#!/usr/bin/perl
use strict;
sub test1 {
  print "lib2 old call test1\n";
}
1;
```

# そのままrequireすると上書きされてしまう

```bash
use strict;
use warnings;
use lib ".";
require "lib1.pl";
require "lib2.pl";
require "old/lib2.pl";

test1();
___END___
lib2 old call test1
```

# 名前空間を分けて呼び出す

```bash:a.pl
use strict;
use warnings;
use lib ".";

Lib1->test1();
Lib2New->test1();
Lib2Old->test1();

BEGIN {
  package Lib1;
  do "lib1.pl";
  package Lib2New;
  do "lib2.pl";
  package Lib2Old;
  do "old/lib2.pl";
}
__END__
lib1 call test1
lib2 new call test1
lib2 old call test1
```

* requireでなく、doにしているのは、requireは同じ名前で呼ばれると２回目は読み込みされないため。（上記のパターンではrequireでも読み込みされた）

# 他の手

```p.pl
use strict;
use warnings;

sub _hello {
        print "hello [@_]\n";
}
1;
```

```r.pl
use strict;
use warnings;
{
  package p;
  require "p.pl";
  sub hello {
    my $self = shift;
    return _hello(@_);
  }
}
p->hello("argment");
```

```bash
$ perl r.pl
hello [argment]
```

# 他の手その２

```p.pl
use strict;
use warnings;

sub hello {
        print "hello [@_]\n";
}
1;
```

```r.pl
use strict;
use warnings;
{
  package p;
  require "p.pl";
}
p::hello("argment");
```


# 参考

型グロブとシンボリックリファレンスでメソッド定義するときの注意点 - Unknown::Programming
http://d.hatena.ne.jp/fbis/20060602/1149228989
声に出して読みたい Java ライブラリ -filter-

# 概要
酔っ払いが Java の "filter" について勢いで書いた雑な記事です。

# filter とは
[RxJava](http://reactivex.io/RxJava/javadoc/rx/Observable.html#filter%28rx.functions.Func1%29) や [Stream API](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html#filter-java.util.function.Predicate-) でおなじみの彼です。Stream の要素数を変化させます。

## 問題
次のコードの出力結果はどうなるでしょうか？なお、main メソッド内で実行されるものとします。

```java:問題
IntStream.range(1, 10).filter(i -> {return i % 2 == 0;}).forEach(i -> System.out.println(i));
```

## 答え
```
2
4
6
8
```

そうですね、2で割り切れる数が Stream に残って出力されます。

# filter が意味するもの
あまり英語に強くない私は filter と聞いたらコーヒーフィルタを思い浮かべます。コーヒーフィルタでほしい物はコーヒーであって、フィルタの中に残る豆ではないはずです。が、Javaのライブラリではそのメタファでは通じません。filter はその Stream に「残すもの」を指定するメソッドです。前述の RxJava や Stream API だけでなく、Storm でも同様(残すものをtrueにする)なので、英語ではそれが一般的なのでしょう。以前、英語の得意な同僚に聞いた限りでは、取り除くのは filter out と言うそうで、単に filter だけであれば「残す」というニュアンスがあるらしいです。

ただ、英単語はいくらでもあるのに、意味に曖昧なところのある語をわざわざ採用したのはなかなか肯定のしがたい気持ちがあります。辞書を引く時間をコーディングやリファクタリングに使いたいですね。はい、「英語を勉強すればいいだけだ」というのはもっともです。

# 最高にイカした Collection Framework の [Eclipse Collections](https://www.eclipse.org/collections/ja/) では
filter に相当するメソッドは [select](https://www.eclipse.org/collections/javadoc/7.0.0/org/eclipse/collections/impl/list/mutable/FastList.html#select-org.eclipse.collections.api.block.predicate.Predicate-) という名前です。select であれば何をやるのか明確ですね。少なくとも「このメソッドは要素を残すのか？取り除くのか？」と初学者が迷うことはないはずです。 一方、 filter と逆の操作をするメソッドもあって、それは [reject](https://www.eclipse.org/collections/javadoc/7.0.0/org/eclipse/collections/impl/list/mutable/FastList.html#reject-org.eclipse.collections.api.block.predicate.Predicate-) という名前です。いいですね。みなぎるセンスを感じます。

私が昨年の JavaOne 報告会で Eclipse Collections を知った時、 Java8 の Stream API にこれらのメソッド名が採用されなかったのを残念に思いました。セッションで聞いた話によると、Eclipse Collections を将来的に JDK に入れることを目標としていらっしゃるそうなので、早いうちにそうなることを望んでいる開発者がここに1人いるということを述べてこの記事を終わることにします。

~~酔いがさめたら記事を消しているかもしれないです。~~
underscoreコードリーディング（unescape）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##unescapeとは


###[underscorejs.orgのunescape](http://underscorejs.org/#unescape)

こんな説明。
>####


```javascript

```

------------- 


###[underscore.unescape](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1362)
コード的にはこのあたり。

```javascript

_.unescape = createEscaper(unescapeMap);

```

_.escapeと同じだが、渡す引数がunescapeMap.
unescapeMapはescapeMapを_.invertしたもの.
そのため、&amp;を&へと変換する。

[unescapeMap](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1344)

```javascript
   // List of HTML entities for escaping.
  var escapeMap = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#x27;',
    '`': '&#x60;'
  };
  var unescapeMap = _.invert(escapeMap);

```
PHPBrewでPHPとOpenSSLをアップデートしてみる


自分のMac環境にてPHPのOpenSSLライブラリを1.0.1i以上にバージョンアップする必要があったため、PHPBrewを利用してアップデートを行いました。

OpenSSLをアップデートするにはどちらにせよPHPを再コンパイルする必要があるのでこの方法が簡単だと思います。

#事前準備

##Homebrew

OpenSSLをアップデートする際にHomebrewを使用します。
以下のコマンドでインストールしましょう。

```
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install”
```


#OpenSSLのアップデート

OpenSSLのバージョンを調べて最新版へアップグレードします。

##OpenSSLのパスを確認

```
$ which openssl
```

##現在のOpenSSLのバージョンを確認

```
$ openssl version
```

##OpenSSLをアップグレード

```
$ brew upgrade openssl
```

##アップデートしたOpenSSLにリンク

```
$ brew link openssl --force
```

##OpenSSLのバージョン確認

```
$ openssl version
```

ここまででMac環境のOpenSSLは最新のものになっていると思います。



#PHPのインストール

##PHPビルドに必要なパッケージ


PHPをビルドするするために必要なパッケージをインストールします。

```
$ brew install automake autoconf curl pcre re2c mhash libtool icu4c intltool gettext jpeg libxml2 mcrypt openssl gmp libevent
```

インストールしたいくつかのパッケージをリンクしておきます。

```
$ brew link curl --force 
$ brew link icu4c --force 
$ brew link libxml2 --force 
$ brew link openssl --force
```

##PHPBrewをインストール

```
$ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
$ chmod +x phpbrew
$ mv phpbrew /usr/local/bin/phpbrew
```

##PHPBrewを初期化

```
$ phpbrew init
```

次の行を.bashrc または .zshrc ファイルに追加し、ターミナルを再起動します。

```
source $HOME/.phpbrew/bashrc
```

##PHPをインストール

インストールできるバージョンを一覧表示します。

```
$ phpbrew known
```

インストールしたいバージョンを指定してインストールします。

```
$ phpbrew install 5.6.19 +default
```

+default は variants という記法で、configure オプションを指定するのに使います。有効な variants は phpbrew list --variants コマンドで確認できます。

##インストールエラーが出た場合

エラーが出た場合、エラーメッセージがでます。
ほとんどは必要なパッケージが足りてなかったりするエラーなので、上のパッケージインストールコマンドを参考にインストールした後、再度PHPのインストールを開始してください。brew linkも同時に行ってください。

##PHPのバージョンを切り替える

PHPのインストールが完了したらそのバージョンへ切り替えなければいけません。


```
$ phpbrew switch 5.6.19
```


ここまできたらPHPをビルドした際に新しいOpenSSLを利用しているためPHPの環境でも最新バージョンが適応されていると思います。


```
$ php -i | grep OpenSSL
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.2g 1 Mar 2016
OpenSSL Header Version => OpenSSL 1.0.2g 1 Mar 2016
OpenSSL support => enabled
```

以上でPHPのインストール及びOpenSSLのアップデートは完了です。

#参考記事

http://www.karakaram.com/mac-install-phpbrew
http://blog.yukarien.com/tech/openssl-versionup/
au +1 collectionのワイヤレスメモリカードリーダーにiPhoneの写真保存しようとしたけどハマった話

![image.png](https://qiita-image-store.s3.amazonaws.com/0/43608/e36631d7-c973-1ab3-2340-71a212f7dd5c.png)
ワイヤレスメモリカードリーダー／ライターA (R03W002A)
というSDカードにWi-Fi経由で画像などをバックアップできる
地味に便利なアクセサリが手に入ったので試したけど一悶着あった話

# 何故かバックアップが途中で止まる
理由は不明だが、画像を全選択しているのに途中で止まり、
一向にバックアップ出来ないという症状に見舞われた。

# 理由はデフォルトの機能だった
- **iPhoneストレージを最適化**

こいつが原因だった。
この[設定＞写真とカメラ＞iPhoneのストレージを最適化]
こいつはオリジナルサイズの写真をiCloudに保存し、
iPhone内にはサムネイルを保存するという
容量乞食にはうってつけの機能なのだが、
ワイヤレスメモリカードリーダーを使用する場合は
オリジナルをダウンロードを選んでおかないと
移動すること自体が出来ない
（というよりWi-Fi塞がれてるからオリジナルをダウンロードできない）
ので、バックアップが途中で止まるということを引き起こした

もし似たような現象が起きた方は試してみていただきたい。

2度と同じ悲劇を生まないように・・・

（こんなのよりGoogle Photo使えば良いんだけどね・・・）
curlでunix domain socket経由アクセスする

本当に毎回毎回毎回書式を忘れてググるので自分用にメモしておく
(manにもきちんと書いてないし…)

## フォーマット

```
curl --unix-socket <ソケットへのパス> http:<URLパス>
```

## 例

```
curl --unix-socket /var/run/app.sock http://localhost/
curl --unix-socket /var/run/app.sock http://localhost/hoge.json
```

こんな感じでcurlでも Unix Domain Socket 経由でアクセスできる。
ただし、curlバージョン7.40以上である必要があります。
jQueryのセレクタの検索速度を簡単に調べた

IntelliJ IDEAでjQueryを書いているとたまに`Inefficient jQuery usage`と表示されることがある。

![Inefficient jQuery usage](https://qiita-image-store.s3.amazonaws.com/0/19605/83075e90-45ce-e0ac-37c0-0d482c9f4042.png)

ざっくり言うと「これ効率悪いから、ID部分とクラスセレクタ部分を分割しようぜ」ということらしいのだが、ホンマでっか？

というわけで以下のコートで調べてみた。

```html
<!DOCTYPE html>
<html>
  <head>
    <title>Sample</title>
  </head>
  <body>
    <div id="div-id">
      <span class="span-class1">hogehoge</span>
      <span class="span-class1">fugafuga</span>
      <span class="span-class2">piyopiyo</span>
      <span class="span-class2">foo</span>
      <span class="span-class3">bar</span>
      <span class="span-class3">foobar</span>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
    <script>
    'use strict';
    function sameSelector() {
      console.time('Include same selector');
      for (let i = 0; i < 100000; i++) $('#div-id .span-class3');
      console.timeEnd('Include same selector');
    }
    function useFine() {
      console.time('Use find');
      for (let i = 0; i < 100000; i++) $('#div-id').find('.span-class3');
      console.timeEnd('Use find');
    }
    </script>
  </body>
</html>
```

結果は、

```
Include same selector: 640.185ms
Use find: 569.863ms
```

おー、ホンマや。

ちなみに生のJavaScriptだとどうなんだろう？

以下のコードを実行。

```js
function querySelector() {
  console.time('Query Selector');
  for (let i = 0; i < 100000; i++) document.querySelectorAll('#div-id .span-class3');
  console.timeEnd('Query Selector');
}
function getElements() {
  console.time('Get elements');
  for (let i = 0; i < 100000; i++) document.getElementById('div-id').getElementsByClassName('span-class3');
  console.timeEnd('Get elements');
}
```

```
Query Selector: 98.683ms
Get elements: 12.100ms
```

やっぱり早いなぁ。
Coursera Machine Learning 機械学習オンラインCourseのススメ

# まとめ

コースを修了して、感動しているので勢いで書いておきます。

Courseraの機械学習のコースは、機械学習に興味があって、迷ってるなら絶対やってみたほうがいいのでぜひ！というぐらいに強くおすすめできます。

修了証明書がいらなければ無料で、日本語字幕も付いてるので英語があまりできなくても問題ありません（課題は英語なのでそれなりに英語は読めないといけない）。
エンジニアリング的な知識は前提とされているので、いくつかやってみようと思う人へとしてまとめておきました。

Couseraはこちら
https://www.coursera.org/learn/machine-learning

![image](https://qiita-image-store.s3.amazonaws.com/0/54356/1f977a12-5eb0-a9bc-68aa-b99225ff88f3.png)


このレベルの内容の講義がオンラインで受けられる、というのが衝撃的で、今から日本の大学に行く意味ってあるんだろうか、ぐらいに感じながら毎週講義を受けていました。
私が大学に行っていたのは１０年以上前だし、特に有名な大学でもなかったので国内でもこのレベルの講義を受けられる大学はあるのかもしれません。

この機械学習のCourseraのコース並のレベルの講義が受けられるならもう一度大学に行きたい。
stanfordならすべての講義がこのレベルなんだろうか。

# きっかけ

Courseraを以前から知っているには知っていたのですが、英語だし、難しそうだし、という先入観があって実際にcourseをちゃんとやったことはありませんでした（gmail見たら2012/5月にも同じコースを受けようとしていた)。

たまたま社内で同僚の @teppei_tosa が[はてながやってる勉強会](http://yubessy.hatenablog.com/entry/2016/01/11/214611)にインスパイアされてやってみよう！と声を上げてくれて始まった社内勉強会で受講することに。

私は１月から４月のコースに参加しました。

# 実際どうだったか

## 社内勉強会

- 毎週木曜日の始業前に１時間、みんなでビデオを見て、疑問点などディスカッション
- Slackのcoursera部屋で、疑問点などを話せるようにする
- GithubのWikiで情報共有

みたいな形です。この中で大切だと思ったのは毎週木曜日に必ず勉強会を開催して、続ける、という点でした。
定期開催を徹底しないと続かないし、モチベーションの維持という観点で毎週みんなで集まるのは良いことですね。
継続は力なり。ただ、どうしても週に１時間だけだと消化できるビデオは少なくて、コースのスケジュールを維持しようとする場合は週に１h*2ぐらいのペースでないと修了証には間に合いません。
たぶん、１人でこのコースを受講しても挫折してました。仲間は大事だ。

## 講義

- Week1,2
 
大学で理系ならちょっとした復習と、Octave/MATLABを使ったことがなければ慣れるための期間、という感じです。
もしここの行列演算とか微分とかで？となる場合は先に↓であげた本に軽くを目を通しておくと良いと思います。
別に理解できてなくても「全然気にすること無いぜ」って感じでAndrew先生が励ましてくれるし、実際大丈夫。

ビデオ見てて「わかんねー」と思っても「別に、こんなの全然理解してる必要はない。使えれば十分だ」という感じで実際に使えることを重視したコースになってるので数学的証明とか気にしなくてもOK。実際に課題は偏微分ができなくても解けるし、「使えそうだ」という実感を持つことができる。

- Week3..7

このあたりはさくさく課題も解けるし、講義も異常にわかりやすいので大学時代に受けた授業はなんだったんだいったい・・・と愕然とする感じです。ただ、課題が結構時間がかかることがあって、私は仕事のプロジェクトが終盤だったこともあって毎週金曜は３-４時とかまでかかってギリギリで課題を出す、みたいな生活ペースでしたorz

日本語の翻訳のタイミングがずれている回があった（忘れてしまった)ので、その回だけは英語をそれなりに聞き取らないと意味が取りづらいかも。全体的に日本語の翻訳はとてもよい感じなので翻訳してくれた方に感謝。Andrew先生の人柄を反映しているすごい良い翻訳になっている気がします。

- Week7~

もうこの辺になると、Quizや課題も解ける自信がついてきて（実際ガイドに沿ってやっていけば素直に解ける）、新しいことを知ることができる喜びを感じながら「あー次のレクチャ早くみたいなー」という感じで昼休みや風呂の時間とか細切れの時間を利用して月・・水あたりでビデオは全部見て、木・金で課題をやる、みたいなペースを確立しました。

## 課題

# これからやってみようと思う人へ

- 線形代数について

行列、ベクトルだけわかればOKで、講義内で補講もあるので大丈夫。
今扱ってる変数が 行ベクトル なのか、列ベクトルなのか、行列のサイズはいくつか、というのを常に意識してコードを書くようにするのがおすすめです。

```
□ □ □ □ □
```
なのか、

```
□
□
□
□
```
なのか、というのを意識しながらコードを書くのが大切。資料でもxだったりx^Tが混ざってたりするので。

[本を読むなら平岡先生（大学の時の学科の助教授でした)の本](http://www.amazon.co.jp/dp/4274065782/)が評判が今も良いみたいなのでおすすめです。

- 微分について

偏微分、というなんか大学の時にやった気はするなぁ、、、というぐらいの感じでも特に問題なかったので、微分のイメージができてれば大丈夫、だと思います。線形代数の↑の本みたいなイメージが良くつかめる本があると良いのですが。。

- 修了証について

課題の提出期限に間に合わせて最後まで行くと、修了証がもらえます。どうしてもスケジュールが決まってないとダレてしまうし、モチベーションが続かなかったりしそうなので取るつもりで受講するのがおすすめです。修了証の発行は申請してから１週間ぐらいかかるので、早めにお金を払ってしまうのが良さそう。修了証が来るまでもどかしい思いをします。


# 今後

この2か月、空いている時間をほぼすべてこのコースの受講に投資したので、これから何を勉強しようかな、、と寂しい感じです。久しぶりに体系的に何かを学ぶ喜びを感じる2か月でした。そういう喜びを忘れかけていた。
Courseraのコースで他にもこの機械学習と同じようなレベルのものがあればCourseraのコースを取ってみようかな、と思っています。

機械学習についても、十分に自分で何かを作れるぐらいの感覚を持つことができたので、自分プロジェクトで何かやりたいなぁ、という感じになっています。機械学習についてそんな感覚をモテるなんて思わなかった。
新人教材用に脆弱な Web アプリを開発した

新年度ですね。
新人教育の季節ですね。

さて、今年配属された新人たち、コーディング経験のある方が多いようです。
ところが例年とは、ある一点が大きく異なっていたのです。

コーディング経験はあれど、サーバサイドアプリケーションも、コンソールアプリも、
ウィンドウアプリケーションも、ほとんど組んだことがない。
そう、イマドキ世代は、開発においてもスマホネイティブ世代だったのです。

また、Web アプリの開発をほとんど経験していないため、
避けては通れない教育課程があることにも気が付きました。

セキュアプログラミングについてです。

スマホアプリでは、(WebView でも使っていなければ) XSSも、CSRFもありません。
スタンドアロンアプリであれば、SQL インジェクションもろくに気にする必要がなく、
セキュリティに対して、そこまでシビアにならずに済んでしまうことは想像に難くありません。

Web アプリ開発を行うにあたり、これは教えなければなりません。
そこで、脆弱な Web アプリにどんなことが起きてしまうのか、実際に体験することができる、
「脆弱な Web アプリ」を開発してみました。

脆弱性テーマはSQLインジェクションです。
https://github.com/yo1000/insecure-user-admin.git

# 環境

* ORACLE Java 1.8.0_45

```
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
```

# アプリの起動

今回は、Web アプリを攻撃することで、実際にクラックされるシーンをイメージしてもらいたかったため、
各自の環境上に、Web アプリケーションを簡単に構築できるようにしました。

```
$ git clone https://github.com/yo1000/insecure-user-admin.git
$ cd insecure-user-admin
$ ./mvnw spring-boot:run
```

これだけです。
これで、Web アプリケーションの立ち上げ、サンプルデータのセットアップまで全て完了です。

# 研修課題
セットアップが完了したら、`README.md` に記載のある通り、エクササイズ 1〜4 に取り組んでもらいます。
エクササイズ 1〜4 の内容は以下のとおり。

1. 入力を工夫し、エラーを誘発して、実行される SQL を調べてみましょう。
2. 調べた SQL をもとに、不正ログインしてみましょう。
3. ログインしたユーザー管理システムで、パスワードを不正に入手しましょう。
4. どのような対策をしておけば、このような不正を防止することが出来たか、考えてみましょう。

なお、簡単な答案については `answer` ブランチに用意しておいたので、ご参考まで。
これでセキュアプログラミング意識しないと、どんなことが起きてしまうのか、
すこしでも実感持ってもらえるといいなー。
Node.jsでWebAPI作成(Express + SQLite3)

前回までの記事で環境の整備を行いました
[CentOS7.2にNode.js環境を構築する](http://qiita.com/kaikusakari/items/2088dcd9d51766af73a3)
[Node.js+Express経由でSQLite3にデータ登録する](http://qiita.com/kaikusakari/items/a64c447167efdcf068c2)

今回は、WebAPIを作成して、以下の動きを実現します。
「リクエスト→Node.js→SQLite3→Node.js→レスポンス」
#バージョン確認と、事前作業
バージョンの確認と、expressコマンドを利用可能にします

```sh
[am@Alnilam app]$ node -v
v4.4.2
[root@Alnilam ~]$ npm install -g express-generator 
[am@Alnilam app]$ express -V
4.13.1
```

#Node.jsでAPIを作成する

**expressコマンドで、アプリの雛形を作成する**
コマンドで作成する。frenjyは適当にキーボードを叩いた文字列です。

```sh
[am@Alnilam ~]$ express frenjy
   create : frenjy
   create : frenjy/package.json
   create : frenjy/app.js
   create : frenjy/public
   create : frenjy/public/javascripts
   create : frenjy/public/images
   create : frenjy/public/stylesheets
   create : frenjy/public/stylesheets/style.css
   create : frenjy/routes
   create : frenjy/routes/index.js
   create : frenjy/routes/users.js
   create : frenjy/views
   create : frenjy/views/index.jade
   create : frenjy/views/layout.jade
   create : frenjy/views/error.jade
   create : frenjy/bin
   create : frenjy/bin/www

   install dependencies:
     $ cd frenjy && npm install

   run the app:
     $ DEBUG=frenjy:* npm start
```

**自動生成したアプリにモジュールを追加して起動する**
他の言語でいう、ライブラリ・パッケージの管理に当たるものらしい。モジュールの設定はアプリ直下の「package.json」に書いています。

```sh
[am@Alnilam ~]$ cd frenjy/
[am@Alnilam frenjy]$ npm install
[am@Alnilam frenjy]$ npm start
#開発時は、アクセス時に最新を取り直してほしいので、以下オプション追加
[am@Alnilam frenjy]$ npm start -g node-dev
```

ブラウザでアクセスする
![test.png](https://qiita-image-store.s3.amazonaws.com/0/110457/82b37bc2-536c-4fef-6d76-3344e235e7f1.png)
アプリのテンプレート作成、起動が確認できました。続いてAPIを作成します。

#作成したいAPIの情報（仕様、テーブル）
主なAPIの仕様は以下の通り
・ユーザテーブルに登録されたレコード全件をJSONの形で取得
・HTTPメソッド：GET

**このAPIでアクセスするテーブル**

```sql
sqlite> .schema user
CREATE TABLE user (
    id          INTEGER NOT NULL PRIMARY KEY,
    name        TEXT    NOT NULL,
    description TEXT
);
```

#APIの作成
実際にAPIを作成していきます

**APIの記述**
Expressの恩恵や共通化の概念をほぼ無視して、まずAPIを記述

```js:/home/am/frenjy/server.js
var express    = require('express');
var app        = express();
var bodyParser = require('body-parser');
var sqlite3    = require('sqlite3')

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 3000;
var router = express.Router();

app.get('/', function(req, res) {
  var db = new sqlite3.Database('sample');
  db.serialize(function() {
    db.all('SELECT id,name FROM USER', function(err, rows) {
        res.json(rows);
    });
  });
  db.close();
});
app.listen(port);
```

**レスポンス**

```json
[
  {"id":1,"name":"name1"},
  {"id":2,"name":"name2"}
]
```

最近のフレームワークでは、上のようにres.json()という書き方をするだけで、jsonの形式に整形してくれて凄く楽になりました。当然ですが、フレームワークが請け負ってくれている処理はきちんと把握しなければと思います。今回は、Node.jsからDBを参照して、jsonの文字列を返すAPIを作成しました。今後は、DB接続部分の共通化や、DI整形などきちんと整備したいと存じます。
LimechatからGrowl for Windowsに通知させたいな

![growl-icon-4156456465.png](https://qiita-image-store.s3.amazonaws.com/0/43608/54120aa7-74ab-993a-177f-c2f0e371a16e.png)

マクロからすることも出来るんだけど、
いちいちフォーカスを持っていかれるのは正直イライラするのでスクリプトで動作するようにしたいって思ったので、
棒読みちゃんのスクリプトを応用してGrowlが起動してれば通知してくれるようにしたものを導入します

#              スクリプト導入
- [【LimeChatの発言を通知！】Growl for Windows その2　～動作確認まで～](http://ukah2525.blog68.fc2.com/blog-entry-65.html)

自分の昔の記事を頼りにスクリプトの導入をします。
文章が拙すぎて恥ずかしい。

[walrein/limechat-scripts/growl.js](https://github.com/walrein/limechat-scripts/blob/master/growl.js)

 [***DL LINK:右クリックして保存***](https://raw.githubusercontent.com/walrein/limechat-scripts/master/growl.js) 

これが2015年の6月にGithubに追加したスクリプトですね。
リンクを開いたらRawを押して開いたページを右クリックして名前をつけて保存すれば普通にダウンロードできます。

あとはGrowl for Windowsが起動してる状態でLimechatのスクリプトを有効化すればいいだけです。

#              既知の問題点
- GrowlのHistoryフォルダにファイルが溜まって起動が遅くなる  
[LimChat で Growl for Windows 再検討](http://oquno.com/log/eid2492.html)を参考に緩和
- 使ってる人見たこと無い。  
Limechatってオワコンなのかな。なんか寂しいな。

#             免責事項
利用の結果生じた損害について、一切責任を負いません。
ファイルの行数をカウントして変数に入れるワンライナーbat

# Assign number of lines in a file to a variable with one line command on Windows. 

探したけど無かったので書きました。
しばらくしたらbash使うのかな。とりま置きメモ。

```bat:countLine.bat
FOR /f "delims=: tokens=2" %%A IN ('FIND filename.ext /c /v ""') DO SET /A LINES=%%A
```
FIND /c /v "" はファイル最後の空行はカウントしないのでそれで良ければ使えます。ダメな場合は以下

```bat:countLineFull.bat
FOR /f %%A IN ('TYPE filename.ext ^| FIND /c /v ""') DO SET /A LINES=%%A
```
2つ目のカウント、遅くなりませんか？
最後の空行はむしろ数え上げない方がいいときもあるので両方置いときます。
[Unity] Resources配下のファイル名を定数クラスにするエディタ拡張

# ソース
[GenerateResourceNames.cs] (https://gist.github.com/tkyaji/1b12431e79f45bca164fd19288f2e889)

# これは何？
Assets/Resources配下がこんな感じのファイル構成だったら、

![image](https://qiita-image-store.s3.amazonaws.com/0/19872/bc54e4d2-49ab-f346-ce03-30485f8aa7ab.png)



こんな感じの定数クラスを生成するので、

```csharp:Scripts/ResourceNames.cs
public static class ResourceNames {
    public static class Prefabs {
        public const string Cube = "Prefabs/Cube";
        public const string Sphere = "Prefabs/Sphere";
    }
    public static class Sprites {
        public const string Background = "Sprites/Background";
    }
}
```

こんな感じで `Resources.Load` できる。

```csharp:LoadSample
GameObject cubePrefab = Resources.Load<GameObject> (ResourceNames.Prefabs.Cube);
```

# 使い方
Assets/Editorに`GenerateResourceNames.cs`を置くと、
Unityエディタの `メニュー -> Edit` に、`Generate ResourceNames.cs` という
メニューが出てくるので、これを実行すれば `Scripts/ResourceNames.cs` が生成される。

![image](https://qiita-image-store.s3.amazonaws.com/0/19872/a581cd29-1b47-51ad-baee-7d09d03cb809.png)

なお、`Prefabs/Resources` みたいな構成には未対応。`Assets`直下の`Resources`だけ見る。
`$ swift build -C` オプションの使い方 💃 #swiftlang

Swift Package Manager にはいくつかオプションがあります。
それらは `$ swift build --help` コマンドで確認できます。

その中のひとつ `-C` オプションは、別のディレクトリにあるプロジェクトに対して `$ swift build` を実行することができます。

```bash:
OPTIONS:
  --chdir <value>    Change working directory before any other operation [-C]
```

Makefile と同じです 💁

## 例

ビルド対象プロジェクトのルートではないディレクトリにいるものとします。
👇
そのプロジェクトに対して `$ swift build` を実行するには次のコマンドを実行します。

```bash
$ swift build -C <PathToTheRootOfYourProject>
```

`$ cd <PathToTheRootOfYourProject>` コマンドを使う必要がありません。 😇

## 補足

`$ cd <PathToTheRootOfYourProject>` コマンドを使ってもたいして手間は変わらないのでお好みの方法でお使いいただくのがよいですね 👍

たとえば Swift Package Manager 自身のプロジェクトなど同時に複数を扱っている場合には便利かと考えています ☺️

## おことわり

Swift Package Manager はまだまだこれからという状態ですので今後仕様がコロッと変わる可能性があります。🙏