OmniAICreator/Qiita-1.07M huggingface dataset:
vagrantの使い方（Parallels向け）


# vagrant  よく使う（基本）コマンド
* vagrant up 
* vagrant ssh
* vagrant halt

* vagrant box list
* vagrant init  java8_jdk_all
* vagrant destroy 

"java8_jdk_all"の箇所はは使いたいvagrant box名を指定。


# Vagrant たまに使う（詳細）コマンド
## box作成
* vagrant status 
* vagrant package 
*  vagrant box add java8_jdk_all package.box

## box 作成の説明
halt状態で vagrant package コマンドを使うことで Box ファイルを作ることができる。
$ vagrant package
$ ls | grep box$
package.box

作った Box ファイルを Vagrant に登録する。
$ vagrant box add mycentos64 package.box


## vagrant boxダウンロードして追加
例）Parallels用CentOS7.3の追加
* vagrant init parallels/centos-7.3 --box-version 1.0.0
* vagrant up
* vagrant box list

参考URL
[parallels - Vagrant Cloud](https://app.vagrantup.com/parallels)

## 初期CDを/vagrant/にする
```
echo 'cd /vagrant/' >> /home/vagrant/.bashrc
source /home/vagrant/.bashrc
```

## エラー対応
parallels-toolsが古いエラー

```
==> default: Parallels Tools were not detected on this VM! They are required
==> default: for shared folders, time sync and more. If shared folders are not
==> default: working on this machine, please install Parallels Tools within the
==> default: virtual machine and reload your VM.
```

vagrantfile に下記を加える。

```
  config.vm.provider "parallels" do |prl|
    prl.update_guest_tools = true
  end
```
再びvagrant upすればOK。
＊参考　[Configuration \- Vagrant Parallels Provider Documentation](https://parallels.github.io/vagrant-parallels/docs/configuration.html)
S3バケットへのアクセスを特定IAMユーザにだけ許可して他は弾く

S3バケットへのアクセスを特定IAMユーザにだけ許可したい

## 課題

単純に考えると、バケットポリシーを次のようにすれば、s3-audit ユーザだけがアクセスできる xxxx-audit バケットが作れそうである。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::xxxx:user/s3-audit"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xxxx-audit",
                "arn:aws:s3:::xxxx-audit/*"
            ]
        }
    ]
}
```

しかしコレだけだと、実は PowerUser ロールなど S3 へのアクセスポリシーがついている IAM ユーザなら誰でもアクセスすることができてしまう。

バケットへのアクセス権限は、IAM ポリシーとバケットポリシーの複合になるので(正確にはもっと色々関わる)、IAMポリシーで許可が出ているとダメである。

| BucketPolicy	| IAM |	結果 |
|:-----------|------------:|:------------:|
| 拒否 | 拒否 | 失敗 |
| 拒否 | 許可 | 失敗 |
| 許可 | 拒否 | 失敗 |
| 許可 | 許可 | 成功 |
| 未設定 | 拒否 | 失敗 |
| 未設定 | 許可 | 成功 |


ref. http://dev.classmethod.jp/cloud/aws/s3-acl-wakewakame/
※ IAMポリシーで許可が出ていると、BucketPolicyが未設定でも、通ってしまう(成功)点に注目


## 解答

正解は次のようになる。`Principal: "*"` とした Deny の中で、`"aws:username": "s3-audit"` のように s3-audit ユーザだけ除外しているのがポイント。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::xxxx:user/s3-audit"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xxxx-audit",
                "arn:aws:s3:::xxxx-audit/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xxxx-audit/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:username": "s3-audit"
                }
            }
        }
    ]
}
```

## 補足

前述の解答だと、Deny の方の Resource に `arn:aws:s3:::xxxx-audit` を指定していないので、ListBucket はできてしまう (PowerUser な人が Web Console から bucket にあるオブジェクトの一覧を見れてしまう。ダウンロードはできない)。

`arn:aws:s3:::xxx-audit` を指定しなかったのは、これをやると terraform を apply しているユーザもアクセスできなくなって、ポリシーを変更できなくなってしまうため。

以下のように StringNotEquals に terraform 用の IAM アカウントも指定すれば問題ないといえばないのだけど、terraform 用の IAM アカウントからもバケットにアクセスできるようになってしまって、表題の要件を満たせなくなる。悩ましい。

```diff
 {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Allow",
             "Principal": {
               "AWS": "arn:aws:iam::xxxx:user/s3-audit"
             },
             "Action": "s3:*",
             "Resource": [
                 "arn:aws:s3:::xxxx-audit",
                 "arn:aws:s3:::xxxx-audit/*"
             ]
         },
         {
             "Effect": "Deny",
             "Principal": "*",
             "Action": "s3:*",
             "Resource": [
+                "arn:aws:s3:::xxxx-audit",
                 "arn:aws:s3:::xxxx-audit/*"
             ],
             "Condition": {
                 "StringNotEquals": {
-                    "aws:username": "s3-audit"
+                    "aws:username": ["s3-audit", "terraform-user"]
                 }
             }
         }
     ]
 }
```
vscodeのショートカット

vscodeのショートカットとか使い方

# mac

