memorandums

日々のメモです。

授業説明用:JSP&JFreeChartでグラフを出力するサンプル

3年後期の担当授業でチームを組んでWebアプリ(JSP&Servlet)を企画&開発をしてもらっています。チームによってはグラフ出力する要求があり、授業では扱ってこなかったので、このエントリーはサンプルとして提示するためになります。一般用ではありませんので、くれぐれもご注意ください。

準備

以下、Eclipseで開発することを前提としています。プロジェクト名はJFreeChartです。ライブラリをこちらからダウンロードします。圧縮ファイルを展開して、jfreechart-1.0.19.jarとjcommon-1.0.23.jarをWebContent/WEB-INF/libにコピーします。



サンプル1(JSPのみでグラフ出力)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"
	import="org.jfree.chart.*,org.jfree.data.category.*,org.jfree.data.general.*,org.jfree.chart.plot.*,java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<img src="graph1.jpg">
	<img src="graph2.jpg">
	<img src="graph3.jpg">
	<%
		//文字化け防止用
		ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

		//円グラフ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

		//データセット
		DefaultPieDataset d1 = new DefaultPieDataset();
		d1.setValue("データ1", 50);
		d1.setValue("データ2", 20);
		d1.setValue("データ3", 30);

		//JFreeChartオブジェクトの生成
		JFreeChart chart = ChartFactory.createPieChart("ここはタイトルよ", d1,
				true, true, false);

		//画像ファイルに出力
		File file = new File(application.getRealPath("graph1.jpg"));
		try {
			ChartUtilities.saveChartAsJPEG(file, chart, 300, 300);
		} catch (IOException e) {
			e.printStackTrace();
		}

		//棒グラフ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

		//データセット
		DefaultCategoryDataset d2 = new DefaultCategoryDataset();
		d2.addValue(1.0, "データ1", "1");
		d2.addValue(2.0, "データ2", "1");
		d2.addValue(2.0, "データ1", "2");
		d2.addValue(3.0, "データ2", "2");
		d2.addValue(0.5, "データ1", "3");
		d2.addValue(1.0, "データ2", "3");

		//JFreeChartオブジェクトの生成
		chart = ChartFactory.createBarChart("ここはタイトルよ", "カテゴリー", "値", d2,
				PlotOrientation.VERTICAL, true, true, false);

		//画像ファイルに出力
		file = new File(application.getRealPath("graph2.jpg"));
		try {
			ChartUtilities.saveChartAsJPEG(file, chart, 300, 300);
		} catch (IOException e) {
			e.printStackTrace();
		}

		//折れ線グラフ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

		//JFreeChartオブジェクトの生成
		chart = ChartFactory.createLineChart("ここはタイトルよ", "カテゴリー", "値", d2,
				PlotOrientation.VERTICAL, true, true, false);

		//画像ファイルに出力
		file = new File(application.getRealPath("graph3.jpg"));
		try {
			ChartUtilities.saveChartAsJPEG(file, chart, 300, 300);
		} catch (IOException e) {
			e.printStackTrace();
		}
	%>
</body>
</html>

サンプル2(サーブレットでグラフ出力)

上記JSPサーブレットに変換しただけです。


円グラフ

import java.io.IOException;
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 org.jfree.chart.*;
import org.jfree.data.general.*;
import java.io.*;

@WebServlet("/Pie")
public class Pie extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public Pie() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("image/jpeg");

		//文字化け防止用
		ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

		//データセット
		DefaultPieDataset d1 = new DefaultPieDataset();
		d1.setValue("データ1", 50);
		d1.setValue("データ2", 20);
		d1.setValue("データ3", 30);

		//JFreeChartオブジェクトの生成
		JFreeChart chart = ChartFactory.createPieChart("ここはタイトルよ", d1, true, true, false);

		//responseに出力
		try {
			OutputStream os = new BufferedOutputStream(response.getOutputStream());
			ChartUtilities.writeChartAsJPEG(os, chart, 300, 300);
			os.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}


棒グラフ

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;

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 org.jfree.chart.*;
import org.jfree.data.category.*;
import org.jfree.chart.plot.*;

