ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

サーブレットとの不毛な戦いに決着をツケタヨ #209

サーブレットとの不毛な戦いに決着をつけた

昨日から悩みまくっていたサーブレットとの戦い。どこにアクセスしても405が返ってくる件。

先輩の助けを得て無事に解決しました。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/fuck")
public class Index extends  HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
        PrintWriter w = resp.getWriter();
        w.println("Super fuck java servlet!");
    }
}

これが間違っていたコード。親クラスのdoGet()を呼ぶとうまくいかないらしいです。

そして解決したので適当にいろいろ出力してたのですが、今度は日本語が文字化けするという。

public class Index extends  HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=UTF-8");
        PrintWriter w = resp.getWriter();
        w.println("じゃばさーぶれっと");
    }
}

これが間違ったコード。

setContentType()getWriter()の前に書いてしまうと、サーブレット標準の文字コードで出力されてしまうようです。

なので正しくは

public class Index extends  HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter w = resp.getWriter();
        resp.setContentType("text/html; charset=UTF-8");
        w.println("じゃばさーぶれっと");
    }
}

こうですね。

2017年も終わろうとしているのにJava7で素のサーブレットを書いて初心者がハマってしまいそうなポイントでハマってる記事を書くことにどれくらい意義があるのかわかりませんが、書いておきます。

(ちなみに私の学校の「Web技術応用」とかいう名前の講義では今もサーブレットを書かされています。せめてPHPとか、なんかもうちょっと有るでしょう…)

雑談

だいぶ早いけど今日はブログを更新しちゃう。

今日含め残り二回のバイトにこのあと行ってきます。

Javaサーブレットと不毛な戦いをしている #208

バイトでした。

バイトしてきました。今日はひたすらGoogleAnalyticsとかスプレッドシートとかをいじるという作業をやってました。

データを見つめるのは面白い。ただ効率良くやらないと無限に時間を持っていかれるということも同時に学んだ。

GoogleAnalyticsにはAPIもあるそうなので、それをうまく叩きながら必要なデータを取りつついろいろできるようになると嬉しいのかもしれないなぁと思った。

一個だけ得た知見があって、ActiveRecordでBetweenを使ってレコードを取ってきたいときに

Post.where("created_at between ? and ?", Time.now - 1.day, Time.now)

みたいなことをしてたのですが、コレと同じことが

Post.where(created_at: (Time.now - 1.day)..Time.now)

みたいな感じで..を使って範囲を指定することができるらしい。もちろん日付だけではなく、数字とかでもイケる。

ちょっとだけイケてるっぽいコードが書けて幸せだった。

Javaサーブレットと不毛な戦い

もうそろそろケリをつけたいのだが…。

どのエンドポイントを叩いても405を返す素敵なWebアプリケーションが完成してしまう(半ギレ

スッキリわかる サーブレット&JSP入門 (スッキリシリーズ)

Kindleの技術書セールのとき何を思ったか間違えて買った↑の本があるのでそれを読んだりしつつやってますが、うまく行きません。

さぁどうしたもんか。

雑談

現実は甘くないし時間は有限。

Webフレームワーク調査 Koa編 #207

Webフレームワーク調査 Koa編

yurufuwa-tech.hatenablog.com

この記事の続きです。

なかなか時間が作れずこんなにおそくなってしまいました。

前回GitHubのREADME.mdを読んでワカンネとか言ってたんですが、公式サイトの方がExampleとかもガンガン載っててわかりやすいような印象を受けました。

Koa - next generation web framework for node.js

前回、contextオブジェクトなんぞやというところがもやっとしたまま終わっていましたが、これは一つのリクエストにつき一つ作成されるオブジェクトで、そのリクエストとレスポンスを一つにまとめた物ということらしいです。

contextオブジェクトはresreqというオブジェクトを持っていて、これはNodeの標準モジュールのrequestresponseそのものなので、ほとんどのNode標準で実装されているメソッドを叩けるそう。

ただ、contextオブジェクトにはたくさんの便利なメソッドがKoaによって実装されているので、基本的にはそちらを使ってゴリゴリ開発していくことになりそう。

公式のContextのところを読むといいと思う。超スゴイ、超イケイケ。

まぁ個人的には、よく使うメソッドのエイリアスが張られているのはちょっと気持ち悪いというか、別にそこまでしなくてもとは思いますが…。

あと、前回Async/Awaitだとなにが嬉しいねん、みたいな感じになってましたがこれも解決。

公式サイトの例にあるこれがわかりやすい。

const Koa = require('koa');
const app = new Koa();

// x-response-time

app.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  const ms = Date.now() - start;
  ctx.set('X-Response-Time', `${ms}ms`);
});

