まこたん(makotan)の日記 このページをアンテナに追加 RSSフィード

makotangmail.com   

 

2017-01-08

速くて(物理的にも)軽い開発環境つくる事を考えてみた

速いのを実現するにはやっぱり速いCPUとかでっかいメモリーとか・・・

でも軽いマシンにはそんなの入らない


で、考えた

X11とかRDPつかってVDIやれば良いんじゃ無い?


そうするとマシンは何処にあっても良くなるので・・・クラウド環境で実機無し!

って事も出来るなぁ〜と

実機を自宅に置くとしてもVPN経由すれば安全に接続したり出来るし


そしたらどんな環境でもネットワークさえあればいつでも作業出来るし

本体マシンにこだわらなくて良いのでRaspberry Pi3とキーボードとマウスがあればいける!

それ以前に手持ちの非力なマシンたちをクライアントに出来るw


そんな事を考えたのも全ては一番使ってるメインのMacがなんか不調なため

ホントどうしよw

2017-01-03

2017年、平成29年あけましておめでとうございます。

今年もよろしくお願いします。


この頃自分より若い人たちと仕事する機会が多くてよく思うこと

  • 自分がその年代だった頃より色々知ってるなぁ〜

とはいえ、古い知識が(入手経路含めて)少なくなってるので知ってればショートカット出来るのに勿体ないと思うこともある

  • 必要情報量が増えてるきがするけど、よく追いかけてるなぁ〜

変化の速度も上がってたりするのでなかなか大変

  • 勉強会多い

参加してる人も開催してる人も多い印象

開催側はなかなか大変そうだけどw

  • ライブラリもツールが凄い便利になってるからだいぶうらやましい

Listとか当たり前にあるし、メモリー豊富だしコンパイラIDEも無料でまともなのがあるのが当たり前だもんなぁ・・・良いなぁ・・・っていつの時代と比較してるんだw

  • 技術レベルがでこぼこなのは相変わらず

圧倒的に年下でも凄い人はホント凄いと当たり前に思う

でも、こればっかりは昔もそうだったし色んな理由で仕方ない所なんだろうなぁ〜と思った


ということで、今年も(自分より若い人たちと一緒に)楽しく仕事したいです

2016-12-30

今年ぼんやり考えてたこと

(注:結論は出てない)


たとえば、トータルで従来の5倍の工数がかかるけどバグの出る心配の無い開発手法Aがあるとする

開発プロセス的には要件定義、設計、実装で完了して即リリースしてもバグが出ない


もう一つ、トータルで従来の5分の1の工数で済むけどリリースしたら確実に問題が発生する開発手法Bがあるとする

開発プロセス的には要件定義、設計、実装、テストでリリースしたら問題発生


一見すると開発手法Bはだれも採用しない様な手法に見える

だけど、ソフトウェアの開発で問題が発生しないことはレアケースで新規にリリースすればなんらかの問題が発生するという事実もある


一般的には開発手法AとBの間のどこかを落としどころに開発手法、開発プロセスを選択しているはず

開発手法Aの考え方は未だに一部でしか聞いたことが無いので殆どの人はBに近い物を選んでるはず

開発手法Bは問題が無いことをテスト工数を掛けて問題の発生を未然に防ぐ方法をとるのが最善策になる

すなわち、開発手法Bの類似の手法をとり続ける限り複雑度に応じてテスト工数が上昇し続ける可能性すらある根本的な問題を持ってることになる


開発手法Bに開発手法Aの核になる技術を投入してテスト工数の増大を抑えたり

そもそもテスト工数の増大を直接的に押さえれる手法の開発がそろそろ必要なのかなぁ〜

そんな事を考えてた元気に過ごした2016年もあと1日と半分になりました

さて、来年はどんな1年になるのかなぁ〜o(^-^)oワクワクですね

2016-12-28

jooby + pac4j + Auth0でログイン認証してみる

諦めてSpringにしようかと思いつつ、丸C日頑張ってみた成果


このクラスを用意する。jooby + pack4jで必要になるクラス

public class Auth0Client extends GenericOAuth20StateClient {
    public Auth0Client(final String key, // Client IDのこと
                       final String secret, // Client Secretのこと
                       final String authUrl,  // Advanced SettingsのOAuth Authorization URL
                       final String tokenUrl,  // Advanced SettingsのOAuth Token URL
                       final String profileUrl,  // Advanced SettingsのOAuth User Info URL
                       final String scope) { // 任意だけど openid email nickname こんな感じで色々取れる
        super(key, secret, authUrl, tokenUrl, profileUrl, scope);

    }

    protected String getOAuthScope() {
        return getScope(); // 何故Genericなのに上書きしない・・・
    }