@WebServlet("/Bar")
public class Bar extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public Bar() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("image/jpeg");

		//文字化け防止用
		ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

		//データセット
		DefaultCategoryDataset d2 = new DefaultCategoryDataset();
		d2.addValue(1.0, "データ1", "1");
		d2.addValue(2.0, "データ2", "1");
		d2.addValue(2.0, "データ1", "2");
		d2.addValue(3.0, "データ2", "2");
		d2.addValue(0.5, "データ1", "3");
		d2.addValue(1.0, "データ2", "3");

		//JFreeChartオブジェクトの生成
		JFreeChart chart = ChartFactory.createBarChart("ここはタイトルよ", "カテゴリー", "値", d2,
				PlotOrientation.VERTICAL, true, true, false);

		//responseに出力
		try {
			OutputStream os = new BufferedOutputStream(response.getOutputStream());
			ChartUtilities.writeChartAsJPEG(os, chart, 300, 300);
			os.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}


折れ線グラフ

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;

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 org.jfree.chart.*;
import org.jfree.data.category.*;
import org.jfree.chart.plot.*;

@WebServlet("/Line")
public class Line extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public Line() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("image/jpeg");

		//文字化け防止用
		ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

		//データセット
		DefaultCategoryDataset d2 = new DefaultCategoryDataset();
		d2.addValue(1.0, "データ1", "1");
		d2.addValue(2.0, "データ2", "1");
		d2.addValue(2.0, "データ1", "2");
		d2.addValue(3.0, "データ2", "2");
		d2.addValue(0.5, "データ1", "3");
		d2.addValue(1.0, "データ2", "3");

		//JFreeChartオブジェクトの生成
		JFreeChart chart = ChartFactory.createLineChart("ここはタイトルよ", "カテゴリー", "値", d2,
				PlotOrientation.VERTICAL, true, true, false);

		//responseに出力
		try {
			OutputStream os = new BufferedOutputStream(response.getOutputStream());
			ChartUtilities.writeChartAsJPEG(os, chart, 300, 300);
			os.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}


HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<img src="/JFreeChart/Pie">
<img src="/JFreeChart/Bar">
<img src="/JFreeChart/Line">
</body>
</html>

以下のサイトを参考にさせていただきました。ありがとうございました。

JFreeChartを使ったグラフ作成
JfreeChart 棒グラフのサンプル
[ThinkIT] 第5回:JFreeChartでグラフ作成(前編) (1/4)
[ThinkIT] 第6回:JFreeChartでグラフ作成(後編) (1/4)
JFreeChartで生成したグラフをServletで出してみる(JFreechart 0.9.16)

reading: ビジュアル解説 IoT入門

書評と呼べるほどの内容ではないので、twitterによく書くreading: をつけたタイトルにしました。どうでもいいですね。。。

今日は講義も非常勤もないので、今週の予定であった研究用ソフトウェアの開発の続きをしようと、自宅近くの図書館にきました。

そこでたまたま手にとったのがこの本でした。

ビジュアル解説 IoT入門

ビジュアル解説 IoT入門

この本は発売当初に書店でチラ読みした記憶があるのですが、図解シリーズだな。。。という程度の印象だったと思います。

薄いのでメモを取りながらじっくり読んでみました(頭の整理になるので、もちろん、あとで自分で買います)。

今の世の中の流れ(特に技術的なこと)、自分の興味の変化(ファブやエンタメを中心にしつつ)が、これまで見てきた世界とは違う、新しい何かの時代の変化の時期なのだろうという意識はあったのですが、その感覚をうまく言葉にできない状態でした。

IoTという言葉を最初見たときには「バズワードがまたできたな」くらいの認識でした。でも、ずいぶんと長い間、使われていますよね。なぜでしょう。

本書はIoTとその周辺について整理されており、特に以下の記述には「IoTが求められるのはなぜか?」をよく理解できました。自分の言葉にもしていきたいと思いました。

以下、本書24ページからの引用です。

(引用開始)
IoTを活用したイノベーションを生み出す源泉は、ユーザーの本当の意図や求める価値を探る「ユーザーインサイトの獲得」の能力になります。「意図せざる使い方」を知ったときに、なぜそのような使い方をしたのか、ユーザーが本当にやりたかったのは何かを洞察することから、イノベーションが始まるのです。こうなると、製品やサービスに求められるのは、ユーザーの使い方や利用環境や利用シーンまで含めて、できる限り正確に捉えて、それらをデータ化して知らせてくれる仕組みだといえます。たとえば、製品やサービスの利用空間情報(温度や照度など)が必要不可欠になることも多いでしょう。
(引用終了)

IoTがなぜ必要とされるのか?よくわかります。モノがインターネットに接続されることで、これまでにないサービスを作り出すことがシステム的にはできるようになるでしょう。でも、それはあくまで1つサービスのことであって、重要なのは上記の文章の通りで、ユーザーインサイトの獲得のための方法なのですね。

