ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

システム開発トラブル、失敗の5大要因

2017-11-20 20:04:25 | Weblog
業務知識/業務管理知識の不足
パッケージ活用の認識不足
発注者・受注者のコミュニケーション能力不足
プロジェクト管理能力不足
技術力不足

【引用元】
システム開発トラブルで訴訟が頻発、失敗の5大要因
http://itpro.nikkeibp.co.jp/atcl/column/17/110600484/110700001/

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SIerの高齢化(50代)より、中堅層(30・40代)のほうが、確かにやばそう・・・

2017-11-20 16:05:46 | Weblog
人月商売の滅亡近し、SIerの「オヤジ化作戦」に勝ち目はあるか
http://itpro.nikkeibp.co.jp/atcl/column/14/463805/111500166/

(以下太字は上記サイトより引用)

SierやSESで、高齢化が進んでいるのは、実感していると思う。
最近、SESなんかだと、50代くらいの人が多いんだよね。

SIerやIT部門で高齢化が進んでいるというと、脊髄反射的に危機的な事態と思ってしまうが、実はそうでもない。ユーザー企業のIT投資がいわゆるデジタル分野に移りつつある今、SIerをはじめとする人月商売のITベンダーやIT部門は確実に“オワコン”だからだ。ユーザー企業においてIT投資の主導権は続々と誕生しつつあるデジタル組織に移り、そのIT投資のカネは人月商売のIT業界の外、クラウド関係や新興のITベンダーなどに流れていくだろう。

高齢化したひとは、COBOL,Javaのエンタープライズ系が多いよね。
また、IoT市場でCで通信などもある。
(注意:AIやIoTといっているSESは、人集めに言っているだけで、
 実際にはIoTをそれほどやっていない場合もある。
 IoTというより、「通信」・「組み込み」として、人は動いているかんじ。
 AIも、実際には、画像処理、音声認識、として、AIが進んでいる感じかなあ~)

で、この市場は、たしかにおわこんなので、縮小しているけど、案件はある(ゼロではない)。
そして50代の人は増殖中のかんじ(フリーになっている場合もある)
 →今後も増殖していく
なので、人手は余っていて、どうにかなっている。問題ない。


問題は中堅や若手の技術者だ。特に30代後半から40代の中堅クラスが危ない。IT部門だとプログラムを書いたことが無いだけでなく、システム開発プロジェクトの経験も無い人も多い。SIerの中堅クラスの場合、プログラムをまともに書いたことは無くとも、開発プロジェクトの経験は豊富だ。だが大手SIerなら大規模プロジェクトが多いため、全体を仕切るプロマネの経験はなく、プロマネの手下としての経験しかない人もいる。


それともう一つ。
今のAIやIoTは、クラウドベースで、
その場合、マイクロサービス+(REST API経由)+SPA(JSのフレームワーク)
が前提となり、

30代、40代の人がやっていた、MVCアーキテクチャと、
根本的に異なっている。
(MVCはサーバー側にフレームワークを入れる。
 SPAはフロント側にフレームワークを入れる)

このほか、今の開発方法(テストとか)は30代、40代の人とはことなる。
なので、この年齢層の人が、はっきり言って、じゃまになるという可能性
があるんだよね・・・



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaSE9のつぎは、18.3じゃなく、やっぱ10にする、テヘペロ(^^;)だって

2017-11-20 12:05:38 | JavaとWeb
11月18日にJJUG CCCに行ってきた!
つづき
(表題の件は、一番初め「JDK新しいリリースモデル」)





■JDK新しいリリースモデル
・Java One前後から情報が出ている
 この資料は、共有できません
 →情報的に動くため

・JavaSE9
 けいでんす:リリースモデルを変えるぞ!
 JDK 9
   7のとき、理想高かった
   7で考えていたものが乗った
 91の機能UP

・リリースサイクル長い
 大きな機能を待つ:小さい機能が待たされる
 言った通りに出してくれ!!!
   2年おき、本当かよ!(理想です)
 ライセンスモデルの問題:再配布不可

・他の言語と比べてみる
  Go:半年に一度
  Java:間延びしてきている

・JavaSEの選択肢
  Oracleから
  OpenJDK

・JCPがOKすると出せる
  ジグソー:1回目ひけつ

・新しいリリースモデル(きのう現在)
 まえから・・・だいぶかわった!!

 より計画的なリリースサイクル:6か月ごとメジャーバージョン

 だすのはOpenJDK
 削除提案と、削除も6か月の中で行う

 OpenJDK=無償で使ってもらうもの、バイナリーも出す
 オラクルも暫定期間出しているが、ゆくゆくは。。。
 同じ機能に機能強化:1年後

 GPLにする
  & クラスパスえくせぷしょん
 
 商用サポート継続、コミュニティ継続

