の おと

考えたこと,学んだことを書きます

インターン前夜

そわそわしている夜.ホテルのライトは白色の蛍光灯でチカチカする.

今日は起きてからドタバタしてギリギリ飛行機に間に合って,無事2週間滞在するホテルにつきました.明日からはいよいよteamLabのインターンインターン生仲間のデータを見ていると高学歴でビビります.みんな研究していることがあって,私みたいな課題で始めてWebサービス作ったようなのとはワケが違う.なんで私受かったんだろう.前夜にして技術力がみんなに追いつくはずもないので,自分なりに吸収できるものがあればいいなと思う.

 

今日は山口地元のエンジニアさんの繋がりで4人で前夜祭(飲み)に行った.感想は「ハッピーになりたい」です.みなさん割とハッピーそうで嬉しかった.(初対面)

大人と飲み,この期間の間に何回かありそう.貴重な機会をありがとうございます.

新宿で飲みでした.わーいすげー.相変わらずギラギラしていた.

 

 

ホテルのデスクは目の前に鏡があって,ブルーライトカットメガネをかけた私がパソコンをしている様子が映っている.

私は小学生の頃からぼんやり描いていた夢を実現でき始めているのではないかと思い始めた.東京のIT企業に勤めること.ノーパソの天板にはめちゃくちゃシールを貼ってかっこいい.画面の中は真っ黒で,緑の英文字が並ぶ.そんな.

私は人生をかけてかっこいいウーマンになりたいと思いつづけているので,今だいぶいい感じ.ワクワク.ほんとのお仕事で東京にいる日は来るのかな.ハッピーになりたい.

こんなこと言ってると明日技術力の無さに打ちひしがれて泣いて帰ってくる羽目になるのさ.

 

頑張ります!

teamLabインターン事前課題まとめ

こんばんは.明日から東京です.なんとか事前課題が形になったので仕様をまとめる

github.com

 目次

=============

=============

 

課題は3→2→1の順にクリアした.4はできていない.やれたらやる

RESTfulなAPIの設計,実装

1. 下記情報を持つ商品データの登録・検索・変更・削除を行う、RESTfulなAPIの設計・実装をしてください。

  • 商品画像
  • 商品タイトル(最大100文字)
  • 説明文(最大500文字)
  • 価格

レスポンスの形式はJSONで、内容はお任せします。

 RESTfulAPIはapiコントローラを作り,JSONを返すことで実装した.

中身はproductコントローラ(最初に作った同期アプリに使用したコントローラ)とほとんど一緒だったのでコピペした.

CRUDの詳細は前回のエントリに書いたので省略.以下の関数で実装

  • 一覧 product_getAll
  • 登録 product_create
  • 検索 product_search
  • 変更 product_update
  • 削除 product_delete

shiningcureseven.hatenablog.com

 

 

非同期登録,非同期検索

 2. 課題(1)で作成したAPIを使用して、商品登録や検索などが行える(非同期だと◎)webインターフェースを、Viewとして実装してください。

 まずproductコントローラで,同期のシステムを作っていた.非同期に手を出せそうだったのでRESTfulAPIを使用したシステムを作ることを今日行った.

RESTfulAPIを使用した商品登録はそれ用のViewを用意した.

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/restnew

RESTfulAPIを使用した検索もフォームを作った.

teamLab ECshop

jQuery(java script)で非同期処理を実装した.検索をするたびに検索結果が付け足されてはダメなので初期化するようにした.

 

削除のViewなんてない,listのページ上でRESTful APIを使って削除するようにした.

編集のViewはあればいいよね,でもやってない.

 

おなじみBootstrapを使ってそれっぽくした.Viewについて言うことはそれくらいかな?

 

webに公開

3. 上記課題で制作したアプリケーションをIaaSまたはPaaSを利用してweb上に公開してください。

AWSのEC2を利用し公開した.止まって焦ったりした思い出。

teamLab ECshop

私の作ったECショップアプリ,どうぞ使ってみてください.別に売ることも買うこともできないけど.