[【Mac版】 VisualStudioCode キーボードショートカット](http://qiita.com/naru0504/items/99495c4482cd158ddca8)

Cmd + Shift + p
コマンドパレットだす

Cmd + f
ファイル内検索

Cmd + Option + f
ファイル内置換

Cmd + Shift + f
プロジェクト内検索

Ctrl + Shift + @
ターミナルだす

Cmd + Enter
上に行追加

Cmd + Shift + Enter
下に行追加

Option + ↑（↓）
カーソル行を上下に移動

Cmd + [(])
カーソル行（あるいは選択部分）をインデント

Cmd + ↑（↓）
ファイルの先頭・末端に移動

Cmd + delete
カーソルより前を全部削除

Cmd + fn + delete
カーソルよりあとを全部削除

Ctrl + Cmd + f
全画面表示切り替え
誤ってrmで削除してしまう事故をtrashで防ぐ

間違ってrmをしてしまって後悔をすることが誰でもあると思います。
つい先日自分も2017年にもなって`.git`を削除し、盛大にやらかしました。

さて、起きたことはしょうがないとして、問題は次への対処です。
trashを使いましょう。

[sindresorhus/trash: Move files and folders to the trash](https://github.com/sindresorhus/trash)

trashは削除するのではなく、ゴミ箱に移動してくれるライブラリです。マルチプラットフォームで動作します。

## インストール

```
$ npm install --global trash-cli
```

これで`trash`コマンドが使えるようになります。

```
$ trash unicorn.png rainbow.png
$ trash '*.png' '!unicorn.png'
```

パスをそのままことが可能なのと、globパターンで指定ができあます。

`.zshrc`に以下のように書くことで、rmをtrashに置き換えて安全に削除するようにしてます。

```.zshrc
alias rm=trash
```

また、これは、導入前は考えてなかった恩恵ですが、rmより高速です。
Railsで生のSQL使うと型キャストさえしてくれないので対策

`ActiveRecord::Base.connection#select_all`を使うと`PG::Result`というのが返ってきますが、そのまま使おうとすると全部文字列として扱われてて型変換が面倒くさいので一括でしてしまいましょう。

```.rb
res = ActiveRecord::Base.connection.
select_all("select 1 as aa, false as aas, 123::varchar, Array[1,2] as xx")

# Breaks unless returned values have unique column names
res.map{|row|row.map{|col,val|res.column_types[col].type_cast_from_database val}}
```

### 参考

http://stackoverflow.com/questions/25331778/getting-typed-results-from-activerecord-raw-sql
React Native + Redux 開発で redux-devtools を使う


1. [remote-redux-devtools](https://github.com/zalmoxisus/remote-redux-devtools) をプロジェクトに入れる(Usage のとおりに設定)
2. [redux-devtools-extension](https://github.com/zalmoxisus/redux-devtools-extension) をブラウザにインストールする　
3. エミュレータから Remote JS Debugging を on にし Attach したブラウザタブを開く
4. ReduxDev Tools Extension のメニューから「Open Remote DevTools」を開く


![Fullscreen_2017_04_25_18_24.png](https://qiita-image-store.s3.amazonaws.com/0/40717/5a17beed-0899-7250-bb00-e947f536838a.png)


5 動きました

![redux-devtool.gif](https://qiita-image-store.s3.amazonaws.com/0/40717/b9efb31c-520e-898f-8958-4213007d84e2.gif)
Visual Studio / WPF > コントロール > ContextMenu > Borderに対する例

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.3958 / 9985
> ContextMenuコントロールは、特定のコントロールに対して固有のメニュー（主に右クリックしたときに表示されるメニュー）を提供するためのコントロールです。

試してみた。
メニュー選択時にメッセージダイアログを表示するようにC#スクリプトで記述した。

```xml:XAML
<Window x:Class="_170425_t1733_ContextMenu.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170425_t1733_ContextMenu"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Border Width="100" Height="100" Background="Green">
            <Border.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Menu1" Click="Menu1_Click"/>
                    <MenuItem Header="Menu2"/>
                    <MenuItem Header="Menu3" Click="Menu2_Click"/>
                </ContextMenu>
            </Border.ContextMenu>
        </Border>
        <Button Content="Button" HorizontalAlignment="Left" Margin="104,96,0,0" VerticalAlignment="Top" Width="75"/>
    </Grid>
</Window>
```

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _170425_t1733_ContextMenu
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Menu1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Menu1");
        }

        private void Menu2_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Menu3");
        }
    }
}
```

緑のBorderに対しては`<Border.ContextMenu>`で指定しているとおりのコンテキストメニューが開く。
他の部分ではコンテキストメニューは定義していないため開かない。

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/a1bc0f53-ab5e-c19a-5eb1-1a713e74dc00.png)

Menu1を選択したときはクリックイベントで処理をする。

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/2d91125e-04e0-312b-a45e-9991766fece9.png)


### リンク

Window.Resourcesで定義している例が以下に紹介されている。
[コンテキストメニューを使用する @ HIRO's .NETさん](http://blog.hiros-dot.net/?page_id=4104)
switch_point使ってる環境にdynamoid追加したら衝突した

データベースの垂直分割用に [switch_point](https://github.com/eagletmt/switch_point) 使ってる環境で [dynamoid](https://github.com/Dynamoid/Dynamoid) を使おうとしてGemfileに書いて `rake db:reset` したら物騒なエラーメッセージが出た。

```ruby:Gemfile
gem "dynamoid"
gem "switch_point"
```

```
$ bundle exec rake db:reset
rake aborted!
KeyError: key not found: :master
```

ロード順が影響してるのかなと思ってGemfile内で順番変えてみたけどダメだったので、dynamoidの方をあとからロードするようになったら動くようになった。

```ruby:Gemfile
gem "dynamoid", require: false
gem "switch_point"
```

```ruby:config/initializers/dynamoid.rb
require "dynamoid"
```
よくつかうMvvmLight用のコードスニペット

自分用のメモ。
MvvmLightを使うこと前提
環境を変えるたびに探すので。
短くコンパクトにできるのがポイント。これがないと捗らぬ。

```xml:vmprop.snippet
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>prop for ViewModel</Title>
      <Author>kiichi</Author>
      <Description>prop for ViewModel</Description>
      <HelpUrl>http://www.mvvmlight.net</HelpUrl>
      <Shortcut>vmprop</Shortcut>
    </Header>
    <Snippet>
      <Declarations>
        <Literal Editable="true">
          <ID>property</ID>
          <ToolTip>Property Name</ToolTip>
          <Default>MyProperty</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>type</ID>
          <ToolTip>Property Type</ToolTip>
          <Default>int</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>defaultvalue</ID>
          <ToolTip>The default value for this property.</ToolTip>
          <Default>0</Default>
          <Function>
          </Function>
        </Literal>
      </Declarations>
      <Code Language="csharp">
          <![CDATA[
        public $type$ $property${get{return _$property$;}set{Set(ref _$property$,value);}}
        private $type$ _$property$ = default($type$);
        
]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
```

```xml:RelayCommand.snippet
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>RelayCommand</Title>
      <Author>kiichi</Author>
      <Description>Creates and initializes a new RelayCommand with an Execute lambda. (V5.2.4.0)</Description>
      <HelpUrl>http://www.mvvmlight.net</HelpUrl>
      <Shortcut>relayCommand</Shortcut>
    </Header>
    <Snippet>
      <Declarations>
        <Literal Editable="true">
          <ID>commandname</ID>
          <ToolTip>Name of the RelayCommand.</ToolTip>
          <Default>MyMethod</Default>
          <Function>
          </Function>
        </Literal>
      </Declarations>
      <Code Language="csharp">
        <![CDATA[
        private void $commandname$()
        {
        
        }
        #region $commandname$ Command
        /// <summary>
        /// Gets the $commandname$.
        /// </summary>
        public RelayCommand $commandname$Command
        {
            get{return _$commandname$Command ?? (_$commandname$Command = new RelayCommand(() =>{$commandname$(); }));}
        }
        private RelayCommand _$commandname$Command;
        #endregion
        ]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
```
CloudfrontでIAMユーザにCache Invalidationのみをさせる方法

# 実現したいこと

　IAMユーザにキャッシュ失効（Cache Invalidation）を実行させたい。
　Cloudfrontの設定は変更させない

# ポリシーJSON

```json

{
    "Statement": [
        {
            "Action": [
                "cloudfront:CreateInvalidation",
                "cloudfront:GetDistribution",
                "cloudfront:GetInvalidation",
                "cloudfront:GetStreamingDistribution",
                "cloudfront:GetDistributionConfig",
                "cloudfront:ListDistributions",
                "cloudfront:ListInvalidations",
                "cloudfront:ListStreamingDistributions"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
```

必要に応じてS3へアクセス権限も組み合わせるとよいです。
特定のDistribution以外を非表示にする方法ないかな。


[Amazon Cloudfront Document](http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/cf-api-permissions-ref.html)
Qiitaの「いいね」を「鬼がかってますね」に変える

#感謝（参考にさせていただきました）

- Qiitaの「いいね」を「いいぞ」に変更する
http://qiita.com/kubosho_/items/9751e18e743360b522ad

- Qiitaの「いいね」を「すごーい！」に変える
http://qiita.com/xsota/items/3f534d6ef71a4424fbc2

自分だけではこの発想はわかなかったので、本当に感謝です。

#鬼がかってますね
Qiitaの「いいね」ボタンを「鬼がかってますね」に変更するChrome拡張です。

<img width="" alt="鬼がかってますね.png" src="https://qiita-image-store.s3.amazonaws.com/0/135956/6a5de7e3-86a3-2005-e876-a53b208437f9.png">

CSSはこうです。

```css
/* いいね */
.LikeButton > .p-button::after {
    content: "鬼がかってますね";
}
.LikeButton > .p-button > span:not(.fa) {
    display: none;
}

.itemsShowHeaderStock_statusList > li:first-child > .itemsShowHeaderStock_countText::after{
  content: "鬼がかってますね";
  font-size: 12px;
}

.itemsShowHeaderStock_statusList > li:first-child > .itemsShowHeaderStock_countText{
  font-size: 0px;
}

.LikeLabel__text::after {
    content: "鬼がかってますね";
    font-size: 16px;
}

.LikeLabel__text {
    font-size: 0;
}
```

#使い方
1. git cloneする

``` $ git clone https://github.com/YKrmt/qiita_RMT.git ```

2. Chromeの拡張機能から読み込む

<img width="" alt="Chrome拡張.png" src="https://qiita-image-store.s3.amazonaws.com/0/135956/d95b47b6-7db3-ea69-1d9e-8f25dc28ea2c.png">

   - 「デベロッパーモード」にチェック
   - 「パッケージ化されていない拡張機能を読み込む…」から1.でcloneしたディレクトリを選択

#ソースコード
https://github.com/YKrmt/qiita_RMT

#おわりに
やっぱり自分の好きなレイアウトだと気分良く作業できると思うんですよね。
そういった意味で、参考にさせて頂いたみなさまの投稿には本当に感謝です！


ひとつ問題点は、

<img width="" alt="おいおい直そう.png" src="https://qiita-image-store.s3.amazonaws.com/0/135956/307ef884-7639-ce56-9c55-2187680df5e7.png">

おいおい直そう...
Visual Studio / WPF > コントロール > Calendar > DisplayModeにより表示期間を変更可能

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.3704 / 9985

> 表示内容を1ヶ月、１年、１０年に設定できます

試してみた。
ついでに`<StackPanel>`のOrientationプロパティも使った。

```xml:XAML
<Window x:Class="_170425_t1645_calendar.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170425_t1645_calendar"
        mc:Ignorable="d"
        Title="MainWindow" Height="377.358" Width="550.472">
    <Grid>
        <StackPanel Margin="0,30,0,-28" Orientation="Horizontal">
            <Calendar x:Name="calendar_months" HorizontalAlignment="Left"/>
            <Calendar x:Name="calendar_years" DisplayMode="Year"/>
            <Calendar x:Name="calendar_decades" DisplayMode="Decade"/>
        </StackPanel>
    </Grid>
</Window>
```

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/623b7455-053c-f23b-53d7-8e20e24235f8.png)

### リンク

https://msdn.microsoft.com/ja-jp/library/system.windows.controls.calendar(v=vs.110).aspx

日本語がおかしい部分がある。
> 使用して、 SelectionModeです。

原文は「Use the SelectionMode」。
訳文の改善を送っておいた。

他の部分の訳もあやしいかもしれない。
英語版の文書はページ上部の「英語」ラジオボタンをオンにすれば見ることができる。
関連部分のマウスオーバーでも対応英語が読めるが全体の見通しは悪い。
Swift3でCreating an image format with an unknown type is an error swift

フォトライブラリから画像・写真を選択して表示しようと思ってたら、できませんでした。コンパイルも通るしビルドも正常だしおかしいなと思ったら、ログに`Creating an image format with an unknown type is an error swift`というログが出てました。

# 環境

- Swift3
- Xcode8




# Something wrong 

```err.swift

    public func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo: [String: AnyObject]) {
        
        if didFinishPickingMediaWithInfo[UIImagePickerControllerOriginalImage] != nil {
                   
            yourphoto.image = didFinishPickingMediaWithInfo[UIImagePickerControllerOriginalImage] as? UIImage
            
            self.view.addSubview(yourphoto)
        }
    
        picker.dismiss(animated: true, completion: nil)
    }
    
```

# everything okay

```ok.swift
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
            yourphoto.image = image
        } else{
            print("err")
        } 
        self.dismiss(animated: true, completion: nil)
    }
```

# 参考

[xCode 8 - Creating an image format with an unknown type is an error](http://stackoverflow.com/questions/39009889/xcode-8-creating-an-image-format-with-an-unknown-type-is-an-error)

[Swift3でCreating an image format with an unknown type is an error swift](http://off.tokyo/blog/2017/04/25/xcode-8-creating-an-image-format-with-an-unknown-type-is-an-error/?preview_id=772&preview_nonce=15d531319d&post_format=standard&_thumbnail_id=-1&preview=true)
Homebrewで新しいバージョンのVimをインストールする


MacにはデフォルトでVimがインストールされているが、新しいバージョンのVimを使いたかったので、Homebrewでインストールすることにした。

```
$ brew install vim --with-override-system-vi
```

--with-override-system-viのオプションをつけることで、vimコマンドが新しいバージョンの方を起動するようにする。

コマンドのパスとバージョンを確認。

```
$ which vim
/usr/local/bin/vim

$ vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Apr  8 2017 22:06:49)
MacOS X (unix) version
```
Visual Studio / WPF > コントロール > TreeView > C#スクリプトで定義した文字列を表示する

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.3589 / 9985

TreeViewコントロールに関して、C#スクリプト内でTreeViewItemを設定している例が紹介されていた。

[徳川家の家計図](https://ja.wikipedia.org/wiki/%E5%BE%B3%E5%B7%9D%E5%B0%86%E8%BB%8D%E5%AE%B6)で試してみた。

```xml:XAML
<Window x:Class="_170425_t1630_treeView.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170425_t1630_treeView"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView Name="TokugawaFamily">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate DataType="local:Person"
                                          ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>

        </TreeView>
    </Grid>
</Window>
```

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _170425_t1630_treeView
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var layer3 = new List<Person>();
            layer3.Add(new Person { Name = "家光" });
            layer3.Add(new Person { Name = "忠長" });
            layer3.Add(new Person { Name = "和子" });
            var layer2 = new List<Person>();
            layer2.Add(new Person { Name = "信康" });
            layer2.Add(new Person { Name = "秀康" });
            layer2.Add(new Person { Name = "秀忠", Children = layer3 });
            var layer1 = new List<Person>();
            layer1.Add(new Person { Name = "家康", Children = layer2 });

            TokugawaFamily.ItemsSource = layer1;
        }
    }

    public class Person
    {
        public string Name { get; set; }
        public List<Person> Children { get; set; }
    }
}
```

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/a5d2984e-1e40-ffd5-5cd6-0252fe13dcab.png)

### 備考

```
TokugawaFamily.ItemsSource = layer1;
```

で`TokugawaFamily`が見えないバグ？のような症状に遭遇した。

ソリューションを新規から作り直したらバグは見られなくなった。

XAMLファイルを壊したか、csファイルを壊したかは不明だった。

おかしくなった場合、VSを再起動してソリューションを開きなおすことでも回避できた。
wordpress _s でのsass 構成メモ

# _s とは
Automattic社のテーマチームが汎用テーマを作るために開発したtheme。
[スターターテーマ _s を使ってWordPressのテーマをつくる（準備編）](https://gatespace.jp/2012/12/19/underscores00/#sec1)

## オプションでsassファイルを追加
公式サイトのジェネレーターを使ってダウンロード。
http://underscores.me/
そのままだとstyle.cssが入っているだけですがオプションでsassファイルを追加することができます。チェックボックスの_sassify!をチェックしてダウンロード。
今回はジェネレーターでダウンロードすることにしてますがwp-cliで設置という感じでも。
コマンドでsassを追加する場合はオプションのsassifyで。

```wp-cli
wp scaffold _s [THEMENAME] --theme_name=[THEMENAME] --sassify
```

<img width="1005" alt="スクリーンショット 2017-04-25 15.07.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/30301/d76ea59a-a72a-025a-87cc-2ed4f1fb9b09.png">
<img width="1008" alt="スクリーンショット 2017-04-25 15.07.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/30301/86bf220f-b703-ebd2-6428-a1e0e6c2f125.png">

## sassファイル構成

![スクリーンショット-2017-04-25-15.28.48.jpg](https://qiita-image-store.s3.amazonaws.com/0/30301/5094f7c3-0199-59ed-f147-2e4260c615eb.jpeg)
Slack Client(Electron)のフォント変更

# 動機
Arch Linuxに入れたSlack Clientのデフォルトフォント（Lato?）が気に食わないので変えたい

# 環境
- Slack 2.4.2 64-bit
- Arch Linux(Electronなので他の環境でも大体同じ)

# 手順
- Slack Clientを閉じる
- asar（Electronのパッケージツール）のインストール

```
npm install -g asar
```

- asarパッケージのバックアップ・展開

```
cd /usr/lib/slack/resources # インスール先は環境によって違うはず
sudo cp app.asar app.asar.bak
sudo asar e app.asar app.asar.extract
```

- CSS（LESS）編集

```
sudo vi app.asar.extract/src/static/plastic/plastic_typography.less
```

使用したいfont-familyを追記する

```
    13  /* Double-quotes are required to get Helvetica Neue to load properly */
    14  @lato: *使いたいやつ*, 'Slack-Lato', 'appleLogo', sans-serif;
    15  @helvetica: "Helvetica Neue", Helvetica, "Segoe UI", Tahoma, Arial, sans-serif;
```

- asarパッケージング

```
sudo asar pack app.asar.extract app.asar
```

# 参考
https://blog.hinaloe.net/2015/03/24/change-font-of-slack-for-windows/
【Mac】$ bash ＜任意＞.shでShellScriptを実行しても何も表示されないし、そもそも実行自体ができてない場合

# 概要
$ bash ＜任意＞.sh
ってやっても何も表示されない。

というかコマンドでもなんでもない超適当な文字列を記載してもエラーにならない。

# 原因
改行コードが駄目。改行コードが CR だと上記のように実行自体ができなくなる。
実行したかったら改行コードは LF にすべき。

# 補足
改行コードが CR/LF だと
http://qiita.com/sksmnagisa/items/657cd69831962dcffdad
が起きて酷い目に遭う。
mavenをbrewで入れ直す

何回かmavenを入れ間違えとかしていて環境設定に困ったので自分用メモ。
いくつかのversionのmavenをいれてしまって使いたいversionのmavenになっていないとき

```
mvn --version
```
3.5が使いたいけど3.1になってる！みたいなことを想定

```
brew remove maven@3.1
```
消したいversionのmavenを指定する

```
brew install maven
```
使いたいversionを入れ直す
【Mac】コメント行しか記載していない Shell script なのに実行すると command not found と出るケース

# 概要
コメント行しか記載していない Shell script を

> $ bash aaaaa.sh

とかで実行したら command not found と出た話

# 改行コードが悪い
Winから持ってきたバッチファイルをシェルスクリプトに改造してMacで動かそうとしたんだけど、WinとMacでは改行コードが違うので、Macに合わせて改行コードを変換せずにそのままファイルの中身を改造したからいけなかった。
改行コードを LF に変更しなおしたらまともに動いた。
Mac (El Capitan) のファイルシステムは大文字小文字を区別しないし、Dockerでそれをマウントしても区別しないから注意

以下Docker上のLinuxで実行しています。
## Macのファイルシステムをマウントしているディレクトリで実行
DockerのLinuxからはvboxsfというファイルシステムに見える。
![スクリーンショット 2017-04-25 16.04.46.png](https://qiita-image-store.s3.amazonaws.com/0/6661/cd2de8bf-60a6-b2ce-0efd-c2c37bf63d7d.png)
おおっ？！

## ext4なファイルシステムなディレクトリで実行
![スクリーンショット 2017-04-25 16.11.26.png](https://qiita-image-store.s3.amazonaws.com/0/6661/be581b4d-9735-0596-2fc5-663d4fbc11f1.png)
うむ。

参考： http://qiita.com/tienlen/items/c96e95447fd5122cc42e
物体認識用データセット作成支援ツール（Faster R-CNNとかSSDとか）

R−CNNやYOLO, SSDなど、画像の”どこ”に”何”があるかを識別するタスクのためのラベル付与を支援するソフトウェアをProcessingで作成しました。
主に個人目的で作ったので、ちゃんとしたUIにはなっていないと感じる方もいらっしゃるかもしれませんが、せっかくなので公開したいと思います。

# コードおよび開発環境
以下にコードを載せています。
https://github.com/slowsingle/labeling_for_object_detection

MacBookProのProcessing3.3で開発しました。
使用する際には、controlP5ライブラリが必要になります。これはProcessingでGUIのコントローラを作成するのをお手軽にするライブラリです。

以下のサイトが参考になるかと思います。
http://qiita.com/akspect/items/6a574e12181c00125d40
http://www.sojamo.de/libraries/controlP5/

# 使用方法
今回作成したツールの使用に関するデモ動画がこちらになります。
https://www.youtube.com/watch?v=HXmHYFBqIDM

ツール画面の右側にいくつかボタンがありまして、一番上には[LOAD IMAGE]、すなわち画像を指定するためのボタンがあります。その下にはラジオボタンがいくつかあり、ラベルをそこで選択できます。

画像上でクリックをすると矩形を描画することができ、[SAVE RECT]ボタンを押すと、その矩形領域とラベル情報をセットで記憶します（このとき矩形は消えますが、プログラム内部で情報を保有しているので問題ありません）。矩形を消したい場合は[DELETE RECT]ボタンを押してください。

最後に[OUTPUT XML]ボタンを押すことで、記憶した情報をXMLファイルとして出力します。出力先はprocessingのプログラムがある場所になっていると思われます。

ちなみに、デモ動画の通りに作業を行うと以下のXMLファイルが生成されます。

```xml:test.xml
<?xml version="1.0" encoding="UTF-8"?>
<annotation>
  <folder>XXX</folder>
  <filename>test.jpg</filename>
  <source>
    <database>XXX</database>
    <annotation>XXX</annotation>
    <image>XXX</image>
    <flickrid>XXX</flickrid>
  </source>
  <owner>
    <flickrid>XXX</flickrid>
    <name>?</name>
  </owner>
  <size>
    <width>500</width>
    <height>281</height>
    <depth>3</depth>
  </size>
  <segmented>0</segmented>
  <object>
    <name>Chino</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>1</difficult>
    <bndbox>
      <xmin>125</xmin>
      <ymin>21</ymin>
      <xmax>266</xmax>
      <ymax>170</ymax>
    </bndbox>
  </object>
  <object>
    <name>Shallo</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>1</difficult>
    <bndbox>
      <xmin>274</xmin>
      <ymin>4</ymin>
      <xmax>402</xmax>
      <ymax>156</ymax>
    </bndbox>
  </object>
</annotation>
```

XMLのファイル名は画像ファイル名にxmlの拡張子がついたものとなります。なお、poseやtruncated, difficultの情報はこのツール上からは設定できず、デフォルトの値のままになっているので、この値は教師信号として使わないようにしてください。nameとbndboxの(xmin, ymin, xmax, ymax)がデモ動画における作業で正しく更新された情報になっています。

余談ですが、Chino（チノ）やShallo（シャロ）は画像に写っている女の子の名前です。というか、ごちうさですね。私にも心をぴょんぴょんさせていた時期がありました。

# 学習

実際にこれで正しくデータセットが構築できているのかを確かめるために、学習を行いました。
以前私が書いた記事（[物体検出アルゴリズム(SSD : Single Shot MultiBox Detector)を学習させてみる](http://qiita.com/slowsingle/items/64cc927bb29a49a7af14)）を参考にして、今回はごちうさの画像を60枚集めて、本ツールを用いてラベルの割り振りを行いました。
今回はデータセットが正しく作れているかを確かめたいので、訓練画像をそのままネットワークに投げて推論させました。

結果がこちらです。
![result.png](https://qiita-image-store.s3.amazonaws.com/0/72509/cf4a761c-364b-d2ac-b05c-7e99b4998b60.png)

ちゃんと学習できているようです。ちなみに、訓練時に使っていない画像を試しに投げてみると、ココアとシャロを間違えたりすることが多くなります。髪の色以外は大体同じですからね。。。（とか言うと怒る人がいるかもしれないので、ここら辺にしておきましょう）
Visual Studio / WPF > コントロール > TreeView > XAMLで定義した文字列を表示する

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

@ WPF 4.5入門 by 大田一希さん
No.3408 / 9985

TreeViewコントロールの使用例が紹介されている。
試してみた。

```xml:XAML
<Window x:Class="_170421_t1510_WpfDataGridComboBox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170421_t1510_WpfDataGridComboBox"
        xmlns:sys="clr-namespace:System;assembly=mscorlib" 
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <TreeView>
        <TreeViewItem Header="Item3">
            <TreeViewItem Header="Item3-1">
                <TreeViewItem Header="Item3-1-4">
                    <TreeViewItem Header="Item3-1-4-1">
                        パイ
                    </TreeViewItem>
                </TreeViewItem>
            </TreeViewItem>
        </TreeViewItem>
        <TreeViewItem Header="Item2">
            <TreeViewItem Header="Item2-7">
                <TreeViewItem Header="Item2-7-1">
                    <TreeViewItem Header="Item2-7-1-8">
                        napier
                    </TreeViewItem>
                </TreeViewItem>
            </TreeViewItem>
        </TreeViewItem>
    </TreeView>
</Window>
```

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/8a7dab63-b27b-5cf7-260a-e3c162f4f1bd.png)
Cognos レポートでリストのセルに棒グラフを表示するお手軽なやり方

##概要
こんな感じに、リストの列を棒グラフで表示したい時のお手軽なやり方です。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/60ea78e4-f90b-2395-1ca5-16c5979fb051.png)

##実装方法
Report Authoring では、以下のようにリストにアイテムを置いています。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/e93e39b4-9e08-7085-2a4a-52e9505405df.png)

リストのクエリーは以下です。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a6058031-5ee3-54b5-69a9-a187727c95de.png)

※「達成率」のデータアイテムの中身
([収益]/[計画収入])

※「バーの長さ」のデータアイテムの中身
_round(([収益]/[計画収入])\*10,1)\*10


**・1つ目のHTML Item**
実際の記述：
<div style="background-color:blue; border:solid 1pt black; padding-left:5px;color:white;font-weight:bold;width:
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/cdacf88f-0ac6-c8a6-779c-bc694cc28534.png)

**・2つ目のHTML Item**
ソースのタイプを「データアイテムの値」、データ・アイテムの値を「バーの長さ」にしています。
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a0de0b64-ad45-521c-ad7c-a29b44cbb78f.png)

**・3つ目のHTML Item**
実際の記述：
">
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/01a05169-49bd-f7f3-133a-07373cbf56a5.png)

**・4つ目のHTML Item**
実際の記述：
\</div>
![007.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/0d4c0f69-7d68-b932-0891-89a2b092a11c.png)

適当に、1つ目のHTML Itemの記載を変えればカスタマイズできますので、ご活用下さい。
UIパネルからシンプルな背景自動作成　

自動化の内容は
①フォルダを作成
②作成したフォルダ内にコンポジションを作成
③コンポジションにbackgroundの平面レイヤーとフラクタルノイズ用の平面レイヤーを作成
③フラクタルノイズ用の平面レイヤーにフラクタルノイズのエフェクトを設定
⑤ビネット用の平面レイヤーを作る
⑥ビネット用の平面レイヤーにマスクを追加し、マスクの設定する。

```js
#target aftereffects
//ウィンドウを表示
var winObj=new Window("window","lyric video",[200,150,500,250]);
//ウィンドウにボタン追加
var btn=winObj.add("button",[20,20,280,50],"作成");
//メインルート
var route1=app.project.items;

//ウィンドウの内容
btn.onClick= function(){
   //フォルダを作成
    var creFol=route1.addFolder("Lyric_Comp");
    //フォルダ内にコンポジションを作成
    var creComp=creFol.items.addComp("Lyric_background",1920,1080,1.0,600,29.97);
    //background用平面レイヤー（backgroundColor）をcreComp内に作成
    var creLay=creComp.layers.addSolid([0.8,0.8,0.8,],"backgroundColor",creComp.width,creComp.height,creComp.pixelAspect,creComp.duration);
    //Background用平面レイヤー(flactalnoize)をcreComp内に作成
    var creLay=creComp.layers.addSolid([0,0,0,],"flactalNoise",creComp.width,creComp.height,creComp.pixelAspect,creComp.duration);
    //エフェクトを追加（フラクタルノイズ）
    creLay.blendingMode = BlendingMode.SOFT_LIGHT;
    creLay.property("ADBE Effect Parade").addProperty("ADBE Fractal Noise");
    creLay.property("ADBE Transform Group").property("ADBE Opacity").setValue(32);
    creLay.property("ADBE Effect Parade").property("ADBE Fractal Noise").property("ADBE Fractal Noise-0004").setValue(371);
    creLay.property("ADBE Effect Parade").property("ADBE Fractal Noise").property("ADBE Fractal Noise-0009").setValue(0);
    creLay.property("ADBE Effect Parade").property("ADBE Fractal Noise").property("ADBE Fractal Noise-0011").setValue(1582);
    creLay.property("ADBE Effect Parade").property("ADBE Fractal Noise").property("ADBE Fractal Noise-0012").setValue(1597);
    creLay.property("ADBE Effect Parade").property("ADBE Fractal Noise").property("ADBE Fractal Noise-0023").expression='time*360';

    //Background用平面レイヤー(vignette)をcreComp内に作成
    var creLay=creComp.layers.addSolid([0,0,0,],"vignette",creComp.width,creComp.height,creComp.pixelAspect,creComp.duration);
    var myMask=creLay.property("ADBE Mask Parade").addProperty("mask");
    //ブレンディングモード
    myMask.maskMode = MaskMode.SUBTRACT;
    //マスクの境界のぼかし
    myMask.property("ADBE Mask Feather").setValue([750,750]);
    //マスクの拡張
    myMask.property("ADBE Mask Offset").setValue(80);
    //コンポジションのサイズ
    var compSizeW=creComp.width;
    var compSizeH=creComp.height;
    //マスクの形状設定
    var myShape = new Shape();

    myShape.vertices = [[compSizeW/2,0],[compSizeW,compSizeH/2],[compSizeW/2,compSizeH],[0,compSizeH/2]]; 
    myShape.inTangents = [[-compSizeW/2,0],[0,-50],[compSizeW/2,0],[0,50]]; 
    myShape.outTangents = [[compSizeW/2,0],[0,50],[-compSizeW/2,0],[0,-50]]; 
    myShape.closed = true;
    myMask.maskShape.setValue(myShape);
```

![bandicam 2017-04-25 15-59-22-571.jpg](https://qiita-image-store.s3.amazonaws.com/0/178061/7ea80fab-aea3-588e-adc7-aacdc485a762.jpeg)
JavaScript の switch っぽい何かを再発明してみた

[y13i/switz: Yet another switch-like control structure.](https://github.com/y13i/switz)

# 動機

## JS の `switch` のシンタックスがどうにも好きでない

[switch - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/switch)

- 各 `case` が変数のスコープをつくらない
- `break` を忘れがちでアレ
- インデントがしっくりこない

## Object Literal で代用しようという記事を時々見かける

- [Replacing switch statements with Object literals](https://toddmotto.com/deprecating-the-switch-statement-for-object-literals/)
- [Rewriting Javascript : Replacing the Switch Statement](https://medium.com/@chrisburgin95/rewriting-javascript-replacing-the-switch-statement-cfff707cf045)

個人的にはこちらもあまり馴染めず、自分の書きたいシンタックスから仕様を検討した。

# 実装

実装は TypeScript 、テストスイートは [AVA](https://github.com/avajs/ava) 。

`Switch`,  `Case` をクラスとして実装し、 `switz` という関数はそれらを短い記述で使うためのラッパーとして実装した。

# インストール

```shell-session
$ npm install --save switz
```

# 使用例

使う前に

```js
import switz from "switz"; // import が使えるならこちら
const switz = require("switz"); // そうでなければ require
```

基本

```js
const num = Math.ceil(Math.random() * 4);

switz(num, s => {
  s.case(1, () => console.log("ワン！"));
  s.case(2, () => console.log("ツー！"));
  s.case(3, () => console.log("スリー！"));
  s.case(4, () => console.log("よ〜ん"));
});
```

マッチした `case` の結果を返すのでより短く書ける

```js
const message = switz(num, s => {
  s.case(1, () => "ワン！");
  s.case(2, () => "ツー！");
  s.case(3, () => "スリー！");
  s.case(4, () => "よ〜ん");
});

console.log(message);
```

正規表現などでのマッチもできる（デフォルトは `switch` と同じ `===` での比較）。さらに matcher の戻り値は case handler の引数として与えられる

```js
import switz, {RegexpMatcher} from 'switz';

const longStr = "lo" + (() => {
  const n = Math.floor(Math.random() * 30);
  let r = "";
  for (let i = 0; i < n; i++) r += "o";
  return r;
})() + "ng";

console.log(longStr); // => "looooooooooooooooooooong"

const message = switz(longStr, s => {
  s.matcher(RegexpMatcher);
  s.case(/o{10,}/, match => `yes, ${match[0].length} "o"s.`);
  s.default(() => "no");
});

console.log(message); // => "yes, 21 \"o\"s."
```

TypeScript で使う際は [Generics](http://typescript.ninja/typescript-in-definitelyland/types-basic.html#h3-6) を用いて戻りの型を明示できる

```ts
const hoge = switz<string>("foo", s => {
  s.case("foo", () => "bar");
  s.case("bar", () => "baz");
  s.case("fuz", () => 123); // `string` でないのでコンパイル時にエラーになる
});
```

メソッドチェインで書くこともできる

```js
switz("foo", s => s
  .case("foo", () => "bar")
  .case("bar", () => "baz")
);
```

`Switch`, `Case` クラスを直接使って switch builder 的な使い方もできる

```js
const {Switch, Case} = require("switz");
// or
import {Switch, Case} from "switz";

const subject = Math.floor(Math.random() * 100);

const mySwitch = new Switch(subject);

mySwitch.setMatcher((s, c) => {
  const min = c[0];
  const max = c[1];

  return min <= s && max >= s;
});

mySwitch.addCase(new Case([0, 50], () => "Between 0-50"));
mySwitch.addCase(new Case([50, 100], () => "Between 50-100"));

console.log(mySwitch.evaluate());
```

# 感想

- [AVA のアサーション](https://github.com/avajs/ava#magic-assert) が親切すぎて昇天
- npm にパッケージを publish する時のお作法を習得するのにちょっと手間取った
- TypeScript かわいい
近縁種の遺伝子モデルがない場合のAugustusのトレーニング

#はじめに
Augustusは真核生物の遺伝子モデル構築に良く使われます。多くの種について、それぞれに対応した遺伝子モデルパラメーターを提供していますが、まだモデルが十分でない生物群もあります。そのような種についてモデリングをする場合は、自前で遺伝子モデルを構築する必要があります。Augustusはそのためのスクリプトを提供してくれているので、それらを使ったモデリングの方法について書いておきます.

以下のスクリプトやBRAKER1 を使ってトレーニングをすることも出来るようです。
/augustus-3.2.3/scripts/autoAug.pl



#使用ソフト
[Augustus (3.2.1)](http://bioinf.uni-greifswald.de/augustus/)

#参考サイト
[本家解説サイト](http://www.molecularevolution.org/molevolfiles/exercises/augustus/training.html)

#手順1.信頼出来る遺伝子モデル（200-1000遺伝子）を準備
RNAseqデータなどを元に、信頼出来る遺伝子モデルを200個以上準備する。
私は、偏りが生じない様に、最長コンティグなどについて、全モデルを目でピックアップしています。
遺伝子モデルはgenbank形式で準備する。GFFなどの場合は以下のスクリプトなどをつかってgenbankへ変換しておく。
/augustus-3.2.3/scripts/gff2gbSmallDNA.pl


上流下流に200bpの余分を取って遺伝子を抜き出す
```sh:fasta2gb_aug.sh
perl /home/maedat/opt/augustus-3.2.3/scripts/gff2gbSmallDNA.pl all.gff  all.fa 200 all.gb
```


注意点

+ スプライシングバリアントは含めない（1遺伝子について１モデルだけ）
+ イントロンが入っている遺伝子をいれる（当然）
+ UTRにも対応しているが、それ用のデータ（完全長mRNA解析など）がないならモデルに含めない方がよい（と思う）。

#手順2.遺伝子モデルをテスト用とトレーニング用に分ける
トレーニングの結果どれだけモデルが改善されたかを検証するためのテスト用遺伝子をあらかじめ取っておきそれはトレーニングには用いない (当てはまりではなく”予測性のよさ”を問題にするため)

```sh:training_extract.sh

~/opt/augustus-3.2.3/scripts/randomSplit.pl genes.gb 100

```

以上のスクリプト実行すると
テスト用のデータセット(100遺伝子）:myspecies.gb.test  
と
トレーニング用のデータセット(残り遺伝子）: myspecies.gb.train
が作られる。
これらは元データからランダムに選ばれたもので、単に頭から100遺伝子取ってくるのではデータとして不適切である。
なので必ずtraining_extract.shスクリプトを使って遺伝子を分けよう。

#手順3.新しく作るモデル用にファイルやディレクトリを作成する。

##モデルディレクトリの作成
以下のスクリプトによってAugustusディレクトリの中に、新しいモデル用のファイルが作成される

```sh:training_extract.sh
~/opt/augustus-3.2.3/scripts/new_species.pl --species=my_new_species
```

作られる場所は、Augustusのインストール時にAUGUSTUS_CONFIG_PATHとして指定した場所である
デフォルトなら以下など
/augustus-3.2.3/config/species/

##stopCodonExcludedFromCDSを変更
以下の様なファイル（他にも色々あるが、、）が作られる。
/augustus-3.2.3/config/species/my_species/my_species_parameters.cfg 

このファイルで出力データなどの変更ができる


#手順4.1回目のトレーニング

まず１回トレーニングを行う。

```sh:first_model.sh
etraining --species=my_species genes.gb.train
```
/augustus-3.2.3/config/species/species/my_species　ディレクトリに
新しく
my_species_(intron|exon|igenic).pbl
が出来ているので確認する

試しにab initio予測をして予測精度を確認する。

```sh:test_1st_run.sh
augustus --species=my_species genes.gb.test | tee firsttest.out 
```

firsttest.outにlogが出ているのでそこから統計量を取り出して概観する

```sh:statistics.sh
grep -A 22 Evaluation firsttest.out
```

同様に既存の augustusについてきたモデルを使って予測を行い
統計量をみて、実際に良くなっているか確認するのもよいだろう


#手順4.2回目のトレーニング

一日くらいかかる。上だけで終わることも出来るが、こっちをやっておいた方がよいだろう
まずaugustusのメタパラメータを最適化する

```sh:optim_augustur.sh
~/opt/augustus-3.2.3/scripts/optimize_augustus.pl --species=my_species myspecies.gb.train  --cpus=20
```

再度モデルのトレーニングを行う

```sh:first_model.sh
etraining --species=my_species genes.gb.train
```

上記の様にab initioに予測をして、精度が上がったか確認する。
Phalcon 3 改行コードをとにかく1バイトとする処理 formで使える！

#改行を1バイトで計算させる


TextAreaで入力した文字で改行コードがWindowsだと\r\nとなってしまって2バイト扱いとなります。
そのほかMac,Linuxだと1バイトなんですが改行コードが違います。
そのへんをすべて吸収させる処理を考えてみました。

##CRキャリッジリターンとLFラインフィード
改行コードはCRだったりLFだったり、CRLFだったりシステムによって異なります。

|改行コード| |
|---|---|
|LF    |UNIXやUnix系のシステム。Linux、macOS|
|CR+LF |Windows|
|CR    |昔のMac OS|


PhalconのformsTextAreaに入力された文字を自動で変換する方法があります。config/services.phpに以下のように追加します。

```config/services.php
$di->set('filter', function () {
    $filter = new Filter();
    $filter->add('convertCRLF', function ($arg) {
        $to = "\n";
        return preg_replace("/\r\n|\r|\n/", "\n", $arg);
    });
    return $filter;
}, true);
```

実際に使う場合は以下の通り。

```cofms/myform.php
      $msg = new TextArea('msg');
      $msg->addValidators([
      $msg->addFilter('striptags');
      $msg->addFilter("convertCRLF"); // <- ここね
      $this->add($msg);
```
CentOS 7 firewalld ルール変更メモ

# CentOS 7 firewalld ルール変更メモ

- デフォルトなアクティブゾーンの現行ルール確認

```
$ sudo firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
```

- HTTPSサービス追加(恒久設定とする)

```
$ sudo firewall-cmd --zone=public --add-service=http --permanent
success
```

- 設定を再読込する

```
$ sudo firewall-cmd --reload
success
```

- 再度ルール確認

```
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client http ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
```
cssでborderを使わず三角形を描写する

CSSで三角形を作るといえばborderを利用したものが有名だけどサイズの計算とか扱いとかがちょっとめんどいので普通のdivとかの背景を三角形にしたくなった。した。
普通にwidth/heightを設定するだけでかってに伸縮してくれるのがいいところで、底辺が100%の三角形とか、width:autoのような挙動をする三角形を手軽に作れる。

![img.png](https://qiita-image-store.s3.amazonaws.com/0/68480/f0609437-3430-2e01-b0a6-5c8d25ffabf7.png)

```css:css
.bottom{
	background:
	  linear-gradient(to top right, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top left/50% 100%,
	  linear-gradient(to top left, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top right/50% 100%;
}
.top{
	background:
	  linear-gradient(to bottom right, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top left/50% 100%,
	  linear-gradient(to bottom left, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top right/50% 100%;
}
.left{
	background:
	  linear-gradient(to top right, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat bottom left/100% 50%,
	  linear-gradient(to bottom right, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top right/100% 50%;
}
.right{
	background:
	  linear-gradient(to bottom left, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top left/100% 50%,
	  linear-gradient(to top left, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat bottom right/100% 50%;
}
.topRight{
	background:
	  linear-gradient(to top right, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top left/100% 100%
}
.topLeft{
	background:
	  linear-gradient(to top left, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top left/100% 100%
}
.bottomRight{
	background:
	  linear-gradient(to bottom right, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top left/100% 100%
}
.bottomLeft{
	background:
	  linear-gradient(to bottom left, rgba(255,255,255,0) 50%, #f00 50.5%) no-repeat top left/100% 100%
}
```

装飾コードを外すとこんなかんじ。
対応ブラウザはIE9～、泥4.4以降のはず。たぶん。
思い出したらきちんとmixinにする。
Rustでシグナルを手軽に扱う

**[2018.08.14 追記] chan-signalはdeprecatedになって、代わりに[crossbeam-channel](https://github.com/crossbeam-rs/crossbeam-channel)と[signal-hook](https://github.com/vorner/signal-hook)を使うことが推奨されています。**

## 概要

[なるほどUnixプロセス](http://tatsu-zine.com/books/naruhounix)を[Rustで実装してみる](https://github.com/hhatto/wwup-in-rust)ということをやっていて、そこでシグナルを扱う章があったのですがあまり情報がない感じだったのと、今後Rustでもシグナルを扱いたい場面がでてきそうなので、試したことのメモを共有します。

Rustはstableで1.16前提です。


## chan-signalを使う

Goのchannel/selectライクに非同期処理を書くことができる[chan](https://github.com/BurntSushi/chan)クレイトと、chanと合わせてシグナルを容易に扱うことができる[chan-signal](https://github.com/BurntSushi/chan-signal)クレイトを使ってシグナルを扱ってみます。

2017年4月現在の最新バージョンは`chan:0.1.19`、`chan-signal:0.2.0`です。


最初は`chan_signal`だけを使った例です。

```toml:Cargo.toml
[dependencies]
chan = "*"
chan-signal = "*"
```

```rust:chan-signal.rs
extern crate chan_signal;

use chan_signal::Signal;

fn main() {
    let s = chan_signal::notify(&[Signal::TERM, Signal::USR1]);
    match s.recv() {
        Some(s) => println!("signal={:?}", s),
        _ => {}
    }
}
```

SIGTERMとSIGUSR1を受信設定して1度だけ受信を待ち受けて、シグナル受信時にデバッグ出力します。（Ctrl-Cで停止できないので、`kill -TERM PID`等で停止する必要があります。）

## chanとchan-signalを組み合わせて使う

chanクレイトを使って、10秒後にメッセージを受信またはシグナルSIGINTの受信を同時に待ち受ける処理の例です。

```rust:chan-signal-with-chan.rs
#[macro_use]
extern crate chan;
extern crate chan_signal;

use chan_signal::Signal;

fn main() {
    let s = chan_signal::notify(&[Signal::INT]);
    let do_something = chan::after_ms(10_000);

    chan_select! {
        s.recv() -> signal => {
            println!("signal={:?}", signal);
        },
        do_something.recv() => {
            println!("do something");
        }
    }
}
```

実行して何もしなければ10秒後に`do something`を出力して終了し、途中でCtrl-C等でシグナルSIGINTを受信すればデバッグ出力して終了します。

手軽です。

`chan`クレイトはそれ単体で面白い機構なので、もう少し中身見てみたり実際に使ってみたりしたいですね。


## nixを使う

[nix](https://github.com/nix-rust/nix)クレイトの`sigaction`あたりを使えば、いわゆる生のxNIX APIを使う感覚でシグナルを扱う処理を実装できます。

2017年4月現在の`nix`の最新バージョンは`0.8.1`です。


```toml:Cargo.toml
[dependencies]
nix = "*"
```

以下は先ほどの`chan`と`chan-signal`を組み合わせた例を`nix`で実装してみたものです。

```rust:nix-sigaction.rs
#[macro_use]
extern crate chan;
extern crate nix;

use nix::sys::signal;
use nix::sys::signal::{sigaction, SigAction, SigHandler, SA_RESETHAND, SigSet};

extern "C" fn handle_signal(signum: i32) {
    println!("handler. signal={}", signum);
}

fn main() {
    let sa = SigAction::new(SigHandler::Handler(handle_signal), SA_RESETHAND, SigSet::empty());
    unsafe { sigaction(signal::SIGINT, &sa) }.unwrap();

    let do_something = chan::after_ms(10_000);

    chan_select! {
        do_something.recv() => {
            println!("do something");
        }
    }
}
```

`SA_RESETHAND`で1度だけ定義したハンドラ設定が有効になるので、実行後にCtrl-Cで`handler. signal=2`と表示され、もう一度Ctrl-Cでプログラムが終了します。（実行後何もしなければ10秒後に`do something`を出力して終了するのは変わりません。）


## おわりに

以上、`chan` `chan-signal` `nix`を使ったRustでのシグナルの扱いについてのメモでした。
Linuxにおいて、特定のプロセスのプロセスIDを調べる方法

Linuxにおいて、特定のプロセスのプロセスIDを調べる方法についてまとめます。

#コマンド
* 調べたいプロセスの名前と実行しているプロセスの名前が一致している場合

```bash
$ pgrep -l {プロセス名 (部分一致可)}
```

* 調べたいプロセスの名前と実行しているプロセスの名前が異なっている場合  
(ex. `java`コマンドで走らせているプログラム)

```bash
$ ps ax | grep {プロセス名 (部分一致可)} | grep -v "grep"
```

#参考文献
* [psコマンド(Linux)](http://www.coins.tsukuba.ac.jp/~yas/coins/syspro-2004/2004-04-12/ps-command.html)
Powershellでsshチックなことをする


# 経緯
aws で、最近 iam role の付け替えが出来るようになりました。
早速 windows の iam role を起動したまま切り替えたのですが、その際に ssm が  __connection timeout__ になってしまいました。
__Restart-Service Ec2Config__ で __Online__ になるのですが、対象サーバがそれなりにあったので、もう少し楽にできないかと思い、 powershell を使うことにしました。

# 方法
 winrm を使用すれば、 powershell でリモート接続しコマンドを叩ける。
 ざっくりと二通りあったのでメモしておきます。

wirm でリモート接続するためには、 __Enable-PSRemoting__ で有効化する必要があるので、詳しくは参考 URL を見ていただければと。。。
 
 
## 方法其ノ一
セッションをはる

New-PSSession -ComputerName <Public DNS or Private DNS>
※ __Public DNS__ , __Private DNS__ どちらでも行けました。検証済み

下記でリモート接続しているサーバに対してコマンドを叩く

```
Invoke-Command -Session $sess -ScriptBlock {ls;}
```

添付画像のように、変数でうけるのがベターっぽいです。

![jump.png](https://qiita-image-store.s3.amazonaws.com/0/131489/ca865d54-3fca-cbe5-3d29-c7cb491b7477.png "jump.png")


### 補足
__New-PSSession__ を使用すると、サインアウトしても session は残るので、 __Remove-Session__ してあげましょう。


## 方法其ノ弐
__New-PSSession__ だけではなく、 __Enter-PSSession__ でも出来るようです。

```
Enter-PSSession -ComputerName <Public DNS or Private DNS>
```

![jump 2.png](https://qiita-image-store.s3.amazonaws.com/0/131489/3c481971-df32-c2d2-3de1-47d8217c6807.png "jump 2.png")


ほぼ見えてませんが、下記のようになってます。
__多段sshしている気分になります__


```
[Public DNS]: PS C:¥Users¥hoge¥Documents>
```


まとめ
RDP したくないから、ssm使ってるのになんでやねん!ってなりました。
ただ、一つ知見が増えて良かったです。


# 参考
http://hensa40.cutegirl.jp/archives/677
Dropboxの短縮URLについて

## Dropboxの短縮URLの方法がよく分からん
当たり前すぎて書かれていないのか、ググっても簡単に出てこなかったので共有します。

## 方法
通常、Dropboxから共有リンクをコピーすると下記のようなフォーマットになると思います。

```
https://www.dropbox.com/s/[ランダム文字列]/[ファイル名]?dl=0
```

実はこれ、**URLの[ファイル名]以降を消しても同じリンクに飛びます。なので実質短縮URLとして機能します。**

```
https://www.dropbox.com/s/[ランダム文字列]/
```

知らなかった人はぜひお試しあれ。

## 補足
ファイルを受け取る側としては、ファイル名が見えている方が少なからず安心すると思うので、文字制限などなければ、なるべくそのままのURLで使用した方が無難です。

ですが、日本語など文字コードに自動変換されてしまう文字ではファイル名が分からないので、その場合は、**[ファイル名]を本来の文字で打ち直したURLを提供すると親切でしょう。**

```
https://www.dropbox.com/s/[ランダム文字列]/%e3%83%86%e3%82%b9%e3%83%88%e3%81%a0%e3%82%88.pdf
```

↓

```
https://www.dropbox.com/s/[ランダム文字列]/テストだよ.pdf
```