そこに仁義はあるのか(仮)

略してそこ仁!

オレ、童貞捨てたよ。(AndroidとKotlinはじめてみた。)

(このエントリーはKotlin Advent Calendar 2014 - Adventarの21日目の記事です!)

24歳、このままKotlinをやらずに20代後半に足を踏み入れていいのか自問し、
ついにKotlin童貞を捨てる事にしました。
あと、ついでにAndroid童貞も捨てます。

しょぼちむ Advent Calendar 2014 - Adventarの12日目、[twitter:@grimrose]さんの
open build/reports/life/index.html: しょぼちむさんがKotlinをやらない理由を考えてみたの記事に、こう↓かいてあったので、とりあえずGitHub - JetBrains/kotlin: The Kotlin Programming Languageにスターつけるとこから始めた。

f:id:syobochim:20141221010447p:plain

f:id:syobochim:20141221010540g:plain

よし。いい滑り出しです。

続きを読む

JJUG CCC 2014 Fall でIntelliJ IDEAの使い方を教えてもらってきたよ! #jjug_ccc #jbugj

IntelliJ IDEA、Jが大文字なの最近知った…。
ブログ書くの相当のんびりしてしまった…。

JJUG CCC 2014 Fall - 日本Javaユーザーグループ | Doorkeeper
のイベントで、サムライズムの@さんによるIntelliJ IDEAのハンズオンがあったので、参加してきました!!

のんびりと2時からの参加だったよ!!

ハンズオンの資料はこちら!
丁寧に書いてあって、ハンズオン参加しなかった人もやってみると良いのではなかろうか!

yusuke/ideahandson · GitHub

続きを読む

JJUG CCC 2014 Fallの懇親会でLTしてきました! #jjug_ccc

参加レポは別で書くよん

BCELについて

Apache Commons BCEL™ -

BCELはClassファイルを解析するためのライブラリです!
findBugsでも使われていて、『このclassでこういうmethodを使用しているときにはbugを検知する』っていう解析ができる!

前に仕事で、findBugsの解析クラスを作成したことがあって、そのときにBCELを知りました!
今回のLTでは、クラスファイル名とメソッド名を調べるだけだったけど、
アクセス修飾子(publicなのかprivateなのか)のような、MethodやClassの属性を調べることもできる

ただし、開発自体は2006年でとまってる…(^p^)

f:id:syobochim:20141122160642p:plain

LT終わった後に、@さんにASM - Home Pageを教えてもらった!
こちらは、今も開発されているので、Java8環境での解析をする場合は、ASMの方がイイ!!らしい
ASMの話はまた別でする!*1

BCEL

準備

mavenリポジトリがある!
Maven Repository: org.apache.bcel » bcel » 5.2

ので、準備も簡単!

<dependency>
    <groupId>org.apache.bcel</groupId>
    <artifactId>bcel</artifactId>
    <version>5.2</version>
</dependency>

コードの解析

Classの取得

Classを取得したいときはこう書けばOK!

JavaClass javaClass = new ClassParser(<<解析したいClassファイルのファイルパス>>).parse();
Methodの取得

ClassファイルのMethodを取得して、Listとしてもつときはこう

List<Method> methods = Arrays.asList(javaClass.getMethods());

methodを一つ取得して、アクセス修飾子を調べたい場合はこう書けばいい

methods.get(1).isPrivate()
Codeの解析

↓こうかけば、javapしたときに表示される情報が一行ずつ詰まってるStreamができる*2

methods.stream()
 .map(Method::getCode)
 .map(code -> Utility.codeToString(code.getCode(), javaClass.getConstantPool(), 0, 1, false))
 .flatMap(s -> Arrays.stream(s.split("\n")))

↓この情報が入ってるよ!

173:  invokevirtual	java.lang.StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;

ちなみに

を確認することができるよ!

ちなみに、LTしたときのソースはこんな感じでした!