開発環境もクラウド化(Cloud9)した.OSはAmazon Linuxを使った.

 

店舗の概念

4. 上記アプリケーションに店舗の概念を追加してください。例えば、店舗ごとに管理している商品を閲覧できる機能など。

 実装できていない.データベースに店舗idのフィールドを設ければ終わりそう.店舗と商品名で検索できるようにしたら良さそう.

 

MVCの仕組みを理解しているか

MVCとはModel,View,Controllerのこと.RailsMVCで書くしかないので理解したつもり.


適切なコード、コメントを書けるか

コメント書いてません.すみません.今からインターンまでにかけるだけ書く.


RESTfulなAPIを理解しているか

なんとなく.私の見解はrails日誌(6)に書いています

shiningcureseven.hatenablog.com


Git & Githubを使えるか

今回はpushしただけ.addのタイミングわからないので教えてください.一気に実装してaddじゃぁcommit comentになんて書けばいいかわからないし少なすぎてもpushのlogが多すぎてわけわからなくなる.

オクトキャットは大好き.


DBの基礎(正規系やリレーション)を理解しているか

そこまでできませんでした.それなりに動くようにした.


バリデーション、エラーハンドリングを考慮しているか

バリデーションできていません.価格のところにstring入れたらrubyのエラー出ます.新規登録で画像ないとエラー出ます.

ごめんなさい.

 

 

エピローグ

苦労したこと

開発環境構築.DockerとDocker-composeの概念はなんとなくわかったけど導入しようとすると勝手がわからず苦しんだ.これに1ヶ月精神をやられた.

Ruby on railsMysqlとDockerの相性が悪かったみたいで,Mysqlがよくつっかかってきたので反抗期の子を持つ親の気持ちがわかった.

 

学んだこと

  • エラーを読むということ.なんでだよ!とふて寝する前に,エラーの英語をGoogle翻訳に通すなりして理解しようとする姿勢を習得した.それでも分からない時はふて寝した
  • エラー文そのままググるということ.同じエラーでつまずいた先人が解決策を書いてくれていたりした.
  • 本を読むということ.今まで人に教えてもらってという形で書いていた(C,Java,HTML,CSS)けど,Ruby on railsは本から学んだことで大体進んでいった.嬉しいな
  • 何回もエラーにぶち当たってこそわかるものがある.師匠はいちばん頑張ってたとき一日15時間勉強したっていってた.それくらいの経験があって初めて,これはここがおかしくてエラー吐いてるな,っていう勘が身につくわけで,そのエラーを克服できる.私は今回がwebプログラミング初めてだといってもいいのでエラーで泣き寝入りするのも当たり前なんだと思った.

プログラマとして当たり前の,独学の仕方,姿勢とかそういうことさえも知らなかったので,それは大きな学びでした.

できたこと

  • Dockerとruby on rails,その周辺ツールについてややわかった.
  • teamLab ECshopができた.目に見えてわかるできたもの.
  • GitHubは前から使っていたのでpushはすんなりできた.環境が変わってSSHをgenerateするあたりも流れは知っていたので問題なし.
  • もがく様子をブログに書き留めておく事.黒歴史として嘲笑いたい.
  • サーチする事,ドキュメントを読む事.
  • 師匠とその仲間たちとの繋がり.
  • 年齢は1つ下のマチョマチョプログラミングガールとの出会い
  • 教授にcommit(取り合ってくれたとは言っていない)

 

できなかったこと

  • 開発環境のことでエラーが出たら自分で解決できたことは少なかった.ほとんど師匠にやってもらってしまった.環境に関するたくさんのツールに関しては,これからゆっくり学んで行く必要がありそう.
  • まだ実装できていないところがある.それは上に示した通り.時間がなかった.というか近くにWebプログラミングし慣れている人がいないのは相当困った.最後1週間で師匠に出会えたので師匠の職場に長居させてもらい度々聞いた.
  • scaffoldは後で気付いたので実装できなかった.

 

感想

webアプリ,どれにもCRUDが必須な気がした.全部軸はCRUDで,拡張機能として検索とか認証とかがあったり色々.