これまでのモノづくりは売ったらおしまいでした。保守やメンテナンスというのはどうしても後回しにしてきたと思います。今でもそういう感覚の業界があるのではないかと思います。そこにコストがかけられない構造だったからでしょう。

でも、これからは、モノを売ることでユーザーとの対話の始まり、そこで低コストで利用データを収集し分析することで、次の開発に生かす。。。そういう循環を含めた開発フローが主になっていくのではないかと思います。

そのためには、本書で紹介されているIoTを取り巻く要素技術(ビッグデータクラウドコンピューティング、AI、ブロックチェーン、拡張現実、デバイスとセンサー、量子コンピュータ)を活用して自動的にデータ収集し解析できるようなインフラが必要になるのでしょう。

Google HomeやAmazon Echoをはじめとする音声アシスタントが各社から発売されて賑わっていますが、これらも利用者の様々な情報を取得して次のサービスの発現に生かすきっかけになるのでしょう。

頭の整理になりました。買って何回か読んでみたいと思います。

はい。

Arduino YunのWebサーバーにアクセスするHTTPクライアントの実現の一試行

経緯はいいから本題を早く知りたいというかたは以下の本題へお進みくださいな。

背景

少し前に学生支援のため以下の調査をしました。

Arduino YunのTemperature Web Panelを図にしてみた - memorandums

このプロジェクトでは、Yunに接続した加速度センサーに関する情報をWifi経由でAndroidクライアントが取得する予定でした。

プロジェクトの納期が近く中でなかなか進まず、また、少し支援のため調査したログが以下です。

Androidアプリを1から作るのは大変なのでProcessingのAndroidモードを利用したら?と伝えていました。そのための本も用意していますし、これまで卒業研究などで活用してきた経緯もありました。

で、本日、調べてみたのですが。。。結論を先に書きますと、難しい。。。ということがわかりました。もちろん、実現できなくはないけど。。。大変。一応、ログまで試したこととその結果は以下です。

  • HTTP Requests for Processing ライブラリを使おうとしたら以下のエラーをはいて落ちてしまいました。Androidモードではあ動作しないのかな。。。追っていません。

f:id:ke_takahashi:20171116210247p:plain

  • ProcessingでTCP/IPクライアントを利用しようとしたら、processing.netライブラリはAndroidモードでは使えないことがわかりました。

卒業研究くらい時間があれば、じっくりAndroidアプリでも作ればいいのでしょうが、あと3週間くらい(といっても授業時間しかないので基本的には3コマ!?)しかない状態では無理でしょう。

そこで思いついたのはProcessingつながりでP5.jsを利用する手です。p5.jsはもちろんJSですからWebサーバーへのアクセスだってできるはずです。案の定httpGetなる関数が用意されていることがわかりました。で、早速試したわけです。

すると。。。アクセスできない。

ブラウザのエラーメッセージは以下。ああ。。。クロスドメインかぁ。。。アプリからサーバーアクセスが許可されていないってやつか。

f:id:ke_takahashi:20171116210403p:plain

そこから、いろいろと調査したり試したりしました。1時間くらいはやっていたでしょうか。。。もういい加減できないなぁ。。。諦めようと思いました。サーバーからAccess-Control-Allow-Origin:*をヘッダーとして返せばいいことはわかるのですが、YunのWebサーバーを書き換えることはできるのかな。。。と。

ダメ元で以下のようにYunのスケッチを書き換えてみたんですね。すると。。。うまくいくじゃん。。。

<抜粋>(元々はYunのBridgeサンプルです)

    if (command == "brightness") {
      int sensorValue = analogRead(A0);

      //修正前
      //client.print(sensorValue);
      
      //修正後:CORS問題に対応するため
      client.println("Status: 200");
      client.println("Content-type: text/plain");
      client.println("Access-Control-Allow-Origin: *");
      client.println();
      client.print(sensorValue);
    }

本題

Yunのプログラム(サーバー)は以下です(Bridge/TemperatureWebPanelをもとに修正したものです)

#include <Bridge.h>
#include <BridgeServer.h>
#include <BridgeClient.h>

BridgeServer server;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);

  pinMode(A0, INPUT);

  server.listenOnLocalhost();
  server.begin();
}

