Failure Sharing

Bootup your energy with sharing failure.

失敗を繰り返さないこと。

私は韓国からきたアプリケーションエンジニアです。

 

社内で毎日いろいろな失敗をしています。

一回教えてもらったのに、忘れるのもあるし、そもそも知らなかったものもあるし、(あくまで外国語なので)上司の指示を理解し間違ったりするのもあります。

数え切れないですが、理由がどうであれ、同じ失敗を繰り返すのは、絶対避けたいです。

 

失敗から学ぶっていうでしょう。その考え方に基づいて、自分のミスったところを文章で書きながら振り返るのがまず一つ目の目標で、問題が何なのかとかについて、まず自ら診断、あとできれば読者の皆さんと何か生産性のある議論ができればなと思っています。

 

個人のサイトもあるんじゃあるんですけど、人が来ないので、ブログに投稿してみようと思います。ヨロピクです。

RSGT2020に当選しました。

コンテンツについての自信はあったものの、競争が激しすぎて しばらく忘れていたら、昨日当選の連絡が届きました。 嬉しいー

落選したプロポーザルもいくつか閲覧してみましたが、全部がすごすぎて 僕もその分いい内容がお伝えできるように、 しっかりと準備しようと思います。

Java Stream API

Stream API

データソースに対して様々な処理を行うAPI。 集計処理や加工が目的

How to use

  1. Streamの取得
  2. 中間操作
  3. 終端操作 いわばパイプライン処理と言える。

How to get

  1. stream() on Collection / Arrays
  2. lines() on Files / BufferedReader
  3. of() on Stream

forEach(Consumer)

  1. forEach
  2. forEachOrdered ... ensure input order

StreamAPI 種類

  1. filter(Predicate<? super T> predicate) : 条件に合致する要素を抽出する。
  2. map(<? super T, ? extends R>) : 要素を別の型に変換する。mappingって感じ
  3. peek(Consumer<? super T> action):要素の変更はなく、中間操作の確認のためのデバッグ用メソッド

allMatch(Predicate)

하나라도 틀리면 false

        Predicate<String> test = n -> {
            System.out.println("Checking ... / ");
            return n.contains("ld");
        };

        list.stream().filter(c -> c.length() > 5).allMatch(test);

Collectors

        List<Employee> emp = Arrays.asList(
            new Employee("101", "woosyume1", "Osaka"),
            new Employee("102", "woosyume2", "Tokyo"),
            new Employee("103", "woosyume3", "Osaka")
        );

        emp.stream().collect(Collectors.groupingBy(Employee::getLoc))
        .forEach((src, res) -> System.out.println(res));
[Employee [id=102, loc=Tokyo, name=woosyume2]]
[Employee [id=101, loc=Osaka, name=woosyume1], Employee [id=103, loc=Osaka, name=woosyume3]]

이 때 src는 소스...getLoc의 값

peek

        list.stream().map(f).peek(a -> System.out.println(a)); // peek만으로는 아무것도 표시되지 않는다. 중간처리이기 때문에

【Appium導入】Set Dev environment for Android (Android開発環境のセット)

インストール

brew cask install android-sdk
android 
*************************************************************************
The "android" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager
*************************************************************************
Invalid or unsupported command ""

Oh...AndroidStudioインストール時間かかるから、iOSからしよう。

【Appium導入】Install Appium on Mac (Appiumをインストールする)

Appium

Appiumは、App+Seleniumの略語として、Seleniumを利用したアプリケーションテストツールになる。 Seleniumがブラウザとのコミュニケーションをするとき使うのがJSON Wire Protocolだが、Appiumでは それを拡張したMOBILE JSON Wire Protocolにてスマホアプリケーションの起動やインストールなど、 スマホアプリ特有の多様なレイヤ・様々な動作に対応する。 Seleniumの拡張のような位置付けなので、基本Seleniumのメソッドがそのまま使える。

Introduce Appium Server

Install appium

npm install -g appium

Run appium

appium
[Appium] Welcome to Appium v1.14.2
[Appium] Appium REST http interface listener started on 0.0.0.0:4723

Lambda Summary

Functional Interface

@FunctionalInterface
public interface InnerApp {
    public void func(); // 이 줄만 정의되어 있다면 static, default 등 다른 무엇이 정의되어 있어도 함수형 인터페이스로서 인정.
    public static void test() {}
}

타입 지정 하고 안하고의 차이

Portable<Integer> p = (Integer n) -> syso(n);

// equals

Portable p = n -> syso(n);

種類

  1. Function<T, R> R apply (T t)
  2. Consumer void accept(T t)
  3. Predicate boolean test(T t)
  4. Supplier get() ... no parameter

  5. BiFunction<T, U, R> R apply (T t, U u)

Bi로 시작하면 다 인수가 2개네.

UnaryOperator

인수와 결과값의 데이터타입이 같다.

UnaryOperator<T>  T apply (T t)
// Compile Error!!
        List<Integer> codes = Arrays.asList(10, 20);
        UnaryOperator<Double> uo = s -> s + 10.0;
        codes.replaceAll(uo);

Method reference

클래스명 또는 참조변수명::메소드명

//Same
        Function<String, Integer> f = t -> t.length();
        Function<String, Integer> f1 = String::length;

Arrays.sort(array, ValueCheck::checkDef)

static메소드의 경우 new가 필요하지 않다. 1) static : 클래스명::메소드명 2) non-static : 클래스명::new::메소드명

replaceAll(UnaryOperator operator)

변환 후 재 설정

ToIntFunction ... int applyAsInt(T value)

        String str = "I am a Java developer";
        ToIntFunction<String> index = str::indexOf; // == str.indexOf(value);
        int x = index.applyAsInt("Java");
        System.out.println(x);

Initialization

Edisble meal = Food::new; // == name -> new Food(name);