SUCCESSの文字は嬉しい.環境構築もうやりたくないけどSUCCESSが異常にアドレナリンでるのでプログラマになった感じがした.

Ruby on railsは楽しい.私は仕事でこういうこと(Webプログラミングであってる?)がしたいんだと思った.今人生楽しい.ぼんやりしか掴めてないところ,分からないことだらけだけど楽しい.形になった,動いた.エラーが出ない.

 webプログラミングの最初のとっかかりとしていい課題をもらったんだとわかった.これを頑張ることで次またruby on railsで作ったときは今回よりもスムーズに事が進むはず.どんどん繰り返して成長して行く.前提知識があってこそ言語やツールのアップデートの嬉しさがわかるはず.これからのwebにも通用する技術力を得た.今回のでだいぶ世界のぞけたと思う.

 

 

たくさんの人にお世話になりなんとか課題っぽいものができました.この場を借りて御礼申し上げます.

行くぜ東京.インターンのアウトプットも引き続きできたらと思います.

rails日誌(6)

RESTfulAPIはユーザインターフェースを持たない.非同期的なシステムでRESTfulAPIがあると便利.課題の要件ではJSONで返すこととなっている.

今回の課題である「RESTfulなAPIを使用したView」が間に合わないと思い,ひとまず同期で動くアプリを作って,APIまでは作った.頑張れそうだったのでそれを用いてRESTfulAPIを作成した.

createとserchに関してはRESTful APIを使用しViewを作った.

 

ここではHTML版APIとそれを元に作ったRESTful APIを整理する.

 

一覧

HTML版API

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/list

RESTful API

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/api/product_getAll

 

商品1つに対しての情報

HTML版API

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/show/:id

RESTful API

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/api/product_get/:id

 

 

 

検索

HTML版API

検索窓のURL

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/search

検索後のURL

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/search?utf8=%E2%9C%93&search_word=${検索ワード}

RESTfulAPI

JSONが帰ってくる

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/api/product_serch/${検索ワード}

検索をしやすくするためと返ってきたJSONをいい感じに表示するためにフォームを作った.検索結果を表示するためのテーブルをjQueryで非同期っぽくした.

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/restsearch

 

新規登録

HTML版API

newとcreateの2つの関数を使って実装した.

新規登録画面

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/new

RESTfulAPI

新規データを追加する時,URLに商品情報を含めてGETすることはできないのでPOSTするためのフォームを作った.

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/restnew

 

 

削除

HTML版API

listAjaxで実装した.jQueryでいい感じに消えるようになってる.

RESTfulAPI

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/api/product_delete/${商品ID}

 

 

github.com

rails日誌(5)

EC2のストップについて

キャッシュなどの使ってないメモリを確保するのをやめた.

cloud9でvi /etc/my.cnfするとメモリどんな感じか見れる.設定ファイル.闇に葬られそうなので人に任せて領域確保していただいた.

 

ec2に接続した後$topでタスクマネージャっぽいものを見れる.

s + 1で1秒ごとに更新,shift  + mでメモリ使用順に変えられる.

f:id:shiningcureseven:20170915161205p:plain

メモリ貧乏

mysqlサーバをec2上で別に立てようとしたら有料になるので避けたい.たかが課題.

 

swap

SSDに仮装領域を作って強制停止を防ぐ策.

やってもらった...

 いきなり止まる問題に耐性ができた.

 

ruby on railsをどんどん進められるようになりました

CRUDが課題なので,登録・検索・変更・削除のそれぞれのページを作りました.

scaffoldingでやればよかったけど後で知ったので遅かった.全部手動

jumbotronで体裁を整えました.

application.html.erbにjunbotronの宣言をすれば使えるようになりました.

一覧は以下のURLから見られるようになりました.

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/list

商品それぞれの詳細情報は以下のURLから見られるようになりました.

 ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/product/show/:id

 

@hoge はviewに渡す変数

hogeも変数だけどviewには渡さない.

 

damonがmysqlサーバを立て続けてくれる

cloud9もEC2のdocker上で自動起動されているのでrails sをした状態が維持される

