第2回横浜へなちょこプログラミング勉強会に参加しました。



参加した皆様お疲れ様でした。
とても楽しかったです。



簡易的内容:
    教材→『プログラマの数学』
  • 自己紹介
  • 2チームにわかれて1章・2章についてディスカッション
  • 各チームディスカッションの内容を発表
  • 次回の方向性を話し合い
  • 後片付け・撤収
  • 飲み会
詳細:
第2回プログラマの数学読書会 議事録 - 横浜へなちょこプログラミング勉強会


所感

  • タイムテーブル
  • 自己紹介に時間が掛かり、出だしからタイムテーブル通り進まず。 時間制限を決めておかないとあっという間に時間が経過する。 今回のタイムテーブルならば1人1分で無理矢理終わらせないと収まらない。 でも、自己紹介って大事だと思う。1人当たりの時間配分をどうするかが課題かな。 自己紹介の補足は飲み会で解決だ。

  • ディスカッション
  • 2チームに分かれて行った。 自身がいたチームは各自の疑問点を取り上げ、有識者が説明・解説といった流れ。 他チームは自作プログラムの発表をメインで行っていたようで、ディスカッションの方法にこれだけ違いがでるのはおもしろいと感じたり。 自作プログラムの発表はどうやっていたのだろうか? 各自端末を持参してきて実施?自分はノートとか持っていないので行うとしたらどうしたものかと思ったり。

  • その他
  • 【会場】和室は良かった。かしこまった感じがなく和やか。まったりできた。
    【設備】会場の部屋が明るすぎてプロジェクタ見えないよ問題が発生→プロジェクタ自体今回はあまり活躍していない?
    ホワイトボードもう1つ欲しいよ問題が発生→各チームに1つ欲しい。

  • 飲み会
  • 技術的な話もくだらない話もできて楽しかった。あっという間に11時! 1次会で自分は撤収。 勉強のモチベーションが上がった。何か作らないと!

プログラマの数学2

第2章 論理

【まとめ】
命題:正しいか正しくないかを判断できる文
網羅的:もれがないこと
排他的:だぶりがないこと


  • ツール
    • ベン図:集合を表す。(命題が真になる集合と偽になる集合)
    • 真理値表:網羅的で排他的は分轄を表す。
    • カルノー図:全命題の真偽の組み合わせを2次元的に表す。


  • 論理は自然言語のあいまいさをなくす。
    • 仕様書のあいまいな表現を論理を用いて厳密且つ正確なものとする。
    • 仕様書のわかりにくい表現を論理を用いてシンプルなものに変換する。


  • 大きくて解きにくい問題は、網羅的で排他的な分轄によって小さくて解き易い問題に変換できる。
    (if文の場合、命題を真の場合と偽の場合に問題を分轄している。)



  • プログラムは論理的に作成されコンピュータは論理的に動く。プログラマは論理をよく理解し使いこなせる必要がある。

【所感】
元々数学は好きなのだが、論理は苦手。
今回苦手分野の克服に良い機会だと思い読んでみたが、なかなかしっくりこない。
きっと情報を整理しきれていないのと、論理を意識して考えることが経験不足なのだろう。
教えられるレベルじゃない。問題を提示とかできるレベルじゃない。
対策として論理を意識すること・頭で考えすぎないでちゃんと図を書くこと。
簡単に言えば経験を積むこと。
とりあえず今は「カルノー図すげー!ルールがシンプルになった!」とはしゃいでおく。

プログラマの数学1

第1章 ゼロの物語

【まとめ】
  • 数・問題が大きくなってくると解くのが難しくなり、間違いやすくなる。
  • 大きな問題は、小さな『まとまり』に分けて解くこと。
  • ゼロという何もないことを表す数字を使用することでルールをシンプルにできたりする。
難しい問題に出会ったら、分轄してルールを見出しましょう。


【プログラム】
基数変換の話しがあったので2進→10進のプログラムを作成してみた。
※正の整数しか対応していない。
0〜99までの10進の数値をtoStringで2進に変換、それをbintodecで10進に戻して比較。
Java初心者が作ってみたらこんな感じになった。



import java.lang.Math;

public class CardinalNumber {
private static int total;

public static void main(String arg[]) {
CardinalNumber cn = new CardinalNumber();
for (int i = 0; i < 100; i++) {
String bin = Integer.toString(i, 2);
total = 0;
cn.bintodec(bin);
System.out.println(bin + ":" + i + ":"
+ total + ":" + (i == total));
}

}

public void bintodec(String bin) {
int len = bin.length();
int len2 = len - 1;
for (int j = 0; j < len; j++, len2--) {
if (bin.charAt(j) == '1') {
total += Math.pow(2, len2);
}

}

}
}




【結果】
右から2進:10進:10進(bintodec):比較結果
0:0:0:true
1:1:1:true
10:2:2:true
・・・
1100001:97:97:true
1100010:98:98:true
1100011:99:99:true

Eclipse3ではじめるJavaフレームワーク入門3

『Eclipse3ではじめるJavaフレームワーク入門』のSpringの章,Seasar2の章,JSFの章,完了。


