大学生がプログラマーを目指すはなし

ruby, python, AIの話が多いです

UiPathでセレクターに変数を使う

セレクターに変数を使いたいときって、結構ありますよね。

今回は↓のようなエキサイトニュース芸能カテゴリをクリックするという簡単な処理で考えてみます。

芸能カテゴリをクリック

1. 芸能カテゴリのセレクタを変数に代入して実行する。

まず、クリックアクションで芸能カテゴリのセレクタを拾ってきます。

芸能カテゴリをクリック

すると、だいたい↓のようなセレクタになっていると思います。

芸能カテゴリ_セレクタ

次に、セレクタを変数に代入してみます。

セレクタ代入 ←画像のような感じですね。

右辺は↓です。○を付けた"芸能"を変数に置きたいです。

f:id:rk0822ps4:20190521152356p:plain

とりあえず、これでまず実行してみるとよいと思います。しっかりクリックされれば第一段階はOKです^^

2. "芸能"を変数に格納する。

芸能代入

こんな感じで'芸能'を文字列型で変数にします。(シングルクオートはセレクタ指定に使う際の仕様です)

次にselector変数に実際のセレクタを代入していきます。

セレクタ代入 ←こんな感じですね。右辺は↓です。

セレクタ代入右辺

これで完了です!

このselector変数をクリックアクションのセレクターに指定してください。

 

  • クリックアクション

芸能カテゴリをクリック

芸能セレクタ代入後

これで完了!

AI(機械学習, ディープラーニング, 強化学習)を改めてまとめてみる

この記事では、AI技術のうち、機械学習, ディープラーニング, 強化学習に絞って改めて解説します。また、中学生でも理解できるような簡単な言葉を使うよう努力しています。

まず最初に "AIとは" ということですが,

AIとは、機械を使って人間のような知能や行動を再現させようとする技術である。明確な定義はない。

 そして、AIには主に次の3つがあります。

  1. 機械学習
  2. ディープラーニング
  3. 強化学習

 これらを一つ一つ解説し、またそれぞれの違いや使い分けを考察してみようと思います。

1. 機械学習

 機械学習一言で説明すると、

機械学習とは、あるデータ群を受け取ると、それら各データを適切にクラス分けしたり、今後の予測を行う技術です。

 これだけじゃ分からないですよね...笑

 もう少し詳しく説明します!

 まず、機械学習教師あり学習と、教師なし学習に分けられますので、それぞれについて簡単に説明していきます。

1-1. 教師あり学習

 教師あり機械学習とは、学習データと呼ばれるデータを用意して、それに基づいてデータの分類を行っていく手法です。

 例えば、犬もしくは猫が写った画像を読み込んだとき、それぞれの画像が犬と猫のどちらに分類できるのかシステムで自動判定させたい場合などに用いられます。

 もっと噛み砕くと、子供に「あれが飛行機で、あっちがヘリコプターだよー」と教えたら、次に見たときに飛行機とヘリコプターを区別できるのと同じような感じです。

1-2. 教師なし学習

 教師なし機械学習とは、学習データを用意せず、分類したいデータそのものをその場でクラスタリングしていく。

例えば、

  • 顧客データのセグメントなど、どのように場合分けをしたら良いのかわからない
  • 分類カテゴリが多すぎる場合

こんな状態なデータだとむしろ人間の方が困ってしまいますよね?笑

そんなときに使います!

2. ディープラーニング

 次にディープラーニングです! 

 ディープラーニングとは、機械学習を発展させたもので、機械学習の一部に含まれます。

2-1. ディープラーニング機械学習の使い分け

 まず、ディープラーニングはデータが大量にある場合でないと使えません。なので、データが少ない場合は従来の機械学習を使うことになります。

 また、数値データの場合も機械学習で十分に対応できるので、機械学習を使います。

 それ以外の場合ではほとんどディープラーニングを使うと考えてよいでしょう。

2-2. ディープラーニング機械学習の違い

 ディープラーニング機械学習の決定的な違いは、データを区別するための「目のつけどころ」をAI自らが判断し、その性能を向上させていくことだと考えます。

 噛み砕くと、高IQを持った子供が、大人が見ていないところで一人でに賢くなっていくようなものと同じ感じだと思います!

 また、従来の機械学習ではできなかったことの例として、人間が言語化できなかったものが挙げられます。

 例えば、ファッション系ECサイトなどでのユーザーの服や靴の好みなどは、言語での表現が難しいです。しかし、これらもディープラーニングでは、ユーザーがどの商品をクリックしたかという情報を元に、そのユーザーの好みに合いそうな商品を自ら絞り込んで提案してくれるのです!

 このように、従来の機械学習は人間を「知能」で超えることはありませんでしたが、ディープラーニングの出現によって、こちらが予測していなかった価値を見出すことが可能となり、やっと文字通り「人工知能」っぽくなってきたと言えるようになりました。

