Rubyの練習問題を解いた話【累乗】
あるサイトの、Rubyの練習問題を解きました。
正解率90%超えの問題を選んだんだけど、まあまあ難しかった気がします。
2つの数字が入力されるので、それぞれを3乗した数字の差を求めなさいという問題。
自分の書いたコード↓
input_lines = gets r = input_lines.split("\s") r_1 = r[0].to_i r_2 = r[1].to_i puts (r_1 ** 3) - (r_2 ** 3)
まずinput_lines = gets
で入力されたものを変数に入れる。
input_lines
はStringなので、.split
で指定した文字ごとに区切って配列にする。なので、r
はArrayになる。
ただ、Arrayの要素ひとつひとつは文字列なので、to_i
してから計算する。
サイトだとプログラムがテストデータで計算してくれるようなので、自分でもコンソールで叩いてみた。↓
irb(main):001:0> input_lines = gets 5 3 => "5 3\n" irb(main):002:0> r = input_lines.split("\s") => ["5", "3"] irb(main):003:0> r_1 = r[0].to_i => 5 irb(main):004:0> r_2 = r[1].to_i => 3 irb(main):005:0> puts (r_1 ** 3) - (r_2 ** 3) 98 => nil
べき乗(累乗)ってアスタリスク2つつけるの知らなかった。
いや、見たことはあるけど使ったことなかったからすっかり忘れてた…
良い勉強になりました!
グロースハックについて調べてまとめた話
31日ぶりの更新になってしまった。
TEDはというと、見てノートに書いてはいるもののこっちに投稿できていない…
そのままでもいいんだけど、考えや頭の中を整理できてない感じがしてよくない気がするのでそのうちちゃんと書こうと思ってます。
ところで今日は、インターン先でグロースハックについて学びました。
最近ネットでよく見かけはしていたものの、IoTとかデザイン思考みたいに「なんか使ってるとかっこいいしそれっぽい流行語」みたいな感じがして勝手に抵抗感を感じていたけど、
これから大事になる概念だと言われたのでこの機会にしっかり理解しておこうと思い、そして忘れないようにここに書き留めようと思ったのです。
なお、今回はVASILY社のブログを参考にさせていただきました。
とてもわかりやすかった。
そもそもグロースハックとは?
一言でいえば、 「数値やユーザーの声を分析し、ユーザーの数や質をGrowthさせる仕組みをプロダクトの中に組み込んでしまうこと」
数値をもとに分析してサービスを成長させようという手法のことらしい。
サービスをある程度運営させていくとデータが溜まってくるし、それを使って改善すべきところを改善すれば利益も上がりそう。ふむふむ。
グロースハックのための分析フレームワーク"AARRRモデル"
なんかすごい名前だけど、グロースハックのための分析フレームワークがあるらしい。
・Acquisition(ユーザー獲得:登録や訪問など)
・Activation(ユーザー活性化:初めての利用でユーザーにプロダクトを面白い!と感じてもらう)
・Retention(継続:ユーザーが繰り返しサービスを使うようにする)
・Referral(紹介:ユーザーがサービスを周りに紹介するようにする)
・Revenue(収益:ユーザーがより多く課金行動を取るようにする)
ざっくり言うと、この5つの中で改善の優先順位をつけて、そこにフォーカスして高速にPDCAを回していく。
なので最初にどこがネックになっているのかを分析して、仮説とKPIを設定し、設計して検証して…、ということのよう。
マーケティングに関してだけでなく、開発に関してもこれが適用できる。というか、一緒に考えないと意味がない。
UIだったりUXだったり、極論言うとサービスの仕様がガラッと変わったりすることもある。
この手法で成功しているのが、Twitter、Facebook、Dropboxなど(探すとたくさん出てくる)。
Twitterなんか最近アップデートするたびに改悪だのなんだのボロクソ言われているけれど、やっぱりすごいサービスなんだな。
おわりに
どんなサービスでも成長し続けていかないといけないので、この手法や概念は会社やサービスの大小に関わらず大事だな、と感じましたし、よくわからない先入観で好き嫌いするの意味わかんないしやめた方がいいな…と反省しました。
自分がこれからエンジニアとして働く時にも意識していきたいです。
とりあえず今回は軽くまとめたので、時間がある時に勉強したり、インターン先でも実務と共にさらに勉強できたらいいなと思います。
あと、こちらの記事も参考になりました(図がとてもわかりやすかったです)
【TED】The mind behind Linux
初めてのTEDはこちら。
"The mind behind Linux(Linuxの背後にある精神)"
リーナス・トーバルズ。
LinuxとGitを作った人。
その彼に質問者がいろいろ聞いていくという、対話形式のTEDだった(珍しい)。
3点まとめ
・LinuxやGitは自分のために作っていたプロジェクトだった。
・オープンソースの好きな点は、「異なる人が一緒に働けること」
・彼は、自分が「ビジョナリー」ではなく「エンジニア」なので、技術やトレンドがこの先どうなるかを予想するのではなく、今目の前の問題を解決したいと思っている
感想
まず彼の人柄がいい。
すごいことをやっている人なのに、傲ることもなく、かといって卑下するわけでもなく。
それと少し気になったのが、彼のワークスペースがとてもシンプル。
動画の中に写真が出てくるんだけど、机の上にディスプレイとキーボードとライトだけ置いてあって、本体は離れた場所にある。
壁は薄い緑色で(本人はこれを「精神病院で使われる色」と言ってた(笑))、とても目に優しい。
これらは彼がそうしたくてやっていることで、
例えばPC本体のファンの音が嫌だから遠くに置いていたり、目への刺激を少なくするために薄緑色の壁にしている。
しかも机は、立って操作するような高さにある。立って作業する派なんでしょうね。
思ったより「プログラミングが楽しいと思っている普通のエンジニア」だった
Linuxはもともと彼自身が自分のためにやっていたプロジェクトだった。
自分が欲しくて、あるいはやってみたくて作っていた。
でもやっているうちに「これ作ったから見て!」と周りに見せてフィードバックが欲しくなった。
公開していたらいろんな人が集まって来てフィードバックくれていい感じになって、ついにオープンソース化。
プロジェクトに関わる人数も増えていき、徐々に成長していった。
この流れって、エンジニアだけじゃなくクリエイターなら誰でもありえるというか、「わかる」ってなることだと思う。
さすがにオープンソース化まではそうそう行かないけど。
でも自分が作ったものを見せたくなるのも、フィードバックもらってブラッシュアップしていくのも、ものづくりもする人ならやりたくなることだと思うのでとても共感できた。
それ以外にも彼が普通にエンジニアだなあと思える部分がいくつかあって、
例えば彼はもともとプログラミングを楽しみながらやっていたこと。
最初から偉大ですごいもの作るぞ!って決めて始めたんじゃなく、楽しいから、好きだからという気持ちでやっていた。
あとは技術にまっすぐで、リアルなコミュニケーションがあまり好きではないところ。
理系やエンジニアにはいわゆる「コミュ障」みたいなイメージが持たれているし実際そういう人は多いんだろうけど、彼も人付き合いは得意ではないらしくて、
「やり取りはメールの方がいい」と言っていたし、なんというかそれっぽさがあった笑。
LinuxとかGitなんてすごいもの作った人なんだから、もっとこうジョブズみたく堂々としている人で、大きな問題解決に積極的に取り組んでいる人だと勝手に想像してた…
彼の見習いたい部分
私が彼のことを見習いたいと思ったところは、彼自身が言っていた「諦めない、頑固なところ」。
作っている途中で「もういいや、他のいけてるものを作ろう」とはならないらしい。
これ結構大事だと思うし私はそこまで我慢強くないので真似したいなあと思った。
プログラミングにおける「センス」
って私みたいな理系じゃないのにプログラミングをやっている人にとってとてもひやりとすることで、
楽しくてやっているけど向いていない可能性もある。
彼は、プログラミングにおけるセンスとは「ある問題を、違った見方をして書き換えることで、特殊ケースを一般ケースに変えられること(=いいコードを書くこと)。また、大きなパターンを見て取って、直感的に正しいやり方がわかること」って言ってる。
前者は少し難しいけど、後者はわかる。
わからないとクソコード量産することになるし…
彼はセンスと言ってるけど、私は磨いて伸ばせる部分だと思うんですけどね。
オープンソースという考え方はもうすっかり実現されているか
彼は「どっちとも言えないな〜」って言っている。
個人的には、ただ動くコードを公開したりするだけでなく、新しいオープンソースの形が生まれるんじゃないかなと思っている。
それはIT・エンジニアリングの世界だけでなく、他の業界でもありえることだし、
もっと世の中にオープンソースのものが増えればさらに多くの画期的なコンテンツが生まれて豊かになるんじゃないかなと。
利益やビジネスの問題は置いといて。
最後に
この動画、16分くらいあって実は途中で寝ながら聞いてた笑。
それと書いていて思ったのは、文章書くの下手だなーってことと語彙力がないなってこと。
そもそも考えたことを吐き出しているだけなので美しくて読みやすいものでないのはそうなんだけど、
伝わりやすいようにどういった書き方をするのか、ってことが全く考えられていないような感じがする。。
動画見終わってからはうお〜〜〜ってたくさん頭の中で思考がぐるぐるするんだけど、それをうまく言語化してアウトプットできない。
文系なのに相手に伝わる文章書けないとか終わってる(文系理系の問題ではないが)。
でもまあ、それはおいおい書きながら訓練していきたい。
おわり
【git】revretしたcommitをまたrevertして戻した話
最初に間違えてpushした
先日家にいる時、インターン先の上司に「localにコミットしといてね」って言われた。
localにコミット…?リモートにpushしとけってことかなと思いcommitしてpushしました
$ git commit - 'xxxxxxxx' $ git push
不安になってrevertした
で、その後 「いやでももし自分のところにcommitしとけってことだったらどうしよう?誰かにpullされたらコンフリクトするぞ…」と思い、commitを取り消してpushし直した。
まず取り消したいcommitの番号を取得します
$ git log --oneline 42cdd131 メール機能追加 ff0be1e1 SNS共有昨日のバグ修正
メール機能追加を取り消したいのでrevertしましょう
$git revert 42cdd131 [local 42cdd131] Revert "メール機能追加" 11 files changed, 428 insertions(+), 82 deletions(-) ・ ・ ・
これで一安心。
ところが上司から「もうcommitした?」と追加で連絡が…
revertをrevertした
結局リモートにあげろってことか!と焦りながら「revertを戻すにはどうしたら…!?」と激焦りした。
結論言うと、「revertをrevertすれば良い」。
もう一度ログを見てみる。
$ git log --oneline 7d146881 Revert "メール機能追加" 42cdd131 メール機能追加 ff0be1e1 SNS共有機能のバグ修正
なんと、revertにもちゃんと番号がついている…! 冷静に考えたら当たり前なんだけど、その時は焦っててそこまで頭回らなかった。
で、この番号を使ってrevertをrevertしよう
$ git revert 7d146881 [local 9ad403ba] Revert "Revert Revert "メール機能追加"" 11 files changed, 428 insertions(+), 82 deletions(-) rewrite app/views/pc/xxx/index.html.erb (100%) rewrite app/views/pc/yyy/index.html.erb (100%) rewrite app/views/pc/zzz/edit.html.erb (100%) ・ ・ ・
よかった!できたっぽい。
で、これをpushする。
$ git push Counting objects: 24, done. Delta compression using up to 4 threads. Compressing objects: 100% (21/21), done. Writing objects: 100% (24/24), 5.16 KiB | 0 bytes/s, done. Total 24 (delta 13), reused 0 (delta 0) remote: Resolving deltas: 100% (13/13), completed with 11 local objects. To github.com:xxx/xxx.git 7d146881..9ad403ba local -> local
めでたしめでたし。
言葉の意味がわからなかったらちゃんと上司に確かめるようにしよう。
GameSaladをダウンロードしてみた
こんにちは。
今日はGameSaladをダウンロードしました。
こちらです。
右上の「Download」をクリックすると「アカウント作れや」と言われるのでアドレスとパスワードを入れます。
パスワードは10文字以上じゃないとダメって言われます。
で、入力するとインストーラがダウンロードされるので開きます。
利用規約みたいなのがズラズラ出てくるので「Agree」をクリックし、そのまま待ちます。
サラダだ。可愛いですね。
なんかマリオとかに出てきそう。
こいつをApplicationsにぽいっと入れてやれば完了。
起動すると先ほど登録したアカウントでログインしてくれって言われます。その後チュートリアルを紹介してくれます。優しいなあ。(全部英語ですが。)
Unityでゲーム作るつもりでしたが、並行してこれで2Dゲームでもつくってみようかと思います。
ああ、モノ作るのって楽しいなあ!!
どんなゲーム作ろうか今からワクワクです。
それでは。
bundle installできなくて困った件
Railsで新しいアプリ作ろうとしたら、bundle install
ができなかった。
Errno::EACCES: Permission denied @ dir_s_mkdir - /Users/tmicha/.anyenv/envs/rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/byebug-9.0.6 An error occurred while installing byebug (9.0.6), and Bundler cannot continue. Make sure that `gem install byebug -v '9.0.6'` succeeds before bundling.
ググりまくった結果、bundle install --path vendor/bundle
で叩いたらできた。
なんでなのかは未だにわからない、、
意味もわからずにrbenvやらbundlerやら使ってるのがいけないんだなあ。きっと。
環境構築の本で勉強しよう。
2018/7/22 追記
久しぶりに作業しようと思ったらまたこいつが出てきた。
その時は、
$ sudo chown -R user-name /Users/user-name/.rbenv
をしたらbundle install
ができるようになった。
bundle install --path vendor/bundle
は初回だけやれば次は自動的にvendor/bundle
にインストールしてくれるんだけど、
過去に一度でもsudo
使ってrails コマンドとか叩いてしまうと、所有者がrootになってしまうのでsudo
なしではパーミッションエラーになってしまうらしい。
sudo
使った力技はよくないということですね。
参考:
Ruby - ruby on rails セットアップでgemパッケージをBundler追加できない(53480)|teratail