// logger

app.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  const ms = Date.now() - start;
  console.log(`${ctx.method} ${ctx.url} - ${ms}`);
});

// response

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);

X-Response-Timeのmiddlewareが呼び出されて、start変数に現在時刻が入って、next()が呼ばれるので次のmiddlewareに遷移して、loggerでも同じ感じで遷移して最後Hello Worldをレスポンスとして返したら、const ms = ...の行以降が呼ばれるみたいな感じでしょうか?

いろいろ自由に制御できるのがたのしそう。

雑談

GoogleHomeとAlexaで面白いことしたので見てほしい

IFTTTで「音楽聞かせて」のレスポンスを「Alexa、音楽聴かせて」に変更してるだけです。面白い…w

サーブレットと戦った一日(敗北) #206

Javaサーブレットと戦うの巻

素のJavaサーブレットと1日戦っていましたが、ルーティングが分からず405を常に返すアプリケーションが完成………。

アノテーションを使う方法とか、web.xmlを書き換える方法とかありとあらゆるものを試したがダメ。

こんなことになるなら2年の講義真面目にやっておけばよかった、そんな気持ち(2年の講義にJavaサーブレットを用いてWebアプリを作る講義があるが、あまりにもつまらなくて適当に受けてた。)

まさか3年になってサーブレット書くことになろうとはね……………。

雑談

最近まともに寝れてなくて辛いです。

その割に進捗出せないのがもっと辛いです。

研究室でWebサービス開発をやってる後輩がいて、ついにリリース目前ってところまで来てて、めちゃめちゃ頑張ってるな〜と思いながら見てました。

あれくらい一つのことをこだわりを持ってちゃんと成し遂げられる、そういう人間になりたい。

田胡研謎なものランキングベスト5

この記事は田胡研アドベントカレンダー7日目の記事です。

adventar.org


こんばんわ。今日はネタ記事として、弊研にあった謎っぽいものをランキング形式でご紹介します。

それでは早速

第5位

第5位は研究室の机の上に落ちていたこちら。 f:id:uutarou:20171207193318j:plain

…。生首です!!!!

いや、カオスすぎるでしょ…。

これはラブライブ高坂穂乃果というキャラクターのねんどろいどの頭部分っぽいです。

死因:動くねんどろいどを作りたいという謎のプロジェクトにより犠牲になった模様

第4位

第4位はこちら。 f:id:uutarou:20171207193736j:plain f:id:uutarou:20171207193752j:plain

戦車です。戦車(ラジコン)…。全く意味がわからん……。

僕が研究室探しをしていた3年の春、なんかスゴイ研究室というイメージを持って田胡研の説明会に行くと、戦車について語るボスの姿がありました。

ボスはオタクっぽいハナシをしてるときが一番楽しそうです。

ちなみに↑の2台だけではなく

f:id:uutarou:20171207193948j:plain

このようにたくさんの戦車を取り揃えています。

ちなみにボスはガルパンが好きらしいです。

3位

3位はKinectです。

Kinectって知ってます?

Kinectキネクト)はマイクロソフトから発売されたジェスチャー音声認識によって操作ができるデバイス[1]。動力学を意味する "Kinetics" と、繋がりを表す "Connection" を組み合わせた造語である。キャッチコピーは「カラダまるごとコントローラー」、開発コード名は「Project Natal」、「NUI」(ナチュラユーザーインターフェイス)の一つである。

(Wikipediaより)

まぁ、別に変わったものでも無いし、ゲーム分野以外にも使われているので特におかしくないと思うじゃないですか?

おかしいのはその数です。

f:id:uutarou:20171207194310j:plain

これ全部未開封なんですけど…。

しかも写ってないだけで20台くらいあるらしいです。

Kinectでおもしろいことをしたいひとはぜひ弊研へあそびにくるといいかもしれません…。ていうか誰か活用して…。

2位

こちら。

f:id:uutarou:20171207194603j:plain

なにかというと、これは枕とか寝袋とか歯ブラシとか。睡眠道具各種です。(各種私物です)

