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

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

 

大学2留していたけど第一志望の企業から内定もらえた話

この記事は、大学2留の自分がなぜ第一志望の企業から内定をいただけたのかを赤裸々に語るものです。

これから就職活動に取り掛かる方々、特に留年している理系大学生にはぜひ見てもらいたい内容です。学生の方々に少しでも有益な情報になれば幸せです。

1. 自己紹介

私は成蹊大学理工学部に2014年に入学し、現在まで2回留年し、今年2019年4月から大学4年になります。(ややこしいから↓で説明)

2014年 1年生 入学 留年

2015年 1年生 (2回目の1年生)

2016年 2年生

2017年 3年生 留年

2018年 3年生 (2回目の3年生)

2. 就活の結果

就職活動は2018年12月から始め、2019年3月に終わりました。

結果は以下の表の通りです。

  内定数 辞退数 不採用数 応募数
志望度高い企業 1 2 1 4
志望度低い企業 1 3 5 9
合計 2 5 6 13

辞退した会社は全て、第一志望の会社に内定をいただいた後に辞退したものになります。

つまり、めちゃくちゃうまくいきました!(自慢がしたい訳ではない...)

3. なぜこんなに上手くいったのか(本題)

ぶっちゃけこんなにうまいこといくと思っていませんでした(真顔)

2留もしていたんじゃ、もう普通にみんな引きますよね笑

普通の人間ならそうだと思います。てか自分も大学1年生の時とか、まだ1留の時に2留の人を見たら引いてましたwww 

はい

では本題ですが、なぜこんなに上手くいったのか???

それは、ちゃんと武器を作ったからだと考えています。

具体的には、

  1. 成果物の作成(技術職に就く人ならピンと来るはず!)
  2. 長期インターンシップの経験

この2点ですね。

この2点をガチで一生懸命やりました。

 3-1. 成果物の作成

1つ目の成果物作成ですが、まず成果物って何か知っていますか?

まぁ別にウィキっぽく説明する気はなくて、僕の解釈としては

エンジニアが自分のスキルをアピールする手段の一つで、口頭ではなく物理的に「私がこれを作りました!!(ドヤ)」と言える、最強の自己アピール手法だと思っています。

という訳で私が提出した成果物も晒します↓

http://kutsu-saachi.site/

まぁこれが何なのかをだらだら説明していると長くなるので割愛して、これを就活にどう活かすかを説明したいと思います。

3-1-1. 技術力の証明

まずはこれに含まれる要素においての技術力が全て証明されることになります。

割愛しつつ、少しだけこれに含まれている技術要素を挙げると

  • html & css & javascript
  • ruby (RubyOnRails)
  • DB設計 (SQL, mysql)
  • 各種インフラ (LinuxOS(debian), webサーバー(nginx), デプロイ)
  • Git
  • 企画力

こんな感じですね。

これすごくないですかー?笑 (自慢ではない)

何が凄いかというと、たった1つのURLでこれだけのアピールができるんですよ?

すごくないですか?ww

はい、という訳で、自分で何か成果物を作ること以上の自己アピールはありません。ぜひ作りましょう!

そして面接官に他の学生より1段階上の評価をしてもらいましょう。

1次面接の若手女性人事さんの中には「えっ!!すご、やば...!!」と分かりやすい反応をする方もいます。

2次面接以降になるとエンジニアが面接してくれる企業もありますので、そうしたら気合いを入れてエレベーターピッチをしましょう!そして何かご質問をいただいたらめちゃくちゃ丁寧に説明しましょう!(誤魔化したらもちろん落ちます)

3−1−2. 自分の技術に対する姿勢を表せる

 技術に対する姿勢を表せる。

まずこれはどういうことかと言うと、なぜ技術者になりたいのか?を表すことになります。

つまり、技術をやる人の中でもそれぞれモチベーションが違う中、自分が技術に触れる目的を表すことができます。

例えば、

  • 単純にプログラミングが好き
  • ハードウェアが好き
  • もの作りが好き
  • 人の課題を解決したい

など、色々分かれます。

ちなみに僕は「人の課題を解決したい」が一番のモチベーションになっています。

実はこの技術に対するモチベーションが就活をする上ではかなり重要なものになってきます。

というのは、企業もそれぞれ技術に対するモチベーションは違いますので、そこでマッチングできないと落ちます。

例えば、ある会社の技術に対する姿勢が「ユーザー本位のモノ作り」で、自分の姿勢が「単純にプログラミングが好き」であった場合、その会社には落ちます。

そして本題ですが、この技術に対する姿勢が成果物には少なからず現れてきます

例えば今回私が作ったwebアプリは、自分の欲しい靴が売られている靴屋を探す手間を省くためのサービスです。

このように「私は実際の世の中に存在する課題に着目し、それを解決するアプリを作りました。」というような一貫性を持った主張ができると、自分の技術に対する姿勢が伝わりやすいです。

 3-2. 長期インターンシップの経験

2つ目の武器は長期インターンシップの経験ですね。

まず長期インターンシップとはなんぞ?ということですが、これはどこかの会社で3ヶ月以上の就業体験をさせていただくことを言います。 

おわかりになると思いますが、この経験の中で「何をしてきて、何を得たのか」がものを言います。

以下、僕の場合

どんな会社か: web広告企業

期間: 丸1年

何をやったのか:

①コンサル用レポートの作成(詳細は割愛)

②RPA開発

機械学習

 こんな感じです。

これを履歴書に書いておくと面接官は100%聞いてきてくれます。

そうしたらまずは長くなりすぎないように答えます。そしてその後に面接官が深掘りして聞いてきてくれたらチャンスです。

度肝を抜いてもらいましょう。

4. まとめ + α

ここまでで、2回留年したけど第一志望の企業から内定を貰えた私が今までやってきたことを全て話しました。少しでも有益な情報になっていたら幸せです。

まとめますと、私が用意した武器は

  1. 成果物の作成
  2. 長期インターンシップの経験

こちらの2点ですね。

どちらか片方でも用意すると大分違うと思いますので、ぜひ参考にしてみてください。

また、私が今回の就活を経て総じて感じたことですが、留年が就活に悪影響を及ぼすかどうかは自分次第ということです。というのは、留年の経験をしている社員が一切いない会社なんて実はほとんどありませんので、そこでフィルタリングされることはないということです。

とはいえ、少なからず他の学生と比べて初期ステータスが劣っているのは事実ですので、何で差を埋めるかです。

そして最後に+αで用意しておくと良いものを紹介すると、このブログのようなブログです。他の記事も見ていただけると分かると思いますが、私はこの1年間少こまめにブログを書いてきました。これのURLを履歴書の自己アピール欄に書きましょう。面接官への印象は間違いなく良いです。

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のゴールド一択でした。

 

 

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

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