OmniAICreator/Qiita-1.07M huggingface dataset:
GNUビルドシステムトラブルシューティング

 ソフトウェアをソースコードからビルドする場合によく発生するエラーの対処法の備忘です。主に、依存パッケージが不足していると現れるものです。

### configure: error: no acceptable C compiler found in $PATH

    $ sudo dnf install gcc

### configure: error: zlib library header files not found

    $ sudo dnf install zlib-devel

### configure: error: openssl library header files not found

    $ sudo dnf install openssl-devel

### configure: error: expat library header files not found

    $ sudo dnf install expat-devel

### configure: error: Qt library (version 5 or 4) is required to build GUI

    $ sudo dnf install python-qt5-devel

### 参考

- [Autotoolsについてのメモ](http://loto.sourceforge.net/feram/Autotools-memo.ja.html)
- [coderwall.com - MOMOTO'S PROTIPS](https://coderwall.com/p/u/momoto)
SpringBootでエラーハンドリング

Spring Bootでエラーハンドリングをする方法はいくつかあります。
この中の2つをご紹介。

1.@ControllerAdviceでの実装

```ExceptionControllerAdvice.java
	 @ControllerAdvice
	 public class ExceptionControllerAdvice {
	 
	 @InitBinder
	 public void initBinder(WebDataBinder binder) {
		System.out.println("controller advice: init binder");
    }
	
    
	@ExceptionHandler(Exception.class)
    public String exception(Exception e) {
		System.out.println("controller advice: exception Handler");
		System.out.println(e.getMessage());
        return "error";
    }
	
	@ModelAttribute
	public void modelAttribute(){
		System.out.println("controller advice:model Attribute");
	}
	}
```

2.コントローラー内に直接記述

```XXController.java
@RequestMapping("/xx")
public class XXController {
	@ExceptionHandler(Exception.class)
	public String handling(Exception e) {
		return "/err";
	}
}
```
konashi 2.0 入門 - Part2: Lチカ


[前回](http://qiita.com/masato/items/df911ff3421690c9a795)konashi 2.0の概要を理解しました。[jsdo.it](http://jsdo.it/)のコミュニティで共有されているコードを使いお約束のLチカをしてみます。最初なのでデジタルI/0端子は使わずにオンボード出力端子のLEDを使います。

## konashi 2.0

konashi 2.0の電源を入れます。コイン型バッテリが付属していますが今回はmicroUSBから電源供給します。

## jsdo.itでFork

konashiは[jsdo.it](http://jsdo.it/)だけでなく、インターネット上に公開すればDropboxに置いたJavaScriptも実行できます。まだ自分でコードを書いていないので、コミュニティのコードを使わせていただきます。

最初にWebブラウザから[jsdo.it](http://jsdo.it/)にアカウントを作成してログインします。[まずはLチカ](http://jsdo.it/monakaz/nOMl)のリポジトリを開いてForkします。Finish Editingボタンをクリックして編集画面を終了します。

![led-blinking.png](https://qiita-image-store.s3.amazonaws.com/0/43745/5dec0771-6a05-6582-12b9-c7b0235772da.png)


## konashi.js

手元にあるiPhone 5S、iOS 8.4.1に[konashi.js](https://itunes.apple.com/jp/app/konashi.js-javascript-html/id652940096)をApple Storeからアプリをインストールします。iPhoneとkonashiはBLEで通信するためiPhoneの設定からBluetoothをオンにします。

![konashi2.png](https://qiita-image-store.s3.amazonaws.com/0/43745/914013b0-e9d5-487b-4239-1c6d271a8dd8.png)


konashi.jsのアプリを起動すると、jsdo.itのコードの検索画面が開き、さきほどForkしたリポジトリが表示されます。タップして選択します。

![jsdoit-search.png](https://qiita-image-store.s3.amazonaws.com/0/43745/d8c6dd3f-64d4-2399-79fe-f6fed3f98694.png)



リポジトリ画面の左側、プレビューをタップします。


![forked.png](https://qiita-image-store.s3.amazonaws.com/0/43745/687c6a25-372a-8730-3568-a92272649ff2.png)


画面のガイドに従って「まわりにあるkonashiを探す」をタップします。

![search.png](https://qiita-image-store.s3.amazonaws.com/0/43745/b4be9d88-1bb2-502b-5728-11a2a1484c5e.png)


一覧に表示されたkonashiをタップします。

![konashi2.png](https://qiita-image-store.s3.amazonaws.com/0/43745/a7e392d3-80cd-1da4-4ca5-1b6c2007c0ac.png)

konashi.jsアプリが起動します。この画面が表示されていないとコードは実行されません。


![blinking.png](https://qiita-image-store.s3.amazonaws.com/0/43745/c1dad357-5e6a-b911-b0d9-29b954a86e89.png)


konashiのLED2が赤く点滅します。

![konashi-led.png](https://qiita-image-store.s3.amazonaws.com/0/43745/ffa9d49f-2b18-870d-abda-4892a66f5bb6.png)
SpringBoot+Redisでセッション管理

SpringBoot+Redisで簡単にセッション管理をしましょう
(*ゴミセッションの削除まで実装してないので注意)

[イニシャライザ](https://github.com/MariMurotani/SpringDemo/blob/2_withsession/src/main/java/demo/configs/HTTPSessionInitializer.java)
1.AbstractHttpSessionApplicationInitializerを継承
2.親クラスコンストラクタにconfigファイルを渡す

[コンフィグ](https://github.com/MariMurotani/SpringDemo/blob/2_withsession/src/main/java/demo/configs/HttpSessionConfig.java)
1.@Configurationをつけたクラスを作成
2.Beanを登録する

**application.properties**
`spring.redis.host=**********`
`spring.redis.port=**********`



```java:HTTPSessionInitializer.java
class HTTPSessionInitializer extends AbstractHttpSessionApplicationInitializer {
    public HTTPSessionInitializer() {
        super(HttpSessionConfig.class);
    	System.out.println("session initializer called");
    }
}
```

```java:JedisConnectionFactory.java
@Configuration
@EnableRedisHttpSession
public class HttpSessionConfig{

	@Bean
    public JedisConnectionFactory connectionFactory() {
 
        // ここにRedisへの接続設定を追加する。
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        System.out.println("redis host name: " + jedisConnectionFactory.getHostName());
        // 設定を変更する場合は以下のように必要な設定を行う。
//        jedisConnectionFactory.setPort(6379);
//        jedisConnectionFactory.setHostName("localhost");
//        jedisConnectionFactory.setTimeout(60);
//        jedisConnectionFactory.setPassword("password");
//        jedisConnectionFactory.set... 
 
        return jedisConnectionFactory;
    }
}
```

※Beanについては今後色々な場面で使っていくのでそのうち解説
SpringBootでバッチアプリ

SpringBootでバッチアプリが簡単に作れます

プロパティファイルなどを共有できるので1つのプロジェクトに両方入れちゃう事ができます。
スモールビジネスの場合に大活躍です。

[サンプル](https://github.com/MariMurotani/SpringDemo/blob/1_withprop/src/main/java/demo/MongExample.java)

1.`CommandLineRunner`を継承します。

2.`@EnableAutoConfiguration`を追加します。
(他のやつはなくても動くかも・・・・)

3.`ApplicationContext`を`@Autowired`しておきます。
new しなくても勝手に中身が入ってます。

```java
@Autowired
private ApplicationContext context;
```

4.自クラスを`SpringApplication`にぶち込みます。

```java
SpringApplication application = new SpringApplication(MongExample.class);
```

5.内蔵ウェブサーバーの立ち上げをOFFにします。

```java
application.setWebEnvironment(false);
```

6.コンテキストを渡して処理を走らせます

```java
ApplicationContext context = application.run();
```

7.処理が終わったらEXITします

```java
SpringApplication.exit(context);
```

別スレッドでrunメソッドが走ってるので、ここはシンクロナイズドしないといけないかも？？？
Handlerで終了を受け取ってもいいと思います。
ただ、exitしないとずっとjarが起動したまんま終了しないんですね。
その代わり、この中でタイマー回しておく事ができるので、数分に1回処理をしないといけないとか監視系の処理は立ち上げっぱなしでOK！

```java:MongExample.java
@EnableAutoConfiguration
@EnableBatchProcessing
@EnableConfigurationProperties
public class MongExample implements CommandLineRunner {
	
	//	get Applicateion context Example2
	@Autowired
	private ApplicationContext context;
	
	@Autowired
	private Environment env;

	public static void main(String[] args) {
		//SpringApplication.run(MongExample.class, args);
		
		SpringApplication application = new SpringApplication(MongExample.class);
		application.setWebEnvironment(false);
		ApplicationContext context = application.run();
		SpringApplication.exit(context);
		
		
	}
   
	@Override
	public void run(String... args) throws Exception {
		//	get mongo Template
		MongoOperations mongoOperation = (MongoOperations) context.getBean("mongoTemplate");
		
		//	Data Object this structure can be a table
		User user = new User("mkyong", "password123");

		// save
		mongoOperation.save(user);

		// now user object got the created id.
		System.out.println("1. user : " + user);

		// query to search user
		Query searchUserQuery = new Query(Criteria.where("username").is("mkyong"));

		// find the saved user again.
		User savedUser = mongoOperation.findOne(searchUserQuery, User.class);
		System.out.println("2. find - savedUser : " + savedUser);

		// update password
		mongoOperation.updateFirst(searchUserQuery, 
	                        Update.update("password", "new password"),User.class);

		// find the updated user object
		User updatedUser = mongoOperation.findOne(searchUserQuery, User.class);

		System.out.println("3. updatedUser : " + updatedUser);

		// delete
		//mongoOperation.remove(searchUserQuery, User.class);

		// List, it should be empty now.
		List<User> listUser = mongoOperation.findAll(User.class);
		System.out.println("4. Number of user = " + listUser.size());
		
	}
}
nmapコマンド

<h2>機能</h2>
指定したホストに対してポートスキャンを行う

<h2>使用する機会</h2>
・空いているポートをリモートで確認する
・クラッカーが攻撃前の調査として行う

<h2>書式</h2>
nmap [オプション] {ターゲット}

<h2>使い方</h2>
```:nmapでポートスキャン

nmap www.example.com

PORT    STATE  SERVICE
22/tcp  open   ssh
25/tcp  closed smtp
80/tcp  open   http
110/tcp closed pop3
143/tcp closed imap
993/tcp closed imaps
995/tcp closed pop3s
```
SpringBootとLombok

**Lombok**
https://projectlombok.org/

DAOを沢山作るのでgetterとsetterをつけるのが面倒です。
Lombokを使って簡略化しましょう。

1.gradleにlombokライブラリ追加
` compile("org.projectlombok:lombok:1.16.4")`

2.STSにlombokプラグイン追加
ProjectLombokからダウンロードしてきて追加してください。
STS.appをインストール時に選択するだけです。
これがないとうまく動かいないので注意。
juliaをmacにインストール

#juliaをmacにインストールする  
  
```
$ brew update
$ brew brew install gfortran
 ```
さっそくエラーがでる…  
  
```
% brew install gfortran                                                             
Error: No available formula for gfortran
GNU Fortran is now provided as part of GCC, and can be installed with:
  brew install gcc
```
どうやらgccを入れないとダメらしい  
  
```
$ brew insatall gcc
```
  
いれようとするとまたエラー…  

```
$ brew install gcc 
Warning: gcc-5.2.0 already installed
```
  
すでにインストール済みらしい…  
なんなんだよーー!! 
って冷静になって先ほどの`brew install gfortran`のエラー文を見る。 
いつものように前提のソフト入れてね！ってエラー軽く見ちゃってたけどgfortranはgccに統合されたからgccインストールしてね！ってことじゃん！てへぺろ  
  
(そもそも[本家](https://github.com/staticfloat/homebrew-julia/)にもちゃんとgfortranインストールすることすでに書いてないじゃん)  
  
最新版インストールは  
  
```
$ brew update
$ brew tap staticfloat/julia
$ brew install julia
```
SpringBoot 環境構築とプロパティファイル

[環境構築](https://docs.google.com/presentation/d/14FBPIUR9XSKFrrZ5yGhMosnLEPNcMZRCdhcWryglrhQ/)

プロパティの設定
application.properties
の設定をちょっと細かく変更しましょう。

STSで新規にプロジェクトを作成すると
application.properties
というのができていると思います。
こいつをコピペして下記の2つのファイルを作成します。

![スクリーンショット 2015-08-23 22.35.50.png](https://qiita-image-store.s3.amazonaws.com/0/89997/b6cccf14-bc3d-8851-438f-704d33b0d289.png)

共通環境設定
`application.properties`

開発環境用設定
`application-dev.properties`

本番環境用設定
`application-pro.properties`

application.properties内の下記のパラメーターを変更する事で呼び出しファイルを環境ごとに変更できます。

`spring.profiles.active=dev`

(ymlファイルも使えるみたいです)

ちょっと一工夫すると、jarの起動時に下記の引数をつけると、どっちの設定を使うか指定できます。

`--spring.profiles.active=dev`

![zy5AbF77cFam7u2kCLRVb4BxihsOVR_FGbK7gynLek0.png](https://qiita-image-store.s3.amazonaws.com/0/89997/b96d900b-1740-4712-e96a-c62bc145372f.png)
［Hyper-V］仮想スイッチのプロパティの変更中にエラーが発生しました

　Hyper-Vマネージャーの仮想スイッチマネージャーで仮想スイッチの変更をしているとき、次のようなエラーが起きた場合の対処法の備忘です。

    仮想イーサネット スイッチの接続の追加中にエラーが発生しました。

    外部イーサネット アダプター '(NIC)' は既に Microsoft 仮想スイッチ プロトコルにバインドされています。

![0001.png](https://qiita-image-store.s3.amazonaws.com/0/58/82c79fd7-ef1f-c1e5-cff6-8d6fa7b43819.png)

　<コントロール パネル\ネットワークとインターネット\ネットワークと共有センター>から「アダプターの設定の変更」へ進み、外部仮想スイッチで使用しようとしているネットワークアダプターのプロパティをみてみると、「Hyper-V Extensible Virtual Switch」がチェックされているのでチェックを外します。

![0002.png](https://qiita-image-store.s3.amazonaws.com/0/58/180508ee-08f7-5b5b-ce55-de551b042d35.png)

　再度、仮想スイッチマネージャから同じ操作を行うとエラーは発生せずに操作を進めることができました。
VCCW(Vagrant + Chef + WordPress) でWPローカル開発環境立ち上げから本番との同期まで

## VCCW(Vagrant + Chef + WordPress) でWPローカル開発環境立ち上げ〜本番と同期する

### 背景
- WPテーマを本番環境でカスタマイズしたくない
- 自分のローカル環境を汚したくない
- 誰かに渡すかもしれないので、将来的に共有しやすくしておきたい
- 色んなサイトのテーマを編集するので、複数管理を簡単にしたい

### 前提
- 本番とはさくらサーバー上に設置しているWPサイトのこと

### 手順
1. Vagrantのインストールする
2. VurtualBoxのインストールする
3. Vagrantのプラグインvagrant-hostsupdaterをインストールする
4. vagrant boxをダウンロードする
5. VCCWのダウンロードする
6. Vagrant環境を立ち上げる
 - 6-1. vccw/provision/default.ymlを複製しvccw/site.ymlに配置する
 - 6-2. site.ymlの設定を変更する
 - 6-3. vagrant upコマンドをたたく
7. 本番データをpullする
 - 7-1. vccw/Moviefileの設定を変更する(sshを利用する場合はサーバの公開鍵認証をする)
 - 7-2. vagrant sshコマンドをたたく
 - 7-3. cd /vagrantコマンドで移動する
 - 7-4. wordmove pull --allコマンドで本番データをpullする

### はまったこと(解決済み)

#### 1. 本番データをpullするとエラーになる(初回)
```ruby:解決方法
/*
 公開鍵認証ををしていなかった。
*/
```

#### 2. 本番データをpullするとエラーになる
```ruby:解決方法
/*
 設定ファイル(site.yml)のシンタックスエラーだった。。lint使って解決。
*/
```

#### 3. 本番データがローカルに反映されない
```ruby:解決方法
/*
 設定ファイル(site.yml)のdb_prefixの設定を本番DBのに合わせていなかった
 本番のwp-cinfig.phpから取得した
*/
```

### はまったこと(未解決)
1. ローカル環境でwpプラグイン関連のエラーが大量に出力される

### 参考
- [http://vccw.cc/](http://vccw.cc/)
- [さくらのレンタルサーバーにWordPressをデプロイするのはVCCW + Wordmoveが最高に捗る](http://2inc.org/blog/2014/12/09/4512/)
- [YAMLlint](http://www.yamllint.com/)
SpringBoot 概要

Spring Boot の概要説明しちゃいます

Spring bootとはSpring4のラッパーでSpringフレームワークを使ったアプリが簡単に作れちゃうフレームワークです。
初期設定なしで初心者でも簡単に導入できます。
STSを使うと更に簡単にデバッグする事ができます。

SpringBoot
http://projects.spring.io/spring-boot/

Spring Boot Reference
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

STS
https://spring.io/tools/sts

JAVAライブラリの依存関係解消のために、
mavenとgradleが利用できます。

導入手順
今回はガイドの中から一個だけやってみましょう。
https://spring.io/guides/gs/actuator-service/#initial
上記サンプルを上から順にやるといいです。

1.javacのインストールとパスの設定
2.gitのインストールとパスの設定
3.サンプルダウンロード

```
git clone https://github.com/spring-guides/gs-actuator-service.git
```

4.作業用のinitialディレクトリへ移動

```
cd gs-actuator-service/initial
```
(`complete/`にはハンズオン用の解答がはいってます)

5.Run the empty service
`@SpringBootApplication`アノテーションを
をメインメソッドが書いてあるクラスにつけます。
メインメソッドの中で自クラスを`SpringApplication.run`にするだけでサーバーが立ち上がります。

ちなみに、STSのプロジェクトの中ではmainメソッドを何個おいても大丈夫です。実行時に選べます！便利！
![maFOhT0vMUqhQx9nW0xS38jRWUznVWRsUs0-BGxlXRQ.png](https://qiita-image-store.s3.amazonaws.com/0/89997/77c132c8-2171-0e4e-fa86-3edd58b1020f.png)

gradleでコンパイルする際には、下記の記述を追加する事でメインメソッドのクラスを選択します。

```java
build.gradle
springBoot {
  mainClass = "demo.SpringDemoApplication"
}
```

6.Create a representation class
これはDTOですね。クラスをまるごとコントローラー内でメソッドの戻り値に指定してやる事ができます。
この時に戻り値の前に`@ResponseBody`アノテーションを付与します。

```java
public @ResponseBody Greeting sayHello
```
こうする事でなんと勝手にJSON出力にして返してくれるんですねー。

7.Create a resource controller
`@Controller`アノテーションをつけたクラスがWebMVCのフロントコントローラーになります。
デフォルトで起動時に`@ComponentScan`してくれてURLと呼び出し先メソッドのマッピングを作成してくれます。

`@RequestMapping("/hello-world")`
どのURLにどのクラス、どのメソッドをマッピングするかを定義します。

このサンプルの場合は、クラスに`"/hello-world"`、メソッドに何もついていないので、`/hello-world`を呼び出した際にデフォルトで`sayHello`が呼ばれています。

`sayHello`の`@RequestMapping`を次のように書き換えると`/hello-world/hoge`で呼び出せるはずです。

```java
@RequestMapping(value="hoge",method=RequestMethod.GET)
```




実装していくにあたって、一点だけ注意する点があって、
SpringBoot自体は主にサーバーとかコンテナといったSpringの実行環境の補助をするものなので、SpringBootに搭載されていない機能を使う場合には、Spring4の実装していく形になります。
やりたい事がある場合にはSpringBootに機能があるかどうか→Spring4に機能があるかどうかの順で考えると分かりやすいです。
Swiftで日付の操作

SwiftでCommonクラスに入れて使いまわしている日付取得用のメソッドです。

前はObjective−Cで書いていたのですが、Swiftに書き換えてみようと思い、土日数時間使ってちょこちょことやってます。
<a href="https://geo.itunes.apple.com/jp/app/manga-xin-kan-qing-bao-quan/id874171364?mt=8">マンガ新刊情報〜圏外OK！買い忘れ防止アラートあり！〜</a>


## 月を渡して表示させたい画像を選択
月の値を渡して画像を切り替えたいというときに使っています。
![スクリーンショット 2015-08-23 21.38.03.png](https://qiita-image-store.s3.amazonaws.com/0/26911/e1147071-4c0e-fd0b-b580-0e3452407d4e.png "スクリーンショット 2015-08-23 21.38.03.png")

    
共通のメソッドは以下のようになってます。

```swift:Common.swift
    /** 月から表示させる画像ファイル名を取得 */
    func getMonthImage(strMonth:String)->String{
        return commonConst.common.imageList[strMonth.toInt()!-1]
    }
```

画像のファイル名を月順に配列にもたせて、そこから取得する流れです。

```swift:commonConst.swift
class commonConst {
    struct common {
        static let imageList :[String] = [
            "Jan.png",
            "Feb.png",
            "Mar.png",
            "Apr.png",
            "May.png",
            "Jun.png",
            "Jul.png",
            "Aug.png",
            "Sep.png",
            "Oct.png",
            "Nov.png",
            "Dec.png"
        ]
    }
}
```

## 時差を取得
私が作ってる漫画の新刊情報取得アプリはローカルストレージに発売スケジュールを持ってます。
マンガの新刊情報ってそんな更新頻度ないんで１日１回だけ最新がないかチェックをかけてるわけです。
そういうわけで現在日時と前回更新日時の差分をとるためのメソッドです。


```swift:Common.swift
    /** 時間の差分を取得 */
    func diffDate(baseDate:NSDate,checkDate:NSDate) -> NSInteger{
        var sinceInt = NSInteger(checkDate.timeIntervalSinceDate(baseDate))
        return sinceInt/60
    }
```

## 今日って第何週？
発売情報を週ごとに表示させる際、今日が第◯週だったらその週を最初から表示させてまう！
じゃ、今日は第何週目ですかー？というときのメソッドです。
![スクリーンショット 2015-08-23 21.45.28.png](https://qiita-image-store.s3.amazonaws.com/0/26911/2a43d040-8698-0bc3-c5bc-d3d3e4b47a74.png "スクリーンショット 2015-08-23 21.45.28.png")
（ULTRAMANかっこいい。。）

```swift:Common.swift
    /** 今日が第何週か取得 */
    func getTodayWeekOfMonth() -> Int {
        let calendar = NSCalendar.currentCalendar()
        var comp : NSDateComponents = calendar.components(
            NSCalendarUnit.CalendarUnitWeekOfMonth, fromDate: NSDate())
        return comp.weekOfMonth
    }
```
## 日付フォーマット毎回書くの面倒
フォーマットさせたいNSDate型の日時と、取得したい日時フォーマット形式を渡すとStringで返してくれるメソッドです。

```swift:Common.swift
    /** 日付のフォーマット */
    func dateFormatter(date : NSDate, style : String) -> String {
        let dateFormatter = NSDateFormatter()
        dateFormatter.locale = NSLocale(localeIdentifier: "ja_JP")
        dateFormatter.dateFormat = style
        return  dateFormatter.stringFromDate(date)
    }
```

使うときはこんな感じ。

```swift:Common.swift
    /** 今日の月を取得 */
    func getThisMonth()->String{
        var now = dateFormatter(NSDate(), style: "M")
        return now
    }
```

以上ですー。
こうした方がかっこいいよ！というのがあればコメントよろしくですー。
選択項目リストに対応する項目のリストを返す



項目の情報をもったリスト['a', 'b', 'c', 'd']に対して
選択/非選択の情報(bool値)をもったリスト[1, 0, 0, 1]で
フィルターした結果['a', 'd']を返す書き方で悩んだ


```rb
options = %w(赤座あかり 歳納京子 吉川ちなつ 船見結衣 池田千歳 杉浦綾乃 大室櫻子 古谷向日葵)
# => ["赤座あかり", "歳納京子", "吉川ちなつ", "船見結衣", "池田千歳", "杉浦綾乃", "大室櫻子", "古谷向日葵"]

selects = [false, true, false, true, false, false, true, true]
# => [false, true, false, true, false, false, true, true]

selected_options = options.zip(selects).select { |item| item[1] }.map { |item| item[0] }
# => ["歳納京子", "船見結衣", "大室櫻子", "古谷向日葵"]
```

もっと綺麗な書き方を探している
[RustDoc翻訳] 5.19. Generics

構造体からRustの特徴であるトレイトベースのジェネリクスまでの流れを翻訳します。
前: [5.16. Method Syntax](http://qiita.com/_Nnwww/items/b594d02143166c62b122) 次: [5.20. Traits](http://qiita.com/_Nnwww/items/892e0d765b7c2a97661e)
英語できないので誤訳や改善案等、見つけた場合はご指摘の程宜しくお願いします。

* 元記事 : https://doc.rust-lang.org/stable/book/generics.html のRust1.2時点
* ライセンス : MIT license, Apache License 2.0.
    - See [LICENSE-APACHE](https://github.com/rust-lang/rust/blob/1.2.0/LICENSE-APACHE), [LICENSE-MIT](https://github.com/rust-lang/rust/blob/1.2.0/LICENSE-MIT), and [COPYRIGHT](https://github.com/rust-lang/rust/blob/1.2.0/COPYRIGHT) for details.

---

# ジェネリクス

度々、関数やデータ型を書いていると、引数が複数の型に対応したものが欲しくなることがあります。Rustでは、ジェネリクスを用いてそれを実現しています。ジェネリクスは型理論において'パラメトリック多相(parametric polymorphism)'と呼ばれており、与えられたパラメータにより('parametric')型や関数が多数の様相[^form]('poly'は「多様」、'morph'は「様相」を意味します)を持つことをそう呼びます。

さて、型理論はこれで十分です。続いてジェネリックなコードについてチェックしてみましょう。Rustが標準ライブラリで提供している型`Option<T>`はジェネリックです。

```rust
enum Option<T> {
    Some(T),
    None,
}
```

`<T>`の部分は、前に何度か見たことがあると思いますが、ジェネリックなデータ型であることを示しています。enumの宣言内にある`T`は同じ型に置き換えられます。型注釈を用いた`Option<T>`の使用例が以下になります。

```rust
let x: Option<i32> = Some(5);
```

型の宣言は`Option<i32>`とします。`Option<T>`とどこが違って見えますか？そう、この`Option`では`T`は`i32`の値を持つのです。このlet束縛の右辺の`Some(T)`では`T`は`5`となります。`i32`であれば両辺の型が一致するため、正しく型推論されます。型が不一致であれば以下のようなエラーが発生します。

```rust,ignore
let x: Option<f64> = Some(5);
// error: mismatched types: expected `core::option::Option<f64>`,
// found `core::option::Option<_>` (expected f64 but found integral variable)
```

`f64`で特殊化した`Option<T>`が作れないという意味ではありませんからね！リテラルの型も正しく合わせなければなりません。

```rust
let x: Option<i32> = Some(5);
let y: Option<f64> = Some(5.0f64);
```

これだけで結構です。1つ定義すれば様々な型で用いることができます。

ジェネリクスは1つの型だけに対応しているわけではありません。Rustの標準ライブラリに入っている`Result<T, E>`について考えてみましょう。

```rust
enum Result<T, E> {
    Ok(T),
    Err(E),
}
```

この型では`T`と`E`の_2つ_がジェネリックです。ちなみに、大文字の部分はあなたの好きにしてもらって構いません。もしあなたが望むなら`Result<T, E>`を、

```rust
enum Result<A, Z> {
    Ok(A),
    Err(Z),
}
```

のように定義しても良いです。"Type"から第1ジェネリックパラメータは`T`とし、"Error"から`E`とするのが慣例なのですが、Rustは気にしません。

`Result<T, E>`は計算の結果を返すのが目的の型であり、失敗した場合にエラーを示す値を返す機能を持っています。

## ジェネリック関数

私たちは似た構文でジェネリックな型をとる関数を記述することができます。

```rust
fn takes_anything<T>(x: T) {
    // do something with x
}
```

構文は2つのパーツから成ります。`<T>`は"この関数は`T`というパラメータを持つジェネリック関数である"という意味であり、`x: T`は"xは`T`型である"という意味です。

複数の引数が同じジェネリック型を持つこともできます。

```rust
fn takes_two_of_the_same_things<T>(x: T, y: T) {
    // ...
}
```

複数の型を取るバージョンを記述することも可能です。

```rust
fn takes_two_things<T, U>(x: T, y: U) {
    // ...
}
```

ジェネリック関数は'トレイト束縛'と一緒に使えば最高に便利になります。これについては[トレイトの章][traits]で解説しています.

[traits]: https://doc.rust-lang.org/stable/book/traits.html

## ジェネリック構造体

あなたにもジェネリック型を保存する`struct`を書くことができます。

``` rust
struct Point<T> {
    x: T,
    y: T,
}

let int_origin = Point { x: 0, y: 0 };
let float_origin = Point { x: 0.0, y: 0.0 };
```

関数と同様に、`<T>`でジェネリックパラメータを宣言し、型を宣言するときは`x: T`とします。

---

[^form]: 訳注: ここで「様相」は型を指します
setInterval()やsetTimeout()で関数に引数を与えるには


setIntervalについてですが、setTimeoutも同じです。

直感的に書くと

```javascript
const hoge = word => {
	console.log(word);
};

const timer = setInterval(hoge('hoge'),1000);
```

なぜか繰り返されない...

そこで調べてみた
[window.setInterval - Web API インターフェイス | MDN](https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval)

> ###構文
```javascript
var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
```
funcは繰り返し呼びたい関数
delay は、インターバルの時間(ミリ秒)
param1, param2,... はパラメーター

これで、3つ目に引数を与えればいいのかと思ったが
**Internet Explorer では動作しない**
と注意書きが...
追記 : IEは10以降であれば機能するらしいです。(コメントより)

そこでもっと見てみると

> ###コールバックの引数

> setInterval() は指定ミリ秒に呼び出されたコールバックをコールバック関数に引き渡しますが、もしそれが引数のように他のものを期待している場合、それを混同する可能性があります。この問題を回避するためには、コールバックを呼び出すために無名関数を使用してください。

 >コールバック関数に引数を渡す必要があり、それを setInterval() で追加の引数の指定をサポートしない Internet Explorer でも動作するようにさせる必要がある場合にも、同じテクニックを使うことができます。

とのことでやってみた

```javascript
const hoge = word => {
	console.log(word);
};

const timer = setInterval(function(){hoge('hoge')},1000);
```


追記 : 
<ul>また、以下の方法でもできるそうです(コメントより)</ul>

```js
const hoge = word => {
	console.log(word);
};
const timer = setInterval(hoge.bind(undefined, "hoge"), 1000);
```
##まとめ
setInterval()やsetTimeout()に与える関数に引数を与えるには
**"無名関数を使いその中で実行する"**
Git for Windows v2.5からのMinGW/MSYS?ツールの所在

Git for Windows v2.5.0が正式リリースされました。

以前からGitを使っている方の中には、Gitに付随しているMinGWツール類をGit bash以外から使う方もいるんじゃないかと思います。

簡単な所だとvagrantのためにsshとかですね。

で、2.5から所在が変ったので、以下のようにするとよさそうです。

```shell:旧パス
C:\Program Files\Git\cmd # git本体
C:\Program Files\Git\bin # MinGW系ツール
```

```shell:新パス
C:\Program Files\Git\cmd # git本体
C:\Program Files\Git\usr\bin # MinGW系ツール
```

なお```C:\Program Files\Git\mingw64\bin```などありますが、こちらにはgrepなどMSYS系が入ってないっぽいです。

なお、chocolateyでgitを導入する場合なら、```/GitAndUnixToolsOnPath```でgitとMinGW両方がパス登録される、はずなんですが、自分ではやったことないんで、参考まで。

追記 2015/09/20
2.5からインストーラの挙動もあって、アップデートするときに以前手動でいれた関連パスが消えるっぽいですね。

chocotateyのgitのインストールパラメタはchocolateyで保持しているので、こちらを推奨

また、mingw64側も追加しといたほうがよさそう、というのが、上記のインストール結果から伺えますので、手動でやる場合はそちらも入れておいてくださいませ。

追記
2.8から、オプション保持してくれなくなってる...?、mingw64も含めて、PATHに(確認込みで)手動追加したほうがよさそう
DI(依存性注入)がいみわからん

```php
interface ILogger{
	/**
	 * @param String テキスト
	 */
	public function show(string $string);
}

class BrowserLogger implements ILogger{
	/**
	 * @Override
	 */
	public function show(string $string){
		print($string . '<br />');
	}
}
class ErrorlogLogger implements ILogger{
	/**
	 * @Override
	 */
	public function show(string $string){
		error_log($string);
	}
}

class HelloWorld{
	private $logger;
	/**
	 * @param Logger
	 */
	public function __construct(ILogger $logger){
		$this->logger = $logger;
	}

	/**
	 * @param String $string
	 */
	public function show(string $string){
		$this->logger->show($string);
	}
}

$helloWorld1 = new HelloWorld(new BrowserLogger());
$helloWorld1->show('hello, world');

$helloWorld2 = new HelloWorld(new ErrorlogLogger());
$helloWorld2->show('hello, world');
```

最低限の概念だけ実装したらこんなかんじだと思うんだけど、
で、だからこれがどうしたんだ、という気がしてならない。
だってみんな普通`public function setPdo(PDO $pdo){ $this->pdo=$pdo; }`とかやるよね？
その程度ことをわざわざDIとか言ってるのか？
PDOはInterfaceじゃないけど、かわりに`abstract class PDOInterface extends PDO{}`とか書いとけば、まあだいたい同じ意味になるだろう。
RelativeLayout


## 配置
layout_toLeftOf	左	指定 View の左側に配置します。
layout_toRightOf	右	指定 View の右側に配置します。
layout_above	上	指定 View の上側に配置します。
layout_below	下	指定 View 下側に配置します。

## 相対的な位置

+ android:layout_toEndOf : 下からの相対的な位置
+ android:layout_toLeftOf : 左からの相対的な位置
+ android:layout_toRightOf : 右からの相対的な位置
+ android:layout_toStartOf : 上からの相対的な位置

## 基準方向を指定して配置（親レイアウトの相対位置指定）
layout_alignLeft	左基準	指定 View の左位置を基準として配置します。
layout_alignRight	右基準	指定 View の右位置を基準として配置します。
layout_alignTop	上基準	指定 View の上位置を基準として配置します。
layout_alignBottom	下基準	指定 View の下位置を基準として配置します。
inflateレイアウトのbuttonのインスタンス



```java
 gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {


                final Dialog imageDialog = new Dialog(GridViewActivity.this);
                imageDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
                imageDialog.setContentView(getLayoutInflater().inflate(R.layout.image_layout, null));
                final Button closeButton =(Button)findViewById(R.id.close_botton);
                
```

上のコードだとインスタンスできません。

java.lang.NullPointerException


こいつ出てきます。

## Viewが一致していない。
Activityで定義されているfindViewByIdは簡単にいうとonCreateとかでsetContentViewしたViewの中からIDが一致するViewを取得する。

ViewクラスやDialogクラスにもfindViewByIdメソッドは定義されています。それぞれinflateしたViewの中からIDと一致するViewを取得します。
なので

```java
final Button closeButton =(Button)findViewById(R.id.close_botton);


```

これだとActivityにセットしたViewから探そうとしてしまうので当然見つからず、nullになっていたらしいです。


なので

```java 
final Button closeButton = (Button) imageDialog.findViewById(R.id.close_botton);
```

にするとOK！
これでimageDialog
Swiftアプリ開発2


# UIImageView
画面に画像を表示する場合に使います。

## クラス名(image:)
初期化と同時に画像オブジェクトをプロパティにセットします。
UIImage(named:)で画像ファイル名を引数に渡すとUIImageオブジェクトを生成します。
これだけではわかりづらいので実際に例を用いてやっていきましょう。
## 例えば背景に画像を挿入したいとき

Xcodeのプロジェクトの中に挿入したい画像を取り込みたい場合。

例

```swift
//挿入したい画像をsampleimageとして定義
let sampleImage = UIImage(named: "挿入したい画像のファイル名")
let imageView = UIImageView()
//imageviewの画像を挿入したい画像に渡す
imageView.image = sampleImage
self.view.addSubView(imageView)
```

または

```swift
let imageView = UIImageView(image: UIImage(named: "ファイル名"))
self.view.addSubView(imageView)
```

# UIButton
ボタンのオブジェクトを作成したい場合に使います。

## setTitle(title,forstate:):
ボタンのタイトルをセットするメソッドです。
表示したい文字列とボタンがどの状態にあるときにそれを表示して渡してあげます。

例

```swift
let button = UIButton(frame: CGRectMake(0, 0, 100, 200))
button.setTitle("ボタン", forState: UIControlState.Normal)
```

UIControlState.Normalでボタンに何もしていない状態のときを指定します。
**forState: .Normal**と省略できる。
## setImage(image, forstate:):
ボタンを画像にするメソッドです。
表示したい画像imageに入力し、表示したい画像とボタンがどの状態にあるときにそれを表示して渡してあげます。

例

```swift
// sskという画像を定義する
let ssk = UIImage(named: "ssk.jpg")
let button = UIButton(frame: CGRectMake(0,0,100,200))
// 何もしていない状態のときsskを表示させるようにする
button.setImage(ssk, forstate: .Normal)
```

## addTarget()
ボタンが押されたときにどのメソッドを実行するかを指定します。
他にもsetTarget()などボタンを使ったアクションは色々ありますが、今回これを使っていこうと思います。

例

```swift
let button = UIButton(frame: CGRectMake(0, 0, 100, 200))
ssk.addTarget(self, action: "onMyClickButton:", forControlEvents: UIControlEvents.TouchUpInside)

func onMyClickButton() {
println("成功")
}
```

**target**    :どのオブジェクトか。
**action**   :なんというメソッドを呼び出すのか。
**forControlEvents**   :いつ実行するのか。
**UIControlEvents.TouchUpInside**はボタンを押してから指がボタンから離れたとき。 **.TouchUpInsideと省略できる。**


# UILabel
入力した文字列を画面に表示させることができます。文字通りラベルを作るイメージですね。

| コード| 機能|                     
| ------ | -------- |
| クラス名.text | ラベルのテキストを設定します。 | 
| クラス名.font | フォントを設定します。 |
| クラス名.textColor | テキストのカラーを設定します。 |
| クラス名.backgroundColor | ラベルの背景を設定します。
| クラス名.shadowColor| ラベルのテキストの影の色を設定します。
| クラス名.font = UIFont.systemFontOfSize(指定したいテキストのサイズ) |  テキストのサイズを指定します。 | 
**クラス名.textAlignment** ラベルのテキストを配置を設定します。
 
| 左寄せ| 中央寄せ | 右寄せ |
|-----| --- | ---- |
| NSTextAlignment.Right | NSTextAlignment.Center | NSTextAlignment.Left |


 
このようにラベルの設定についてはたくさんあります。
# UIColor
ところで、基本的にオブジェクトの色を設定したい場合にはUIColorを使います。具体的な使い方を述べつつ説明していきます。
例

```swift
//myLabelというラベルを作成する
let myLabel: UILabel = UILabel(frame: CGRectMake(0,0,100,200))
//myLabelのテキストを入力する
myLabel.text = "ぼくはどちらでもいけます。"
//myLabelのテキストの色を設定する
oobatin.textColor = UIColor.grayColor()
```

**また、色の割合を指定することもできます。**

```swift
let color: UIColor = UIColor(red:1.0,green:0.5,blue:1.0,alpha:1.0)
```

このように **UIColor.**の後に設定したい色を入力するようにしましょう。
RDkitをpython 3にインストールする (ubuntu)

# RDkitのインストール

2015/08/23現在
python3用rdkitはcondaを使ってbuild可能
[参考URL](http://sourceforge.net/p/rdkit/mailman/message/32617808/)

```
conda install conda-build
git clone https://github.com/rdkit/conda-rdkit.git
cd conda-rdkit/
git checkout development
CONDA_PY=34 conda build boost
CONDA_PY=34 conda build rdkit
conda install rdkit --use-local
# 仮想環境に入れることも可能
# conda create --use-local -n py3_rdkit python=3.4 pip rdkit  
```

# rdkitデモ

## smilesからpd.DataFrameに読み込む
```py3
# coding: utf-8
# In[1]:
import pandas as pd
from numpy import vectorize as vec

# In[2]:
from rdkit import Chem
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import Descriptors,PandasTools

# In[3]:
mols=pd.DataFrame(['c1ccccc1N','c1ccccc1O'],columns=['smiles'])
PandasTools.AddMoleculeColumnToFrame(mols,smilesCol='smiles',molCol='structure',includeFingerprints=True)
# sdfから読むときは
# PandasTools.LoadSDF(sdfFile,smilesName='SMILES',molColName='Molecule',includeFingerprints=True)
```

![Screenshot 2015-08-24 at 18.18.57.png](https://qiita-image-store.s3.amazonaws.com/0/52875/f16b8498-4d4d-23c0-7ece-e954a3db8105.png)

## 構造インライン表示
```py3
# In[4]:
mols.ix[0,'structure']
```
![Screenshot 2015-08-24 at 18.20.40.png](https://qiita-image-store.s3.amazonaws.com/0/52875/1197a8b1-3d9e-14ec-e8e1-4a307a71532c.png)

## 記述子計算
``` py3
# In[5]:
for desc in ['MolWt','MolLogP','TPSA','NumAromaticRings','NumHAcceptors','NumHDonors']:
    exec("mols[desc]=vec(Descriptors.{})(mols['structure'])".format(desc))
mols['NumAtoms']=[mol.GetNumHeavyAtoms() for mol in mols['structure']] #重原子数はmoleculeのmethodに定義されている
mols
```
![Screenshot 2015-08-24 at 18.22.15.png](https://qiita-image-store.s3.amazonaws.com/0/52875/bb40948f-8ce3-6630-de8f-4f4f9e0b502c.png)

## 部分構造検索
``` py3
# In[6]:
from rdkit.Chem.AllChem import Compute2DCoords
query=Chem.MolFromSmiles('O')
Compute2DCoords(query)
query

# In[7]
mols[mols['structure'] >= query]
```

![Screenshot 2015-08-24 at 18.42.25.png](https://qiita-image-store.s3.amazonaws.com/0/52875/6dbfdcc1-adcf-87c5-737a-3645e8ebf054.png)
konashi 2.0 入門 - Part1: konashiとKoshian

[ユカイ工学株式会社](http://www.ux-xu.com/)が開発しているフィジカル・コンピューティング・ツールキット、konashiのメジャーアップデート版である[konashi 2.0](http://www.ux-xu.com/product/konashi2-0)を購入しました。フロントエンドエンジニアやデザイナー、アーティストでも一般的になっているWebベースのJavaScriptでスマホからハードウェアを制御するプロトタイプが簡単に作ることができます。最初にkonashi、konashi 2.0、[Koshian](http://www.m-pression.com/ja/solutions/boards/koshian)、[konashi.js](http://konashi.ux-xu.com/kjs/)の関係がちょっとわかりづらく混乱してしまうので、整理して概念と構成について調べてみます。

<!-- more -->

## フィジカル・コンピューティング

[フィジカル・コンピューティング](https://en.wikipedia.org/wiki/Physical_computing)とはニューヨーク大学のDan O'Sullivan教授が提案した教育プログラムです。人の行動や生活環境によりそった、コンピュータとの意思疎通の方法を模索する研究や活動です。コンピューターにセンサーなどの入出力デバイスをつなぎ、人と情報をやりとりすることで、生活を便利にしたり、新しいユーザー体験を生み出すモノづくりが可能になると考えられています。

ただし、ソフトウェア、ハードウェア、デザイン、アートの各分野の幅広い知識が必要です。専門の教育を受けていないユーザーがプロトタイプを作るのは困難でした。konashiを使うとJavaScriptというWebで一般的な知識で、フロントエンジニアやデザイナーでも自分のアイデアから、簡単にモノづくりのプロトタイピングができるようになります。

## konashi

### 構成

konashiは大きく2つの部品から構成されています。

* CPUを搭載したBluetooth SMARTモジュール
* I/O接続を提供するベースボード

[konashi 2.0](http://www.ux-xu.com/product/konashi2-0)ではBluetooth SMART モジュールが[Koshian](http://www.m-pression.com/ja/solutions/boards/koshian)に変更になりました。半額と低価格になり、通信インタフェースが強化されました。また、KoshianのOTA機能によりkonashi.js(iOSアプリ)からファームウェアの更新も可能になりました。アップデートでSPI通信への対応が予定されています。

### Koshian

[Koshian](http://www.m-pression.com/ja/solutions/boards/koshian)は技適マーク取得済のBluetooth SMART モジュールを搭載しています。[980円](https://store.macnica.co.jp/products/mpression_mp-ksn001b)と、とても安価に購入できます。

Koshianではオリジナルのファームウェアに加えて、一部機能を除くkonashi 2.0互換ファームウェアも使うことができます。このためKoshianモジュールをkonashiのベースボードに組み込まなくても単体でkonashi.js(iOSアプリ)からハードウェアのI/O通信を制御することができます。

Koshianはピンヘッダのピッチが狭かったり、I/Oの引き出しも面倒です。Koshianがベースボードに実装されているkonashi 2.0ではコイン型バッテリやmicroUSBポート、アナログ入力やI2C通信端子が最初から使えるので初心者には便利です。

### konashi.js

`***.js`と書くとNode.jsやEmber.jsのようにJavaScriptのプラットフォームやライブラリに見えますが、konashi.jsはiOSアプリです。この名前のおかげで最初は混乱しました。

アプリはApple Storeから[インストール](https://itunes.apple.com/jp/app/konashi.js-javascript-html/id652940096)します。konashi.jsは[jsdo.it](http://jsdo.it/konashijs/)のWeb上に保存してあるJavaScriptのコードを実行して、konashiを通じてセンサーやデバイスなどハードウエアを制御することができます。

### jsdo.it

[jsdo.it](http://jsdo.it/)は[面白法人カヤック](http://www.kayac.com/)が開発しています。フロントエンドエンジニアのためのJavaScript/HTML5/CSSのリポジトリを共有できるコミュニティサービスです。初心者でもkonashi.jsアプリのブラウザからjsdo.it上で他の人が共有しているコードを実行することができます。自分で動かして真似しながら勉強してフィードバックしていくコミュニティのよい環境ができています。

## konashiの名前の由来

[konashi・Koshian 名前の由来](https://store.macnica.co.jp/library/96029)によると、konashiとは和菓子の材料となる生地の「こなし」から来ています。和菓子職人はこなし作りが「こなせて」一人前だそうで、konashiを基礎にして新しいモノづくりをしていこうという意味が込められているようです。
Windowsショートカットキーまとめ (Windows7～)

Windows 10も出たことなので、よく使うWindowsショートカットキーをまとめました。
常識的すぎるショートカットキーや、あまり使わないものは載せていません。
Windows 7以降が対象で、Vistaだと一部動かないかもしれません。

## ウィンドウ操作

- Alt + Tab
    - ウィンドウを切り替える。
    - ウィンドウが活性化した順に切り替えられるので、２画面を交互に切り替えつつ操作したりできる
    - Alt + Tab後にAlt押しっぱなしの状態で、矢印キーやマウス操作でウィンドウを選択することもできる
    (XPの頃はTabで移動しかできなかったので、遠くのウィンドウまで動くのが面倒だった)
- Win + ↑↓←→
    - ←→: ウィンドウを左右半分に分割
        - １枚のディスプレイを分割して使うにも良いが、デュアルディスプレイ間の移動にも対応しているので、ウィンドウの配置換えが楽になる
        - Windows 10 では上下左右に４分割できるようになった
    - ↑↓: 最大化、最小化
- Alt + F4
    - ウィンドウを閉じる
- Win + D
    - 表示されているウィンドウをすべて最小化し、ディスプレイを表示する
    - もう一度押すと元の状態に戻る

## エクスプローラ操作

- Alt + ↑←→
    - ↑: 上位のディレクトリへ
    - ←: 前のディレクトリへ
    - →: 次のディレクトリへ (←で前のディレクトリに行っていた場合)
- Shift + 右クリック
    - (ファイル/ディレクトリの上で実行した場合) "パスのコピー" というメニューが現れ、絶対パスを取得できる
    - (何もない場所で実行した場合) "コマンドウィンドウをここで開く" というメニューが現れ、コマンドプロンプトを開ける
- 右クリックでドラッグ＆ドロップ
    - ドロップ時に、コピー/移動/ショートカット作成が選べる
- F2 (ファイル/ディレクトリを選択して)
    - ファイル/ディレクトリの名前を変更できる
- Ctrl + Z
    - 操作を元に戻す
    - ファイルを間違えて削除したりしても元に戻せる(ごみ箱に残っている場合)
- Alt + Enter (ファイル/ディレクトリを選択して)
    - プロパティを開く(いちいち右クリックするより全然楽)
- Shift + Delete
    - ファイルを完全に削除する(ごみ箱を経由しない)
- Win + E
    - エクスプローラのウィンドウを開く
    - "ファイル名を指定して実行" で直接対象のディレクトリを呼び出した方が早いケースが多いので、あまり使わなくなった


## ファイル名を指定して実行

Windows + R で出てくる"ファイル名を指定して実行" でよく使うものです。
パス上に自分の好きなアプリケーションやディレクトリのショートカットを置くようにすれば、スタートメニューはほぼ不要になります。

**アプリケーション系**

- cmd
    - コマンドプロンプトを開く
- notepad
    - メモ帳を開く
- wordpad
    - ワードパッドを開く
- mspaint
    - ペイントを開く
- powershell
    - PowerShellを開く
- winword
    - Wordを開く
- excel
    - Excelを開く
- powerpnt
    - PowerPoint
- iexplore
    - IEを開く
    - -noframemerging をつけると新規セッションで起動できる
    - -private をつけるとInPrivateモードで起動できる
- firefox
    - Firefoxを開く
- chrome
    - Google Chromeを開く
- mstsc
    - リモートデスクトップを開く

**ディレクトリ系**

- .
    - ホームディレクトリを開く
- \
    - Cドライブを開く
    - "\Windows" みたいに、パスを入力していくこともできる
    - Dドライブとかの場合は、普通に"d:\hoge" などと入力していく
- documents
    - "ドキュメント" ディレクトリを開く
- pictures
    - "ピクチャ" ディレクトリを開く
- desktop
    - "デスクトップ" ディレクトリを開く
    - このディレクトリ上で右クリックすれば、通常のデスクトップに出るメニュー(個人設定など)も出るので、いちいちデスクトップを出す必要がなくなる
- system32
    - system32フォルダを開く

**管理系**

- sysdm.cpl
    - システムのプロパティを開く
    - 環境変数を開きたい場合などに使う
    (Windowsキー→"環境"と入力 の方が早いかも)
- control
    - コントロールパネルを開く
- ncpa.cpl
    - ネットワークのプロパティを開く
- regedit
    - レジストリエディタを開く
- devmgmt.msc
    - デバイスマネージャを開く

## その他

- Windowsキー
    - アプリケーションやディレクトリを検索できる
    - Windows + R のショートカット名もそのまま使える
    - 検索候補に対し、Ctrl + Shift + Enter で選択すると管理者として実行できる
        - コマンドプロンプトを管理者として実行する場合はこれが一番早い。あとはnotepadとかexplorerとかに使うことが多い
- Alt + PrintScreen
    - 選択中のウィンドウのスクリーンショットを撮る
- Ctrl + Shift + Escape
    - タスクマネージャを呼び出す(Ctrl + Alt + Del より早い)
写真時計を作るにあたって。


##参考

[美女時計を作ろう！Android Wear開発入門 30分で作る盤面アプリ](http://blog.btrax.com/jp/2014/12/16/develop-watch-face/)

[Watch faceを描画する](http://qiita.com/eoppp/items/76955b72d3d3c01dae73)




##watch face style

とはたぶん

時計の基盤のことだろう。

### setWatchFaceStyle
リファレンスを読むと

このメソッドでは基盤をセットして、そしてその基盤でも一番上の層で、ユーザーによって形状を変更できる。


###setCardPeekMode

watch faceがディスプレイされている時に



##Paintクラス

###void setStrokeWidth(float width) 

文字サイズの指定をする。

###void setAntiAlias(boolean aa) 

***アンチエイリアス**を有効を指定する。

アンチエイリアスとは 文字やラインを滑らかに見せる処理のことです。

###void  setStrokeCap

setStrokeCapは
線の角の形を選ぶことができる。

今回は        mMinutePaint.setStrokeCap(Paint.Cap.ROUND);

なので
先を丸くする。

[絵を描画する。ドロイド君を書く](http://andante.in/i/%E6%8F%8F%E7%94%BB/%E7%B5%B5%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E3%80%82%E3%83%89%E3%83%AD%E3%82%A4%E3%83%89%E5%90%9B%E3%82%92%E6%9B%B8%E3%81%8F/)



##Drawing Watch Faces


###onTimeTick
1分ごとに実行される処理。

###onAmbientModeChanged

スクリーンがオフになった時実行される処理。

###onDraw

盤面を描写する。

####Parameters

onDraw (Canvas canvas, Rect bounds)
	
canvas 描画されるためのキャンバス
Rect　描画されるべき watch face

#####invalidate
は描画したものを初期化し、画面を再描画できるようにする。
ActionBarDrawerToggle


参考：[Material DesignなNavigation Drawerを目指す](http://www.riaxdnp.jp/?p=6965,Material DesignなNavigation Drawerを目指す。)

##ActionBarDrawerToggle

**Referenceには**
そのクラスにDrawerLayout と ActionBarの機能を共に与える。
これを使うとActivtiyを一つつくり、callbacks　Acitivityの対応するメソッドに従って呼ばれ、これが先に通される。（自分翻訳）

```
      
      mDrawerLayout.setDrawerListener(mDrawerToggle);

```

これはリスナーだからDrawerに触ったときにToggleを読んで、レイアウトに貼り付ける。


##inflaterとは

参考:[カスタム ViewGroup 用XMLのルートタグを <merge> にする](http://y-anz-m.blogspot.jp/2012/04/android-viewgroup.html)

+ メインのレイアウトに別のレイアウトを動的に挿入することができる。
+ レイアウトXMLファイルからViewを生成するときにLayoutInfalterのInflate()メソッドを使います。

リファレンスには

```Java
public View inflate (XmlPullParse parser,ViewGroup root,boolean attachToRoot)
```
と記されていて



参考ページの例

```

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  
  
    <TextView  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="@string/hello" />  
  
</LinearLayout> 

```

```java
LayoutInflater inflater = getLayoutInflater();  
FrameLayout root = new FrameLayout(this); 
```

に対応するViewが

```
View v = inflater.inflate(R.layout.main, root, true);  
```

とした場合は　v はFragment（第二引数の root)になり

```
View v = inflater.inflate(R.layout.main, root, false); 

```
にした場合は　v は　LinearLayout(第一引数　のR.layout.main)になります。

rootがnullの場合は第３引数が真偽に関係なく　v はLinearLayout(第一引数　のR.layout.main)になる。

####まとめると

第３引数がtrueのときfragment(第二引数)
		がflaseのときLinearLayout（第３引数）
unity > androidアプリ > deviceOrientation(端末の向き)の変化を検知する > Coroutineでチェック

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

android端末の向きを変えた時にそれを検知したい。

http://forum.unity3d.com/threads/device-screen-rotation-event.118638/
のJessyの実装を使う(一部変更)。

```csharp
	IEnumerator CheckScreenRotation() {
		while (true) {
			switch (Input.deviceOrientation) {
			case DeviceOrientation.Unknown:
			case DeviceOrientation.FaceUp:
			case DeviceOrientation.FaceDown:
				yield return null;
				break;
			default:
				if (Screen.orientation != (ScreenOrientation)Input.deviceOrientation) {
					SetScreenResolution ();
				}
				yield return null;
				break;
			}
		}
	}
```

上記をコルーチンとして呼び出すことにより、端末の向きが切り替わった時にSetScreenResolution()がコールされる。

上記を含めての画面サイズ調整の処理は以下。

```csharp:MainCameraControl.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class MainCameraControl : MonoBehaviour {
	
	public Text msgText; // set Text to show message
	public Button myButton; // set UI>Button whose width is used as standard

	void SetScreenResolution()
	{
		float aspect = (float)Screen.height / (float)Screen.width;
		float buttonRatio = 0.25f; // 25%
		int buttonWidth = (int)myButton.GetComponent<RectTransform> ().rect.width;
		float newWidth, newHeight;
		
		newWidth = buttonWidth / buttonRatio;
		newHeight = newWidth * aspect;
		
		Screen.SetResolution ((int)newWidth, (int)newHeight, false);
		msgText.text = newWidth.ToString () + "x" + newHeight.ToString ();
	}

	void Start () {
		SetScreenResolution ();
		StartCoroutine ("CheckScreenRotation");
	}	
	
	IEnumerator CheckScreenRotation() {

		while (true) {
			switch (Input.deviceOrientation) {
			case DeviceOrientation.Unknown:
			case DeviceOrientation.FaceUp:
			case DeviceOrientation.FaceDown:
				yield return new WaitForSeconds(0.1f);
				break;
			default:
				if (Screen.orientation != (ScreenOrientation)Input.deviceOrientation) {
					SetScreenResolution ();
				}
				yield return new WaitForSeconds(0.1f);
				break;
			}
		}
	}

}
```

MainCameraControl.csにより、端末がどの向きでもButtonのwidthが画面の25%となるように画面サイズが調整される。

コルーチン処理の重さを軽くするため100msecごとの処理に変更した。
CircleCIでDockerコンテナをテストしようとしたらエラーになるとき


## はじめに

CircleCI上でDockerコンテナをテストするのを試してみました。  
色々とエラーが出たので解決方法を残しておきます。

[Test Docker Images with circleci](https://workshop.avatarnewyork.com/post/test-docker-images-with-circleci/)

ほぼ上記記事に書いてある内容ですけど。

### 環境

* CircleCI
* Docker
* Serverspec


## Exec is not supported by the lxc driver

```
  1) nodejs Package "nodejs" should be installed
     Failure/Error: it { should be_installed }
     Docker::Error::ServerError:
       Unsupported: Exec is not supported by the lxc driver
```

``docker exec``が通らないため、テストがコケています。

原因はCircleCI側の仕様。CircleCIの[解説ページ](https://circleci.com/docs/docker)にも``docker exec``は使えないよと書いてあります。

> docker exec won't work in our containers because we use the LXC driver for Docker and docker exec for the LXC driver hasn't been implemented.


### 解決方法

specinfraのバージョンを「2.12.7」に固定することで、``docker exec``を使わない形でテストを走らせることができます。

```Gemfile
source 'https://rubygems.org'

gem 'docker-api'

group :test do
  gem 'specinfra', '2.12.7'
  gem 'serverspec'
end

```

変更したら``bundle update``で``gemfile.lock``を更新することも忘れずに。


## Cannot destroy container

```
  1) nodejs Package "nodejs" should be installed
     Failure/Error: it { should be_installed }
     Docker::Error::ServerError:
       Cannot destroy container b9df599afbb6c921573f44cf2e5724be837647131a20f7168c4a28b19bfb3984: Driver btrfs failed to remove root filesystem b9df599afbb6c921573f44cf2e5724be837647131a20f7168c4a28b19bfb3984: Failed to destroy btrfs snapshot: operation not permitted
```

``docker rm``が通らないため、テストがコケています。

CircleCI側で許可されていないため。「operation not permitted」って出てますね。

### 解決方法

``docker rm``を使わないように、Serverspecの動きを一部だけ変更します。

参考 : [avatarnewyork/dockerenv_apache](https://github.com/avatarnewyork/dockerenv_apache/blob/master/spec/localhost/Dockerfile_spec.rb)

``*_spec.rb``ファイルに追加。

```
# Workaround needed for circleCI
if ENV['CIRCLECI']
  class Docker::Container
    def remove(options={}); end
    alias_method :delete, :remove
  end
end
```
secureログを分析してみた (CentOS->fluentd->BigQuery)

BigQueryの勉強がてら、secureログ（sshフル開放）をfluentd経由でBigQueryにStream Insertでぶち込んだ。
以下の構成で丸一日放置した
※需要（ストック）があれば、構築手順も公開します。

# 構成
- CentOS
- fluentd
- fluent-plugin-bigquery(fluentdからBigQueryに転送するプラグイン)
- sshd_config: PermitRootLogin no
- SQL知識はほぼ無い

# 結論
- 一日に約10万件のログが残った
- rootに対するアタックが圧倒的に多い
	- rootのログインは無効化しましょう
	- rootはパスワードではなく公開鍵を使いましょう
- 他のユーザに対しても辞書攻撃はされているので、パスワードは長く、もしくは公開鍵を使いましょう
- そもそもSSHのフル開放はやめましょう

# 分析結果

## 総件数
```sql:SQL文
SELECT COUNT(*) FROM [your_dataset.your_table]
```
![Google_BigQuery.png](https://qiita-image-store.s3.amazonaws.com/0/75573/d939e86d-039d-5608-2b6d-cb67a1986719.png "Google_BigQuery.png")


## rootに関するログ集計
```sql:SQL文
SELECT message,COUNT(*) AS COUNT FROM [your_dataset.your_table] where message like '%root%' GROUP BY message ORDER BY COUNT DESC
```
![Google_BigQuery.png](https://qiita-image-store.s3.amazonaws.com/0/75573/621f85f5-06d6-9e3b-3c27-b17fcafa4e09.png "Google_BigQuery.png")

## 施行したユーザ名
```sql:SQL文
SELECT message,COUNT(*) AS COUNT FROM [your_dataset.your_table] where message like 'input_userauth_request: invalid user%' GROUP BY message ORDER BY COUNT desc
```
![Google_BigQuery.png](https://qiita-image-store.s3.amazonaws.com/0/75573/a70e927e-c0bf-53b5-01cd-0b1e0e8931ca.png "Google_BigQuery.png")

## 失敗したIPとユーザ名
```sql:SQL文
SELECT message,COUNT(*) AS COUNT FROM [your_dataset.your_table] where message like 'pam_unix(sshd:auth): authentication failure;%' GROUP BY message ORDER BY COUNT DESC
```
![Google_BigQuery.png](https://qiita-image-store.s3.amazonaws.com/0/75573/60b31293-6721-bdc8-e45f-d53729c27150.png "Google_BigQuery.png")


# 参考
## fluentdの設定ファイル
```conf:/etc/td-agent/td-agent.conf
<source>
  type tail
  path /var/log/secure
  tag syslog.secure
  format syslog
</source>

<match syslog.secure>
  type bigquery

  method insert

  auth_method private_key
  email your_acount@developer.gserviceaccount.com
  private_key_path /path/to/your_project-id.p12

  project your_project_id
  dataset your_dataset
  table your_talbe

  time_format %s
  time_field time
  schema_path /path/to/your_schema.json
</match>
```
- secureファイルはtd-agentユーザから読み込める権限を付与する

## BigQuery用schemaファイル
- 事前にこのファイルを元にBigQueryのテーブルを作成しておく

```conf:/path/to/your_schema.json
[
  {
    "name": "host",
    "type": "STRING"
  },
  {
    "name": "ident",
    "type": "STRING"
  },
  {
    "name": "pid",
    "type": "INTEGER"
  },
  {
    "name": "message",
    "type": "STRING"
  }
]
```
MixのCustom Taskをhex.pmにpublishせずにローカルで使う方法


MixのCustom Taskは簡単に作れていいですね。しかも、Custom Taskのプロジェクト自身からTaskを実行できて、動作を確認するのが楽ちんです。

折角Custom Taskを作ったのなら別のプロジェクトでも使いたくなりますよね。でも[https://hex.pm](https://hex.pm)にpublishするほどじゃない。そんなときどうすればいいか調べたので、メモっておきます。

# Custom Taskを作る
## Custom Taskのプロジェクトを作る
```sh
mix new sample_cmd
cd sample_cmd
```

## Custom Taskのmoduleを作る

```lib/mix/tasks/sample_cmd.exs
defmodule Mix.Tasks.SampleCmd do
  use Mix.Task

  @shortdoc "Sample mix command"

  def run(args) do
    IO.puts "hello world"
  end
end
```

## 動作確認
compileし、mix helpに表示されることを確認

```sh
mix compile
mix help

...
mix sample_cmd        # Sample mix command
...
```
taskを実行

```sh
mix sample_cmd
> hello world
```

# Custom Taskを使う
## プロジェクトを作る
```sh
mix new sample
cd sample
```

## mix.exsのdependenciesに追加
```sample/mix.exs
...
  defp deps do
    [{:sample_cmd, path: "path/to/sample_cmd"}]
  end
...
```
  
## 動作確認
mix helpにCustom Taskが表示されることを確認

```sh
mix help

...
mix sample_cmd        # Sample mix command
...
```

taskを実行

```sh
mix sample_cmd
> hello world
```

# ポイント
mixのdepsは`git`や`path`もサポートしていて、gitリポジトリやローカルのライブラリを参照することができます。

詳しくは、[Mix.Tasks.Deps](http://elixir-lang.org/docs/v1.0/mix/Mix.Tasks.Deps.html)を参照すると良いと思います。
デコレータで楽にcProfileする

そこそこの規模のライブラリ書いてると、プロファイルするとき毎回コマンドラインからスクリプトを実行したりunittestのsetUpとtearDown書くのが面倒だったりするので、デコレータを作っておきます。

```py3:d_profile.py

import cProfile
import pstats


def profile(func):
    def _f(*args, **kwargs):
        pr = cProfile.Profile()
        pr.enable()
        print("\n<<<---")
        res = func(*args, **kwargs)
        p = pstats.Stats(pr)
        p.strip_dirs().sort_stats('cumtime').print_stats(20)
        print("\n--->>>")
        return res
    return _f
```

特定の関数やメソッドだけピンポイントでプロファイルできます。プロファイルを無効にしたいときはデコレータをコメントアウトします。もちろんunittestで特定のテストメソッドだけプロファイルしたい場合にも使えます。

```py3:func.py

from d_profile import profile

@profile
def hoge(a, b):
    return a * b
```
Symfony2.6.11はPHP5.6.7で動かなかった

##背景
**本「効率的なWebアプリケーションの作り方」**はオブジェクト指向を既に**なんとなく**使っている中堅プログラマがもう一回、手っ取り早く学ぶには良い本と思って購入してもらいました。（会社に）

##ローカル環境
この本は**Symfony2.0**を採用しているのですが、2015年現在のSymfony2の最新バージョンは**2.7**。なので、どうせやるなら**2.7もしくは2.6**辺りで動かしてみようと思ってMAMPの環境でPHP5.6.7をチョイスしSymfony2.6.11を適当な理由でチョイスしました。

##500エラー
フィクスチャやDoctrineあたりのセットアップまで行い実装の方をあらかた書いてブラウザにURL(http://*****.com/app_dev.php）を入れたところ500エラーが・・
困ったことにwebサーバのログやSymfonyのログにすら何も吐かれない・・

##やったこと
* .htaccessの書き換え（結局やらなくて良かった）
  * DirectoryIndexがdevelopモードの app_dev.phpではなく、productionモードのapp.phpのみ指定されていたので、app_dev.phpを追加
  * RewriteRuleのところも同様にapp.phpのみだったので、コメントしてapp_dev.phpに変更

* gitで落としてきた各モジュールのバージョンや、それらを置く場所を変更してみたり、autoloader.phpの記述（そもそも本のメソッドはなくなっていたのでコアクラスを見て書き換えた）を見直してみたり・・

##解決方法
MAMPのPHP5.6.7にしていたのですが、**5.5系**（5.5.23）にしたら、動きました・・

##XDEBUG有効化
MAMPはデフォでXDEBUGが有効になっていないので、使用するPHPのphp.iniでxdebugを有効にすればいいのですが、各バージョン毎にphp.iniが２つあります。触るのは**MAMP/bin/php/php選択バージョン/conf/php.ini**です。
MAMP/conf/php/方にあるphp.iniではないので**要注意！！**