void loop() {
  BridgeClient client = server.accept();

  if (client) {
    String command = client.readString();
    command.trim();

    if (command == "brightness") {
      int sensorValue = analogRead(A0);

      //修正前
      //client.print(sensorValue);
      
      //修正後:CORS問題に対応するため
      client.println("Status: 200");
      client.println("Content-type: text/plain");
      client.println("Access-Control-Allow-Origin: *");
      client.println();
      client.print(sensorValue);
    }

    client.stop();
  }

  delay(50); // Poll every 50ms
}


p5.jsのプログラム(クライアント)は以下です。3秒ごとYunにアクセスして値を取得します。YunのアドレスはBonjourに対応していればarduino.localで解決できるはずですが、私のAndroidでは解決エラーになりましたので直で入れています。たぶん、これも解決方法があるのだと思いますが。。。とりあえず本題ではないので。

var b = 0;

function setup() {
  createCanvas(400, 400);
  fill(0);
  textSize(64);
}

function draw() {
  background(255);
  text(b, 0, 100);
  if (second() % 3 == 0) {
    getDataFromYun();
  }
}

function getDataFromYun() {
  var url = 'http://192.168.2.17/arduino/brightness';
  httpGet(url, "text", false, function(res) {
    b = res;
    console.log(b);
  });
}

実行結果は以下のような感じです。p5.jsをMacで動作させた状態です。もちろん、Androidのブラウザで動作させれば結果は同様になります。具体的には、例えば、Mac上などでWebサーバーを起動し、ドキュメントルートにp5.jsのファイルをおきます。そこにAndroidのブラウザでアクセスにいけばいいわけです。

f:id:ke_takahashi:20171116211747j:plain

卒業研究発表会までの日数を表示するアプリ

codepen.io

JS便利です。

つくると出展

11/11-12に福岡市科学館で開催された「つくるとVol.4」に出展させてもらいました。今、自宅に戻ったところです。ホットなうちに振り返っておきたいと思います。

つくるとの存在を知ったのは今年の夏でした。

つくると、娘と遊んできました。 - memorandums

ぜひ、今度は出展したいと思ったのがきっかけでした。

何度もここで紹介してきましたが、出展したのは以下です。Splashooter2017ですが、展示名は「スプラ○ゥーンのようなゲーム」でした。

www.youtube.com

これは10月に開催されたつくるけぇに出展したものと基本は同じなのですが、せっかくなので1つくらいは新しいことにチャレンジしようと思い、参加者に描いてもらった図をスキャナーで読み取りステージにしようと取り組んでみました。

つくるけぇ出展 - memorandums

新しい科学館には行ったことがなかったのですが、六本松駅を降りるとすぐに案内板が見えたので迷わずにつきました。

f:id:ke_takahashi:20171112184206j:plain

で、これが福岡市科学館が入ったビルですね。写真でみる以上にかっこよかった。

f:id:ke_takahashi:20171112184231j:plain

おしゃれなツタヤ。

f:id:ke_takahashi:20171112184308j:plain

で、会場につきおもむろに準備したのですが、アミッドスクリーンが思いの外眩しくて。。。使用を断念しました。壁面が黒でいい感じでしたので、そこに投影するようにしました。

f:id:ke_takahashi:20171112184402j:plain

オープニング。

f:id:ke_takahashi:20171112184545j:plain

お隣にはR2-D2を作った方が!?すごい。愛を感じます。

f:id:ke_takahashi:20171112184648j:plain

本番では、主に子供が遊んでくれて弱点(プレイのしにくさ)もわかってきました。

f:id:ke_takahashi:20171112184743j:plain

本日、2日目には、その弱点を改善してきました。自分が発射した弾に当たって死んでしまうのは意外のようで、それを説明するよりは当たらなくした方がいいという判断でした。

www.youtube.com

これは結果的にうまく行ったようでした。ただ。。。ずーっと遊んでくれていた子からは「前のバージョンの方が難しくて面白かった」と言われました。なかなか難しいですね。。。

あと、手書きでステージが作れるのはよかったようです。「つくると」ですからね。ただ、ゲームをしてもらっておしまいではちょっともったいない。市販のゲームでも自分で作れるんだよ(多少しょぼいけど)。。。ということを示したかった。。。

サービスを提供する側であれば面白さの追求という使命はあるかもしれませんが、やはり教育によって未来ある子供が新しい視点をもつ一つのきっかけになれば。。。ということも「つくると」の趣旨ではないかと思うのです。

そのためには、説明してどうこうなる問題ではないかもしれませんが、次のステップも示さないと、ただのゲームで終わってしまいます。もう一歩踏み込みたい、そういう場を持ちたいですね。

