あさた研メモ

主に私が気づいたこととか困った時のメモとか書き留めとく用。

Phoenix Frameworkでお手軽にAPI作成

環境

プロジェクト作成

表示関連はいらないのでオプションで指定する。

$ mix phx.new api_project --no-html --no-webpack

DBでMySQLを使いたいときは --database=mysql も必要。

その後は表示に従って、

$ cd api_project
$ mix ecto.create

を実行する。

データモデル作成

今回はjsonを返すAPIを作るので、そのためのデータモデルを作成する。

phx.gen.json – Phoenix v1.4.0

$ mix phx.gen.json Blog Article articles title:string body:text

表示に従って、ルーティングの追加とマイグレーションをする。

defmodule ApiProject,Router do
  use ApiProjectWeb, :router

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/api", ApiProjectWeb do
    pipe_through :api

    # 以下を追加
    resources "/articles", ArticleController, except: [:new, :edit]
  end
end

上記を変更したらマイグレーション

$ mix exto.migrate

実行

$ iex -S mix phx.server

http://localhost:4000/api/articles へ以下のようにPOSTするとデータが登録できる。

{
  "article": {
    "title": "記事のタイトル",
    "body": "記事の本文"
  }
}

レスポンスで以下のようなものが帰ってきたら成功。

{
  "data": {
    "title": "記事のタイトル",
    "id": 1
    "body": "記事の本文"
  }
}

http://localhost:4000/api/articles をGETすると一覧が見れる。(データは上のレスポンスの内容と一致してるはず)

tips

resources "/articles", ArticleController, except: [:new, :edit]

上記の except: [:new, edit] の箇所でHTTPメソッドの制限ができる。

例えば表示だけにしたければ

resources "/articles", ArticleController, only: [:index, :show]

とかやるとGETだけ受け付けるようになる。

ルーティングがどうなってるのか知りたければ、

$ mix phx.routes

で一覧を見れるので、そこを見ながらやると良さそう。

TDU、RDを卒業して

TL;DR

  • 大学は勉強しやすい環境を整えて欲しい。
  • 新入生は頑張って。

 

はじめに

この春、私は東京電機大学(TDU)理工学部情報システムデザイン学系(RD)を卒業しました。

 

そして、とある中小web系IT企業に就職をしました。先輩社員から「こんな技術でこんなことやるよー」といった感じのことを伝えていただいて、今勉強中といったところです。

 

さて、今回は改めて卒業してから大学生活を振り返って、TDUの運営等に関する不満と、RDの新入生に対しての軽いお話をしたいと思います。

なお、当記事は個人的な意見ですので、そこのところご了承ください。

 

TDU、RD運営について

エンジニアの中で、理系出身は3割と言われています。

それ故に、理系出身は即戦力として期待される場合が多いです。

 

また、本学は中小IT企業から見て、相当期待度が高いという事実があります。
いわゆる大学偏差値がはるかに高い東京理科大などと同じレベルで見られることがほとんどです。


しかし、それらの期待度に対して大学の学習内容が伴っていないと強く感じています。

 

それを踏まえて、大学生活を通して感じた不満が2点あります。

 

カリキュラムについて

情報システムデザイン学系、と聞いて入学した私は、本当に学びたかった内容は学べずに卒業しました。

名前からして「システムデザイン」を学ぶものだと思っていたのです。

しかし実態は違いました。「システム」と「デザイン」でした。

 

情報分野を学ぶ上で大事なのは、

の3点であると、とある教授がおっしゃっていました。

全くその通りであると思いますが、RDのカリキュラムではこれらについて十分に触れられません。

セキュリティに関しては皆無です。(2017/3/31時点)

 

現代の情報分野をどういう視点で学ぶにしても、この3点が基礎となってくる部分で、基本情報処理技術者でも扱われています。

 

これらは基礎部分であるため、十分に授業で扱う必要があります。

