2017年4月12日水曜日

[指導に使えたらいいなノート] 継承するとどうなるのかのJavaでのサンプル

extends(super, override)とabstractとconstructorが混ざったコードについて質問されたのでそこらへんについて指導用ノートの作っておこう.

extendsは日本語だと継承と呼ばれている.
既にあるクラスの中身を受け継いで新しいクラスを作ることができる.

継承があるおかげで一定部分は同じ実装で,それに加えて何か新しい機能を付け加えることができる.
(継承を使わないとコピペでやらないといけなくなり,もともとあったものと自分が実装したものがわかりずらくなることが多い.)
どんな人が設計しても登場する機能は基本的な機能として元となるクラスに実装して,オリジナル機能は継承先で実装するって状況で使われているのをよく見る気がする.

(1)継承先でも継承元のクラスに実装されたものが利用できる例

基本的に継承先と継承元のクラスの動作を確認するためにサンプルには,
A. mainを記述したコード
B. 継承元のクラスのコード
C. 継承先のクラスのコード
がそれぞれ含まれている.

mainを記述したコード
public class sampleMain{

    public static void main(String[] argv){
        sampleBetterCalculator sampleBetterCalc = new sampleBetterCalculator();
        sampleCalculator sampleCalc = new sampleCalculator();
       
        int result = sampleBetterCalc.add(1,4);
        int result2 = sampleCalc.add(1,4);
       
        System.out.println(result);
        System.out.println(result2);
    }
}

継承元のクラス(SampleCalculator)のコード

public class sampleCalculator{

    //aとbを足す
    public int add(int a, int b){
        return a+b;
    }
   
    //aからbを引く
    public int minus(int a, int b){
        return a-b;
    }
   
    //aとbを掛ける
    public int multiply(int a,int b){
        return a*b;
    }
   
    //aをbで割る
    public int devide(int a,int b){
        return a/b;
    }
   
}
 
継承先のクラス(SampleBetterCalculator)のコード
public class sampleBetterCalculator extends sampleCalculator{

    //3つの数の平均を計算する
    public int average3(int a,int b,int c){
        return (a+b+c)/3;
    }
   
    //角度を入れるとsinxが返る
    public double sinx(double x){
        return Math.sin(Math.toRadians(x));
    }
   
}

このコードを実行するとどちらのクラスのインスタンスもしっかりとaddメソッドを実行できていることがわかる.

図1: 例(1)のコンパイルと実行の結果
(2)継承先でオーバーライドしてみる
オーバーライドは継承先で継承元にあるメソッドを再定義(改変?)することである.

継承元のコードはそのままにmainがあるコードと継承先のコードを以下のように書き換える.

mainを記述したコード

 public class sampleMain{

    public static void main(String[] argv){
        sampleBetterCalculator sampleBetterCalc = new sampleBetterCalculator();
        sampleCalculator sampleCalc = new sampleCalculator();
        
        int result = sampleBetterCalc.minus(1,4);
        int result2 = sampleCalc.minus(1,4);
        
        System.out.println(result);
        System.out.println(result2);
    }
}

継承先のコード
public class sampleBetterCalculator extends sampleCalculator{

    //3つの数の平均を計算する
    public int average3(int a,int b,int c){
        return (a+b+c)/3;
    }
   
    //角度を入れるとsinxが返る
    public double sinx(double x){
        return Math.sin(Math.toRadians(x));
    }
   
    @Override
    public int minus(int a,int b){
        return b-a; //bからaを引くに変更
    }
   
}




図2: 例(2)を実行した結果


(3) 継承先で追加したものは(当然だが)継承元では呼び出せない
はそのうち追加



------
たまたま計算機能を継承して更に計算機能をリッチにしていく例をつくったので,これを利用してJavaFXを用いたGUI電卓のシリーズを書いてくれと言われたのでそのうちやるかもしれません...





2017年3月29日水曜日

[実装メモ]Javaにおける正規表現確かめようプログラムとアホな自分のメモ

Javaで正規表現を使うには,PatternクラスとMatcherクラスを使うと良い.
importするのは,java.util.regexクラスのPatternとMatcherの2つ.

実装中のシステムでは,行単位でjavaのソースコードがどんな命令か知りたいのでそのための正規表現を作成中.

以前はString.matchesで適当にやっていたが,上記クラスを使ってしっかりやろうということで改装中である.

コードは以下のもの.

import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class regex{

    public static void main(String[] argv){
        String typePattern = "(int|String|double|float)"; //必要なものを適宜増やす
        String testregex=".*\\((("+typePattern+"\\s\\w*)(,"+typePattern+"\\s\\w*)*)*\\)\\{?";
        String teststr="public static void sum(String str,int max)";
        String teststr2="sum(a,b,c);";

        Pattern p = Pattern.compile(testregex);

        Matcher m = p.matcher(teststr);

        System.out.println("regex:" + testregex);
        System.out.println("String:" + teststr);
        System.out.println();
        System.out.println(m.matches());
        System.out.println(m.group());

    }

}

今更こんな正規表現を確認しながら苦労してるアホな自分の戒めメモ