Springの章:Spring+Hibernate,Spring+Strutsについて学習
Seasar2の章:AOPについて学習
JSFの章:StrutsよりJSFの方が自分に合っていると感じた。


これでStruts2以外は目を通したことになるのだがStruts2は興味がわかないので現在はパスの方向。
よって、一通り目お通したので感想を書く。


【Eclipse3ではじめるJavaフレームワーク入門の感想】
本書の対象者はフレームワークにはどんなのがあるの?という人,色々フレームワークを触ってみたい人,各フレームワークの情報を収集するのがめんどくさい人,かと思う。
自分は上記全てに当てはまるのと書籍で勉強する方が捗るので購入。

    [悪い点]
  • 無理やりソースコードを使いまわしている感があり、意味あるの?と思った。機能単位で分けたほうが良い。
  • コードを一部抜粋する際に、クラス名やファイル名の記載がない。そのためパッと見で何のクラスであるかわからない不親切設計。
内容としてはフレームワークの入門というより、入門前のストレッチという所かと。
少し広く凄い浅くフレームワークについてわかります。
説明のボリュームはStrutsが1番、JSFが2番、残りは大して変わらずです。どのフレームワークの説明でも物足りなさは確実に出るでしょう。
あくまでも雰囲気を掴む為のものだと思います。
フレームワークの勉強を始める前、どれから手をつけるか悩んでいる場合に雰囲気を掴むという意味合いで本書を読んでみるのは良いかも。

Eclipse3ではじめるJavaフレームワーク入門2

『Eclipse3ではじめるJavaフレームワーク入門』のHibernateの章、完了。
しかし内容が余りにも薄かったのでHibernateのリファレンスの第1章もやった。
第2章、第3章と続けてやろうとも思ったがきりがないので一旦終了。


次はDIをやってみよう。Spring,Seasar2のどっちからやろうかな。
んで、区切りがついたのでフレームワークの勉強方法について整理してみる。


自分用フレームワーク勉強方法



【前提】web系開発経験なしの人(自分)対象


【手順】
まずはどんなフレームワークがあるのかを少しは把握しておきたい。
また、1つのフレームワークのみを扱っていると他のフレームワークと比較できずに利点や概念?を認識しにくいと思ったことから以下の手順とした。1と2、3と4は同時進行かな。
  1. 複数のフレームワークを取り上げ、全てを導入・動作確認する。(入門レベルまで)

    ※そもそも入門レベルってどのくらいだ?
  2. フレームワークの有効性・特性をぼんやりとつかむ。
  3. 扱ったフレームワークからMVC,ORM,DIを1つずつピックアップし学習。
  4. MVC+ORM+DIで何かつくる。
【課題】
  1. 色々なフレームワークに触れるので、各フレームワークごとの特色をきちんと整理しておかないと後々混乱する。

    (必要なファイルの構成・実装方法など)
  2. ピックアップする際に何を基準で選ぶ?

    (現場重視?興味重視?というか今って何が主流かわからん・・・。)

あぁ、先が長そう・・・。
独学でやってないで現場で経験積むのが1番早いのはわかっちゃいるが、現実は厳しい・・・。

Eclipse3ではじめるJavaフレームワーク入門1

参考書『Eclipse3ではじめるJavaフレームワーク入門』にでてくるフレームワークを整理。

MVC O/Rマッピング DIコンテナ
Struts1.x Hibernate Spring Framework
Struts2 Seasar2 Container
JSF

こんな感じかな。
Struts2JSFの区分けがよくわからん。


んで、
早速Struts1.xから着手。
参考書が読みにくくて見にくいけど、なんとか泣きながら動作確認していく。
以下が使った機能

  • Validation:入力値の検証
  • DynaActionForm:ActionFormを自動的に作成。入力フォームの変更が想定されていれば有用?
  • DispatchAction:1つのフォーム内で複数のsubmit処理を行う場合、それぞれの処理の振り分ける。Actionクラスが減り管理しやすくなる。
  • Tiles:複数のJSPページを統合し1つのHTMLページとして作成する。

struts1.x(今回は1.3)を使ってて感じたこと。
設定ファイルをいちいちいじるのがめんどくさい。
設定ファイルってどこまで増えていくのだ?
(validation使うのにvalidation.xmlが必要。Tiles使うのにtiles-dfs.xmlが必要。特定の機能ごとで増えるんだよな・・・)


次はStruts2JSFを飛ばしてHibernateをやる予定。
O/Rマッピングが気になってしょうがない。

ブックストッパー

参考書を見ながらコーディングしたりしてると、
勝手に本が閉じたりページがめくれたりする。
開きなおしたり気になったりで作業がはかどらないわイライラするわ・・・。


どうにかならないものかとネットを探索していたら発見したよ。ブックストッパー。
洗濯バサミに錘がついたようなシンプルなものだけど便利。
抑える必要も、本を開きなおす必要も、イライラする必要もなくなった。
それに小さいため、持ち運びは楽。
自宅用と会社用買いました。


一方で欠点は以下のとおり。
1個840円で高めのお値段。
本の両サイドをとめるなら2つ必要となり1680円。
挟む部分がギザギザで強めなので本に少し痕がついてしまう。


でも便利なものは便利だね。