株式会社シベスピ 従業員ブログ

シベスピの社員ブログ。技術・想い・経験沢山書いていきます!

Javaで遊ぶ ~キーボードでドラムを鳴らそう~

こんにちは、SBです。
GWも終わってしまいましたね。皆さんはいかがお過ごしでしたでしょうか。
私は久しぶりに学生時代の友人と会ったり、格ゲーのイベントに行ったりとそれなりに充実したGWを送れました。

そんなGWでしたが、暇な日にふと思いついたので一つアプレットを作ってみました。
概要としては、キーボードでドラムを鳴らすお遊びアプレットです。(命名:KeyboarDrum)
また、このブログは初心者の方や、未経験の方もよく見ていただいているとのことなので、なるべくわかりやすいシンプルな内容にするというコンセプトで作ってみました。
といっても私もまだ初心者なんですけどね。
開発環境はEclipse 4.7 OxygenでJavaSE-1.8を使用しています。

import java.applet.Applet;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;

public class KeyboarDrum extends Applet implements KeyListener{
	//ドラムの音声ファイルパスとトリガーにするキーの列挙型
	public enum Drum{
		BassDrum("C:\\BD.wav",'f'),
		SnareDrum("C:\\SD.wav",'d'),
		HiHat("C:\\HH.wav",'j'),
		;

		private String path; //オーディオファイルのパス
		private char triggerKey; //トリガーにするキー

		private Drum(String path, char triggerKey) {
			this.path = path;
			this.triggerKey = triggerKey;
		}

		public String getPath(){
			return path;
		}
		public char getTriggerKey(){
			return triggerKey;
		}
	}

	@Override
	public void init(){
		addKeyListener(this);
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO 自動生成されたメソッド・スタブ
		//押したキーは何か取得する
		char key = e.getKeyChar();

		//どのキーが押されたか判定し、対応する音を再生する
		if (key == Drum.BassDrum.triggerKey){ //トリガーキーをfにしているので今回はfキーを押した場合
			//音を再生する
			playSound(Drum.BassDrum.path);
			//ついでにコンソールに出力してみる
			System.out.print("ドン");
		}else if(key == Drum.SnareDrum.triggerKey ){
			playSound(Drum.SnareDrum.path);
			System.out.print("タッ");
		}else if(key == Drum.HiHat.triggerKey){
			playSound(Drum.HiHat.path);
			System.out.print("チャ");
		}
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO 自動生成されたメソッド・スタブ
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO 自動生成されたメソッド・スタブ
	}