・OpenJDKの強化
  アプリケーションクラスデータ共有
  Zガベージコレクター

・従来のリリースモデル
  従来:技術的な差があった
  2年に1度のリリースが目標だった
  長期サポート
  更新リリース

・新しいリリース
 技術的な差なくなる
 6か月に1度
 リリース重複期間なくなる
 Oracleはサポート8年間、帰納更新はしないセキュリティパッチ

・11が出てくるタイミングでOracle JDKはなくなり、
 LTS版のみになる

・18.3、18.9を、インクリメンタルな数字に戻した
 JavaSE9のつぎは、18.3じゃなく、やっぱ10にする、テヘペロ

・これからは、シングルソースコード

・いまは、OracleJDKもバイナリ提供

リリース情報
・OpenJDK:いままでどおり
 10のearly access版も
・リリースノート
 削除されるAPIがリストアップ
   CORBA関連なくなる
→1年後に機能がなくなる

・JCPが仕様の承認は今のところ変わってない

・公式アップデート終了のスケジュール
 8 無償アップデート終了 2018年9月
 9 無償アップデート終了 2018年3月
10 無償アップデート終了 2018年9月

8までのバージョンの移行先は、11以降

商用サポート

デプロイメントテクノロジー:サポート短くなる
 (アプレット使ってる場合注意)

・直近のアップデート
 JDK 10 Early Access ビルド
 OpenJDKでもLTSサポートという話が出てきた
  今後の情報に期待
 jlinkを使ったパッケージ
 32ビット版のバイナリ提供はない(9でもない)

■ついにきたリアルタイムSpark
 ビッグデータ処理の新定番SnappyDataとは

・SnappyData知ってる人・・・0
・自己紹介
・現在のビッグデータ処理の課題
  複数プロダクトを組み合わせて複雑
  時間かかる
  パフォーマンス悪い
  キャッシュだと速いが・・・

 よくある要求

  RDB→分析はDWH

 ビッグデータ
  NOSQLでスケールアウト→分析SQLおんHadoop→ストリーミング

・技術を積み上げると、つぎはぎのシステムになりがち
  TCO増大
  非効率
 Spark登場後はかなりシンプルになったものの
  Spark,ふりんく
 →SnappyDataは1つでできる

・SnappyData:データベース機能を備えたSpark
 ベースとなっている製品がインメモリ

・主要機能
 Sparkのコア、マイクロバッチ
 分散インメモリ:ローテーブル、インデックス

・SnappyData
 インメモリデータベース
 データ保持形式
 クラスター統合
 SparkSQLを高速化

・(1)インメモリデータベースにデータを保持している


・(2)Sparkと同一のデータ形式で保持している
 違う形式だと:型変換、シリアライズ・でシリアライズ

・(3)Sparkとインメモリ―DBのクラスターを統合できる
 もう一つのクラスターモード(参考)
  別々にして個別にスケールアウトもできる

・(4)SparkSQLを高速化している
 DAGがそもそもちがう
 ステージまとまってる:通信起きていない
 SQLワークロードを一部いじって高速化


・SnappyDataの使い方
 クレジットカード不正使用検知システム
  SQLで書ける
 ・ストリームデータ処理:マイクロバッチストリーミング
  コンテニュアスクエリー:Window指定
  テーブルをつくるのもDDLと同じ
  
 ・トランザクション処理
  データの追加。更新、削除が可能

  データの特性によっててーうる形式を使い分けることも可能
   Row table,column table

  レプリケーション、パーティションを使い分ける

  トランザクション処理もRDと同様に使用可能
   一部出来ないものもあるが、近い形で

  P2P型アーキテクチャ
   書き込みもスケールアウト

 ・アナリティクス処理
  リアルタイム分析:近似クエリ、TOP Kテーブル

  サンプリング技法を活用
   →サンプルテーブルを作る方法と直接クエリーする方法がある

  TOPKテーブル
   →CREATE TOPKテーブルでOK
    たぶろう、ちぇっぺりん、ずーむでーたでみよう
  
  JDBCアクセス

 ・サマリー
  Spark100%コンパチブル
  SparkといんめもりーDB統合
  テーブルとSQL
  高速化

■最近のDeep Learning事情とJava
・自己紹介

・仕事でDeepLearningしてるひと ちらほら

・DeepLearningの歴史と経緯
 人工知能:1956~
 機械学習:
 深層学習:

2012年のDeepLearning
 ILSVRC:ヒントン教授(2006年から)
 Googleの猫