----
Regular expression to match Java method definition first lineとか書いておいたら海外からも参照される可能性あがるんでしょうか?

2017年3月19日日曜日

[実装メモ] JavaFXのtextareaで文字をドラッグした際に背景色がつかないようにしたい場合

現在実装中のシステムでtextareaでドラッグしたときに文字の背景色が変わってほしくない場面が出たのでそれの対応策のメモ.

これを流用すると,ドラッグ時の文字の色と背景色が変えられます.

#linearea:focused{
 -fx-highlight-text-fill: black;
 -fx-highlight-fill: null;
}


#lineareaはtextareaのid
:focusedはそのエリアが選択状態のときのルールを記述しているというオプション
-fx-highlight-text-fillがドラッグ時の文字の色
-fx-highlight-fillがドラッグ時の背景の色

上の例では,ドラッグ時文字が黒,背景色がなしの設定になっています.



自前のテキストエディタなど作ってみたい人はぜひご参考にしてください.

2017年1月20日金曜日

Apple Watchが壊れたかと思った…

今日のかてきょ行くときにサイクリングのワークアウトをしようと起動したらなぜか距離と時速が増えない…

とりあえず帰りにもワークアウトアプリ使ってみたらGPSが使えないことを表すメッセージが.


図1: 平均速度の取得不可能を示すSS

図2: 合計距離を取得不可能を示すSS

現在はGPS周りのON/OFFを繰り返していたらGPSが利用できるようになりました.
ひとまずは動くようになったのでソフト側で何かあったと信じておこう…
GPSモジュールが壊れていませんように…
(また6002fエラーみたいによくわからんまま時が過ぎていくのかな)

2017年1月18日水曜日

昔Mac miniでやらかした(後編)


どうも,らいらいです.
この話結局直らなかったので,更新するのが嫌になって書いてませんでした←

結論からいうとこのMac miniは廃棄となり新しいMac miniがデスクに来ています.

そんで,こっから下には最後の悪あがきで何をしたか書いてあります.


6002fエラーが出たということでいろいろ調べてみた結果,HDDを外付け(扱い)にしてOSをインストールしてから内蔵にしないといけないとのこと.
当時閲覧したページは覚えていないけれども,先ほど調べたところどこでもドアジャンクというブログにも似たような趣向のことが書いてありました.
そこで私がしたことは,mac好きで有名な先生からfirewireケーブルを借りターゲットディスクモードで外付け扱いをして友人のmacからOSの再インストールをしました,
その結果OSの再インストールはうまく行うことはできました!

しかしながら,何かのはずみでメモリがイカれていたらしくそのまま廃棄処分となってしまいました…
アップルのサポートに行くより新しいの買ったほうがコスパいいし,スペックも上がるよねとの考えです.


そんな感じで集結していたMac mini騒動.
みなさんもコンピュータは優しく扱ってあげてくださいね.

----
2017/01/17現在
Appleの質問コミュニティで質問されている方がいますね.
それでも公式の解答はWeb上で見当たりませんが…

授業の価値は

昔書いたものその2
この頃少しエヴァを見直していたような…
これもM1の頃のかな?

今でも単位ゲットチャレンジ料という考え方は変わっておりません.
単位取れない≒講義で学べていないだと思うので…

----
英語の授業が日本人が自分だけで、中国人2人、モンゴル人1人でした。
なんか自分が中国に留学きたみたいでわくわくします。

さて、今日の話は先生によってはある種逆鱗に触れるかもしれない話。
巷ではよく、「講義90分1回3000円」とかっていう言葉が出回っていますが、だからなんだよっていう話です。