というのも弊研は、泊まる人がたくさんいて、日々快適な睡眠環境を求めてたくさんの睡眠道具が持ち込まれます。

でっかいエアベッドとかもあるし、某所にはソファーもあるのでまぁまぁ快適に寝れる環境が整っています。

睡眠道具が面積を専有して人権が失われていくという…。

1位

栄えある一位は、車好きなら誰しもが憧れるあるです。

購入の際にはボスが研究室メンバー全員にメールをだしたとか。

これが実際のメールです。

f:id:uutarou:20171207195330p:plain

フェラーリです。

いやぁ、スゴイですね。こんな研究室に入れて幸せですね。真っ赤なフェラーリです

それでは実車の写真です。ご覧ください。










f:id:uutarou:20171207195454j:plain

(どうしてそうなった…)

いやこれ、光るんですよ。

f:id:uutarou:20171207201403j:plain

フェラーリに乗りたい人は弊研に遊びに来るといいかも。

番外

番外編ですが、弊研は片研にもお部屋があります。学部のサーバーや研究室のサーバーが置いてあります。

そこが完全にオタクルームと化しているのでご紹介。

f:id:uutarou:20171207202647j:plain

f:id:uutarou:20171207202657j:plain

いやぁおかしいですねぇ…。ただのサーバールームなんですけどねぇ…。誰か住んでるんですかねぇ…?????

ちなみにサーバーの名前もオタクっぽい。

f:id:uutarou:20171207202842j:plain

おわり。


アルファブロガーの人たちの文才はある意味才能なんだなぁとおもいました。

おもしろ文章書けるようになりたい。

明日は、magrainさんによるWeb beaconの記事らしいです。楽しみですね。

バイトしてたら一日終わってた #205

バイトしてたら一日終わってた

毎日、いろんな言い回しで「なんもできなかった」という発言を繰り返すのがそろそろ心に刺さり始めてます。

今日はバイトでした。とは言え、コードを書いたのはほぼ1時間ちょいくらいであとは、Googleスプレッドシートと戦っていたりしました。

お陰で、最近はExcel関数職人への道を歩んでおります。

流石になんやらないまま12月が終わってしまうとたいへん困るので

スケジュール管理をなんとかしないとと思って、Githubリポジトリを作ってマイルストンとIssueで管理できないか試みています。

この辺の試みはまた今度、うまく行ったらまとめます。

雑談

何もできなかったのは決してバイト先が悪いわけでもなく、僕が要領わるいんですよね。

バイト退勤しているのにバイト先でダラダラしてたり、家帰ってきて一休憩してしまったり。

ただでさえ周りの人と比べて、実力が足りてなくてマズイんだから寝る間も何もかもを捨ててやらなきゃダメなんだよな。

Java書いて レポートやったら 夜が来た(575) #204

Java書いて レポートやったら 夜が来た(575)

なにが575だ、くだらんこと言ってる暇があったらコードを書け。その通りですね。

久々にサークルにちらっと顔を出したら、うっかり全部時間を持っていかれたり、レポート引きずってやったりしてたらこんな時間に…。

思った進捗を出せていないので非常によろしくない。一応やったこと書いておく。

TomcatMacに入れた

開発に必要だったので入れました。

Apache Tomcat® - Welcome!

公式からDLしてきて、展開して適当な場所に配置して終わりです。

binの下にパス通せばいいのかもしれないですが、IntelliJから起動することしかしないのでダイジョブ。

(なぜかbinの下のshとかに実行権限がついていなかったので、chmod 755 *.shとかするといいのかもしれない。)

JavaでStackを使いたかった

データ構造とかで出てくるアレです。

とは言っても実装してあげる必要とかまったくなく、Stackクラスというのが用意されています。

Stack (Java Platform SE 6)

Doc見れば使い方は一目瞭然ですが、こんな感じ。

Stack<String> stack = new Stack(); // Stackを作成
stack.add("ほげ"); // Stackに追加

if (!stack.empty()) {
    System.out.println(stack.pop()); // Stackの中身があったら取り出して出力
}

Javaすごいなーいいなー。

最近ちょっとJava好きです。

雑談

また散財してしまった。

部屋に設置した

なんかウェイクワード(アレクサとかOK, Googleとか)の認識がGoogleHomeに比べてだいぶ甘い気がします。Googleが優秀なのかなぁ???

Alexaはウェイクワードを変更できるらしいのであまりにも認識率が低かったら変更ですかねぇ。