2014年のDeepLearning
 AIに仕事がう会われる
 DeepMind買収
 ドワンゴ人工知能研究所
 画像から文章

2015年 あるふぁごー

AIの定義は明確に決まっていない

・アトム:強いAI
・弱いAI:これだけならできる、専用機:ディープラーニング

・ディープラーニング

・ディープラーニングの基本的な原理
 基本的な原理の一部のみです

 ニューラルネットワーク
 ニューロンモデルをつなげた
  入力層:データのベクトル化
  出力層:どう表現するか

 学習するとは:落ち着くところに向かっていく

 畳み込みニューラルネットワーク
  畳み込み層 プーリング層

 再帰型ニューラルネットワーク(RNN)

・ディープラーニングの教科書が出た
 パターン認識と機械学習は9年前
 ディープラーニング

 これならわかる深層学習入門
 仕事で始める機械学習(Python前提)

 ハード面
  GPU
  なぞのUSB
  Alphago Zero

 DeepLearning資格
  ジェネラル、エンジニア

・DeepLearningとJava

 DeepLearning for Java
 DL4J
 
 Python:ライブラリ豊富

 フレームワーク
  exampleでやれることを確認(今日からDL4J)
  githuで質問
  ユーザーグループある
  11月30日にイベントある

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaSE9に移行するには、module-info.java書いてrequires等するとか

2017-11-20 09:05:22 | JavaとWeb
11月18日にJJUG CCCに行ってきたので、
その内容をメモメモ
まずは、前半(表題の件は、最後のほう
「JavaSE9の紹介:モジュール・システムを中心に」で記述)




■サンプルアプリケーションで学ぶ
Apache Cassandraを使ったJavaアプリケーションの作り方

・コード Github スライドslideshareにあがっているよ
・Cassandraなにか知ってること前提
・自己紹介
・今日の目標
 →サンプルアプリケーションがあるというところを持って帰ってください
・アプリケーションの変遷
 モバイル、IoT:ユーザー増えてきた
 →スケールするアプリケーションを支える
  データベースもスケールしないと

・Cassandra:スケールしてもパフォーマンスを落とさない
サンプルになるソース あります
 http://killrvideo.com
  →https://killrvideo..github.io/
  →これを、持って帰ってください


・KillrVideo
 スケーラブルなマイクロサービスアーキテクチャ
 アーキテクチャ
  スケーラブルにできるように想定
 Javaでも環境
https://github.com/killervideo/killrvideo-java
  デモ:起動してみる

・Web層
 node.jsで実装(フロントエンド)
 React,Rcore
 セッション管理にCassandra利用:CassandraSession
 ユーザー認証はマイクロサービス利用
 →Javaだろ、spring-session,apache shiro

・マイクロサービス
 gRPCを利用
  プログラミング言語非依存
  プロセスを分けるならKafka連携とか

・gRPCとは
 Googleの内部RPC(Stubby)をもとにオープンソース
 ProtocolBuffer v3を利用、HTTP/2、双方向ストリーミング
  gRPCサービスの定義
  スタブの自動生成:mavenプラグインで
 基本はStreamObserverを利用した非同期呼び出し、
  非同期実行、同期実行
 Springから呼び出し、

・Cassandraに接続
 ドライバ作っているよ(やりとりは、こみにてぃで議論)
  クラスタービルダーを作って、接続するIPアドレス、認証情報などを設定
  クラスター作る
  生成
 セッション:コネクションプーリングを管理

・Cassandraのデータモデリング
 データモデリングの原則
  データを知る
  クエリを知る
  非正規化
   データをネストする
   データを重複してもつ
  →Joinの機能がない

 なぜ:クエリがスキーマのデザインを決める
  →クエリの変更はスキーマの変更を伴う
  →特異なアクセスパターンは限られている
    Xテーブルスキャン、複数テーブル
 詳しくは
  RDB開発者のための・・・ スライドシェアでみてね!

・ドライバーの利用
 バッチ登録
 クエリービルダーの利用:ステートメントの組み立て
 ページング:取得件数の指定とページング resultsetで
   オフセットページング(いきなり5ページに飛ぶとか)は実装されてない
 実行結果の取得:resultsetの中に、自動ページング機能→裏側で自動フェッチ
 データマッパー:エンティティクラスの準備、マッパーの準備

・まとめ

  https://killrvideo..github.io/

 マイクロサービスを利用したスケーラブルなアプリケーションを作るときの参考に
  アーキテクチャ
  フレームワーク・ドライバー
  データモデリング

■サーバーサイドkotlin
・書けば普通に動く
・日本語の響き:かわいい→そこがネック
・まえおき
 kotlinはそれほどとがった言語ではない