    protected boolean hasOAuthGrantType() {
        return true; // GrantTypeを引数に渡す
    }
    @Override
    protected GenericOAuth20Profile extractUserProfile(String body) {
        final GenericOAuth20Profile profile = new GenericOAuth20Profile();
        if (attributesDefinition != null) {
            profile.setAttributesDefinition(attributesDefinition);
        }
        final JsonNode json = JsonHelper.getFirstNode(body);
        if (json != null) {
            profile.setId(JsonHelper.getElement(json, "user_id"));  // デフォルトはidなので変えたかっただけ
            for (final String attribute : profile.getAttributesDefinition().getPrimaryAttributes()) {
                profile.addAttribute(attribute, JsonHelper.getElement(json, attribute));
            }
        }
        return profile;
    }

}

基本的にdemoから色々取ってくるファイル群

html5.html,index.html,profile.html

あとAppからgetUserProfileもコピペ忘れずに

        get("/", () -> Results.html("index"));
        use(new Auth()
                .client("/oauth/**", conf -> {
                    return new Auth0Client(
                            conf.getString("auth.clientId")
                            , conf.getString("auth.clientSeacret")
                            , conf.getString("auth.authorizeUrl")
                            , conf.getString("auth.tokenUrl")
                            , conf.getString("auth.userinfoUrl")
                            , conf.getString("auth.scope")
                    );
                })
        );

        /** One handler for logged user. */
        Route.OneArgHandler handler = req -> {
            UserProfile profile = getUserProfile(req);

            return Results.html("profile")
                    .put("client", profile.getClass().getSimpleName().replace("Profile", ""))
                    .put("profile", profile);
        };

        get("/oauth", handler);

application.confにはこんな感じで書く

auth {
  # use default callback, require for oidc and others
  callback = "http://"${application.host}":"${application.port}${application.path}"callback"

  authorizeUrl = "https://xxxxxx.auth0.com/authorize"
  tokenUrl = "https://xxxxxxx.auth0.com/oauth/token"
  userinfoUrl = "https://xxxxxx.auth0.com/userinfo"
  clientId = "XXXXXXXXXXXXXXXXXXXXXX"
  clientSeacret = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
  scope = "openid email nickname"
}


この状態で起動した後、 localhost:8080/oauth?client_name=Auth0Client を表示すると、Auth0の画面が出てくる

その場でアカウントを作ってログインしたりすると

profileページが出てきてメアドなどの情報がゲット出来る



これ、すぐ終わると思ったのに長かった・・・

本当はconfigの自動設定もできるんだけど、そこに興味ないのでやってないw

2016-12-25

joobyのrequestに何が入ってるのか見てみた

ちょっと気になってやってみただけ

            log.debug("body {}" , request.body());
            log.debug("charset {}" , request.charset());
            log.debug("contextPath {}" , request.contextPath());
            log.debug("headers {}" , request.headers());
            log.debug("hostname {}" , request.hostname());
            log.debug("ip {}" , request.ip());
            log.debug("length {}" , request.length());
            log.debug("locale {}" , request.locale());
            log.debug("params {}" , request.params());
            log.debug("port {}" , request.port());
            log.debug("protocol {}" , request.protocol());
            log.debug("queryString {}" , request.queryString());
            log.debug("rawPath {}" , request.rawPath());
            log.debug("secure {}" , request.secure());
            log.debug("timestamp {}" , request.timestamp());
            log.debug("path {}" , request.path());
            log.debug("path(true) {}" , request.path(true));
            log.debug("type {}" , request.type());


body org.jooby.internal.EmptyBodyReference@1b3f1f61
charset UTF-8
contextPath 
headers {Host=[localhost:8080], Connection=[keep-alive], Upgrade-Insecure-Requests=[1], User-Agent=[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36], Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8], Accept-Encoding=[gzip, deflate, sdch, br], Accept-Language=[ja,en-US;q=0.8,en;q=0.6], content-length=[0]}
hostname localhost
ip 0:0:0:0:0:0:0:1
length 0
locale ja_JP
params {queryparam=[hogehoge]}
port 8080
protocol HTTP/1.1
queryString Optional[queryparam=hogehoge]
rawPath /hoge
secure false
timestamp 1482669781042
path /hoge
path(true) /hoge
type */*

他にもsessionやらflashやら色々入ってるけど気にしない

 
東京の天気予報
-天気予報コム-
<< 2017/01 >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

makotanのアンテナ

1. 「S2JDBC」を含む日記
2. アネゴの日記
3. @nifty:デイリーポータル Z
4. 「escafe」を含む日記 - はてなダイアリー
5. 原水商店 : Windows Live 支店
6. PukiWiki - FrontPageパターンWG
7. 今朝も、ベーグル。
8. 翔ソフトウェア (Sho’s) Fujiwo の日記
9. Sandbox/S2AnA - SeasarWiki
10. inside out
なかのひと あわせて読みたい