Spring frameworkの基礎
Javaフレームワークの主流の1つSpring framework。
DI (依存性の注入)
などが大きな特徴。
■DI (依存性の注入)で実現できることは
1画面表示,画面遷移を行う部品
2業務処理を行う部品
3データベースの読み書きを行う部品
を分けて管理
*それぞれの独立性を高めて、例えば2の業務処理の仕様を変えたいときに2だけ直して2だけテストすれば大丈夫、このとき3はmockと呼ばれるスタブのようなダミーの部品を利用する
*EJBみたいなコンポーネント化して連携するより1と2、2と3をどうやって連携するかの仕組みをあまり考えなくてよい
*Singleton(オブジェクトが1つしか作られない)なので、同じ部品を同時に別のとこからも呼ばれたらどうしよう?とか心配しなくてよい
とかが便利なところ
interfaceクラスと実装クラスを作って、お互いの実装クラスは見えないようにすることで独立性を高める
Javaのオブジェクト指向では役割の塊ごとにオブジェクトという単位で分割してまとめるが、各機能を横断して共通して付与しなければいけない役割がどうしても残ってしまい、分割してまとめることが不十分
各機能を横断して付与したい役割を外出ししたのがアスペクト指向
*決まったとこでログに書き込む
*利用者の権限によるアクセス制御
*トランザクション管理の標準化
*例外処理の標準化
などが主な例
これを実現するための方法が
アドバイス(外出しした横断して共通の処理をする部品)
ポイントカット(各機能でアドバイスを呼ぶ所)
を実装すること
Spring frameworkでは主にアノテーション(@〜をクラスやメソッドの前に記述)でこれを実現
■Spring frameworkが備えている機能
Spring frameworkで用意されている機能はDIやAOPだけでなく他にもたくさんの機能が用意されている
Spring Tool Suite(STS)
RAD
Spring Roo
Starter
Spring Boot
Web
Spring Data Rest
Spring Mobile
Spring WebFlow
Spring MVC
Security
Spring Security OAuth
Spring Secrity
Big Data
Spring XD
Spring Hadoop
Data Access
Spring Data MongoDB
Spring Data JPA
Batch
Spring Batch
Enterprise Integration
Spring Integration
Sosial
Spring Social Github
Spring Social Facebook
Spring Social Twitter
Core
Spring DI
Spring AOP
Spring TX
...
■Spring Bootで簡単にSpring framework
開発者は各フレームワークの各機能を組み合わせてシステム開発を行っていたが、部品の選定や環境の設定などで開発者にはそれなりの知識が要求された
Spring Bootではあらかじめ一通りの機能が標準で盛り込まれており、面倒な準備をせず簡単に動くシステムを作れる
コンパイル、ビルド、デプロイというステップを踏まずに手軽に開発環境で動作の確認ができるのも利点
初めてのキャッシュフローゲーム
ちょっと友達に誘われて投資の勉強会?的な集まりでキャッシュフローゲームをやってきました。
■キャッシュフローゲームとは?
金持ち父さん貧乏父さんの著者ロバートキヨサキ氏が考えたボードすごろくゲーム
■キャッシュフローゲームの流れ
BS(貸借対照表)とかPL(損益計算書)をまず書いて
サイコロを振って
給料日のマスを通過すれば給料が貰えて
投資イベントのマスに止まったらカード引いて、株や不動産などをカードに書かれた価格で売買できる(けどしなくてもよい)
BSやPLは都度書き換えながら、手持ちの資産を増やしていくゲーム
■ゴールは2つ
最初の目標は不労所得(自分が働かなくても勝手に入ってくるお金)が支出を上回ること
働かなくても生きていける状態
次の目標は最初に決めた人生の目標に必要なお金が手元にあること
お金がないからやりたいことを我慢しなくていい状態
■やってみた感想
ゲーム自体は自分の普段の行動とかが如実に現れて色々気づかされることも多いので、チャンスがあればやってみたほうがよいと思う。怪しい投資話とセットで開催されることも多いらしいので、騙されやすい人断れない人流されちゃう人は止めておいたほうがよさそう。
投資話は金額が小さいより大きいほうが断然有利(ローリスクハイリターン)。現実世界の投資でも元手が大きいほうが有利なのは世の中見てても同じだと思う。ゲーム内だとプレイヤーがお金出し合って有利な大きい投資ができる。現実世界でも同じようにできればと思うけど、詐欺とか持ち逃げとか心配だから、よっぽど信用し合ってないと難しいかな?
ゲーム内だとこの投資話はどのくらいリターンがあるとか株価はいくらぐらいで推移するとか書いてあってリスクとリターンが分かりやすい。思ったのは、意外と現実社会もちゃんと勉強して経験積んで見る目を養えば同じなんじゃないかな?実際のお金が絡むと冷静な判断できなくなるので、みんな損するけど。
なんだかんだでいろいろ勉強になりました!
品質について改めて整理①
■システム開発で大事なことは?
と聞かれたとき、見る角度や立場から様々な意見があると思いますが、間違いなく必要なものの1つは
「品質」
であるというのは間違いないと思います。
他にも「コスト」「納期」とありますが、お互い影響したり、トレードオフの関係だったりする。
■品質とは?
JIS規格によれば6つの品質特性と27の品質副特性
1 機能性
合目的性,正確性,相互運用性,セキュリティ,
2 信頼性
成熟度,障害許容性,回復性
3 使用性
理解性,習得性,運用性,魅力性
4 効率性
時間効率性,資源効率性
5 保守性
解析性,変更性,安定性,試験性
6 移植性
環境適応性,設置性,共存性,置換性
※それぞれの意味は割と言葉通りの意味。
■品質の良いシステムとは?
ちゃんとお客さんの要望通りの機能が全て盛り込まれてて、
業務が絶対滞らないレベルでシステムが稼働し続けて、
お客さんが操作しやすくて、
裏ではマシンの性能を効率良く引き出していて、
システムの保守や移行が可能な限りスムーズに行えるシステム。
裏返すと
■品質の悪いシステムとは?
お客さんの要望通りの機能になっていなくて、
すぐシステムが停止したり、意図しない動作をして、
お客さんが使い方を理解しにくくて
マシンの性能通りの性能(レスポンスなど)が満たされていなくて、
システムの保守や移行が行うのが大変なシステム。
■品質は100%実現しなくてはいけない?
そもそも人によって認識が違ったりするので100%の判断が難しい。
また品質100%のシステムを実現するのは、いくら開発関係者が優れていても、コストや納期の制約などもあり難しいことが多いので、
・品質をどこまで高めるか
・品質のどの部分を高めるか
はシステムの特徴や特性を見て判断する。
1つの指標として4段階の信頼性要求水準
・人命に影響、甚大な経済損失
・社会的影響が極めて大きい
・社会的影響が限定される
・社会的影響がほとんどない
などがある。
開発技術やマシンの性能、利用者数、世の中の求める基準などは時代とともに目まぐるしく変化しているので、その時代に応じた見極めが必要。
■品質が悪いとどうなるか?
発覚するのが
本番稼動前であれば、追加のコストが発生したり、スケジュールの遅延が発生したり、
本番稼動後であれば、システム利用者/利用会社の業務などに支障をきたし、損害が発生したりする。
■品質の向上のためにどう取り組むか?
品質が悪い=不具合がある
という前提で考えると
1そもそも不具合を作らない。
2不具合を見逃さない。なるべく早く見つける。
方法としては
1予防活動
2検知活動
の2つを開発の各工程(要件定義 基本設計 詳細設計 プログラミング テスト)において行う。
続きはまた改めて
参考サイト:
高信頼化ソフトウェアのための開発手法ガイドブック
https://www.ipa.go.jp/files/000005144.pdf
順を追ってイテレーションからラムダ式、ストリームAPIまでを理解
0)最初は昔の書き方
まずList型の場合、繰り返し処理は
for (int i = 0; i < string_list.size(); i++) {
String str = string_list.get(i)
System.out.println(str);
}
って書くけど、この書き方はもう古い
1)まずはイテレーション
ずばりイテレータを使ってこう書く
for(Iterator<String> i = string_list.iterator(); i.hasNext();){
String str=(String)i.next();
System.out.println(str);
}
2)ジェネリックスを使ってみる
さらにジェネリックスを使うとキャストしなくてよくなって
for(Iterator i = string_list.iterator(); i.hasNext();){
String str = i.next()
System.out.println(str);
}
となる。
3)拡張forを使ってみる
さらに拡張forを使うと
for(String str : string_list){
System.out.println(str);
}
と書けるとのこと。なるほど!少し楽!
このように、イテレータを取得して、操作して、イテレータを実行するような処理を「外部イテレータ」と言うらしい。
ここで終わりではなく、さらに覚えなくてはいけないのが...
・内部イテレータ
・ラムダ式
・Stream API
上記外部イテレータを内部イテレータに書き換えるとforEachを使って
string_list.forEach(
new Cunsumer<String>(){
public void accept(String str){
System.out.println(str);
}
}
);
となるらしい。なんか長いし難しい...
これだと並列処理とかもできたりするみたいけど、もう少しすっきりしないだろうか?
5)ラムダ式を使ってみる
上記の内部イテレータを、ラムダ式を使って書くと
string_list.forEach(
str -> {
System.out.println(str);
});
となるとのこと。なんかすっきりした!
1行だと{}を省略して
string_list.forEach(str -> System.out.println(str));
でも可!
ラムダ式の本体を省略して、メソッド参照なんかを使うと
string_list.forEach(System.out::println);
まで省略できるとか。
色々省略しすぎて逆に良く分からなくなってきた。
6)最後にStream API
上記のラムダ式をStream APIを使って書くと
string_list.stream().forEach(str -> {
System.out.println(str);
});
となるらしい。
Stream APIは中間操作と終端操作というのがあって、
string_list.stream()
.filter(str -> str.length <= 5)
.forEach(str -> System.out.println(str));
みたいに書くと5文字以下のstrだけSystem.outするみたいなこともできるっぽい!便利!
中間操作と終端操作は色々種類があるから、使いこなせれば記述もすっきりして便利だけど、馴染みのない人にはフルにラムダ式やStream APIまで使いこなしているコードは理解するのにも一苦労しそう。
最後)まとめ
単純なfor(...){}から始まり → 0)
Iteratorを使うようになり → 1)
ジェネリックスで型変換を省略するようになり → 2)
拡張forで記述を省略し → 3)
外部イテレータから内部イテレータになり → 4)
ラムダ式になり、 → 5)
最後はStream APIになる。 → 6)
順を追っていくといろいろ進化してるんだな。。。
【読者メモ】図解 大学受験の神様が教える記憶法大全
マジビジプロ ハンディ版 大学受験の神様が教える 記憶法大全 (マジビジプロハンディ版)
- 作者: 和田秀樹
- 出版社/メーカー: ディスカヴァー・トゥエンティワン
- 発売日: 2016/02/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
HR×テクノロジー
http://eventdots.jp/event/583715
ちょっと面白そうだったので行ってきました。
◆HRとは
ヒューマンリソース 人材資源のこと
http://www.weblio.jp/content/HR
HR×テクノロジー(HRテック)とは
ITを使った人材資源の活用に関する取り組み
◆各社状況
社内に開発部隊を持っていなかった
システム開発はグループ会社などに外出し
↓
社内で開発部隊を持とう
何千人いる社員のうち最初は開発メンバー1人とか
↓
従来の文化体質
・人材会社にとって情報は最も重要、とにかくセキュリティが最優先
・開発技術ツールを好きに選定できない
・外部とのネット接続がかなり制約されてる
↓
従来の文化体質に馴染むのではなく、情熱を持って変えていく
↓
もちろん抵抗にあう
↓
徹底的にリサーチして説得できる根拠を揃える
↓
会社としても変わりたくないわけではない
メリットがデメリットを上回れば了承
↓
現在ポリシーを持って組織作り体制を強化しているところ
・まずは情熱が大事、とにかく挑戦
・組織として結果も出すし、個人のやりがいも追求する
・みんなが当事者意識をもつ、スピード感をもつ、コミュニケーションとにかく大事
・新しいメンバーを募集するため、積極的に情報発信している
◆感想というか感じたこと
とにかく情熱を持って技術を追求していく、そしてとにかく楽しむ
何かを変えるとき当然反発はあるけど、地道に根拠を集めれば変えられるのと、時には代替案があったりするので、簡単に諦めないこと
技術のことだけじゃなく、組織作り、ビジネス視点でのことも勉強してて、4人とも仕事に対する情熱が凄かった
小学生並みの感想だけど、とても面白かったし、よい刺激になった
情報セキュリティ10大脅威 2016を読んで素人でも気をつけられること
3月末の公開された情報セキュリティ10大脅威 2016を読んで
むやみやたらに銀行口座やクレジットカードを作らない
―自分で把握できる範囲に留める
―使わなくなったら解約する
むやみやたらに銀行口座やクレジットカードの番号、電話番号等を利用しない(WEB上もお店でも)
―信用度が高い安全なサイトでの利用に留める
―プリペイドカードの購入やコンビニ支払いなども利用してみる
あやしいメールは無視する
―携帯電話やPCの迷惑メールフィルタを厳しめに設定して定期的に見直す
―知らない人からのメールの添付ファイルは絶対に開かない
―知らない人からのメールのリンクは絶対に開かない
―メールのアドレスを確認して変な文字列だったら無視する
メールの添付やリンクは用心して開く
―知り合いからのメールの添付ファイルやリンクを開く場合に心当たりのない内容であれば電話等で相手に確認する
―メールのリンクを開くときはURLがgoogleで検索して最初のほうに出てくる正規のサイトのURLと本当に同じか確認する
できれば手間とお金をかける
―セキュリティソフトはなるべく入れる(できれば有料のもの)
―OSなどのアップデートは定期的にする(アップデートの通知機能をオンにしておく)
―メールアドレスとパスワードのペアは使いまわさない(パスワードの文字数はなるべく長くする)
―インターネットバンクなどで認証方法や入力方法が複数ある場合は推奨されているかめんどくさいほうを選ぶ
―銀行口座やクレジットカードの入出金は毎月確認する
―利用サイトにログイン通知や課金通知の設定があればなるべくなら設定しておく
―気になることがあればパソコンに詳しそうな知り合いやインターネットから情報を入手する
―見逃したTV番組やHな動画は違法アップロードされているものではなく、お金を払って正規の配信サイトやレンタルビデオを利用する
分からないものには手を出さない
―よく分からないアプリをイストールしない(スマホアプリのレビューはさくらも多いので信用しない)
―あまり浸透していないサイトに入会する場合などはご利用規約に一応目を通す(~円請求しますと書いてないか?)
書いてある内容を鵜呑みにしない
―知らないメールの退会はこちら配信停止はこちらは信用しない(クリックすると相手に攻撃しやすくしてしまうだけ)
―あなたのパソコンが感染していますはいったんスルーする(クリックすると相手に攻撃しやすくしてしまうだけ)
また思いついたら追記