こういうイベントをただ見に行くだけでも刺激はありますが、出展する側で参加すると出展者の方と知り合いになれます。これはとても魅力的です。自分が作ったものをミテミテーという動機は大切ですが、やはり回を重ねるともう少し深い刺激も欲しくなるものです。

対象は違うものでも、やはり、モノづくりをやっている人はそれなりの工夫をしていて身につけているものです。そういう人と知り合いになることで自分も刺激を受けさらに次のステップに進もうという気がおきてきます。

あ、あと、うちの学生さんが2日間を通して手伝いにきてくれました。こういうイベントに参加するようになってから、講義やゼミなどで情報を流すのですが、なかなか積極的に関わろうとしてくれる学生さんはいませんでした。正直、嬉しかったです。彼らも本イベントで様々な体験をしたと思います。ぜひ、次に繋げて欲しいなぁ。。。と思います。

最後に、本イベントは今回で4回目になるそうです。今年の夏、とある学会の実行委員をさせてもらいました。委員長がほとんどすべてをされていたので、私自身は多くは関わりませんでしたが、大変さを間接的に知ることができました。つくるとを開催するための準備はさぞかし大変だろうと思います。本当にお疲れ様でした。今後もぜひ続けて欲しいと思います。今のモノづくりを支える世代、次のモノづくりを支える世代をフクオカから。

スキャンした画像ファイルのファイル名を固定する方法

タイトルだけではよくわからないですね。。。

明日から開催のイベントに向けて、ゲームを少しだけ改造していました。

改造のポイントはステージ?を自分で描いて作れるようにする、ということです。

来場者に紙を配り、そこにペンで以下のような感じで書き込んでもらいます。

f:id:ke_takahashi:20171110085925j:plain

すると、以下のような感じでステージ上に障害物が現れる。。。という感じです。

f:id:ke_takahashi:20171110090052j:plain

元ネタのスプラトゥーンでは様々なステージが用意されていますので、それを少しでも似たような感じで、かつ、面白くできないかな。。。というトライです。

ここ1週間の空き時間で作ってきまして、昨日、やっと動作して学生さん達にデモプレイしてもらったところでした。

で、現場では記入してもらった紙をスキャンする必要があるのですが、研究室にあるScanSnapは意外と重量があり、徒歩で搬入する予定のためできるだけ重量を軽くしたいと昨晩気づきました。。。

スマホアプリを試しましたが照明条件によっては明るさがかわり(濃淡が変わると2値化する閾値が変わりメンドー)、いろいろ思案した結果、軽量なイメージスキャナを購入することにしました。業者発注している時間がないので、個人買いです。

探すとヨドバシカメラに在庫がありました。

A4モバイルスキャナー DS-30|製品情報|エプソン

軽量なら他でも使えるかもしれないので。。。ということでポチり、帰宅経路にあるヨドバシカメラによって受け取りました。

で、夕食後、Macに接続してみると。。。想定した動作をしない。。。

以前、来場者に描いてもらい立体化する作品を作ったことがあり、そのときにはscanliineとsipsというコマンドを利用していました。

scanline – Command-line Document Scanning for Mac OS X – Klepopotamus

いろいろと状況を変えてテストしましたがダメ。。。深夜1時くらいになり、諦めました。

結局、付属CDについていたEPSONのスキャンアプリでスキャンすることにしました(EPSONのサイトで最新のアプリをダウンロードしていれたものの動作しなかった。。。PDFは読めるけどJPEGは途中でアウト、テストしてないんじゃないかな?)

f:id:ke_takahashi:20171110091024p:plain

ここからやっと本題。。。

このスキャンアプリはPDFはもちろんJPEGの生成などもできます。おかしな動作は全くありません。信頼性が高い。

ただ。。。スキャンした画像ファイルのファイル名を固定化することができません。私はスキャンしたら例えば、a.jpgのファイル名で指定したフォルダに保存して上書きし続けて欲しい。。。という特殊な使い方になります。これができない。。。

で、解決策として、あまりかっこよくありませんが、定期的にフォルダを監視して、スキャンアプリが生成する連番ファイル名っぽいのを見つけたら、固定的なファイル名に置き換えるというスクリプトをバックグラウンドで動かすことにした、ということです。

スクリプトはいたって簡単。rubyはこういうときに楽ですね。。。

while true
  Dir.glob("a_*jpg") {|f|
    puts f + " replaced"
    File.delete("a.jpg")
    File.rename(f, "a.jpg")
  }
  sleep 3
end

まだ、やらなければならないことがありますが。。。明日を無事迎えられたら。。。と思います。

