小さなエンドウ豆

まだまだいろいろ勉強中

SQL小技集

SQL小技

最近SQLを書くことが多いので学んだことをまとめたいと思います。

2つのテーブルを更新したい

勝手な認識でupdate文は1つのテーブルに対し行うものだと思ってました。
しかし以下のように2つのテーブルに対して実行することができます。

update users u, players p
set u.id=1, p.user_id=1
where u.name="piiice" and p.name="piiice"

こんな感じです。

SQLを間違えてしまった…

間違いは誰にでもある。にんげんだもの

とはいえ、SQLの間違いはとってもやばいです。(語彙力)
こんな時に役に立つのがbegin, rollback, commitです。

begin, rollback, commitは制御構文といってcrud操作の中でもupdate, deleteで使うことが多いです。
これを用いるとsqlで加えた変更をなしにできることができます。 例はこちらです。

-- 1
begin;

-- 2
update user
set id=1, name="piiice";

-- 3
select *
from user;

-- rollback; -- 4
-- commit; -- 5

まず1を実行します。
次に2のupdateを実行します。この時点でDB自体の値は変わっていません。
3で2のupdateが正しいかどうか確認します。<- ここ小技!
もし間違いがあれば4を実行し、updateをなかったことにします。
間違がなければ5を実行し、値の更新を受け入れます。

これでSQLコワクナイ

servletのコンパイル2

modelパッケージの指定の仕方

servletコンパイルする際
modelがインポートできない問題に直面し なんとか解決出来たので忘れないように書いておく

構成はこんなかんじ

webapps/
└── example
    └── WEB-INF
        ├── classes
        │   ├── model
        │   └── servlet
        └── jsp

クラスパスを':'でつなげるところがコツらしい

javac -classpass /usr/share/tomcat7/lib/servlet-api.jar:./webapps/example/WEB-INF/classes webapps/example/WEB-INF/classes/servlet/Test.java

Servletのコンパイル

Servletコンパイル

Servletを使ってアプリケーションを開発してみた。
ソースはこんな感じです。

package servlet;                                                                                                                            

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/FowardServlet")
public class FowardServlet extends HttpServlet {
  private static final long serialVersionUID = 1L; 
  
  protected void doGet (HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {

      // forward
      RequestDispatcher dispatcher =
        request.getRequestDispatcher("/WEB-INF/jsp/forward.jsp");
      dispatcher.forward(request, response);
    }   
}

前に書いたJSPファイルをサーブレットから呼び出すアプリケーションである。

さーコンパイル

$ javac FowardServlet.java
FowardServlet.java:5: エラー: パッケージjavax.servletは存在しません
import javax.servlet.RequestDispatcher;
                    ^
FowardServlet.java:6: エラー: パッケージjavax.servletは存在しません
import javax.servlet.ServletException;
                    ^
FowardServlet.java:7: エラー: パッケージjavax.servlet.annotationは存在しません
import javax.servlet.annotation.WebServlet;
                               ^
FowardServlet.java:8: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServlet;
                         ^
FowardServlet.java:9: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServletRequest;
                         ^
FowardServlet.java:10: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServletResponse;
                         ^
FowardServlet.java:13: エラー: シンボルを見つけられません
public class FowardServlet extends HttpServlet {
                                   ^
  シンボル: クラス HttpServlet
FowardServlet.java:12: エラー: シンボルを見つけられません
@WebServlet("/FowardServlet")

...

あれ??

たくさんエラーたちが出てきました。

どうやらいろいろとインポートできていないらしい…

調べるとクラスパスでservlet-api.jarをささなければならなかった。

探すこと1時間ありました。 Tomcat7をインストールした時に一緒に落ちてきたみたい。

今度はクラスパスを指定して挑戦

$ javac -classpath /usr/share/tomcat7/lib/servlet-api.jar FowardServlet.java

うまくいきました!
環境変数にTomcat7の場所を設定する方法が一般的らしいですね。 この後すぐに行いました。

自分のツイートをダウンロードする

自分のツイートをダウンロード

今年も残すところあと3週間。2016年の自分は一体何をつぶやいているのか…

気になって自分のツイートを簡単に見る機能があればよいなーと探してみると、一括でダウンロードできるサービスがあるらしい。

今回はやり方を記していきます!

手順

手順は以下のとおりです。

  1. Twitterの設定から全ツイートダウンロードをクリック f:id:h-piiice16:20161213081100p:plain 僕は押しちゃったのでダウンロード待ちの状態になっていますが、本来は「全ツイート履歴をリクエストする」というボタンがありますのでそれをクリックします。
  2. Twitterのアカウントを登録する際に使ったメールアドレスにダウンロード用のURLが届くのでそれを待つ。
  3. ダウンロードを行う f:id:h-piiice16:20161213081541p:plain 届いたメールにあるダウンロードのボタンをクリックすると、こういったページにアクセスします。ここでダウンロードのボタンをクリックします。