3. 強化学習

データをそもそも用意しない。

その場で「行動→評価→修正→...→行動→評価→修正」と繰り返していくこと。

例. ロボットの制御(ルンバなど)、ゲーム(パックマンなど)

 

参考

https://innovation.mufg.jp/detail/id=93

 

rubyで配列のブロック処理にmapメソッドを使う

以前は配列にブロック処理をする際はほとんどの場合でeachを使っていたのですが、このmapメソッドを知ったときは目から鱗でした。

mapメソッドとは

mapメソッドは、各要素に対してブロックを評価した結果を新しい配列にして返します。

例えば、次のように配列の各要素を10倍した新しい配列を作るコードがあったとします。

nums = [1, 2, 3, 4, 5]

new_nums = []

nums.each { |n| new_nums << n * 10 }

puts new_nums # => [10, 20, 30, 40, 50]

このような処理にmapメソッドを使うと

nums = [1, 2, 3, 4, 5]

new_nums = nums.map { |n| n * 10 }

puts new_nums # => [10, 20, 30, 40, 50] 

このように3行で書けます。

mapメソッドを使うと、そのブロックでの戻り値を配列要素とする新しい配列を作成するので、それをそのまま新しい変数に代入することができます。

このように空配列を用意して、他の配列でループ処理した結果を代入していくような処理はよくあります。こういう時はmapメソッドを使った方が良いです。

その他の便利なメソッド

selectメソッド

selectメソッドとは、各要素にブロック処理をし、その戻り値がの要素だけを集めた配列を返すメソッドです。例えば次のようなコードで、偶数だけを集めた新しい配列を作れます。

nums = [1, 2, 3, 4, 5]

odd_nums = nums.select { |n| n.odd? }

puts odd_nums # => [1, 3, 5]

rejectメソッド

rejectメソッドは、の要素だけを集めた配列を返すメソッドです

nums = [1, 2, 3, 4, 5]

even_nums = nums.reject { |n| n.odd? }

puts even_nums # => [2, 4]

 

↓参考にした書籍です。

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで

 

少数の丸め誤差をまとめてみる(ruby)

少数を使ったプログラムでたま〜にバグを生み出してしまってイライラしていたので、まとめてみました。

0.1 * 0.2 # => 0.020000000000000004

0.1 * 0.2 == 0.02 # -> false

0.1* 0.2 > 0.02 # => true

なぜこんなことが起きるのかという話は情報工学の分野になるので少々割愛しますが、要は我々人間は数字を10進数で捉えますが、コンピュータは2進数で全てのデータを捉えていて、そこにギャップが生まれています。(詳しく知りたい方は基本情報技術者試験の勉強をしてみてください!)

これによって、if文などで「あれ〜?」みたいなことになる初心者プログラマーがかつての自分でした...

 

- 解決策

Rationalクラスを使いましょう!

これによって、無限小数となっていた少数が有理数(分数)で捉えられるようになります。

0.1r * 0.2r # => (1/50)

0.1r * 0.2r == 0.02 # => true

0.1r * 0.2r > 0.02 # => false

 

これでもう大丈夫!

railsにmysql2を入れるところでハマった

mysqlがインストールできません

普通にgemに gem 'mysql2', '>= 0.4.4', '< 0.6.0' と書いて、 bundle installするところだったんですよね。

省略

-----

Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load

-----

-----

Setting libpath to /usr/local/Cellar/mysql/5.6.26/lib

-----

creating Makefile

 

make "DESTDIR=" clean

 

make "DESTDIR="

compiling client.c

compiling infile.c

compiling mysql2_ext.c

compiling result.c

result.c:326:40: warning: incompatible pointer types assigning to 'my_bool *' (aka 'char *') from 'bool *' [-Wincompatible-pointer-types]

    wrapper->result_buffers[i].is_null = &wrapper->is_null[i];

                                       ^ ~~~~~~~~~~~~~~~~~~~~

result.c:328:40: warning: incompatible pointer types assigning to 'my_bool *' (aka 'char *') from 'bool *' [-Wincompatible-pointer-types]

    wrapper->result_buffers[i].error   = &wrapper->error[i];

                                       ^ ~~~~~~~~~~~~~~~~~~

2 warnings generated.