しかし、取得しなければならない教科を見ると、その基礎部分は放置でゲームプログラミングやらグラフィックやら。

その知識も大事かもしれませんが、その前に学ぶべき内容があるはずです。

個人的には、DBについて正規化の手順とか教えて欲しかったです。

 

RDとして、基礎部分をもう少し盤石なものにするカリキュラムにして欲しいと強く願います。

 

 

 学習コミュニティについて

私は大学生活で、授業外の技術に触れたのが2年生の後期と、遅い方でした。

しかも、実際に本腰を入れたのは3年前期の実習後です。

当然これは、私の意識不足が原因です。

 

しかし、おそらく多くの学生は私のように、何を勉強したらいいのか、どんな世界があるのか、というのが掴みきれないまま卒業している印象です。

 

これは、大学側が勉強を促す割に、勉強をする環境が整っていないというのが大きい影響を与えていると思っています。

 

本学は、漠然と「SEになる」「ゲーム作る」「ネットワーク周りやってみたい」という目標で入る人が多いです。

ですが、授業は具体的なことは置いといて基礎を固める、というものがほとんどです。

それは大学教育としては間違いではないと思います。

カリキュラムは前述の通りアレでしたが。

 

結局、私の友人らが勉強できる環境を整えようと(そんなにたいそうな考えじゃないかもしれないけど)、学習サークルを立ち上げて、それっぽい環境がほんの小さくできました。

 

大学にお願いしたいのは、勉強をしやすいような学習コミュニティを作って欲しい、ということです。

 

例えば、様々なジャンル(ゲーム、web、サイエンスとか)の、外部の大学や企業の方を巻き込んで勉強会や講演を開くなどあれば、学生も、教授も、いい影響を受けられるのではないでしょうか。

とくにこのような勉強会は、参加費が高かったり遠かったりして出るのをためらうことも多いので、大学内で開催となればそれなりに人は集まるのではないでしょうか。

 

リア充プロジェクトとか、そういう無意味なイベントにお金を使ってる場合ではないと思います。

 

新入生へ 

大学生活は、時間が目一杯使えるラストチャンスだと思います。

サークルや委員会で汗をかくのも良いですし、たっぷり勉強することもできます。

遊ぶのもとてもいいと思います。

 

どうかいまのうちに、

  • 大学でやっておきたいこと
  • 大学で学んでおきたいこと

の2点を大雑把にでも目標として持っていて欲しいです。

大学生活のいい指針になると思います。

勉強の指針に関しては、教授陣に聞くのがいいでしょう。

Twitter アカウントを持ってる先生とかにDMで聞くとかでもアリだと思います。

 

あと、大学とか教授に対して思ったことは正直に言ってしまいましょう。そんなチャンスなかなかなくなるでしょうし。

 

さいごに

色々言いましたが、TDUはそこそこ好きでした。いい先生もいらっしゃるし。

だからこそ、より良い発展を願っています。

拙い文章、長文、失礼しました。

 

追伸

アカン。

 

追伸2

情報システムデザイン学系とシステムデザイン工学部全般は何が違うんだ

これはなんでしょう

この記事はPMOB Advent Calendarの20日目の記事です。 www.adventar.org

TDUらしいものを飾ります

f:id:asataken:20161221225147p:plain

やりたかったこと

OpenCV触りたかっただけ。

import cv2

if __name__ == '__main__':
    # グレースケールに変換
    gray_img = cv2.imread('images/pict.jpg', cv2.IMREAD_GRAYSCALE)

    orgHeight, orgWidth = gray_img.shape[:2]
    size = (int(orgWidth/4), int(orgHeight/4))
    half_img = cv2.resize(gray_img, size)

    # ガウシアンぼかし
    gaus_img = cv2.GaussianBlur(half_img, (0, 0), 3.05)
    # エッジ抽出
    canny_img = cv2.Canny(gaus_img, 20, 40)

    # ファイルに保存
    cv2.imwrite('canny.png', canny_img)