  4. ダウンロードされたzipファイルを解凍し、tweets.csvというファイルを見つける このファイルがツイート履歴の記されたファイルとなります!

これで完了です

これと合わせて

h-piiice16.hatenablog.com

こんなのをやってみると面白いかもしれません。

JSTLの始め方

JSTLカスタムタグの使用

jspファイルでカスタムタグを使うためにJSTLについて勉強していきます。

ディレクトリ構成

ディレクトリやファイルは以下のように配置する。ルートはtomcat7で作成したプロジェクトのwebappsの下のROOTというディレクトリとします。

ROOT
├── WEB-INF
│   ├── lib
│   │   ├── jstl.jar
│   │   └── standard.jar
│   └── web.xml
└── index.jsp

一番時間がかかったのがweb.xmlの場所でWEB-INFの直下に置くことを何かしらのブログから知りました。(ソース忘れた…)
jstl.jarとstandard.jarですが、これはここApache taglibsからバージョン1.1をダウンロードしてきてWEB-INF/libの下に置きます。

カスタムタグの記述

次にindex.jspにカスタムタグを使用してみます。

<%@ page language="java" contentType="text/html; charset=UTF-8" session="false" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
</head>
<body>

<h1>index</h1>

<%
 int user = 5;
%>                                                                       
<c:if test="${ user==5 }">
  Correct!
</c:if>
</body>
</html>

こんな感じ いざ実行してみましたが、何故か表示されてくれません。 変数を普通の数値(例えば5)とかに変えて行ってみたら普通に表示されました。
原因はわかりません。

今日はカスタムタグちょっと触れたのでここまでにしたいと思います。

岡山芸術交流 Developmentに行ってきた話

岡山芸術交流とは

芸術を通じて国境や文化、世代を超えた様々な交流が生まれることをめざす大型国際展示会

パンフレットよりそのまま引用してきました。
簡単にいうと岡山駅周辺の美術館はもちろん、建物やまちなかに芸術品を散りばめましたってイベント
とある建物の壁にて...
f:id:h-piiice16:20161102224142j:plain

岡山県庁の前は...
f:id:h-piiice16:20161102224158j:plain

とこんな感じで作品が普通に置いてあったりします。

芸術の秋なので私も参加したいと思いいろいろと見て回りました!

ルート

当日とても天気が良かったので歩いて回ることにしました。

このようなルートで回ることにしました。 駅から桃太郎通りをまっすぐ行き、シンフォニーホールという場所から南にすすみ順に作品を見ていきました。
公式サイトのアクセスと照らし合わせていただくとわかりやすいかもしれません。

あと僕は歩きましたが岡山には ももチャリ という自転車を手軽に借りることができるサービスがあるのでそれを使うともっと効率よく回れるかもしれません。

感想

正直現代アートのこと全く知らずに参加しましたが楽しめたと思います。
中でも面白かったのがライアンガンダーの作品です。
f:id:h-piiice16:20161102222348j:plain

これが今岡山のまちなかにあるのが迫力があり面白かったです。
何か鉄の塊が地面をえぐってこうなったのを表現しているのですが、これを通して何を伝えたかったのかは私にはわかりませんでした…
まだまだ自分の知識や経験では追いつかないところがあることに気づけました。

更におもしろいことにこの作品は無料で見ることができます。他にも無料で見ることができる作品が10品くらいありました。
基本美術館の中に展示してある作品はチケットがいるのですが、学生だと 1200円 と安いのかわかりませんが、たぶん安い値段でお求めできます。

岡山は芸術に溢れているなと改めて感じました。

package.jsonにnpm install したライブラリの情報を追加する方法

npm installでインストールするライブラリの情報をpackage.jsonに追加したい

忘れないように記しておきます。
npm installでインストールするライブラリの名前をpackage.jsonにわざわざ書いてnpm installで一括でインストールするのも悪く無いですが、面倒な時があるので何か便利な方法はないか調べたら以下の様なオプションがnpm installにありました。

$ npm install hoge --save-dev

--save-devを追加するとpackage.jsonのdevDependenciesの欄にインストールしたライブラリ(上の例だとhoge)の名前とバージョンが記録されます。

^ と ~ の表記

その場合^[バージョン]みたいな表記になるのですが、これの意味はゼロでないバージョンニングは変えない?という意味らしい よくわからないので例をみると

  • ^1.2.3 ... 1.2.3 <= version < 2.0.0
  • ^0.2.3 ... 0.2.3 <= version < 0.3.0
  • ^0.0.3 ... 0.0.3 <= version < 0.0.4

他にも~というものがあるがこれはそのバージョン以上という意味があるらしい。

package.jsonでプロジェクトの情報を管理する方法がまだ掴めてない部分が多いのでもっと理解を深めていきたいと思いました。