cloud9上のrailsを止めると止まる

rails日誌(4)

EC2上のAmazon LinuxにDockerを立てて開発中

rails s -p 8080 -b "0.0.0.0"で空いている80番ポートでrailsをつなぐ.

mysql -u root -pmysqlを書くためにターミナルを立ち上げ.

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com:8080/

 

phpMyAdminもec2上で動くよ

http://ec2-18-220-5-204.us-east-2.compute.amazonaws.com/c9/workspaces/phpMyAdmin/index.php

 

mysqlが結構エラーを起こす..

sentOS系によく起こるエラー

amazon Linuxを使っているので

mysqlを再起動するとデータディレクトリの場所を見失う

以下のコマンドを売ってディレクトリの位置を指定したら解決する

rm -rf /var/lib/mysql

mysql_install_db --datadir=/var/lib/mysql

chown -R mysql:mysql /var/lib/mysql

service mysqld start

ルートのパスワードの初期化

mysql_secure_installation

けどDBのデータが全部消えてしまうのでだめ

 

処理が少なかったからコミットできていなかったけど進めて行くにつれて自動保存されていたみたいで再起動してもデータが消えなくなった.

うまく行った方法

「途中から再起動」

やりかた:

macのターミナル上でEC2のサーバに接続し

EC2インスタンスを再起動

sudo docker ps -a

どっかーのコンテナIDが出てくる

これで起動

sudo docker start {container id}

 

 

パスワードのエラー

f:id:shiningcureseven:20170915154057p:plain

こういうやつはconfig/database.ymlにパスワードを突っ込んでrailsを再起動

 

あっやっと動いた

ので開発を進めていきます

f:id:shiningcureseven:20170915153026p:plain

ああっ泣ける

テストデータは1つしか作ってない段階なのでこのザマです.でもデータを取ってきて表示させることができました.

 

EC2め

ここからデータをたくさん追加しようと思ったのですが,EC2がストップしてしまいました.どうやらmysqlとDockerとruby on railsの相性が悪いみたい.う

メモリ,mysqlが20パーくらい食っているので止まったみたい.無料枠EC2の使えるメモリが少ないみたいなのですぐ泊まる.今から解決して行く.

rails日誌(3)

docker-composeはやめました.開発環境一括インストーラで構築し直すことにしました.docker-composeはやめたけどdockerです.

 

開発環境をインストールした

$ docker build --build-arg c9User=`cat /dev/urandom | base64 | fold -w 16 | head -n 1` --build-arg c9Password=`cat /dev/urandom | base64 | fold -w 16 | head -n 1` -t="webdevops/aml:1.0" https://github.com/wisteria083/WebDevOpsDocker.git

GitHub - wisteria083/WebDevOpsDocker

 

javaとか結構の開発環境が一気に揃うもの.目的を果たすぶんには必要ないものまで入っているけど楽.

 

cloud9でコーディングすることにしました.

cloud9のターミナルでrails s -p 8080 -b 0.0.0.0railsを立ち上げる.ディレクトリの上でopen terminal hereを押せばターミナルもcloud9上で扱える.

cloud9のポートは8081.localhost:8081で起動.

サーバへの接続コマンド

ssh ec2-user@ec2-18-220-5-204.us-east-2.compute.amazonaws.com -i /Users/cureseven/Desktop/ec2-ruby.pem

 logはmysqld.logの中.mysqlの権限は777.

 

 今日はAWSも環境を作りました.EC2のインスタンス. 

データベースはphpMyAdminを用いて作ることにしました.

http://localhost/c9/workspaces/phpMyAdmin/index.php

 

$historyで過去のコマンド履歴見れたので泣けた.知りませんでした

 

自分でエラー克服できないのめちゃんこ悲しい.人に頼っていてはまずいですよ..

 

明日のタスク

  • mysql -u root -pか
  • application_controller.rb進める
  • hello.phpの存在?

mysqlサーバ立ち上がらない沼

mysqlサーバが立っているかわからない

webコンテナができない

yumが通らない

 