compiling statement.c

linking shared-object mysql2/mysql2.bundle

ld: library not found for -lssl

clang: error: linker command failed with exit code 1 (use -v to see invocation)

make: *** [mysql2.bundle] Error 1

 

make failed, exit code 2

 

Gem files will remain installed in /Users/ryomatsu/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mysql2-0.4.6 for inspection.

Results logged to /Users/ryomatsu/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-15/2.2.0-static/mysql2-0.4.6/gem_make.out

An error occurred while installing mysql2 (0.4.6), and Bundler cannot continue.

Make sure that `gem install mysql2 -v '0.4.6'` succeeds before bundling.

こういう感じでエラーが出てきました。

とりあえず赤文字の分に従って sudo gem install mysql2 -v '0.4.6'というのを実行します。

 

すると、

Building native extensions.  This could take a while...

ERROR:  Error installing mysql2:

        ERROR: Failed to build gem native extension.

 

(省略)

またこのようなエラーが出てきました。

もう途方に暮れてしまいそうでしたが、色々とググってみると同じような人がたくさんいて、その中でも以下のコマンド

$ xcode-select --install

こちらで解決している方がたくさんいました。

 

しかし、僕の場合、また新たなエラーが出てきました。。。

 

「なんでだろ..」

とか思いながらさらにググり進めると

 

ビルドする際にopensslのパスがビルドの時に必要で、LDFLAGSとかCPPFLAGSとかにパスを追加する記述が必要、などなど、出てきました。

 

で、そちらを踏まえたコマンドがこちら

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

こちらでパスを通し、

 

改めて、  sudo bundle installしてください。

ここで、sudo をつけるのを忘れずに^^

 

こちらでmysqlが入りました!!

 

参考サイト: 

RailsにMySQLを導入したらかなりハマった件について | 大学生Webエンジニアの記録

macOS で bundle install 時に mysql2 のインストールに失敗した | Lonely Mobiler

MacBookAir 2018 ゴールドを買った

MacBookAir 2018 ゴールドを買いました。

テーブルに置いてみた感想としては

 

薄くて軽くてスリムでかわいいいヽ(^Д^*)

 

と、思いました。

mac

MacBookAir 2018 ゴールド

↓以下スペックです。
色: ゴールド
OS: MacBookAir
CPU: 1.6GHzデュアルコア Intel Core i5
メモリ容量: 8 GB
HDD(SSD)容量: 256 GB
重さ: 1.25 kg
ディスプレイ: Retina 13インチ
こんな感じですね。

 

値段もあまり変わらないMacBookProでCPUが2.4GHzくらいあるやつがあったので、どっちを買うか一瞬だけ悩みましたが、まぁやっぱり見た目がとてもかわいいAirのゴールド一択でした。

 

 

これから末長く使っていくパートナーにすることを考えると、やっぱり外見が一番大切ですよね!

見た目が気に入らないと愛せないですよ!笑

 

cssだけでアコーディオン表示

HTML

<div class="hidden_box">
    <input type="checkbox" id="label1" />
    <label for="label1">クリック</label>
    <div class="hidden_show">
        <!--非表示ここから-->
        <p>こんにちは</p>
        <!--ここまで-->
    </div>
</div>

CSS

/*全体*/
.hidden_box {
margin: 2em 0;
padding: 0;
}

/*ボタン装飾*/
.hidden_box label {
padding: 15px;
font-weight: bold;
background: #efefef;
border-radius: 5px;
cursor :pointer;
transition: .5s;
}

/*アイコンを表示*/
.hidden_box label:before {
display: inline-block;
content: '\f078';
font-family: 'FontAwesome';
padding-right: 5px;
transition: 0.2s;
}

/*ボタンホバー時*/
.hidden_box label:hover {
background: silver;
}

/*アイコンを切り替え*/
.hidden_box input:checked + label:before {
content: '\f00d';
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
color: #668ad8;
}

/*チェックは見えなくする*/
.hidden_box input {
display: none;
}

/*中身を非表示にしておく*/
.hidden_box .hidden_show {
height: 0;
padding: 0;
overflow: hidden;
opacity: 0;
transition: 0.8s;
}

/*クリックで中身表示*/
.hidden_box input:checked + label + .hidden_show {
padding: 10px 0;
height: auto;
opacity: 1;
}

 

上記のコードのみで、

ボタンクリックで姉妹要素がスルスルっと出てきて、同時にボタンのデザインも⬇︎から✖︎に変わる。

 

参考サイトはCSSだけでアコーディオンを作る方法(レスポンシブ&矢印付)です。