これは寝坊したりひきこもりになって授業に来なくなる学生に向けた言葉として新入学の時期になると出回ります。
1回休むだけでかーちゃんの稼いだ3000円が無駄に…とか煽るわけです。
(ネットはかーちゃんネタが大好き。しかし、この時点で自分で学費稼いでる人はどうなんのと小一時間(ry )

そんなふうに世間さんは煽るわけですが、わたしは知っているのです…
授業に漠然と出て単位を落としている学生を…

そこで、授業料という考えを捨てて、単位獲得チャレンジ料と考えてみたらどうでしょうか。
授業だけならお金を払わなくてももぐれる科目はもぐれます。

大学受験を突破し、お金を払うことによって生じる権利は、おおまかに
①該当科目の単位を合格すれば受け取ることができる
②規定単位数を取ることで学位がもらえる
③少人数生の授業やゼミに出られる(流石に人数少ないと外部の人はバレる)
④所属大学の支援が受けられる
といったところでしょうか。

もちろん、正規生でないとバレたらつまみ出される可能性もあるかもしれませんが、この4年間は見る限りそうとう年取っている人じゃなければ先生も気にせず授業を進めていきます。
そんなこと気にしてる暇があったら、その他大勢の正規生のために授業を進めたほうがいいのは自明なわけです。
というわけで、私は大学の大・中講義を受けることができるというのは授業料を払うことのメリットではないと考えています。
それに最近は出席だけしてても意味がないという考えが広まり、この授業で伝えたい知識や技能がついていれば合格するにという考え方の先生も増えています。
(実際コンピュータ・サイエンスは高い機材が必要じゃない限り、最近だと自前のPCで作業できちゃうからね。実験とかは学校にしか機材ないだろうからちゃんと出ろよ!)
授業にただ出るよりかシラバスを熟読して、何を身につけたらいいか考えるほうが有意義でかのようにも思えます。
もちろん、授業で話した内容がテストで出てくる先生もいるので、先生のリサーチをしっかりとしましょう。

というわけで、今日言いたいことのまとめ
①授業料は単位獲得チャレンジ料だと思え!漠然と授業出てても意味が無い!
②授業形態をしっかりと確認し、自分がどのようにその講義(とその先にある単位)と向き合っていったらいいか考えろ!
③単位落とした瞬間金とその講義に費やした時間が無駄になるぞ!(もちろん、不可でも多少学んでいるはずですが、やはり、授業料を払って卒業を目指している限り無駄になることのほうが多そう…)

というわけで、自分の立ち回りを考えて、みなさん楽しい大学生活を!

2017年1月17日火曜日

昔Mac miniでやらかした話(前編)


卒研執筆してるときに研究室のMac miniでやらかした時の話です.
hatena blogにまとめていた内容を再編集してます.
-------

こんにちは。
研究室のMac miniでやらかしました。

研究室に配属になったときに買ってもらったMac mini(mid2011かLate2011だった気がする)



Officeを一緒に頼み忘れたという理由でほぼ1年近く触ってない状態だったんだけど、院生にもなるし、研究室の運営状態がなんとなくわかってきたので、このMac miniにもWindowsをBootcampしよう!とこの間作業を開始したのです。

Bootcampをやるとどういう作業になるかは省くけど、Windows用のパーティションを作らなければならないわけです。

しかしながら…何故か初期化できないエラーが(泣)
何度やり直してもだめだし、3回目くらいにはカーネルパニックが!(´・ω・`)
もう心折れて、「あんまデータ入ってないし再セットアップするか…」となりリカバリーモードを起動。

それがこれからやらかす前兆だったのです…


リカバリーモードを試みた私。
Mac OS XのLionからはOSのリカバリー領域から起動するにはCommand+Rキーを押しながら起動すればいいらしい。
(Snow LeopardまではリカバリーUSBついてたし、Option押しながらの起動であった。)

押しながら起動すると無事にOS X ユーティリティを開くことができた。


  図1:OS Xユーティリティ(Apple公式ページより)

再インストールの方法を調べていると、このままOSのインストールをするとOSのおかしいところの修正をするだけらしい。
それじゃHDDフォーマットしてからやればいいんだと楽観視!!
フォーマットしてからOS Xをインストールすることに…

OS Xのインストール用のデータはネットからダウンロードするらしい。
大体30分程度とのこと。
ウィザードに従ってダウンロード完了待ちの状態に。
.
.
.
なんか「追加コンポーネントがダウンロードできません」とか出てきたんだけど…。
おかしいなと思いつつ再起動してやり直せ!と再起動してみた。
再度リカバリー領域からの起動を試みてみると…

 
図2:Apple 6002Fエラー

なんか道路標識みたいのが出てきたよ!困った\(^o^)/
ということで早速ぐぐってみることに。
.
.
.
公式サポートが出てこねぇよヽ(`Д´)ノウワァァァン!!
んで、英語のページとかを含めいろいろ調べてみた結果、空のHDDにMAC OS Xをクリーンインストールしようとするときに起こる症状らしい。
確かにHDDのフォーマットしたし、納得である。

ということで、この状態で心が折れたらいらいは、そっと電源を切り、現実逃避走った。
自分のMBAでなく、ほとんどデータの入っていないMac miniで良かったと安堵しながら。
しかし、これはMac mini復活大作戦のほんの序章に過ぎになかったのである。

--本編ここまで--
というわけで、卒研のファイルとかかてきょのファイルとかいろいろはいってる自分のMBAがこうならなくてほんとによかったと安心しております。
後編で書こうと思っているのですが、その日から怖くて研究室の余ってるHDDを頂いてTime Machineでバックアップ取っております。
ただ、外付けHDDでTime Machineを使うと常にケーブルを繋いでいないといけないという制約があるため、ついにこれを買いました!



詳細はAmazonのページで見てくださいな。
家に帰って無線LAN繋げるだけでバックアップしてくれるとかまじ心強い。


今回はここまで。
6002Fエラーで困ってる方が要らしたら是非情報交換しましょう。
やらかした(泣)後編ではMacならでは苦労みたいなものをうまく書けたらなと思います。

それではまたの機会に!

2017年1月1日日曜日

Mt.Fuji from Love Live Sunshine Holy Place

Hello, every one.
New year has already come in Japan.

This post shows nice a Mt. Fuji picture I took at Love Live Sunshine Holy Place on end of last year!

Hope every people will have a good year!!

みなさま,あけましておめでとうございます.
日本は年が明けましたね.

ラブライブサンシャインの聖地から取った富士山の写真を載せておきます.

みなさまにとっていい1年になりますように.