・結論
 サーバーサイドでも問題なくkotlinは使えます
・今日喋ること
 なぜkotlinメインに
・自己紹介

・作ってるもの、秘密(Webアプリ)
 AWS、バックエンドPostgres,認証cogniteに任せてる
 思い処理はらむだに
 webアプリケーションサーバー、らむだ、でkotlin使う
 →クライアント側は書いていない

・なぜkotlinを採用したか
 Javaの言語について:20年以上たっている。冗長
  classのなかにメソッドを書くのはめんどくさい
  検査例外:kotlinはない(上に投げられる)
  Lombok:冗長性をある程度解放
   Javaでもある程度ハッピー
   関数がオブジェクトでない
   荒ぶるlombok
 不満があっても、JVM自体は悪くない
  python2→3の互換性に比べて
 Javaの豊富なライブラリ
 JVM言語でBetter Java→学習コストが低いこと

・Scalaは悪くない、でも、難しい…
 型合わせゲーム

・そこでkotlin
 Javaの不満をある程度解消、scalaほど複雑でない
 Androidの正式開発言語
 Javaとの相互運用性
 
・開発環境・フレームワーク・ライブラリ
 IDE:Eclipse,IntelliJAndroid Studio
 フレームワーク:
   kotlin製 kter、から、わさび
   Java製:Spring Boot
 ORマッパー
   Exposed:バgつが多い
 ビルド
   基本的にgradle(こだわりない)
   finalを外した状態で

・使ってみて
 kotlinのstream的なもの
  ベンチマークのテストやってみた
  kotlinおそい→asシーケンスで早くなる
 annotationの違い
 デフォルト引数とDI

・不満なところ
 ぱいぷらいんがほしい
 ()は省略したい

・けつろん。もんだいないだいじょうぶだ。


■JavaSE9の紹介:モジュール・システムを中心に
・自己紹介
・あらまし
 JavaSE9:モジュールシステム
 地味なアップデートも外観

・そもそもJavaSEって?
 JavaSE 処理系の規格(すたんだーど えでぃしょん)
 JavaEE エンタープライズえでぃしょん サーブレット、JMX,EJBなど

 JavaSEタイムライン
  2004 JavaSE5 じぇねりくす、マルチスレッド
  2014 JavaSE8 ラムダ式、ストリームAPI
  2017 JavaSE9 モジュールシステム じぐぞー
 →字面は比較的地味、基盤はおおきい

・目的
 心の準備ができること
 
・CCC_E4のハッシュタグにリンク貼ってある
 そのスライドで「高度」な話観てね

・背景
 Jave8までの課題
   JAR地獄
   内部パッケージ
 Java8内部向けパッケージ

・モジュールシステムの基本
 JARファイルを配置の単位に
  モジュール単位で依存関係を整理
 内部向けパッケージを使えないようにする

 パッケージ衝突の検知
 モジュール名を付ける
 module-info.java
 exports命令で公開パッケージを指定できる
  →自分自身が使うモジュールをrequires命令で指定する
   require先がないと、コンパイルエラーになる

 標準ライブラリもモジュールに
  java.baseはrequireされている

・リフレクション
 こまるときDI
  パッケージをexportしたくない、publicしたくないけど、リフレクションしたい
  →opens命令
 →リフレクションは魔法の杖ではない

・コンパイルと実行
 モジュールパスという配置方法
  クラスパスとは別
 実行:初期モジュール(mainモジュール)から推移位的に参照されるモジュール
 だけが実行モジュールに入る

・経過措置
 無名モジュール:クラスパスのクラスは、無名モジュールに入る
 自動モジュール:モジュールパス上にありながらmodule-infoにない
   オートマチックモジュールネームまたはjarファイル名から

・移行
 ライブラリ:今すぐモジュール化
 プラグイン
 APサーバー上のアプリケーション
 
・ライブラリのモジュール化
 jarファイル名ベースの自動モジュールをrequiresしてはいけない!
 8以前のサポート

・テスト
 2種類のテスト
  ブラックボックステスト
  ホワイトボックステスト
 JUnitなんかにどうやって入れる?

 方法
  正攻法:一時的に書き換える
  次善の策:クラスパスに入れる

 Java9モジュラりてぃ おらいりー

・他のUPDATE
 コレクションのファクトリ
 try-with-resources
 インターフェースのprivateメソッド
 匿名クラスにダイヤモンド演算子
 リソースバンドル:いままでlatin1だったが、UTF-8でOKになった
 (プロパティはlatin1のまま)
 Reactive Streamsサポート

 プロセスAPIの強化


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする