OmniAICreator/Qiita-1.07M huggingface dataset:
Elasticsearchのingest機能について

Elasticsearchのingest機能について実際やってみたので、その共有。

# ingest機能とは
データを格納する前にpipeline(processor)にdocumentを通すことで、データの整形を行う。

# ingestの種類
多くのprocessorがある。[ここ](https://www.elastic.co/guide/en/elasticsearch/reference/6.6/ingest-processors.html)を参照

- set processor
- append processor
- date processor
- lowcase processor

などなど

# 実験
以下elasticsearch-rails gemを使って実験です。

```Gemfile
gem 'elasticsearch-rails', '~> 6'
gem 'elasticsearch-model', '~> 6'
```

# pipelineの作成
ingestを使うにはまず上であげたprocessorを使ってpipelineを作成します。
ここでは以下のようなコードを書いてpipelineを作成します。

Elasticsearchの接続のコードは以下のような感じにしています。多少、省略していますが、大体こんな感じ。

```例
class ElasticsearchClient
  class << self
    def client
      if ENV['RAILS_ENV'] == 'production'
        return connection_to_bonsai
      end

      connection_to_local
    end

    private

    def hosts
      [{ host: ElasticsearchConfig::CONFIG[:host], port: ElasticsearchConfig::CONFIG[:port] }]
    end

    def url
      ENV['BONSAI_URL']
    end


    def connection_to_local
      Elasticsearch::Client.new(
        hosts: hosts,
        randomize_hosts: true,
        request_timeout: 10,
        reload_connections: 500,
        sniffer_timeout: 3,
        reload_on_failure: false,
        log: false
      )
    end
  end
end
```

pipelineを作成するコードとpipelineの定義の確認

```
     def create_pipeline!
       client = ElasticsearchClient.client
       client.ingest.put_pipeline(
         id: 'test_pipeline',
         body: {
           processors: [
             { set: { field: "search_test", value: "{{description}} {{tel}}" } }
           ]
         }
       )
     end

     def get_pipeline!
       client = ElasticsearchClient.client
       client.ingest.get_pipeline(
         id: 'test_pipeline'
       )
     end
```

今回はset processorを使ってます。search_testというfieldを定義し、document登録時にdescriptionというfieldとtelというfieldの値を連結してsearch_testに入れるようにしてます。

では、indexにpipelineの登録するようにします。
pipelineを定義するのはindexのsettingに次の行を追加するだけです

```
number_of_shards:   5,
number_of_replicas: 1,
default_pipeline: 'test_pipeline', <<<<<<<<< これを追加
```
あとはindexを作成し、実際にdocumentを登録してみましょう。すると以下のようにpipelineの内容が反映されていることが確認できます。



```
$ curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_all": {}
    }
}
'
~~~~~
~~~~~~~~~
     {
        "_index" : "es_index_name_place",
        "_type" : "_doc",
        "_id" : "296",
        "_score" : 1.0,
        "_source" : {
          "description" : "これはテスト。これはレストランです",
          "search_test" : "これはテスト。これはレストランです 0451112222",
          "tel" : "0451112222",
          "id" : 296,
        }
```

ここで1点注意です。
elasticsearch6.5.０を最初使っていたのですが、それだとindexに作成したpipelineの登録ができませんでした。bugの報告もあったようで。なので、今回は6.5.4を使ってやりました。
yarnコマンドで 404 Not Found に遭遇したときの対処法


`yarn global add`コマンドでツールがインストール出来ない状況に陥ったのですが、解決したので解決方法をメモしておきます。


# トラブル内容

`yarn`でツールをインストールしようとしたときにトラブルに遭遇しました。

```sh
$ yarn global add @vue/cli
yarn global v1.13.0
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
error An unexpected error occurred: "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.2.tgz: Request failed \"404 Not Found\"".
info If you think this is a bug, please open a bug report with the information provided in "/Users/username/.config/yarn/global/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/global for documentation about this command.
```

`har-validator-5.1.2` が `404 Not Found` ・・・

# 原因と解説

今回たまたま引っかかったのは `har-validator` パッケージで、[該当リポジトリのissue](https://github.com/ahmadnassri/node-har-validator/issues/112)が少しばかり盛り上がっています。

何が起きたかというと、

1. har-validator の作者が バージョン `5.1.1` をpublish
2. har-validator の作者が バージョン `5.1.2` をpublish
3. このタイミングで私のPCに har-validator `5.1.2` が `yarn.lock`に記録される
4. har-validator の作者がバージョン `5.1.2` を unpublish した
5. `yarn.lock` のバージョン固定により har-validator `5.1.2` をダウンロードしようとするが存在しない

publish したパッケージやライブラリに問題があった場合は、そのバージョンを unpublish するだけではダメで、
rollback したバージョンをさらに publish しておくのが正しい対処になります。

先ほどのバージョンの例だと、以下が正しい対処です。

1. `5.1.1` を publish
2. `5.1.2` を publish (取り消したいバージョン)
3. `5.1.2` を unpublish
4. `5.1.1` の内容を `5.1.3` として publish

`yarn global` にも `yarn.lock` はしっかりと作成されているため、そこに存在しないバージョンが記録されているのが原因でした。

# 解決策

`yarn.lock` の更新または再作成をします。

## 更新

```sh
yarn global upgrade
```

## 再作成

```sh
rm ~/.config/yarn/global/yarn.lock
```

`yarn global`ではない、個別のリポジトリの場合でも基本的には対処は同じで、
`yarn.lock`ファイルを更新すれば良いです。

また、 `npm` を使っている場合でも同じことが起こり得ます。
その場合は `package-lock.json` を更新するか再作成しましょう。
GitHubからのプロジェクトインポートでハマる

##GitHubにつないだ開発環境
先日、[ローカルの開発環境](https://qiita.com/rptrryo/items/958bae3a56f03d415f4e)を作ったのですが、上手くEclipseが認識してくれていませんでした。ファイルにリポジトリマーク？が出てくれず、肝心のGitHubにつながっていない状態。

##ローカルリポジトリからプロジェクトインポート
すると、以下の表示が。
![error.png](https://qiita-image-store.s3.amazonaws.com/0/23757/57e6917c-77f4-bff2-681c-48ac7afc236b.png)

なんで、、
A. ***javaプロジェクトとしてインポートするといけない。***

![import.png](https://qiita-image-store.s3.amazonaws.com/0/23757/109f9eba-77fe-2034-ddb4-efea8a55f521.png)
これな。
素直に既存プロジェクトとしてインポートしたら大丈夫でした。
新規プロジェクトのウィザードを通す必要はありませんでした。

##さいごに
みんな気をつけて！~~←お前だけや~~
リモートの全ブランチをローカルでチェックアウトした状態にするbashワンライナー

大人の事情で、自分たちが使用しているリポジトリの一部を、別リポジトリにPUSHして、そこで別開発を始めたりする必要ってあったりしますよね。
そしてネットワーク上の事情で、リポジトリの移動がシンプルじゃなかったり。
そんなとき、自分たちのリポジトリのブランチがとても多い場合、一つ一つコマンドを打つなりGUIを操作するなりしてチェックアウト作業をするのはとても大変です。
ローカルからPUSHするための、いわば機械的なチェックアウト作業なんて、自動化してしまえばいいんだ！
そういう思いから、以下のスクリプトを作成しました。

```bash
for branch in $(git for-each-ref --format='%(refname)' refs/remotes/); do git checkout -b ${branch/refs\/remotes\/origin\//} ${branch/refs\/remotes\//}  ; done
```

当方の環境は以下です。

* git version 2.20.1.windows.1
* windows7 64bit SP1
* GNU bash, version 4.4.23(1)-release (x86_64-pc-msys)

同様のことで悩んでおられる方の一助になれば幸いです:grin:
Paraphrase での関数定義（ワード定義）の方法

# はじめに
　この文書では、マルチコア対応 Forth 系言語 [Paraphrase](https://github.com/iigura/Paraphrase) にて、どのように新しいワードを定義するのか、その方法について説明します。

# ワードとは
　他の言語でいうところの関数のようなものです。「ようなもの」というのは、Forth 系である Paraphrase では、条件判断で使用する if や for ループにおける for なども全てワードで提供されているため、C や JavaScript などでいうところの関数とは少し性質が異なります。これは、即時実行属性という概念が関係してくるのですが、それはまた別の文書にて説明できれば、と思っています。

# ワードの定義方法
　ワードの定義は以下の書式で行えます（※ 「現時点では」という状況です。というのは、現バージョンでも実装されている無名ワードに名前を与えるという形で、ワード定義もできるよう、構想中です）。

    "ワード名" : ワードで行う処理 ;

以下、例として Hello World と表示するワード hello を定義してみます。Paraphrase は Forth 系ですので、ボトムアップ方式でのプログラミングが適しているように思います。ですので、ここでもまずはワードの定義なしで、単に "Hello World" と画面に表示するコードを考えてみます。

　"Hello World" と画面に表示するだけなら、"Hello World" という文字列をスタックに積み、スタックに積まれている値を表示するワード . （ピリオド）を実行すれば十分です。

    > "Hello World" .
    Hello World ok.
    >

注：一番左側の不等号は Paraphrase インタプリタが出力するプロンプトです（＝入力する必要はありません）。

　Hello World という文字列の出力方法が分かったので、次にこの処理を hello というワードとしてワード化してみます：

```Paraphrase
> "hello" : "Hello World" . ;
 ok.
>
```

無事、ワードの定義ができました。実際にこのワードを実行させてみると、

    > hello
    Hello World ok.
    >

となり、目的通りの動作を得ることが確認できました。

# 再帰
　Forth では再帰呼び出しを行うワードを定義する場合、少し工夫が必要でした。しかし、Paraphrase では特に意識することなく再帰処理を記述できます。再帰処理のよくある例として階乗計算がありますので、Paraphrase でも書いてみます：

```Paraphrase
"fact" :  // n --- n!
    dup 0 > if  // n が 0 よりも大きか？
        dup 1- fact *  // n>0 ならば n*fact(n-1)
    else
        drop 1  // n が 0 よりも大きくない場合は n を捨てて 1 を積む
    then
;
```

コメントを除くと fact のコードは短いので、1 行で以下のようにも書くことができます（もちろん、複数行で記述することも可能です）。

    > "fact" : dup 0 > if dup 1- fact * else drop 1 then ;
     ok.
    > 5 fact .
     120 ok.
    > 0 fact .
     1 ok.
    >

上の例では、実行例として 5 の階乗と 0 の階乗を計算させています。それぞれ 120 と 1 という正しい値が得られています。

# 定義できないワード
　現在の Paraphrase ではワード名の前方参照に関する機能がありません(ver.0.91.0 現在）。そのため、ワード A がワード B を呼び出し、ワード B がワード A を呼び出すような相互再帰の状態にあるワードは定義できません。今後のバージョンアップにより、解決していければ…と思っています。
icon、画像に外部リンクを結びつける。

##はじめに
自分でアプリを開発している方は「fontawesomeで取り入れたこのアイコンにリンクをつけたいな」。はたまた、「この画像にリンクをつけたいな」と考えたことがあると思います。

そこで自分が色々調べてみた結果意外と簡単だったので紹介します。


##※font-awesomeのインストールから表示まで。

```ruby:Gemfile
gem 'font-awesome-rails'
```

```ruby:ターミナル
bundle
```

```ruby:app/assets/stylesheet/application.scss
*= require font-awesome
```

```ruby:view
#今回はtwitterのiconで
<%= fa_icon 'twitter-square'%>
```

これでviewにはツイッターのiconが表示されているはずです。

ここからが本題。

##icon（Font-awesome）の場合
iconを表示する方法は先ほどもやったようにこうですね。

```ruby:view
#今回はtwitterのiconで
<%= fa_icon 'twitter-square'%>
```

そしてリンクをつける方法はこうですね。

```ruby:link
<%= link_to '表示名', path, %>
```

この２つを合わせるとiconにリンクがつく訳です。
そこで少しlinkの形を変えてブロックで作成したいと思います。

ブロックとは簡単にdo~endで結ぶことです。



```ruby:icon+link
<%= link_to("twitterのURL") do %>
 <%= fa_icon 'twitter-square' %>
<% end %>
```
これだけでtwitterのiconを押すとtwitterのURLに飛ぶことができます。

##画像の場合
画像にリンクをつける場合も基本的には上のやり方と同じです。

linkでブロックを作りその中にimage_tagを入れるだけ。

なのでいきなり結論へ。

```ruby:link+image_tag
<%= link_to("URL") do %>
  <%= image_tag @post.img.url if @post.img? %>
<% end %>
```

こんな感じです。
Rubyでgem installが失敗したときに試したこと

# 概要
Rubyで作ったツールを試しにexe化しようと思ってocraを入れようとしたらエラーが出て思いのほか手こずったので試したことを誰かのために残しておく。

# 原因
結論から言うと、学校とか会社でgemインストールしようとすると大抵プロキシに弾かれるからプロキシを指定すれば行けるよ、ってだけの話だった。

# 試したこと

## まずはgemのインストール（出来なかった）
普通にgemをインストールするために以下のコマンドを実行。

```bat:gemのインストール
gem install <gem名>
```

すると、以下のエラーが出てインストール出来なかった。

```bat:エラーメッセージ
ERROR:  Could not find a valid gem 'ocra' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - timed out (https://api.rubygems.org/specs.4.8.gz)
```

## 証明書エラー？（違った）
`ERROR:  Could not find a valid gem`でググると証明書のエラーで失敗してるらしいという記事が多く引っかかったので、httpsではなくhttpでのインストールを試してみた。
参考URL：[Windows環境でgemがSSLエラー 2016](https://qiita.com/betrue12/items/059c2424f27fd31969f9)

```bat:httpでgemのインストール
gem install <gem名> --source http://rubygems.org/
```

ダメでした\_(:3」∠)\_

## プロキシに弾かれている（これが原因だった）
色々調べているうちにプロキシを指定する方法を見つけたので、以下のコマンドを実行。
参考URL：[プロキシが邪魔してRubyGemsでインストールできないとき](http://kyow.cocolog-nifty.com/blog/2007/04/rubygems_16c9.html)

```bat:プロキシを指定
gem install -r -p http://プロキシのパス:ポート番号 <gem名>
```

すると

```bat:インストール成功
Successfully installed ocra-1.3.10
Parsing documentation for ocra-1.3.10
Done installing documentation for ocra after 0 seconds
1 gem installed
```

インストール出来た！

片手間にやっていたとはいえ、とりあえずエラーメッセージでググればすぐ解決すると思ったら想定外に手こずってしまった・・・
WEB系プログラマーで抑えるべきオススメのツール一覧

## デスクトップアプリ
- VSCode(テキストエディタ)
- GitKraken(GitをGUIで管理, コンフリクトの対応がめちゃ楽)
- ~~Local by Flywheel(WordPressをローカルで構築)~~
- MAMP(PHPとMySQLをローカルで構築)
- Prepros(SCSSなどのコンパイル、そのほかにもブラウザの表示にも役立つ)
- チャットアプリはご自由に(Discord, Slack, Chatwork)

## CUIツール
- Git(Version管理ツール)
- Git flow(git flowの便利なコマンドが効くようになります。)
- create-react-app(reactの環境構築できます)
- vue-cli(Vue.jsの環境構築できます)
- Gulp(SCSSのコンパイルやBrowser Syncで環境構築)
- WebPack(複数のファイルを一つのファイルにコンパイルしてまとめる)
- Docker(仮想環境をコンテナレベルで作成)
- Vagrant(仮想環境丸ごとコマンドだけで作成)

## Chromeの拡張機能
- Google翻訳(ドラッグするだけで翻訳)
- ColorZilla(ブラウザから色を簡単に検出)
- WhatFont(ブラウザからフォントを簡単に検出)
- Wappalyzer(ブラウザの使用しているライブラリなどを簡単に検出)
- parg.co URL shortener(開いているページのショートURLを瞬時に作成してくれる)

## VSCodeの拡張機能
- Bookmark(Bookmarkつけることができるようになります。: デフォルトであるかも？)
- Live Server(htmlファイル右クリックするだけでファイル変更をリアルタイムにブラウザ表示)
- Bracket Pair Colorizer(かっこのブロックをわかりやすく表示)
- Git History(GitのログをGUIで表示してくれます。)
- Zenburn Theme(テーマをZenburnにできる)
- Material Icon Theme(アイコンのテーマをいい感じにしてくれます)
SourceTree(3.0.15)をインストールしてみた

# SourceTree(3.0.15)をインストールしてみた

チームでGitを導入しようと思っていろいろ勉強中・浸透中です。
Git+TortoiseGitを使おうと考えたところ、TortoiseGitが思いのほか扱いづらい。
コマンドベースになると、導入の足かせになる部分があるかと考えSourceTreeを試用してみることに。そしたら、
  
**なんか、インストールから躓いた。**

同じように躓くかもしれない＋Qiitaの練習がてらインストール手順を記載してみます。
※2.0.0系とインストールのウィンドウの表示の出方が違うので記載してみることにしました。

---

### Install - Registration

![1.png](https://qiita-image-store.s3.amazonaws.com/0/332948/8c71fe60-24d9-e788-f54d-31c3677dedbb.png)

- Bitbucket(ATLASSIAN社)のアカウントを入力する。  
ない場合 「Bitbucket Cloud Account? Create one for free」 をクリックして新規登録する。
- Bitbucket Server  
(オンプレミス型のBitbucket。こちらで登録するときは少し手順が異なるかもしれません。)
- Bitbucket   
ホスティングサービスのBitBucket。

ATLASSIAN社のアカウント登録サイトでアカウントを登録。BitBucketにログインできたら「Bitbucket」をクリックする。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/332948/9929c372-b2c9-cd5a-0de9-21fb391a8ba0.png)

アクセスを許可する。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/332948/ad650169-cacf-a6d3-7f2a-27047ba746dc.png)

![4.png](https://qiita-image-store.s3.amazonaws.com/0/332948/b136b3d8-74f8-4586-9a6c-a63e786c81c9.png)

### ツールをインストール

![5.png](https://qiita-image-store.s3.amazonaws.com/0/332948/97b318b8-0d3e-791b-6a80-865bdb7da3ae.png)

- Gitがインストールされていると上記のような表示になる
- Mercuialは使わないのでチェックを外す

### Preferences

![6.png](https://qiita-image-store.s3.amazonaws.com/0/332948/a7e2c9c6-2295-3c58-b9f4-a70858d0b88a.png)

![7.png](https://qiita-image-store.s3.amazonaws.com/0/332948/b9d4be1d-a4d2-da1c-8de9-bf87cd650264.png)

- ログイン情報を設定する
- SSHは今回未設定で必要になったら追加するので「いいえ」を選択する。

### 起動を確認

![8.png](https://qiita-image-store.s3.amazonaws.com/0/332948/2d948a88-00a5-f5a4-6d1f-9e0efc440b5f.png)
[PowerApps Tip's]任意項目を強制的に必須入力にする

PowerApps でアプリを作成している最中に「データソース（データストア）的には任意入力の項目なんだけども、アプリ的（仕様的）には必須にしたい」という状況にいたることは少なくないと思います。そんな時、どうすればいいのか？というネタです。
初心者の方が手順を追って検証できるように細かく説明していきます。PowerApps経験者で結論だけ欲しい方は、記事メニューから末尾へGoです。

# 利用するデータソースの準備
要点だけお伝えしたいので、SharePoint Online（以降、SPO）のカスタムリストで項目を1つだけ追加したモノを準備します。

SPOでサイトを作成 → [列の追加]クリック → [1行テキスト]選択 → [名前]に"hoge"と入力して「保存」ボタンを押下。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/215892/3a68885c-03da-eff1-1bef-6906507d9ffb.png)

上記手順で作成すると、リスト上は作成したhoge列が必須入力ではありません。（必須入力にしたい場合は[この列に情報が含まれている必要があります]を”はい”にする必要があります）

![02.png](https://qiita-image-store.s3.amazonaws.com/0/215892/cc1fb7dd-cdf6-241b-be37-01da5927b34e.png)

# PowerApps アプリを生成する
今回は、SPOリストの画面から直接PowerAppsのアプリを自動で生成してしまいます。

1. リストからPowerAppsアプリを自動生成
リストのメニューから[PowerApps] → [アプリの作成]をクリック
![03.png](https://qiita-image-store.s3.amazonaws.com/0/215892/46410866-37e3-57a2-56bd-54234a2495e9.png)

2. アプリの名前を指定
アプリの作成が右側に表示されているかと思います。[名前]を指定して「作成」ボタンを押下します。
![03.5.png](https://qiita-image-store.s3.amazonaws.com/0/215892/24dd0652-d4d8-1ec6-05db-4422b93156dd.png)

3. PowerApps が自動生成される
![04.png](https://qiita-image-store.s3.amazonaws.com/0/215892/4cd116af-6965-792b-d2cc-94e90cf92df3.png)

これで、検証用のアプリができました。簡単♪

# データソース上は任意項目を必須にする(本題)
ここからが本題です。先ほど作成したデータソースであるSPOのリスト上、hoge列は任意入力です。これをアプリ上では必須にしましょう。

1. EditScreen1 を選択
左のツリーメニューから「EditScreen1」を選択します。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/215892/3f94f177-687e-3c7c-0db0-e4ee85457098.png)

2. 必須にしたい DataCard コントロールを選択
任意から必須入力へ変更したい DataCard コントロールを選択します。手順が2通りほどあるので、イメージを張り付けた後で説明します。
![06.png](https://qiita-image-store.s3.amazonaws.com/0/215892/aec3e602-dd9e-97c2-0dc4-92a1b823f359.png)
    手順１：左のツリーメニューから[EditForm]を選択 → 該当の[DataCard]を選択する
    手順２：画面中央のアプリ画面で、該当の[DataCard]を選択する

    今回、DataCardコントロール（配下にErrorMessageや、DataCardValueを持ってるコントロール）を選択する必要があります。個人的に、慣れないウチは手順１で選択したほうが確実だとおもいます。

3. 『Required』プロパティを True にする
上記No.2の手順で選択したDataCardコントロールの[Required]プロパティを True にします。該当のコントロールが、画面上"*"がついて必須になったことが把握できるかと思います。
![07.png](https://qiita-image-store.s3.amazonaws.com/0/215892/2735b6f4-eaa0-304f-ca8e-dcbbae5f6bb9.png)
これが必須入力化の際に必要な、たった１つの手順です。長々と書きましたが、コレだけなんですよ。

4. 動作イメージ
![メディア1.gif](https://qiita-image-store.s3.amazonaws.com/0/215892/9ebbdc31-4eba-cb40-f8f3-2657ff6d5ca3.gif)

# まとめ
データソース上で任意項目を、アプリ上は必須にする場合は、
**DataCardコントロールの[Required]プロパティをTrueにする**
だけです。
気をつけるポイントは、テキスト入力コントロール等を操作するのではなく、それを統括しているDataCardコントロールにアプローチする、という点ですね。

　■参考URL
　[PowerApps のカード コントロール](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/controls/control-card)

こんな感じで、お仕事などでよく質問されるようなポイントや、自分がド忘れてしまうTip's等を今後もネタにしていこうかと思います。皆さまの参考になれば幸い。
v-bind:valueで任意の値を複数渡す

v-bindでキーが異なる値を複数渡したいときはこのように書くと渡せるようだ。
公式とかに書いてなくても言語がjsなのでjsっぽく書くと動くみたい。


```javascript
v-bind:value="{key: value, key2: value2}"

data = {
    key: 'value',
    key2: 'value2
}
geopandasで複数のポリゴンを結合して描画する

# 使用データ

国土数値情報「行政区域データ」を使用．今回はその中でも，広島県のshapefileを使用（仮にshapefile.shpと名付けます）．

# 全ポリゴンの描画

広島県全体の行政区分を描画．
広島市内は区で分けられます．

```py:
import matplotlib.pyplot as plt
import geopandas as gpd

fig = plt.figure()
ax  = fig.add_subplot()

src = gpd.read_file('shapefile.shp',encoding='SHIFT-JIS')
src.plot(ax=ax, color='none', edgecolor='k', linewidth=0.6)
plt.show()
```

![hiroshima.png](https://qiita-image-store.s3.amazonaws.com/0/187118/51c0fcb9-4875-5572-bf06-193bd7b521d2.png)


# フィルタリングして描画

広島市を目立たせるために，まず区の境界線を編集します．
リストに含まれるitemに当てはまるものを，isinメソッドを用いて抽出．逆に，リストに含まれるもののみを除きたい場合は，条件文の頭に~をつける．今回は，市町村コード（pidとします）を用いてフィルタリングします．

```py:
pids = ('34101','34102','34103','34104','34105','34106','34107','34108',)

excl = src[~src['pid'].isin(pids)]
excl.plot(ax=ax, color='none', edgecolor='k', linewidth=0.6)

filt = src[ src['pid'].isin(pids)]
filt.plot(ax=ax, color='none', edgecolor='k', linestyle='--', linewidth=0.3)
plt.show()
```

![hiroshima_city.png](https://qiita-image-store.s3.amazonaws.com/0/187118/69d7736b-06e6-7b32-c6e6-43b9368a10a6.png)


# フィルタリングしたものをマージして描画

広島市を区でわかれていない形で目立たせます．
geopandasのデータフレームから，shapely.geometry形式のポリゴンのリストを取得．これを，同系モジュールのcascaded_union()関数で結合．

```py:
from shapely.ops import cascaded_union

bound = gpd.GeoSeries(cascaded_union(filt.geometry))
bound.plot(ax=ax, color='none', edgecolor='r', linewidth=1)
plt.show()
```
![hiroshima_city_merge.png](https://qiita-image-store.s3.amazonaws.com/0/187118/4199c050-8e04-88a9-fac9-e60945009895.png)


広島市に囲まれる府中町も目立っていますが，これで目標達成です．

# 追記

geopandasにdissolveというメソッドがあるのを発見．
こちらの方が，geometry以外のデータを処理できたりと便利そうです．
[Aggregation with dissolve](http://geopandas.org/aggregation_with_dissolve.html)
Python3 で FizzBuzz (sqllite3利用)

なんか、急に「FizzBuzzを書け」という電波を受信したので。

python で書いてみました(ヲイ。

``` FizzBuzz01.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3


sql = '''
    SELECT
        CASE
            WHEN n % 3 = 0 AND n % 5 = 0
                THEN 'FizzBuzz'
            WHEN n % 3 = 0
                THEN 'Fizz'
            WHEN n % 5 = 0
                THEN 'Buzz'
            ELSE
                CAST(n AS TEXT)
        END
    FROM
        (
            SELECT
                    N1.column1*10 + N2.column1 + 1 AS n
                    -- ROW_NUMBER() OVER (ORDER BY column1) AS n
                FROM
                    (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) N1
                    , (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) N2
        ) N
;
'''

def main():
    with sqlite3.connect(':memory:') as conn:
        lines = conn.execute(sql)
    
    [print(l[0]) for l in lines]

if __name__ == '__main__':
    main()

```

ちなみに、動作テストは Python3.7.0 で行いました。
`sqlite3.sqlite_version` は '3.21.0' ですので
sqlite3 の version 3.25.0 から使える、`ROW_NUMBER()` 等の Window関数は使えませんでした。

追記:
Python に甘えて堕落していました。

```FizzBuzz02.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3


sql = '''
    SELECT
        GROUP_CONCAT(
            CASE
                WHEN n % 3 = 0 AND n % 5 = 0
                    THEN 'FizzBuzz'
                WHEN n % 3 = 0
                    THEN 'Fizz'
                WHEN n % 5 = 0
                    THEN 'Buzz'
                ELSE
                    CAST(n AS TEXT)
            END,CHAR(13,10))
    FROM
        (
            SELECT
                    N1.column1*10 + N2.column1 + 1 AS n
                    -- ROW_NUMBER() OVER (ORDER BY column1) AS n
                FROM
                    (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) N1
                    , (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) N2
        ) N
;
'''

def main():
    with sqlite3.connect(':memory:') as conn:
        print(conn.execute(sql).fetchall()[0][0])

if __name__ == '__main__':
    main()
```
ElectronでローカルPC内の画像ファイルをimgタグのsrcにローカルファイルパス設定して表示する

ElectronでローカルPC内のアプリケーション配下ではない別のフォルダにある画像を画面表示したくて、以下のような感じでimgタグのsrcにローカルファイルパスを設定したところエラーになり表示されませんでした。

```html
<img src="C:\sample\image.jpg">
```

```
Not allowed to load local resource: file:///C:/sample/image.jpg
```


どうやら、開発用の「npm run dev」で起動するとWebサイトとして実行（index.htmlをhttpでロード）しているため、Webセキュリティの機能でエラーになるそうです。Electronアプリとしてビルドしたものであればエラー発生しないらしい。
[指定したフォルダ配下の画像ファイルを表示するときに注意すること](https://oar.st40.xyz/article/507)


とはいえ、開発中の「npm run dev」での起動状態でもローカル画像ファイルを表示したい。

試しに、以下のようにindex.jsあたりでBrowserWindowをnewしているところでwebSecurityのパラメータをfalseにしてみたとろ、エラーが表示されずにローカル画像ファイルが表示されるようになりました。（この設定に変更して「npm run dev」しなおした初回はなぜかうまくいかなかったのに、何度かやり直しているうちに正常に動作するようになりました。。。なぜ？？）

```js
  mainWindow = new BrowserWindow({
    webPreferences: {
      webSecurity: false
    }
  })
```
webSecuriy設定をOFFにすると動作するようになるということなんですが、開発中の「npm run dev」での起動状態のときだけOFFにしたいので以下のような設定にしました。

```js
  mainWindow = new BrowserWindow({
    webPreferences: {
      webSecurity: process.env.NODE_ENV !== 'development'
    }
  })
```

参考
https://github.com/SimulatedGREG/electron-vue/issues/539
https://electronjs.org/docs/api/browser-window
Dialogflowで架空の弁当受付システムを作った



Dialogflowという、Googleがサポートしている自然言語処理のサービスを利用して「架空の弁当注文システム」を作ってみた。
以前GoogleHomeMiniを買ったときに、いろいろとカスタマイズして出会ったサービスの一つで、
かなり使えそうでかつ面白かったので、知見をためるがてら、架空の弁当注文システムを作ってみた。

## 非常に簡単なDialogflowの作り方説明

1.システムの概要を登録する
![45f680f71e713e13027c79865fd76e40.PNG](https://qiita-image-store.s3.amazonaws.com/0/269756/cb54364b-257a-f754-e079-4fc1cf76aba1.png)
2.Entitiesで、ワードのリストを作る今回は弁当名のリストを作成(複数のリストが作成可能)
![7b90e4b9b285ffe186f9483d31b4e246.png](https://qiita-image-store.s3.amazonaws.com/0/269756/1a87b755-86ff-3f7e-38b6-861f0c477b53.png)
3.Intentsで、どのようなワードに反応するかを登録した。
![5277c46bbf08d7bb4a5c61261655082a.png](https://qiita-image-store.s3.amazonaws.com/0/269756/9d42bd9d-97d9-1708-bbce-bfccfea7267b.png)


## 所感
下記のデモの感じで2時間ぐらいでシステムを完成させることが出来て、デモは手で入力することが前提だが、GoogleHomeやAlexaと連携すると話して処理できる。
入力するユーザーにあまり負担をかけずに、また従来の入力システムと違って間違ったところや足りない項目だけを補足してくれる部分がすごく嬉しい。
chrome拡張機能からローカルファイルをいじれるようにする時の手順

ローカルファイルへのアクセスのために、
拡張機能の開発者と利用者、それぞれにやることがあります。

利用者は【開発者の手順】を飛ばしてもらって大丈夫です。

## 開発者の手順
manifest.json の permissions の項目に、```file:///*/*```を追加する

### 実装例
こんな感じになります。

```
  "permissions": [
    "tabs", "storage", "contextMenus",
    "http://*/*", "https://*/*", "file:///*/*"
  ],
```

## 利用者の手順
0. [chrome://extensions](chrome://extensions) へアクセスする
0. 拡張機能の「詳細」を開く

![範囲を選択_001.png](https://qiita-image-store.s3.amazonaws.com/0/345734/cfde80b9-f909-2a60-b316-0e6fd9f88dde.png)

0. 「ファイルの URL へのアクセスを許可する」にチェックを入れる

![範囲を選択_002.png](https://qiita-image-store.s3.amazonaws.com/0/345734/4f62c2ee-db95-5b56-e090-fc3d8cfa2260.png)


手順は以上です。
Androidのapkが64bit対応しているか調べる方法

![image.png](https://qiita-image-store.s3.amazonaws.com/0/9104/7d51ba49-c55b-97e8-1fc2-208a5a1fb08b.png)

2019年8月1日（おそらくPST）から、64bit対応していないapkはPlayストアが受け付けなくなる。
それに際して、apkが64bit対応しているか調べる方法の記事。

# 環境
Android Studio最新？
なくても大丈夫。

# 手順

- apkを用意する
- Android Studioを起動する
- メニューから「Build」→「Analyze APK...」![image.png](https://qiita-image-store.s3.amazonaws.com/0/9104/dddb1484-f1e7-8892-8427-c88c30da9f2f.png)
- libディレクトリ配下を確認する![image.png](https://qiita-image-store.s3.amazonaws.com/0/9104/771a747f-f443-66ae-eaac-511d508ae39c.png)
- 表示された一覧からlibディレクトリがあって拡張子が`.so`のファイルがあるかを確認する。無ければ大丈夫
- `armeabi-v7a`または`x86`ディレクトリに`.so`がある場合、それは32bit用で、それに対する`.so`が`arm64-v8a`または`x86_64`ディレクトリに無い場合、64bit対応ができていない

# Android Studio無しで確認する場合
apkの拡張子をzipに変更して、そのまま解凍すれば、同様にディレクトリ構造が見られるので、この方法でも良い。

# その他補足
2021年8月1日からは64bit対応していないアプリのストアでの提供が停止される。

# 参考

- [Android Developers Blog: Get your apps ready for the 64-bit requirement
](https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html)
- [Ensure that your app supports 64-bit devices &nbsp;|&nbsp; Android Developers
](https://developer.android.com/distribute/best-practices/develop/64-bit)
今日からプログラミング日記を始めます！

今日からプログラミング日記を始めます！

始める理由は主に３つ！

１つ目は自分のプログラミングの進捗具合を確かめるため。

２つ目は就職活動の時の話のネタにするため。

３つ目はプログラミング初心者視点で初心者がつまずくポイントやエラーをどうやって解決していったかを発信して挫折者を減らすため。

プログラミングを始めた経緯

もともと大学の学科がメディア情報学科でプログラミングのPythonやHTMLを授業で触れる機会があってエラーを解決しながらもプログラムを起動させることに喜びを感じていた。

大学２年の春休みにPythonをUdemyで学習しようとしたが最初の環境設定で挫折した。

こういった経緯もあり就職活動は最初はビジネス職を見ていた。営業経験もあり営業が得意でもあったため就職は営業職を考えていた。
大手にはサマーインターンシップの選考を受けたりしたが全落ちしたり選考に受けた時にいた人と喋っても合わないと感じたため、自分はベンチャーを中心に就職活動を進めた。

ベンチャー企業での就職活動はとても楽しかった。会う人会う人が自分と話が合い将来の方向性も同じだった。そんな自分がベンチャー企業に入ってしたい事は新規事業の立ち上げだった。知力会というビジネスコミュニティーにも所属していてもともと起業には少し興味があったというのもある。

そんなベンチャー企業を中心に就職活動をしている中とある会社の座談会に参加した。サポーターズでの募集だったため選考に参加するだけでお金がもらえるからという理由でエンジニア志望でもなかったのになんなく参加した。しかしその座談会に参加したことで自分の方向性を変えた。

未経験でもエンジニアを募集している企業はたくさんあり未経験から普通のエンジニアになれることはとても簡単なことであると言われた。私はその言葉に感銘を受けてエンジニア目指し始めた。その進めてくれた企業の選考を受けたのだが自分のエンジニアとしてどうなりたいのかという質問に的確に答えることができなくて落ちた。あらゆる選考に落ちたが毎週面談を組んでくれたこともあり、ここの企業の選考に落ちたことは本気で悔しいと感じた。

だがその企業を受けてから自分の方向性は完全にエンジニアに変わっていた。そこからプログラミングの勉強を始めて未経験より経験者として扱ってくれる企業に就職しようと決意した。未経験でも大丈夫というのは口だけで実際に求められるのは人前にできるスキルであると思ったりネットで未経験でもいけエンジニアは、コード職人ではなくエクセル職人というのも知ったからだ。

そんなこんなで初めて２カ月たってプロゲートを一通り終わらせてドットインストールで実践的なプログラミングの学習を進めている。
また、ギークサロンなどでwebアプリの開発を進めたりTEch::exipertでフリーランスとしても活躍できるように修行中であります。

今日からよろしくお願いします！
Omniauth+Omniauth-twitterの実装の時に出たエラー400,401,403の原因まとめ


#エラーについてのまとめ
今回はじめてomniauth-twitterを使った結果、エラーにすごい手間取ったのでまとめておきました。
私の場合は「環境変数の設定」と「TwitterのCALLBACKURL」が原因でした。
##400 Bad Request
このエラーの原因は「正しく環境変数が設定されていないこと」でした。
（環境変数の管理にはGem「dotenv-rails」を使用しています）
omniauth.rbファイルの記述を修正

```Ruby
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, 'APP_ID', 'APP_SECRET'
end
```
上から下へ変更

```Ruby
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, ENV['APP_ID'], ENV['APP_SECRET']
end
```
変更点：**ENV[]を追加した。**

 ```ENV['APP_ID'], ENV['APP_SECRET']```に正しく変数が入っているか確かめるには```rails c```を起動し```ENV['APP_ID']```と入力すればよい。twitter_keyがかえってこれば成功。""だときちんと設定できていない。**環境変数設定ファイルを確認**する。

（あたりまえだけど自分が使ってるGemの正しい記述方法調べなきゃいけない。コピペ三昧だと忘れがちになるから気を付けたい）


##401 Authorization Required
原因は「環境変数を正しく設定できていないこと」か「TwitterのCallBackURLを正しく設定できていない」という原因が考えられると思う。

###環境変数を正しく設定する
Gem「dotenv-rails」の環境変数設定ファイルは**.env**

```sudo vi .env```でファイルを作成し追記する。

```.env
APP_ID=（ここにTwitterキー）
APP_SECRET=（ここにTwitterキー）
```
おそらくクオーテーションで囲む必要ないです。書かなくとも動いた。
記述が終わったら```:wq```で保存。

ちなみに、ファイルを作成したのちAtomエディタで編集して保存しようとしても権限がないと**保存されなかった**ことに気づかずに原因がわからずハマっていました。

vimの使用初めてでわからなかったので基本的なことだけまとめてます。（URLの記事で使ってるのは「dotenv-rails」でなく「direnv」です。）
https://qiita.com/Takka_Log/items/7d03ec8f535b3b6c3e8f

###追記：時刻を合わせる
エラーを解決した数日後再び**401 Authorization Required**が発生したので追記しておく。
とりあえず心当たりは時刻のずれだったので修正しようと思った。

時刻に関してはかなり厳しい？らしく数秒のずれも見逃してくれないらしい。

####PC本体の時刻を合わせる。
まず[このサイト](https://www.nict.go.jp/JST/JST5.html)で時刻が正しいかどうか確かめる。
（私の時刻のずれは1.7秒ほどだった。）

【Windowsの場合】
> [コントロールパネル]→[時計と地域]→[日付と時刻の設定]→[インターネット時刻]→[設定の変更]→「ntp.nict.jp」と設定する。

上手く反映されなかった場合は、手動で一分か一時間ほど時刻をわざとずらしてから、それを修正する形でもう一度時刻同期する、というのを繰り返していたらうまくいくと思う（結構乱暴だったかなとは思ってる）

最後にもう一度、上のサイトで時刻にずれがないか確認する。（ちなみに誤差がないと「合っています」と表示されます）

####仮想マシンの時刻を合わせる。
[この記事](http://pyoonn.hatenablog.com/entry/2015/01/06/121925
)を参考に進めてみた。

そのあと`hwclock --systohc`を実行しハードウェアクロックをシステムクロックに合わせた。

**```sudo ntpdate ntp.nict.jp```コマンドが反映されない場合一度ntpdを停止すること**

```sudo /etc/init.d/ntpd status```
```sudo /etc/init.d/ntpd stop```

##Unauthorized 403 Forbidden
これの原因はTwitterアプリのCallBackURLのミスです。
私の場合は下のように書きました。
> http://192.168.33.15:3000/auth/twitter/callback
http://192.168.33.15:3000/auth/twitter

ちなみに上のURLから**:3000**が抜けていることに気が付かないまま2日ほど過ごしました（南無


#参考記事
**具体的な記述についての参考**
https://qiita.com/white0221/items/19d18a4e494c4cb68dae

https://qiita.com/puremoru0315/items/f1d459b663fd3b715dee#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B

**エラーについての参考**
https://mrkmyki.com/2018/12/02/twitter%E3%81%AEoauth%E3%81%A7400%E3%80%81401%E3%80%81403%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B%E5%8E%9F%E5%9B%A0%E3%81%BE%E3%81%A8%E3%82%81/

**dotenv-railsについての参考**
http://shimadays.com/2018/07/22/railsdotenv/
http://vdeep.net/rubyonrails-dotenv

**direnvについての参考**
https://qiita.com/tkmiya34/items/875742eb56ebe54d8828
HTMLの基本構造を復習！[備忘録]

<h2>はじめに</h2>
プログラミングを初める際に、まず勉強するところはWEBのデザインを実装するHTMLとCSSの基本構造ではないでしょうか。

僕もプログラミングを初めた時はプロゲートで勉強しましたが、2か月経ってRailsばかりやっていると忘れている箇所もあったので備忘録として復習がてらに書きます。

<h2>HTML基本構造</h2>
HTMLには「htmlタグ」・「headタグ」・「bodyタグ」があります。
以下のような構造ですよね。
<br>


```html.erb
<!DOCTYPE html>
<html lang="ja">
  <head>
      <meta charset="UTF-8">
      <title>タイトル</title>
  </head>
  <body>
  </body>
</html>
```


<h2>htmlタグ</h2>
<!DOCTYPE html><br>文頭に書くコードで「これから書く文章はhtmlで書かれてまっせ～」て意味です。ブラウザがhtmlとして読み込んでくれます。

<h2>headタグ</h2>
headタグはWEBのタイトルやヘッダ情報を記述するために使用します。
headタグ内の記述はアプリ内で表示されませんが、検索エンジン向けのキーワードや説明、CSSなどを読み込むファイル、その文書に関するメタ情報を指します。

<h2>bodyタグ</h2>

bodyタグはWEBで表示される部分です。
例えば、ユーザー登録ややログイン画面などはbodyタグ内ｎゴリゴリとコード書いていくと実際のアプリに反映されます！

<h2>各タグの意味</h2>

タグは色々あって覚えることが多いです。
タイトル用タグやリンク用タグ、終了タグがいらないタグ等・・・


＜h1＞＜/h1＞・・・見出しタグ
＜p＞＜/p＞・・・段落タグ
＜a＞＜/a＞・・・リンクタグ
＜br＞・・・改行タグ　←改行タグは終了タグいらないです。


その他、色々なタグがありますが上記以外あまり使ったことないですね。
もっと勉強します。
Jupyter Notebook上でSymPyの数式とLaTeXコマンドを組み合わせて表示

# はじめに
Jupyter Notebook上でSymPyの数式とLaTeXコマンドを組み合わせて表示したい

```python
import sympy

# おまじない
sympy.init_printing()

x = sympy.Symbol('x')
x**2
```
<img width="309" alt="Screen Shot 2019-01-19 at 11.19.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/6780b1e4-9a5a-bbf1-4999-53990e902568.png">

# display
```python
from IPython.display import display

for i in range(5):
    f = 1/x**i
    display(f)
```
<img width="431" alt="Screen Shot 2019-01-19 at 11.22.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/a5c75921-31b8-752a-37c0-5474c54d66fa.png">

# SymPyからLaTeXへの変換
```python
display(f)
sympy.latex(f)
```
<img width="242" alt="Screen Shot 2019-01-19 at 11.22.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/84582c32-5e50-886e-e59c-ae1a7edad61e.png">

#　LaTeXの表示
```python
from IPython.display import Math
display(Math(r'f_n(x) = \frac{1}{x^n}'))
```
<img width="476" alt="Screen Shot 2019-01-19 at 11.31.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/54dffd49-3523-8e21-f729-6fb80f906053.png">

#　組み合わせる
```python
for i in range(5):
    f = 1/x**i
    display(Math(r'f_{%d}(x) = %s' % (i, sympy.latex(f))))
```
<img width="634" alt="Screen Shot 2019-01-19 at 11.32.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/ba8edbd9-b197-929b-74a8-7ad99bf9dc50.png">

# おまけ
<img width="695" alt="Screen Shot 2019-01-19 at 11.33.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/298615a7-6e12-682d-7acb-8ed02b1e44b3.png">
<img width="657" alt="Screen Shot 2019-01-19 at 11.33.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/3ea8395f-7973-1463-c19d-bfa8ef013e49.png">
<img width="602" alt="Screen Shot 2019-01-19 at 11.33.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/3bc55d1b-d3ea-b157-88c4-274a44b68bff.png">
<img width="660" alt="Screen Shot 2019-01-19 at 11.33.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/35426/de5a7d81-7b9a-3d61-6919-70d1265b38b1.png">

# コード
https://nbviewer.jupyter.org/gist/ceptreee/63fef1b9fe3a6c06cb5e90808cbc4aa3

# 参考
https://gist.github.com/7shi/2a7181c7e432f8f08f12ed1ffce0abab

Is it possible to show `print` output as LaTeX in jupyter notebook?
https://stackoverflow.com/questions/48422762/is-it-possible-to-show-print-output-as-latex-in-jupyter-notebook


# 謝辞
@7shi さん、教えて頂きありがとうございました.
学会発表のスライド資料作成の時に参考にしたページ

# 学会発表のスライド資料作成の時に参考にしたページ

学会で発表するときにどのように考えて資料を作成し, どのような所に気をつければ良いのかを調査したので参考になったリンク一覧を載せておきます。
(※ちなみに, これらを参考にして発表した初めての学会にて学生奨励賞をいただくことができました. ぜひ, 他の人にも参考になれば幸いです.)

### 目次
 1. スライド構成
 2. スライドデザイン
 3. グラフデザイン
 4. グラフの注意点
 5. スライドフォント
 6. 出典などの書き方

### 1. スライド構成
- [学会発表における「スライド」と「デザイン」の、切っても切れない関係。](https://starrrrr.com/entry/slide-design)

### 2. スライドデザイン
- [パワポを使ったプレゼンに関する理系大学院生3年間の集大成！スライドのデザイン/作り方をまとめるよ。](https://www.nagibrno.com/entry/powerpoint-presentation)
- [伝わるデザイン 配色](http://tsutawarudesign.com/miyasuku5.html)
- [見やすい！分かりやすい！パワポのコツ〔#011〕](https://www.youtube.com/watch?v=PGjCzfJxkt8&t=41s)
- [パワーポイントで簡単プレゼン資料作成！](https://www.youtube.com/watch?v=gij-zGOlLyw&t=62s)
- [伝わるプレゼン資料のデザインルール【入門編】](https://www.youtube.com/watch?v=RTtcCYMerb0)

### 3. グラフデザイン
- [パワポでもここまでできる！米財務省から学べる美しい資料作りのポイント](http://d.hatena.ne.jp/stj064/20120401/p1)

### 4. グラフの注意点
・論文に載せるグラフには見やすいグラフにするためのある程度の注意が必要である. 例えばグラフのグリッド線は消す, 単位をつけるなどである. その注意点に沿ったグラフを作成するためのページ
- [論文に使うグラフ](http://regry358.hatenablog.com/entry/2014/12/13/161410)

### 4. スライドフォント
- [伝わるデザイン フォントの選び方](http://tsutawarudesign.com/yomiyasuku2.html)

### 5. 出典などの書き方
- [引用･参考文献･参考URLの正しい書き方：プレゼン資料の「参考文献リスト」作成時の注意点とは？](http://u-note.me/note/47488449)
Linuxサーバーでディスク容量は空いているのにlogwatchからDisk Filling upの警告が届くとき

##現象
logwatch の Disk Space Begin - Disk Space End の項目で

```shell
/dev/xxx/xxx => 99% Used. Warning. Disk Filling up.
```

等のディスク容量がいっぱい警告が表示される(99%使用中)。
※/dev/xxx/xxxはルートディスク

サーバーでディスク容量を調べると

```shell
[root@www ~]# df
Filesystem           1K-blocks     Used Available Use% Mounted on
/dev/xxx/xxx
                      12000000  6500000   5500000  54% /
```

等、容量は空いている（54%使用中）。


##原因
logwatch自身のせい
logwatchは動作するときに一時ファイルを作る。
動作完了直前には数Gバイトまでになるので、
そのせいでディスク容量がいっぱいの警告が表示される。


##解決策
一時ファイルの置き場所を、もっと容量のあるディスクに変更する。
デフォルトの一時ファイル置き場所は以下（一時ファイルは動作完了すると削除される）。
/var/cache/logwatch

※
設定によっては別の場所なので
/etc/logwatch/conf/logwatch.conf
/usr/share/logwatch/default.conf/logwatch.conf
の
\# You can override the default temp directory (/tmp) here
TmpDir = /var/cache/logwatch
を参照


#補足
一時ファイルの容量はApacheのログファイル量等で日々変動する。
read.csv()でうまく読み込めない場合の対処

データの読み込みでつまづいたので対処法をメモ。
read.csv()でデータを読み込んで下記のエラーメッセージが出力されました。

```r
data<-read.csv("data/2910.csv",fileEncoding="Shift_JIS")
 警告メッセージ: 
 scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  で: 
   入力コネクション 'data/2910.csv' に不正な入力がありました 
```

本来500行くらいあるデータベースですが、17行しか読み込めていません。

```r
nrow(data)
[1] 17
```

read.table()で区切り文字を指定して読み込んでみましたが、今度は別のエラーメッセージが出力されました。
データ内の文字列のどこかに「,」が入っているのかもしれませんが、ちょっと探せませんでした。
そもそも、エクセルなどでは普通に開けるので、Rで開けない理由がよくわかりません。

```r
data<-read.table("data/2910.csv",sep=",",fileEncoding="Shift_JIS")
 警告メッセージ: 
1:  scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  で: 
   入力コネクション 'data/2910.csv' に不正な入力がありました 
2:  scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  で: 
   読み込まれた項目数が、列数の倍数ではありませんでした 
```

なぜか1行増えて18行目まで読めていました。

```r
nrow(data)
[1] 18 
```

いろいろ試したのですが、うまくいかず、最終的にfread()での読み込みに成功しました。
行数も505行で全部読み込めています。

```r
install.packages("data.table")
library(data.table)

data<-fread("data2/2910.csv") 
nrow(data)
[1] 505
```

fread()はShift_JISに対応していないので、あらかじめ文字コードをUTF-8に変換しておきます。
ディレクトリ内の文字コード一括変換は以下のコマンドにて行いました。

```shell
find -name '*.csv' | xargs nkf --overwrite -w
```

以下の情報を参考にしました。
[【linux】ファイルの文字コードを変換する。vi、iconv、nkf (nkfの文字コード判定とか一括変換は便利)](http://tweeeety.hateblo.jp/entry/2014/12/17/230611)


最終的にやりたかったのは以下のコードです。
ディレクトリ「data2」のcsvファイルを全部マージしてdata.frameにします。
1万行くらい読み込めているので、たぶん全部読み込めたのだろうと思います。

```r
csv<-list.files("data2",full.names=T)%>%
lapply(fread,header=TRUE,sep=',',encoding="UTF-8")
data<- do.call(rbind, csv)

nrow(data)
[1] 11142
```

月ごとにデータのヒストグラムが作成できたので成功です。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/60438/924485ad-eb7f-0a1b-6404-33120d5682e3.png)
jsdoでjsgif

#概要

jsdoで、jsgifやってみた。

#結果

動いた。

![js.gif](https://qiita-image-store.s3.amazonaws.com/0/18104/8482a9fa-3431-13c8-37f0-7375e01c0330.gif)

#成果物

http://jsdo.it/ohisama1/4mnh/

以上。
Python手遊び(ファイルリスト/Hash演算)

#この記事、何?

ちょっとした小ネタでpythonスクリプトを2種類3つ。
■ファイルリスト
指定フォルダ以下のファイルのリストを作成(ファイル所在パス + '\t' + ファイル名)

■ハッシュ演算
文字列もしくはファイルを渡してそのHash値を出力


#どういう人向け?

まあ、自分あて。
ペタッとコピペして使えるので良ければどうぞ。


#試した環境は?
Windows 8 Pro
Python 3.6.8 (conda version 4.5.12)


#コード

##ファイルリスト [12-01.py]
仕様：引数でもらったフォルダ以下のファイルを出力する
 

```py:12-01.py
#Usage:
#    python 12-01.py (targetfolder)

import sys
import os
target=sys.argv[1]
print('---------------------------------------------------------')
print(target)
print('---------------------------------------------------------')
for dirpath, dirs, files in os.walk(target):
    for name in files:
        print(dirpath + '\t' + name)
```

##Hash演算(その1) [12-02.py]
仕様：引数でもらった文字列のHash値を演算する


```py:12-02.py
#Usage:
#    python 12-02.py (targetfile)

import sys
import hashlib
target=sys.argv[1]
print('---------------------------------------------------------')
print(target)
print('---------------------------------------------------------')
print(hashlib.md5(target.encode()).hexdigest())
```

##Hash演算(その2) [12-03.py]
仕様：引数でもらったファイルのHash値を演算する

```py
#Usage:
#    python 12-03.py (targetfile)

import sys
import hashlib
target=sys.argv[1]
print('---------------------------------------------------------')
print(target)
print('---------------------------------------------------------')
with open(target, 'rb') as f:
    checksum = hashlib.md5(f.read()).hexdigest()
    print(checksum)
```

#補足
HashはとりあえずMD5にしているけど、そのままSHA256とかに変更可能。
if文書いてもよかったんだけど、全文が短いからこのままでいいかな、と。
よく、ずらっとHash値を列挙して演算してたりするけど、全部ほしい場合はあまり思いつかなくて。。。

あっ、何のHashが取得可能かは、dirコマンドでこんなで。

```py
>>> import hashlib
>>> print(dir(hashlib))
..., 'md5', ..., 'sha1', 'sha224', 'sha256', ...
```

#所感を一言
まあまあ面白かった。
あと、参考になるURLがこれ。
あとできっちり試したいです。
巨大テキスト読み込みはほかでもあると思うので。



■Pythonで大きなファイルのMD5チェックサムをチェックする時にMemoryErrorを回避する
https://rcmdnk.com/blog/2015/07/18/computer-python/
ページのURLをいい感じにクリップボードにコピーするブックマークレット

`Rust programming language | https://www.rust-lang.org/` こんな感じでコピーできます。
形式はお好きな形にどうぞ。

```js
javascript:(()=>{var d=document,b=d.body,c=d.createElement.bind(d),t=c("p"),p=c('p');p.style.userSelect='auto';t.appendChild(p).textContent=d.title+" | "+location.href;b.appendChild(t);d.getSelection().selectAllChildren(t);d.execCommand("copy");b.removeChild(t)})()
```

minify 前

```js
var tmp = document.createElement('p');
var pre = document.createElement('p');
pre.style.userSelect = 'auto';
tmp.appendChild(pre).textContent = document.title + ' | ' + location.href;
document.body.appendChild(tmp);
document.getSelection().selectAllChildren(tmp);
document.execCommand('copy');
```

参考: [JavaScriptでクリップボードに文字をコピーする(ブラウザ) - Qiita]( https://qiita.com/simiraaaa/items/2e7478d72f365aa48356)
アンガーマネジメントゲームをチーム内で実施してみた

# アンガーマネジメントゲームを実践してみました

私の所属するスクラムチームのメンバーに協力していただき、
アンガーマネジメントゲームを実施しました！
想像以上に盛り上がり、活発なコミュニケーションが生まれました:blush:
この記事では私なりのアンガーマネジメントゲームの実施方法や所感を述べたいと思います。


# [アンガーマネジメントゲーム](https://www.angermanagement.co.jp/press_release/pr20180426)とは？

一般社団法人 日本アンガーマネジメント協会が開発した “怒りのツボ当てカードゲーム” です。
そもそも　"アンガーマネジメント" とは怒りの感情:angry:と上手に付き合うための心理トレーニングのことを指します。
ゲームを通してプレイヤー同士がどのような場面で怒りを感じるかを共感や驚きとともに知ることができるため
ビジネス現場におけるチームビルディングにも活用されています。

# きっかけ
やってみよう！と思ったのはAgileJapan2018のセッションで
**チームメンバーの心理的安全性を高めるため1つの方法**としてこのゲームが紹介されていたからです。
アジャイル開発では「心理的安全性」を高める事は非常に重要とされているため
チームでもぜひ実施してみたいと思い、今回挑戦しました！

# チームでアンガーマネジメントゲームをやってみた！概要

###チームの情報
社員：4名 / パートナーさん：5名
　※比較的、普段から活発に意見交換できているチームだと思います

###ゲームの目的 / ゴール
1. チームメンバーの価値観を知る
2. チームの連帯感を高める

チームメンバーの価値観を尊重することで、円滑なコミュニケーションが生まれ
スムーズに仕事ができれば連帯感が強まると考えていました。​

**:warning:注意:warning:**
相手の怒りのポイントを知ることによって
それを**「回避しよう」**とすることは目的ではありません。
「怒りそうだから**言わないでおこう**」ではなく、「怒りそうだから**言い方を考えないといけない**」となることで
感情的にならないコミュニケーションが生まれると思います。

###進め方
通常のアンガーマネジメントゲームを自分なりにアレンジしました。

①お題は事前にSlackでチームメンバーから募集したものを使用
②お題に対し、怒りを3段階（怒らない　/　少しイラっとする　/　怒る）を提示
　※プランニングポーカーの「0」「2」「5」のカードで出してもらいました
③一斉に提示し、気になった方に理由を聞いてみる

**お題の例**
:worried:　狭い道を横に広がって塞いでいた高校生がいた
:frowning2:　飲み会で発言しないと「話にはいってこいよ！」と説教する人
:rage:　電車から降りる人がいるのに、乗り込もうとしている人がいた
などです！
みなさんはどれくらい「怒り」を感じますか？

# チームメンバーの感想

- 楽しかった！
- 距離が縮まった！
- 思想（価値観）の違いを感じた...
- 相手の怒りのツボのポイントが分かったので、自分の言葉に気をつけようと思った…
- チームメンバーの意外な怒りポイントが分かった
- 本来のアンガーマネジメントゲームの手法でもやってみたい

# 所感
アンガーマネジメントゲームはチームビルディング時だけではなく
ある程度気心の知れた間柄で実施しても
チームのコミュニケーションを活性化させる効果があったと思います:open_hands:

今回設定したゴールである「チームの連帯感」を強められたのかは現段階では分かりませんが、
今後の仕事を進めていく中でお互いの価値観を尊重する良いきっかけになってくれたら嬉しいです。
bootstrapの使い方とは？

<h2>はじめに</h2>
プログラミングを初めて2か月の初心者です。
railsをメインに勉強していますがCSSとHTMLにかなり苦手意識を持っています。

今回は僕のようなフロント側が苦手な初心者でも綺麗なレイアウトを作ることができるツールを紹介します！

<h2>bootstrapとは</h2>

RubyにはRuby on RailsというフレームワークがあるようにCSSにもbootstrapというフレームワークがありまり簡単にwebサイトの体裁を整えてくれます。

具体的には、自分でゴリゴリコードを書かなくてもbootstrapを導入すればデザイン済みのボタン・メニュー・フォーム等が用意されています。

さらに、今ネットを見るのはスマホが多いですよね。
でも、bootstrapではPC画面で作成したアプリをスマホやタブレットのサイズに自動修正してくれるレスポンシブデザインにも対応しています。


<h2>bootstrapの使い方</h2>

1.boootstrapを使用するために以下リンクからダウンロードしローカル環境に読み込む方法

[bootstrapのHP](https://getbootstrap.com/)

2.すでにホストされているファイルをインターネット経由で読み込む方法

以上、2点があります。

使用方法はtechacademyさんが詳しく解説してくれています！
[bootstrapの使い方](https://techacademy.jp/magazine/6270#sec2)
MACでアクセシビリティに登録ができなくなった件

# 現象
先日購入したばかりのMACでなぜかアクセシビリティにアプリケーションが追加できない．このせいで、色々なアプリが動かなくなる．　実質MACがろくに使えない．
![アクセシビリティに追加できない図](https://eset-support.canon-its.jp/usr/faq/images/GtB48sihRTBAhmIn.png)

# 解決策

色々なページをみてきた結果、問題はESETにあったことがわかった．

ESETもこの問題に気づいているようで、ダウングレードを推奨している．

https://eset-support.canon-its.jp/faq/show/12752?back=front%2Fcategory%3Ashow&category_id=147&page=1&site_domain=client&sort=sort_access&sort_order=desc#improvement

# 上に気づくまでの流れ

[このページ](https://scble.net/2018/12/20/mac_cannot_add_application_accessibility/)をみて`/Library/Application\ Support/com.apple.TCC/TCC.db`を削除してみた．けれど、時間が経ったら再発．

[ここ](https://discussionsjapan.apple.com/thread/110212377)にたどり着く．　ESETが怪しいと知る．

[ESETのページ](https://eset-support.canon-its.jp/faq/show/12752?back=front%2Fcategory%3Ashow&category_id=147&page=1&site_domain=client&sort=sort_access&sort_order=desc#improvement)にたどり着いた

ESETアンインストールかな〜これは．．．
Windows10 のプロダクトキーをPowerShell確認する方法

#PowerShellで、Windows10のプロダクトキーを確認する方法。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/bfb6be0e-d525-81ae-57c3-4a5b65ee026b.png)

　
コマンドプロンプトを起動して、Windows10のプロダクトキーを確認するためのコマンドを入力する。

wmic path softwarelicensingservice get OA3xOriginalProductKey


![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/15f5bdb3-8842-5a47-278b-7926266836b6.png)
英語学習のための文法用語まとめ

高校受験・大学受験のための英文法辞典です。日本の英語カリキュラムの英文法用語をプロ家庭教師が解説しています。

難関高校・難関大学の合格に必要な知識・文化・教養をまとめ、演習用問題集にしてあります。文系学部と理系学部の両方に対応しており、参考書や本の代わりに、独学用の教材としても利用できます。

対象は、英語が得意な中学・高校生・受験生・基礎から学び直したい社会人です。いつから英文法の勉強を始めるかは、人によって異なりますが、英語学習でまず始めに習得しておきたいのは英文法です。

英語の勉強方法として、高校受験英語・大学受験英語・外部民間試験(英検・TOEFL・TOEIC・TEAP)の対策カリキュラムをプロ家庭教師に<a href="https://tokyo-teacher.com/sendmail/email/"><span style="color:blue;">指導依頼</span></a>できます。（<a href="https://tokyo-teacher.com/article/kj-en/kj-en-2-gram/kj-en-gram-999-dict/"><span style="color:blue;">原記事</span></a>）

【用語】： 肯定文
【よみ】： こうていぶん
【英語】： affirmative
【解説】： もっとも基本の文です。
【略記】： 

【用語】： 否定文
【よみ】： ひていぶん
【英語】： negative
【解説】： notを付ける文です。
【略記】： 

【用語】： 疑問形
【よみ】： ぎもんけい
【英語】： interrogative
【解説】： 最後に？を付ける文
【略記】： 

【用語】： 主語
【よみ】： しゅご
【英語】： subject
【解説】： 主語は動詞の前に置かれます。
【略記】： S

【用語】： 動詞
【よみ】： どうし
【英語】： verb
【解説】： 動詞は自動詞と他動詞に分かれます。
【略記】： V

【用語】： 自動詞
【よみ】： じどうし
【英語】： intransitive verb
【解説】： 主語と自動詞だけで文が完成します。
【略記】： Vi

【用語】： 他動詞
【よみ】： たどうし
【英語】： transitive verb
【解説】： 主語と他動詞に加えて目的語が必要になります。
【略記】： Vt

【用語】： 自動詞+前置詞
【よみ】： じどうし＋ぜんちし
【英語】： intransitive verb + preposition
【解説】： 自動詞＋前置詞で他動詞のように用います。
【略記】： Vi+prep

【用語】： 目的語
【よみ】： もくてきご
【英語】： object
【解説】： 目的語は動詞の後ろに置かれます。
【略記】： O

【用語】： 補語
【よみ】： ほご
【英語】： complement
【解説】： 補語は動詞の意味を補います。
【略記】： C

【用語】： 前置詞
【よみ】： ぜんちし
【英語】： preposition
【解説】： 前置詞は名詞の前に置きます。
【略記】： Prep

【用語】： ３単現
【よみ】： さんたんげん
【英語】： third person singular
【解説】： ３人称・単数・現在形の略
【略記】： 

【用語】： １人称
【よみ】： いちにんしょう
【英語】： first person
【解説】： I
【略記】： 

【用語】： ２人称
【よみ】： ににんしょう
【英語】： second person
【解説】： You
【略記】： 

【用語】： ３人称
【よみ】： さんにんしょう
【英語】： third person
【解説】： He She It
【略記】： 

【用語】： 単数形
【よみ】： たんすうけい
【英語】： singular
【解説】： I
【略記】： sg

【用語】： 複数形
【よみ】： ふくすうけい
【英語】： plural
【解説】： 名詞の複数形です。
【略記】： pl

【用語】： 助動詞
【よみ】： じょどうし
【英語】： auxiliary-verb
【解説】： 動詞の前に置いて文章の意味を変化させます。
【略記】： aux

【用語】： 過去形
【よみ】： かこけい
【英語】： past tense
【解説】： 動詞の過去形です。
【略記】： pt

【用語】： 形容詞
【よみ】： けいようし
【英語】： adjective
【解説】： 形容詞は名詞を修飾します。
【略記】： adj

【用語】： 副詞
【よみ】： ふくし
【英語】： adverb
【解説】： 副詞は名詞以外を修飾します。
【略記】： adv

【用語】： 接続詞
【よみ】： せつぞくし
【英語】： conjunction
【解説】： 接続詞は等位接続詞と従位接続詞に分けられています。
【略記】： conj

【用語】： 英語
【よみ】： えいご
【英語】： english
【解説】： 英語にはアメリカ英語とイギリス英語があります。
【略記】： Eng.

【用語】： アメリカ英語
【よみ】： あめりかえいご
【英語】： american english
【解説】： 北米大陸を中心に話されています。
【略記】： 

【用語】： イギリス英語
【よみ】： いぎりすえいご
【英語】： british english
【解説】： 旧イギリス植民地で用いられています。
【略記】： Brit.

【用語】： 例
【よみ】： れい
【英語】： exempli gratia
【解説】： for example のラテン語
【略記】： e.g.

【用語】： 参考
【よみ】： さんこう
【英語】： confer
【解説】： 理解を助ける情報です。
【略記】： Cf.

【用語】： 参考文献
【よみ】： さんこうぶんけん
【英語】： reference
【解説】： 引用文献とも言います。
【略記】： Ref.

【用語】： 定義
【よみ】： ていぎ
【英語】： definition
【解説】： 定義とは物事の説明です。
【略記】： def.

【用語】： 派生語
【よみ】： はせいご
【英語】： derivative
【解説】： runの派生語はrunnerです。
【略記】： deriv.

【用語】： など
【よみ】： など
【英語】： et alii
【解説】： and others のラテン語
【略記】： et al.

【用語】： つまり
【よみ】： つまり
【英語】： id est
【解説】： that is のラテン語
【略記】： i.e.

【用語】： すなわち
【よみ】： すなわち
【英語】： videlicet
【解説】： namely のラテン語
【略記】： viz.

【用語】： 紀元前
【よみ】： きげんぜん
【英語】： before christ
【解説】： キリストの生誕前
【略記】： B.C.

【用語】： 紀元後
【よみ】： きげんご
【英語】： after domini
【解説】： キリストの生誕後
【略記】： A.D.

【用語】： 紀元後
【よみ】： きげんご
【英語】： common era
【解説】： キリストの生誕後
【略記】： C.E.
onnx.jsでnnc

#概要

onnx.jsで、sonyのNeural Network Consoleで学習したonnxを読み込んで見た。

#nncでxorを学習する。

https://qiita.com/ohisama@github/items/ad37b626d313322621bb

#nncで、result.onnxをダウンロード。

#jsdoで、onnx.jsで、読み込む。

http://jsdo.it/ohisama1/6Vvg/

#結果

エラー
Uncaught (in promise) TypeError: unrecognized operator 'Flatten'


以上。
最強のアウトプットの発信体勢を作りたい。本当に惜しいEvernoteの共有。

最強のアウトプットの発信体勢を作りたい。本当に惜しいEvernoteの共有。

# 欠点

- タイトルと本文が分かれている、ここで1ステップ増える、往復しているとはるかなるステップ数
- Twitter共通したときとかに、イメージ画像が展開されない
- サービス継続性に疑問、終了してしまうかもしれない、やはり Apple で icloud 同期できるNotesの方があんs金


![image](https://user-images.githubusercontent.com/13635059/51419361-33093d80-1bcd-11e9-8d33-c56a4a9cfebe.png)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
<ActiveRecord::Associations::CollectionProxy エラーについて

#【<ActiveRecord::Associations::CollectionProxy エラーについて】

```
2.4.1 :019 > User.first.todays_events
  User Load (0.5ms)  SELECT  `users`.* FROM `users`   ORDER BY `users`.`id` ASC LIMIT 1
  TodaysEvent Load (0.5ms)  SELECT `todays_events`.* FROM `todays_events`  WHERE `todays_events`.`user_id` = 1
 => #ActiveRecord::Associations::CollectionProxy []> 
2.4.1 :020 
```

###これは配列になっているため取得できないんですね。
http://stomo1986.hatenablog.com/entry/2013/12/16/091933
⇒確かに、複数のtodays_eventsがあるので、PCからしたら***どれやねんって話でしょう。***

どのtodays_eventsか確定させないと取得できない。
***（例： Organization.find(4).users.find(5).login_id　←これは特定させて検索しているのでできる。***
EvernoteのNoteをTwitterで共有してみるテスト 。イメージ画像反映されず。微妙かな‥。

EvernoteのNoteをTwitterで共有してみるテスト 。イメージ画像反映されず。微妙かな‥。

![image](https://user-images.githubusercontent.com/13635059/51419241-36e89000-1bcc-11e9-8122-5f45727f483a.png)

![image](https://user-images.githubusercontent.com/13635059/51419234-305a1880-1bcc-11e9-85f7-f7687d219688.png)

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">EvernoteのNoteをTwitterで共有してみるテスト <a href="https://t.co/iUFK4CcF6A">https://t.co/iUFK4CcF6A</a></p>&mdash; いなうらゆうま🤖目指せこんまりミニマリスト (@YumaInaura) <a href="https://twitter.com/YumaInaura/status/1086419276896993280?ref_src=twsrc%5Etfw">January 19, 2019</a></blockquote>












<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
認可期間をユーザーが指定できるタイプ Evernote with IFTTT

認可期間をユーザーが指定できるタイプ Evernote with IFTTT

![image](https://user-images.githubusercontent.com/13635059/51419087-22f05e80-1bcb-11e9-8ef8-fd0ad89a12f2.png)

![image](https://user-images.githubusercontent.com/13635059/51419103-41eef080-1bcb-11e9-86e3-511dbad08659.png)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
世界はデバイスが作る。人間はデバイスが生む。手が不器用なエンジニアのフリック入力は、10文字ぐらいしか打ち込めず、超要約まとめ感想ツイートで、Twitterのリプライ遊びをしていた。iPhone音声入力で人間性が変わったように見える。

世界はデバイスが作る。人間はデバイスが生む。手が不器用なエンジニアのフリック入力は、10文字ぐらいしか打ち込めず、超要約まとめ感想ツイートで、Twitterのリプライ遊びをしていた。iPhone音声入力で人間性が変わったように見える。

iPhoneで音声入力をしている時と、フリック入力をしている時では、全く文字数が変わってくる。多分10倍ぐらいは違ってくる。

これは特にTwitterで他の人にリプライをするときによく現れる。

他の人にというか、そもそもフリック入力だと僕は本当に10文字ぐらいしか入力できないので、ごくごく端的な、ロボットみたいな、超圧縮した単語同士をつなげたような、そんなまとめ感想ツイートになる。

音声入力をしていると、とても饒舌になるから、かたりかけているような文章になる。そして140文字じゃ収まらない位文章が長くなってゆく。

じゃぁ、音声入力とフリック入力のどちらがいいんだろうか。そんなふうに、僕らはすぐにどちらが良いのかということを決めようとするけれど、どちらが良いかなんて存在しない。

ただ、入力するデバイスによって、全く人間性まで変わって見えてしまうというか、インプットがアウトプットを変えるというか、アウトプットの方式が自分の脳にいったんインプットされて、そのインプットが反射的にアウトプットを変えて、さらにTwitterえのアウトプットが行われ、それが他の人にまで反射するというか。

特に僕のような手先が不器用な人のフリック入力と、iPhoneの音声入力の文章を比べると、足の極端なギャップが如実にツイートの内容に現れて、人格まで変わったように見えてしまうのがとても自分でも面白い。


それで、最近は特にiPhoneの音声入力にハマっていたので、こちらの素晴らしさを感じていたのだけれど、フリックな文字入力で文章がすごく短くなる時も、それはそれで悪くなくて、単にアウトプットの様式が変わって、多様性が生まれると言うことなのだと思ったぞ。

つまり、本当に不器用でフリック入力で少ない文字数しか入力できないままであれば、僕は朝ようやくついったらとして、群馬県や、埼玉県や、サンフランシスコに名を残していたかもしれないんだぜ。

僕らはみんな心や性格と言うものがあるように思っているかもしれないけれど、それは実は、このように、デジタルのデバイスや、肉体のデバイスと言うものによる反射の角度の違いが起こす、繊細な、複雑なきらめきかもしれないんだぜ。

例えば、ほんのちょっと耳の角度が違うだけで、人の話が聞こえにくくなって、話についていけずに、孤独を愛するようになり、その人はベートーベンになるかもしれないじゃないか。

この世界は全てデバイスが作っているのかもしれないな。デジタルを含み、肉体と言うデバイスを含み。



---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->