mysqlサーバがそもそも立っていないんじゃないか?という指摘をたくさん受けたのでdocker-composeでやってみるもうまくいかないのでDesktopに新しいアプリ作ってやろうと思い以下をやったがこれもダメだよ!

  rubyが入っていることを確認した.

cureseven:~ cureseven$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]

 

mysqlが入っていることは確認できなかった.


cureseven:~ cureseven$ mysql2 --version
-bash: mysql2: command not found

 

brewをupdateし成功した

cureseven:Desktop cureseven$ brew update

 

 brewmysqlをインストールしようとしたら既にあった

cureseven:Desktop cureseven$ brew install mysql
Warning: mysql 5.7.19 is already installed

 

mysqlのバージョンが確認できた


cureseven:Desktop cureseven$ brew info mysql
mysql: stable 5.7.19 (bottled)

 

mysql.serverをスタートしようとし失敗した.

cureseven:Desktop cureseven$ mysql.server start
Starting MySQL
... ERROR! The server quit without updating PID file (/usr/local/var/mysql/cureseven.local.pid).

 

mysqlの権限を_mysqlに変更した

cureseven:Desktop cureseven$ sudo chown -R _mysql:_mysql /usr/local/var/mysql
Password:

 

mysql.serverをスタートしようとしたらまたPIDファイル

cureseven:Desktop cureseven$ mysql.server start
Starting MySQL
... ERROR! The server quit without updating PID file (/usr/local/var/mysql/cureseven.local.pid).

 

今度はcureseven.local.errの権限をcuresevenにしてみた

cureseven:Desktop cureseven$ sudo chown cureseven /usr/local/var/mysql/cureseven.local.err

 

やっぱりだめ

cureseven:Desktop cureseven$ mysql.server start
Starting MySQL
... ERROR! The server quit without updating PID file (/usr/local/var/mysql/cureseven.local.pid).

 

mysqlのプロセスを確認し殺したが同じ結果

cureseven:Desktop cureseven$ ps -ef | grep mysql
501 2540 719 0 4:42PM ttys001 0:00.00 grep mysql
cureseven:Desktop cureseven$ sudo kill -9 501
cureseven:Desktop cureseven$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/cureseven.local.pid).

 

mysqlユーザを作ろうとしたら(2)のエラーが出てきた

cureseven:mysql cureseven$ mysql -u cureseven
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
cureseven:mysql cureseven$ mysql --user=cureseven
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
cureseven:mysql cureseven$ mysql --user=root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

 

mysqld_safeを行ったが同じ結果

cureseven:Desktop cureseven$ mysqld_safe
2017-09-13T08:03:16.6NZ mysqld_safe Logging to '/usr/local/var/mysql/cureseven.local.err'.
2017-09-13T08:03:16.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2017-09-13T08:03:19.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/cureseven.local.pid ended
cureseven:Desktop cureseven$ mysql.server start
Starting MySQL
... ERROR! The server quit without updating PID file (/usr/local/var/mysql/cureseven.local.pid).

mysqlもうアンインストールしよ

cureseven:Desktop cureseven$ brew remove mysql
Uninstalling /usr/local/Cellar/mysql/5.7.19... (322 files, 233MB)

 

クリーンナップされたみたい

cureseven:Desktop cureseven$ brew cleanup

 

このサイトに従ってアンインストールした

MacでMySQL5.7をアンインストールする - Qiita

 

installし直し

cureseven:Desktop cureseven$ brew install homebrew/versions/mysql56

 

ダメかい

cureseven:Desktop cureseven$ mysql.server start
-bash: /usr/local/bin/mysql.server: No such file or directory

 

installし直し

cureseven:Desktop cureseven$ brew install mysql

 

うぉ

cureseven:Desktop cureseven$ mysql.server start
Starting MySQL
SUCCESS!
cureseven:Desktop cureseven$ 2017-09-13T08:20:08.6NZ mysqld_safe A mysqld process already exists

 

根本的な解決はされていないがとりあえずmysqlサーバがコンテナ外では,動いた

Docker諦める説ある