私にとって、大学とは様々な出会い自分を磨く場所だった

動機

今週末(土日)、福岡市で以下のイベントがあります。

つくると!だれでも参加できるものづくり博覧祭 vol.4

今年10月にリニューアルオープンした福岡市科学館で開催されます。

このイベント開催を知ってすぐに出展を申し込みました。

少し前に東広島で開催されたつくるけぇは距離があったので一人で行きました(車に乗せて一緒にいけばいいのでしょうけど事故があったり保障とか考えると面倒なので。。。)。

今回は地元福岡での開催ですので、もし、こういうのに興味があって手伝ってくれる学生さんがいたらいいなと思い2、3週間前から以下の貼り紙をしました。

f:id:ke_takahashi:20171109133535j:plain

下の部分を拡大したのが以下です。

f:id:ke_takahashi:20171109134156p:plain

先日の織田廣喜美術館との共同イベントで手伝ってくれた学生さんに声かけする手もあったのですが、これまで興味があったけど参加する機会がなかった学生さんがいれば。。。と思いひっそり掲示しました。反応がないので授業でも勧誘してみました。

結果は。。。ゼロ。

私が学生でもこの話があってものらなかったのでしょうね。。。自分自身を振り返っても、学生のときの価値観は今とは違っていました。世の中も自分のやりたいことも何も見えていなかった。

本題

上記のようなことがあり、大学にいくってどういうことだろう(だったんだろう)と自分自身の体験を振り返ってみました。

学部の頃は夜間だったので、昼間はバイト(1年の頃は宅配、デパート、スーパー、海水浴場などで、2年以降は大学の電算機センター)していました。友達の多くは同じ高校から進学した友達でした。

高校生活は帰宅部で、いま振り返っても本当に何もしなかった時代でした(人生で最も後悔している時期)。通学時間が長く、体調不良(おなか)で精神的にも参ってました。それでも唯一の思い出は文化祭にバンドメンバー(キーボード)として参加したことでした。

大学で、少しは自分自身で自分を変えられたと実感したことは、軽音部への入部でした。確か1年の後半か2年くらいだったと思います。同じ学科でギターをやっている子に「入りたい」と伝えて入れてもらいました。それがなかったら出会わなかった人がたくさんいます。やらなかったこともたくさんあったと思います。詳細は省略。

当時、何を思って入部したいと行動したのか自分でも思い出せませんが、自分で自分の道を選択した一つの重要な転機だったように思います。他人からすればどうでもいいことと思いますが。その後、大学院に進学し、先生、友人、知人に会いました。

私の話はこのくらいにして。このエントリーで何がいいたいか?

産まれて半世紀になろうとしているオヤジですが、私にとって大学にいくということは何だったか?がんばって文字にすると。。。

大学にいくことで、様々な人と出会い、その出会いによって自分の価値観に影響があり、その影響が様々な行動を促し行動によって様々な体験ができ、その体験によって自分の価値観がまた影響を受ける、ことができた時代でした。

図にすると以下のような感じです。この図のプロセスは一言でいえば「自分磨く」ということなのだと思います。ただ、磨くって後々になってみないとわからないですね。どうすればいいのか?って。

f:id:ke_takahashi:20171109140520p:plain

大学で経験したことのすべては「人との出会い」から始まっているんですね。。。つまり、「自分磨く」=「人に出会って刺激を受ける」なのだと思います。

もちろん、社会人になってからの方が学生のときより真剣に学び・悩み・考え・生きてきたし、上司・チーム・同期・クライアント・パートーナーなどから様々な刺激を受けられました。

それでも、大学での体験は特別だったと感じています。

大学での生活は高校以前までと比べると自由度も行動範囲も広がります。そこで体験したことは私にとって初めてのことが多かったので深く記憶に残っているのだと思いますが。。。私の場合はその体験が大学だったのだと。

私自身は大学で自分にとっていい経験ができた時期だったので、ぜひ学生さんにもその人なりの刺激をうけて巣立って欲しい。。。と考えていますが、人それぞれでしょうから単なる価値観のお仕着せと言われればそれまでと思いますし、そうだなと思うところもあります。

しかし、日々、若く未来ある学生さんと関わる機会がある身として願うことは、

もし、今の自分を変えたいという気持ちが少しでもあるなら、新しい人と出会う機会を自ら作り出す勇気を持って欲しい

です。

そのため、私ができることは、とにかく日常とは違う体験ができるような活動に関わり、誘い続けていくことかな。。。と思います。

以上です。