NEGAKULIFE

ネ学生のQoLを上げるブログ

ネ学生のQoLを上げるブログ

課題が終わらないのは仕様

SD攻略決死隊 - 意地でも定時に帰りたい #1

先週(2016/5/12)のSD、ヤバかったですね。死屍累々というかなんというかって感じでした。
担当教諭が変わったのもあり、相当問題が難しくなったなーと感じました。

今回の課題

今回は二問出題されました。皆さんはどこまで進めましたか?

  • TurtleFrameクラスを拡張して、以下に示すような MyTurtleFrame クラスを作成しなさい。
  • java.util.Listインターフェースを実装するクラスMyListを定義せよ。

しょっぱなの出題から「???」ってなった人も多いと思います。
と、言うか、課題1のほうが難しいと思います。(個人の感想)

出題の分析

簡単だと言った課題2から考えてみます。
今回は、個人の適当な知見に基いて書いているので、間違え等多々あると思います。許してください。

課題2

java.util.Listインターフェースって言われて意味が分からなかったら、恐らく勉強不足です。
意味がある程度分かるのであれば、この課題はただの作業ゲーと化します。 APIリファレンスを読んで、必要な物をガリガリ実装していきましょう。
ここで詰まるのであれば、それはJavaの「書き方」を知らないだけです。勉強すればバッチリ取り戻せます。多分。

課題1

地味に厄介なのがこいつです。厄介な理由は「今までとプログラムの性質が異なるから」であると考えます。
ここで詰まるのは、ある意味当然です。これはJavaの「うまい使い方」を知らないだけです。だけって言っても知らないんだから無理です。つらい。

今までのプログラミングは、「何かに指示を出す」という処理が中心でした。 f:id:ne5oku:20160517005826p:plain

しかし、今回のプログラミングは「何かあった時に指示を出す」というある意味受動的な処理を行う必要があります。 f:id:ne5oku:20160517010138p:plain

このようなプログラミングは、実はしてきませんでした(厳密にはProcessingでやったかもしれない)。

このようなことを実現可能にするのが「イベント」という考え方です。

イベントってなんだ

Minecraftのプログラミングでもめちゃくちゃ出てきます(が故に知っているのですが)。

このようなイメージを考えてください。 f:id:ne5oku:20160517011112p:plain

「ピンポーンという音が聞こえたので、亀に指示を出す。」
と言った感じです。

この時の、「ピンポーン」という音が「イベント」です。キッカケみたいなものです。
「ピンポーン」という「イベント」が発生したことを知るのは「リスナ」です。
「リスナ」は、適当な処理を投げます。

「リスナ」というのは、「どんなイベントに対して反応するか」というのが重要です。
留守番を頼まれる人がリスナだとすると、その人に「郵便が来たら出て受け取って」「新聞勧誘が来たらぶん殴って」と色々とするべきことを頼みます。
これのことを「リスナに登録する」とかいいます。

イベント風に考える前にコードを追ってみる

最初に提示されているソースコードには、予め「一つ」だけの処理が書かれています。これが非常にいじわるです。
11行目にてnewされた「add」を追いかけてみましょう。

  1. 15行目で「addActionListner」が呼び出される
    ↑この処理はaddにしかされてない!いじわる
  2. 17行目で「setActionCommand」が呼び出される
    ↑この処理は普通に4つ分ある
  3. 21行目で「turtles」というJMenu(8行目で作られたヤツ)に追加される →そして31行目でコマンドをキャッチして処理を実行している。

とてもゴチャゴチャしていますが、一つの処理に着目していると、これだけのことしかしていません。
つまり、例えばDelete Headを追加したいとすると、以下のような作業が必要です

  1. 12行目でnewされたdelHeadに、addActionListnerを呼び出す
  2. setActionCommandはすでにもう呼び出されてる(なんでだよって感じ)
  3. 8行目で作られたJMenuのturtlesにdelHeadをぶち込む(けどもうすでにされてる)
  4. actionPerfomedメソッド(29行目)の中の、if文に分岐を追加して、実際の処理を書く

イベント風に理解しておく

ここまで書いて気付いたんですけど、今回あまりイベント関係なかったですね(クソ)
せっかく書いたので、イベントについても考えておきます。

ソースコード内に「イベント」というのが登場するのは、29行目の「actionPerfomedメソッド」の引数内です。
「ActionEvent」というのが見えると思います。