	public void playSound(String audioFilePath){
		AudioInputStream stream;
		try {
			//オーディオファイルの読み込み
			stream = AudioSystem.getAudioInputStream(new File((audioFilePath)));

			// オーディオ形式を取得
			AudioFormat format = stream.getFormat();

			// ライン情報を取得
			DataLine.Info info = new DataLine.Info(Clip.class, format);

			// 空のクリップを作成
			Clip clip = (Clip) AudioSystem.getLine(info);
			// クリップを開く
			clip.open(stream);
			//再生する
			clip.start();

			// ストリームを閉じる
			stream.close();
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
}

やっている内容は単純で、列挙型(enum)でドラムを鳴らすにあたっての情報を格納しておき、キーが押されたとき(keyTyped())どのキーを押したかによって再生処理(playSound())に渡す引数を決定し、対応している音を鳴らすという内容です。

それで、作ったのはいいんですが、はてなブログに直接動画を貼り付ける機能がいつの間にか廃止になってたみたいなので、GIFで動作を張っておきます(肝心の音が……)f:id:chivsp:20180506222359g:plain


初心者の方やこれから勉強しようと思っている未経験の方は、小難しいことは一旦置いておいて、まずはこういった楽しめるプログラムを作ってプログラミングの楽しさを知るのがいいんじゃないかなと思います。

以上、こういった遊びプログラムでモチベを上げつつ、逐次勉強をしていこうと思っているSBがお送りしました。

なまけるためにプログラミングをしよう

のっけからなにを言っているだコイツは……な感じですが、システム業界に入ってはや半年、自分がシステムを作る意味について考えたところ、そういうことなのかなぁ、と思うようになりました。

もともとは自分がこの業界へ入ろうと思ったきっかけというのも、
「手に職をつけたい!」
「知らない業界にチャレンジしてみたい!」
という思いがあったからなんですが、そもそも、なぜシステムを作るのかという意味について考えたことはありませんでした。

そんな疑問を持ったきっかけは、上司からの一言でした。
ある日ちまちまと受信メールを手動でフォルダ分けしていた私に、上司がフィルタ機能を使うよう助言してくれました。

「面倒くさいじゃん、それって。代わりにやってくれる機能があるんだから、使うべきだよ」

た、たしかに…
出勤した直後はなにかと細々した作業があるので、メールの整理はできれば排除したいタスクです。
限られた時間の中で最大限のパフォーマンスを発揮するために、使える機能は積極的に使っていくべきですよね。
(メールのフィルタリング機能くらい知っておけという話ですが)

上司にとっては何気なく言った一言かもしれませんが、その時の私はなぜか妙に感激してしまいました。

便利な機能も、だれかがプログラミングしたからあるんだよね。

普段から何気なく使っているソフトやアプリケーションも、作る必要があったから存在するわけです。
例えば給与計算をしてくれるソフトウェア。
給与の計算には多くのデータが必要であり、軽く数えてみるだけでも、
①基本給
②保険料
③各種税金
④諸手当
⑤残業代(割増賃金)
等々が必要です。
これをいちいち手入力していたら、1人の給与計算に30分かかるとして、従業員が100人いては50時間かかる計算です。
日数で丸2日です。その間休みなしです。それってめんどうです。特にデータを入力する時は、100人分のデータを繰り返し行っていくわけですから、いつかは集中力も途切れますし、飽きます。

しかし、それをプログラムにやらせれば、出社時間の入力だったり、簡単な動作だけであっという間に給与計算ができてしまいます。それに、人間がやるよりも正確です。
余った時間も別の作業に割くことができますし、効率も上がります。
システム万々歳!めんどうなことを機械にやらせることで人間は時間を有効に使うことができました。

普段の仕事も真剣に!丁寧に!でも、ラクを考えよう。

私たちがシステム開発をするのも、プログラミングを始めるのも、元を詰めれば「めんどうだなあ」から始まっていたことだと思います。
めんどうなことをプログラムが代わりに処理することで、その分だけ人間は別のことに頭を使えますし、そのめんどうがもっと普遍的なほど、それを解決するプログラムはそれだけ人間をラクさせます。

ある意味、この業界の醍醐味とは、素直さなんじゃないかなぁ、と。

めんどうなことをめんどうなままにせず、解決案を探る。
その為には、普段から行う作業について考える姿勢が必要なんじゃないかと。
この作業ってもっと簡単にできないのか。
こうすればもっとラクにすすめられるんじゃないか。
などですね。上記は日ごろから上司から言われ続けている事でして、ただ命じられたことを淡々とこなすようではモチベーションも上がらないし、ひょっとしたら仕事がつまらないと思うこともあるかもしれません。
普段の業務から「ラクしたい!」なんて考えを持つ人の方が、むしろ仕事の効率を上げられる可能性があるのかもしれません。

いろいろ意見はあるかと思いますが、ここ最近で私がすごく腑に落ちた考え方でした。

唐突ですが、漫画ドラえもんの1コマで、のび太の呟いた言葉がふと蘇ったので、これを締めの言葉とさせていただきます。

一生懸命のんびりしよう

ありがとうございました。

ぼくの転職活動

どうも、鈴木です。
もう春ですねぇ~。すごい暑い日があったり、春というより初夏を感じてます。
わたしは、シベスピに入社してもう8か月目となります。あっという間!
今日はわたしがシベスピに入社するにあたって、どうして転職したか、どんな転職活動をしたかをまとめたいなーと思い、書き起こしてみたいと思います。

転職を考えた理由

前の会社では、運用オペレーター(保守も少々)の仕事をしていました。
期間は、新人の頃から約4年間となります。
その仕事の中で、わたしが転職を考えた理由としては以下の2点だと思います。

 ■転職理由
  1.オペレーターの仕事よりもプログラム開発がしてみたかった。
  2.仕事も頑張ってみたが、会社から良い評価をしてもらえなかった。
  
こんな理由もあり、社会人5年目ということもあって、そろそろ転職してみようと思い立ったわけです。

転職活動はじめました

転職しようと思い立ってまず行ったことは、転職サイト巡りでした。
しかしながら、どの会社もイマイチ乗り気がせず、転職サイト巡りでは結局何もしませんでした。

そんなとき見つけたのが「エンエージェント」という会社の広告でした。
エンエージェントでは、転職の相談が無料でできるということで、とりあえず相談から始めてみると良いかな? と思い、相談の予約をして行ってみました。
転職相談では、転職理由やどんな会社を希望しているかを担当の方に話し、その内容に合った会社を紹介してもらいました。
なによりも転職相談に行って良かったと思ったのは、面接のセッティングをしてくれたり、面接の練習などをしてくれたことです。
何をしていけばいいかが良く分からなかったのですが、そんなわたしでも転職活動をスムーズに進めることができました。

そしてそして、その転職活動の中で出会ったのがシベスピでした。

シベスピに決めた理由

シベスピに決めた理由は、面接の内容でした。
他のIT企業も何社か受けましたが、オペレーター業務ばかりやっていた私は開発経験がないために、あまり話を聞いてもらえない会社もありました。
「IT企業なんて、やっぱりこんなもんだよなー」と思っていたところで受けたのが、シベスピの面接です。
シベスピの面接を受けてまず思ったことが「話しやすい」という事でした。
そもそもわたしは緊張しがちで、それが原因でうまく話ができないことが多いのですが、シベスピの面接では自分をかなりアピールできたと思います。

そんなこんなでシベスピ入社!
入社してみると、みんなで飲みに行ったり、遊びに行ったりが盛んでとても和気あいあいとしています。
やりたかったプログラム開発をさせて貰い、楽しく仕事しています。

転職活動としては大成功といった感じです!

【社内研修】SimpleCode100は面白い

こんにちは、仮想通貨が暴落して涙目のHirokiです。

今回はエンジニア向けの研修であるSimpleCode100を終えたので、その感想を書きたいと思います。

まずSimpleCode100とは何かというと、コードを書く力が不足している方を対象に、スキルアップをしようという目的のため、この研修の講師であるIskさんが作成してくれたものだそうです。

名前の通りプログラムの問題が100問あり、参加者が会社に集まり問題をひたすら解いていく研修となります。
言語はJavaC#を選べます。

私は、シベスピに入社するまでの間にブランクがかなりあったので、研修に参加をさせていただきました。

問題の内容はと言いますと、序盤は簡単な問題から始まり、加減乗除余、文字列操作、配列、ソートなど基礎的な内容でした。
中盤はバッチ、カレンダー、ファイル操作(CSV入出力、iniファイル入出力)など業務で活かせそうな問題が多数出ます。
終盤は、簡易ゲーム制作、クラス作成、ラムダ式、Listクラスの自作を行います。
最終問題は、10択から好きな問題を選ぶことが出来ます。

私の場合、序盤は問題なくスムーズに進みました。
中盤はカレンダー問題で躓き、かなり悩みました。
終盤の簡易ゲーム作成は、解くのが楽しく、過去に制作経験もあってか、サクサク進めました。
反面、ラムダ式とListクラス作成は頭を抱えました…。

ですが、悩んだときもIskさんが近くにいてくれるので、気軽に質問することができます。

質問に対する解答も、直接答えにつながるようなことを教えてくれるわけではなく、私がどんなロジックで作成しようとしているのかをヒアリングした上で、軌道修正をしてくれるような内容なため、自分で考える力をつけることが出来たと思います。

この研修を通じて学んだことは沢山ありますが、今後私自身の中で特に心がけようと思ったのは下記の2点です。

・プログラムを作成するときは、最小の機能から考えて作っていくこと。
・悩んだとき、詰まったときなどは、もう一度目的(ゴール)を再確認すること。

SimpleCode100は完了しましたが、業務で通用するかといったらそうでは無いので、今回の研修で学んだ事を活かし、さらなるスキルアップを目指してコツコツ勉強していこうと思います。
以上です。

保守をしてみて 〜相手の意図を理解する〜

こんにちは、上田です。
私は入社して間もなく1年になります。

最近現場が変わり、初めてシステム保守作業を行うことになりました。
他者(社)が書いたソースを読むこと、またそれを修正することが初めてなので、書いた人の意図が理解出来なかったり、直した際に想定とは違った結果になったりでとても大変です。
大変ですが、なぜこういった構成にしているのか、自分が書く場合だったらこうするというようなことを考えながらやるのが楽しくもあります。

保守作業を行ってみて、意図を理解することは本当に大変だし、逆に自分の意図を理解して貰うことも非常に難しいと最近痛感しています。
なぜこうしたいのかを伝える際に、勉強不足のため相手に違った意図で伝わってしまうことが何度かありました。
これを少しずつ減らしていくために自分は報告する際には大中小の順番で報告していくことを心がけるようにしています。(先輩からの受け売りです)

例えば、
A「頼んでいた仕事終わった?」
という質問に対し、
B「今〜の箇所が〜」
この場合、相手が求めているのは終わったかそうでないかの2択なので上記の回答は間違いですよね。

正しい回答としては
B「終わっています」or「終わっていません」(大)
の2択になると思います。
その次に終わっていないのであれば、理由を聞かれるはずなので、その質問に対して最初の
B「今〜の箇所が〜」(中)
B「そのために後1〜2時間程度かかります」(小)
といった回答をすることが、相手の求めてる物(意図)に対して正しい粒度になっていることだと思います。

文字で書くと簡単そうに見えるのですが、私は言い訳をしてしまいがちなので
すぐに「今〜の〜」のような回答をしてしまいます。
相手が求めてるものをすぐに理解出来るようになっていきたいです。(なります!)

私が相手の意図を理解出来るようになれば、相手にも私の意図を理解して貰いやすくなるのではないかな?と最近思うようになりました。

以上です。

デスクトップPCを攻略したい

こんにちは。
会社を良くする会広報チーム・社員ブログ投稿予約担当の松本です。
今月で社会人になって1年になりました。おのれ住民税。
そして入社して1年にもなります。環境も変わり、そのたびに仕事の内容も変わり、まだまだ慣れないことだらけ。
がんばっていきます╭( ・ㅂ・)و ̑̑ グッ !
本日お話するのは、そんな私の目下の悩みであるこちら。

デスクトップPCを攻略したい。

デスクトップのPCを使用するとき、卓上に置くものといえば、
①本体(下に置く場合もありますね)
②ディスプレイ
③キーボード
④マウス
このあたりになると思います。
特にこの③と④の関係が難しい。
キーボードをディスプレイに対して中央揃えにすると、テンキーの分だけ、タイプキーがやや左に寄ります。微妙に打ちにくい……。
だからってキーボードをずらすとマウスが遠くなります。これも若干使いにくい……。
最早左利きになるしか道はないのか……!

ベストポジションを探せ!

今すべきことは我慢ではなく、最適の環境を作ること!
というわけで、早速調査してみました。

フルキーボードで操作する場合

色々なサイトを調査して多かったのが、タイプキーのHもしくはBをディスプレイの中央になるように配置する方法。
実際においてみると……これは打ちやすい!
ほとんどの作業が腕を動かさずに済みますし、やはり中央揃えは偉大な存在です。
気になるのは、やはりマウスとの距離感ですね。次はこちらの配置を気にして調べてみましょう。

マウスを使う場合

テンキーの下(キーボードの手前)が操作しやすいという話を聞いたので、早速実践。
私が使用しているマウスは有線なので、少し再現に手間取りました。無線だと簡単にできそうですね。
肝心の使い心地ですが……ヴーンなるほど。という感じでした。
マウスを持った時に肘が90度になると楽だそうなので、もう少し試行錯誤してみたいと思います。

マウス一体型キーボードを買う

https://www.sanwa.co.jp/product/syohin.asp?code=SKB-TR03BK&utm_medium=Release&utm_campaign=SKB-TR03BK
かっこいい。
一体型は数あれど、手を奥と手前に動かすのは画期的ですね!いつか触ってみたい!

もう小さいキーボードを買う

これかなあ!!

大したことではないかもしれませんが

結局、Hキーをディスプレイの中央に揃えてから、マウスを動かしやすいように微調整することで一旦終了。
完全攻略とは至りませんでした。無念。

PCを使う仕事をしていなくても、触れる機会が多い方はたくさんいらっしゃると思います。
配置を考えるもよし、新しい物を買うのもよし、自分の作業がしやすいように環境を整えてみると、ちょっと調べるだけの作業も、格段に楽に、そして楽しくなるかもしれません!
よいPCライフを(*`・ω・)ゞ



[参考]
https://schoolsidejob.com/life/pc-posture/
⇒正しいパソコン姿勢について!今後のためにも意識していきたいですね。
https://mypage.otsuka-shokai.co.jp/contents/business-oyakudachi/pc-techo/2013/201301.html
⇒マウスの距離感と肘掛椅子の重要性を教えていただきました。肘掛……作るか……?

furuyaのプロフィール

自己紹介

出身地
神奈川県藤沢市
(海からは遠く山の中です。大学卒業まで実家暮らしでした。)

生年
1974年6月生まれ

経歴

 大学時代にWin95が発売し、パソコンブームに流され、あまり考えもせずにIT業界に決めました。
 何も知らない新人の頃に「なんでもやります!」と答えたところ、東北支社配属となり、仙台で4年、その後埼玉草加で4年生活しました。ようやく都内に戻り、何度か転職の後、体調を壊し、手術で心肺停止からの復活の後、2018年3月からシベスピでお世話になっております。

一言

最年長ですって、、、