import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
import org.apache.bcel.classfile.Utility;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SyobochimJyoshiryokuDetector {
    static final String PATH = "/Users/syobochim/dev/gist/build/classes/main/jjugccc2014/";

    public static void main(String[] args) {
        File dir = new File(PATH);
        List<File> files = Arrays.asList(dir.listFiles());

        files.stream()
                .filter(File::isFile)
                .forEach(file -> {
                    try {
                        JavaClass javaClass = new ClassParser(file.getPath()).parse();
                        System.out.print(javaClass.getClassName() + " : ");
                        if (hasJyoshiryoku(javaClass)) {
                            System.out.println("女子力あります");
                        } else {
                            System.out.println("女子力ないです");
                        }
                        System.out.println();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
    }

    private static boolean hasJyoshiryoku(final JavaClass javaClass) {
        List<Method> methods = Arrays.asList(javaClass.getMethods());

        return methods.stream()
                .map(Method::getCode)
                .map(code -> Utility.codeToString(code.getCode(), javaClass.getConstantPool(), 0, 1, false))
                .flatMap(s -> Arrays.stream(s.split("\n")))
                .anyMatch(s -> s.matches(".*Syobochim\\.jyoshiryoku.*"));

    }
}

*1:本当はこの記事で話したかったんだけど、公式サイトがずっとつながらなかった(^q^)

*2:javapしたときの情報はJavaソースそのままの一行とは違うから注意!

SCRUM BOOT CAMPを読んだ!読みやすい!2日で読めた!

SCRUM BOOT CAMPをよみました!
ところどころが漫画で書いてあるし、内容もすごく噛み砕いて書いてあったので、
すごく読みやすかった!2日で読めた!!
でも、ちゃんと内容も充実していた!!
初心者にはすごくおすすめ!

SCRUM BOOT CAMP THE BOOK

SCRUM BOOT CAMP THE BOOK



ちなみに、書籍のなかで紹介されている@さんのインセプションデッキのテンプレがこちら!!

support/blank-inception-deck at master · agile-samurai-ja/support · GitHub


SCRUMやってみたい。

新人配属してからずっと保守運用チームで、最近開発チームに移動しまして、
いま、初めての開発(ウォーターフォール)をやっているんですが、
なにせ、外部設計工程・内部設計工程・PG工程と、それぞれで期間が空いちゃう。
ウォーターフォールにはウォーターフォールで良いところはあるのかもしれないけど、
外部設計工程で考えた事を、内部設計工程で思い出しなおして考えて、
PG工程でまた思い出しなおして考えて、って無駄な時間をかけちゃってる気がする。
あと、(これは設計書のフォーマットが悪いのかもしれないけど、)
内部設計工程でメソッドに引数の型を記載する項目が設計書*1にあったりして、
余計な考察をしなきゃいけなかったりする。(作ったほうがはやい!)
スクラムでは、1ストーリーを通しで実装出来るぶん、↑で書いたみたいな余計な時間をかけなくて済む感じある!!!


開発チームとスクラムマスターの役割に関しては、(知見ある人に教えいただければ、)部内でも始められそうな気がする。
ただ、私のいる環境で一番難しいのは、良いプロダクトオーナーを確保することなんじゃないかなぁと思う。
私のいる部署は内部受託開発請負の部署で、お客さまとの距離がわりととおくて、
要件や仕様をきめるのは他の部署の人なんだけれど、そういう人に要請をだすのがハードルになる気がするなぁ。

きちんと要件や仕様を決定することができて、
スプリントレビューやデイリースクラムにも積極的に参加してくれて、
スコープの調整を顧客に行ってくれる。
そういうプロダクトオーナーがいるっていうのが、開発を救う気がする。

*1:共通コンポーネント設計書。業務Actionクラスより前に作成している。。。コンポーネントって、共通化できる部分を切り出して作っていくものだと思ってた…。

さくらばさんにJava8を教えてもらえる贅沢イベントに行ってきたよ! #javajo

【東京】◆Java SE 8勉強会◆女子部もラムダ式に挑戦! - Java女子部 | Doorkeeper
に参加してきました!

遅刻してしまって、前半の『Java SE 8の基礎解説』には出れなかったんだけど、
後半の『ラムダ式ハンズオン』で前半の『Java SE 8の基礎解説』で勉強した内容を試してみよう!
っていう感じだったので十分楽しめました!

参加者のみなさんは、(会場で手を挙げてアンケートとってたけど、)GitHub使った事ない人がほとんどで、
GitHubに自分のリポジトリありますかって質問に2人しか手が挙がらない感じだった。
でも、GitHubからPJをもってくるところとか、PJをIDEで開くところとかを、
運営の人が丁寧に教えてあげてて、初心者歓迎の言葉にうそはなかったんだ!と思った!*1

1時間半のハンズオンってことだったので、内容は絞ってたけど、
それでも、難しそう!と思ってたラムダ式、Streamに親しみをもてたので、
すごくいい感じだった!!
さくらばさん!運営の方々、みなさまみなさま、ありがとうございました!

勉強資料はこちら

skrb/LambdaOkeiko · GitHub

勉強したこと

*1:初心者向けって書いてあるのに初心者向けじゃない!みたいなの、たまーにありますよね…。

続きを読む

Clojure夜会のためにClojure勉強してLTしてきました! #clojureyakai

同じ部署の@さんに誘っていただいて、
Clojure 夜会(Evening Party) - Clojure大好き! | Doorkeeperに行ってきました!

初の技術系LT(といってもゆるふわな内容だったけど)してきました!

Clojure夜会の感想

セッション1 登尾さん@ニャンパス「Clojure入門とその一歩先へ」

ニャンパス登尾さんの資料が見つからない…!!><
Clojureへの誤解を解く!って話だったのに、カッコの多さについて、
「カッコが多いと思わなくなります!」って言ってて、全然誤解解いてなかったwww

セッション2 青木さん @Xcoo 2日ガチ開発合宿で作ったWebアプリケーション2選

二日間でつくったのすごい!!
あと、デモがにゃーんって感じですごくかわいかった!
Clojure Cup初めて知った!




セッション3 川島さん イマドキのExcelスクショの撮り方

やっぱりkawasimaさんは、SIer業界の闇を救う感じがして、サイコーだった
あと、コンテンツつまりすぎて震え止まらなかった


LTについて

みなさん、技術力たかいLTで、私がだいぶ場違いな感じで死にそうだった

私はClojureスーパービギナーなので、難しい話も多かったけど、
@さんの「CodinGame チュートリアルをライブコーディング」、
一発でテスト通す感じはサイコーにクールだった


初の技術系LTに挑戦してみて

夜会の3週間前に誘っていただいてからClojure勉強して、
正直、絶対間に合わないつらい!!って感じでした!

が、全然意味がわからなかったClojureが(まだまだ難しいですが)少しずつだけどわかるようになっていって楽しかったし、Clojureすごくシンプルにかけていい感じだったし、
LT終わってからもClojure界隈の人、みんな暖かくて、(わりとアレだったLTだったのに)よかったって言ってもらえたので、
今は、LTやってよかった!₍₍⁽⁽(ી(´・ᴗ・`)ʃ)₎₎⁾⁾って気持ちでいっぱいです!!

(全然関係ないですが、twitter4jも今回初めて使ってみて楽しかった!)

Thanks !!

誘っていただいた@さん、運営のみなさま、参加者のみなさま、
そして、会場を提供してくださった株式会社リクルートテクノロジーズ様、
みなさまみなさまありがとうございました!

おまけ

ニャンパス登尾さんにステッカーもらった!ありがとうございます!!

f:id:syobochim:20141013173017j:plain

Clojure夜会に向けた勉強で使ったもの

LightTableは、コンパイルの結果がすぐにでてくるので、
勉強に最適だった!

無料でダウンロードできるので、入れてみたらイイ!
Light Table

はじめてのClojure (I・O BOOKS)

はじめてのClojure (I・O BOOKS)

セッション1のニャンパス登尾さんが書いた本。
LightTableの使い方から書いてあって、初心者でもわかりやすい!
まずこれから始めるとイイ!

プログラミングClojure 第2版

プログラミングClojure 第2版

難しくて読み飛ばしたところもあるけど、
細かいところまで書いてあってイイ!

DevLOVE現場甲子園2014 東日本大会でLTしてきました! #devlove

8/23 に DevLOVE現場甲子園2014 東日本大会 でLTしてきました!

DevLOVE現場甲子園2014 東日本大会 - DevLOVE | Doorkeeper


全体をいい感じにまとめてくださっているものはこちら!

DevLOVE現場甲子園2014 東日本大会のまとめ #devlove - Togetterまとめ


社内ではいろんなご縁で2回LTしたことあったけど、
社外でのLTは初…!
LT、会場が各トラックに分かれる前で、
人がすごく多かったのでめちゃくちゃ緊張して手が震えた…!!

5分だったけど、資料作るのとか大変だったし、緊張したし…!
セッションで20分も発表ってすごい><

スライドはこちらに公開してます

http://syobochim.github.io/DEVLOVESlide/#/

技術的には全然すごくなくて、
私、DEVLOVEでこんな話(VBATeratermマクロ…。)していいのか…?!?!
ってLTする5秒前まで思ってたけど、
会場の皆さんが暖かくてホッとした。
(しかも、LTの後、カップラーメンまでもらってしまった。)


終わった後も、資料見てくれたひととか、会社の先輩とかがよかったよとか頑張ったねって言ってくれて、
当日までずっと「あーどうしよ!なんでやるって言ってしまったんだ!!」ってなってたけど、
今は、あー、やってよかったな、って気持ちでいっぱいです。

実際は皆さんに助けてもらってお仕事しているし、
スライドにしても、テーマや構成についての相談にのってもらった人もいて、
いろんな人に助けてもらって頑張れたなって再実感しました!!

今回、LTやってみないかって誘ってくださった、
@ さんには本当に感謝してます!
誘ってもらわなかったらやってなかった!!!


スタッフの方も、すてきな場を提供してくださって、本当にありがとうございます!!