つまり、actionPerfomedメソッドは「なんか物事が起きた時に呼ばれるメソッド」であると言える訳です(詳しくは割愛)
この「なんか物事が起きた」というのはすげー大雑把です。大雑把すぎるのでもう少し細く見る必要があります。

なので、今回は「ActionCommand」という物を上手く利用しています。
先ほどの、コードを追った時に「setActionCommand」という物があったと思います。
これを設定してあげることで、そのボタンが押された時に「今何か物事が起きたっしょ?実はそれ"addTurtle"なんすよw」みたいな情報を持たせることが出来ます。

後は、actionPerfomedメソッド内で「なんか物事起きたのは分かったけど、結局それってなんなん?」って処理をif文で書いてあげれば万事オッケーという訳です。

まとめ

  • いじわるかよ~~~
  • 課題1はむずかしい
  • 課題2はめんどくさい

最後の方、かなり投げやりですが飽きただけです。

Atom+Markdownで授業ノートを取ってQoL爆上げ

初回のまともなネタは、前々から誰かに紹介したかった奴です。

授業ノートって何で取ります?

ネ学では、入学した後にMacBookが配られ、授業中でも合法的にパソコンを開くことが出来、ノートなどのメモ書きをパソコンで取ることも多いと思います。

その時に、どのようにしてメモを取りますか?

例えば、Microsoft Wordを使って……標準のメモ帳を使って……

Wordを使ってると「書式でタイトルかえるのとか面倒くさい!!!!」 メモ帳を使ってると「どれがタイトルだかわかんねえ!!!!」 みたいな感じになりませんかね。そんな人に朗報(?)

Markdownという神書式があります。

Markdownとは?

定義的な話

(どうでもいい事なので必要ない人は読み飛ばしてください)

Markdown(マークダウン)は、文書を記述するための軽量マークアップ言語のひとつである。本来はプレーンテキスト形式で手軽に書いた文書からHTMLを生成するために開発されたものである。 ― Wikipedia (Markdown)

これだけ見ても「???」って感じですね。どうやら、元々は「マークアップ言語」のようです。
マーク「アップ」言語なのに、マーク「ダウン」っていうの、最高におしゃれですよね。

マークアップ言語とは?

Webを作る時に使うHTMLが代表例で、「ただの文字列に、意味を持たせる」のが元々の出発点です。
例えば、Webサイトを作る時に「ここは大きい文字で見出しにして…」と、見た目上の意味をもたせたりすることが出来ます。
後は、少しむずかしいXMLのようなものだと「ここの文字列にはXXXXというタグをつけて…」と、データ上の意味をもたせることも出来ます。
(これは恐らく一年次のデジデで習います)

何が便利なの?

何はともあれ、書きやすいのが利点です。このブログ記事もすべてMarkdown記法を利用して書いています。
以下に、僕がよく使う記法を示しておきます。見てわかると思いますが、流れるように書くことができるのでとてもスピーディ! 詳細の記法は「markdown 記法」などで各自調べてください。

書いてみた
# 見出し1
## 見出し2
### 見出し3… あとはわかるね?

- リスト
- 構造も
- いける


1. 数字も
1. 空気よんで
1. くれる

ぶんしょうも**ふとじ**にできるし
>いんようもできる

ちょっと待って、これだけ書いてもただの「意味不明な」文字列。 真価を発揮するのはここからです。

エディタはAtomでよい

先述したのは「Markdownの書き方」に過ぎません。これだけ見せられても意味不明です。
つまり、先ほど書いた「コード」を「空気読んで表示してくれる」ツールが必要になります。

そこで、エディタ(文字を書いたりするソフト)の紹介です。

Atom 公式サイト atom.io

公式謳い文句は「A hackable text editor for the 21st Century」
日本語にするなら「21世紀のクッソ便利なテキストエディタ(適当)」

詳しいことは調べて貰ったほうが色々情報が出ると思います。
描画する時に少しバグがあったりと、環境によっては少し使いづらいと感じるかもしれません。
僕は便利すぎるのでこいつをだましだまし使ってます。多分いつか治る。

Atomを実際に使ってみる

英語が鬱陶しい人は適当に調べて日本語化してください。本質はそこでは無いです。

とりあえず使ってみる

メニューから、新規ファイルを作成してみましょう。なんか打ち込めそうな画面が出てきます。
ここにテキストをガンガン書いていけばよい訳です。ただのメモ帳です。
f:id:ne5oku:20160515123446p:plain

これだと、さっきと何も状況は変わりません。そこで、メニューの「Package -> Markdown Preview -> Toggle Preview」をおしてみましょう。
f:id:ne5oku:20160515123615p:plain

はい。神。

ちなみに、保存する時に、「ファイル名.md」(拡張をmd)にすると、Atom先生が「あ、こいつMarkdownなんすねw」って言って色分けしてくれます。 f:id:ne5oku:20160515123748p:plain

いたれりつくせりかよ~~~↑

まとめ

  • Atomは神
  • Markdownは便利
  • 授業がタイピングゲームに早変わり

ブログを開設してみました

めちゃくちゃいきなりですが、ブログを開設してみました。

タイトルは「ネ学生のQoLを上げるブログ」。

クオリティ・オブ・ライフ(英: quality of life、QOL)とは、一般に、ひとりひとりの人生の内容の質や社会的にみた生活の質のことを指し、つまりある人がどれだけ人間らしい生活や自分らしい生活を送り、人生に幸福を見出しているか、ということを尺度としてとらえる概念である。

 - Wikipedia (クオリティ・オブ・ライフ)

 

一部の人からすると「それQiita*1で良くね?」って感じなのですが、その通りです。

あえて、ネ学生を対象層とした記事を書くことで、ローカルに情報を共有できたら良いかなと思います。

 


 んで誰?

某大学ネットワーク情報学部の、所謂「NE27」に属する人間です。

二年次は、基礎演習にSDを取り、応用演習にNSを取る予定です。

 

高校時代からMinecraftが大好きで、マルチサーバーの運営・開発などをしていました。

その事もあって、そこそこのつよつよマンとして生きて(!)います。

 

サークルは、某大学電子計算機研究会に所属しています。

実は、二年次になって(今年になって)からの参加です。もし同じサークルの人がいたら、よろしくお願いします。

 

バイトは、塾講師をしています(心底やめたいですが)。

塾という場で培った(?)能力も活かしていけたらなーと思います。

 

履修中の授業とかは後述します。

 

体裁と目的

このブログは、「ただのネ学生が授業を受けてて疑問に思った事とかをただただ書いていく」という体で運営していきたいと思います。

「○○の授業でxxって出てきたけど、これってこういうことだよね」という解説的な記事を中心に記事を投稿しようかとは思っています。

 

あくまで「個人の日記」なので、不都合な点とかがあって怒られたら消え去ると思います。後飽きても消えます。

 

こういう人に見てもらいたい

漠然と「プログラム」というものを知りたいと思っているのに、学校の授業が難しすぎる!っていう人から、基礎演習とかの発展的なぶっ飛んだ課題についていけない!って人向けに書きたいです。

 

こんな適当に課題を消化する毎日を過ごしていたら、QoLSAN値もガリガリ減っていくだけ!!どうせならなんか身につけようっていうノリで行きます。

方向性と運用

基本的に、中の人が適当にテーマを見つけて暇な時にダラダラ記事をまとめるという形態になると思いますが、質問やテーマ案などは随時受け付けています。「あの授業のここがマジで分からん死ぬ」とかそういう救済系のテーマでもなんでも良いです。知っている限りの事で、色々書いてみたいと思います。ぜひ!!

 


 中の人のとっている授業と、扱えそうな内容

とっている授業(単位が取れるとは言っていない)

特に得意そうな分野

  • Minecraft全般
    MinecraftというゲームはJavaで書かれているのでJava全般の話題や、ゲームのプログラミングってどんなもんなの?って事などなど
  • Web系
    →HTML、CSSはもちろん、JavaScriptあまり好きじゃないです)とか、PHPなどの言語
  • オブジェクト指向
    →完全にマスターした訳では無いですが、さわりは理解したつもりでいます
  • プログラミング系全般
    Java、Kotlin、PHPならそこそこ分かります。Cは一年次にやったので分かりますが使いたくないです

お茶を濁したい分野

  • データベース
    →NoSQLばっか使ってるので、正直正規化とか言われても^v^?って感じです。ザコかよ
  • 資格系
    →ぼくはなんのしかくももってないのできかないでください
  • アルゴリズム
    →プログラミングとアルゴリズミングは違うんだと信じてます

 


 

 こんな感じで、よく分からないノリで色々書いていきたいと思います。

質問など色々ありましたら、コメントもしくはTwitter「@ne5oku」までお願いします。

 

あとがき

 

 

 

*1:Qiita - プログラミングに関する知識を記録・共有するためのサービス。個人ブログの情報系特化版みたいな奴。