안드로이드 이북 리더 추천 Koreader

koreader 는 kindle kobo 와 같은 ebook에 설치해서 사용하는 e-ink 플랫폼용 앱이다

안드로이드용 버전도 있어 이북과 타블렛을 왔다갔다 하면서 읽을 수 있다. 페이지 싱크가 된다.

특히 내가 좋아하는 기능은 흐리게 스캔된 책의 검정 글씨를 좀 더 진한 색으로 바꾸어주는 darken 기능인데 아무래도 e-ink 리더의 흑백을 고려한 기능인데 굉장히 유용하다

우리집 통신 요금 계산 및 청구서 (총 월 9.6만원)

집에서는 일단 100메가 인터넷으로 아주 만족스럽게 사용 중.

다만 wifi 음영 지역이 있어서 개선해야 한다.

인터넷/TV/전화

한달 통신비

  • 스마트광랜다이렉트 34,490 -> 16,390
  • 인터넷전화Wifi폰 16,000 -> 5,500
  • Btv_D실속형 5,000 -> 2,200
  • 전체 55,000 -> 24,090

휴대폰

첫째가 초등학생이 되어 SKT 사용을 시작하면서 내가 결합할인 이득을 독차지 하고 있다.

나름 무제한 3G 인데 (54요금제) ㅋㅋ 월 11380원이라니

폰은 중고로 mi4c 사용

첫째는 쿠키즈 요금제로 14,850원을 내고 있고

아내는 일반적(?)인 LTE 사용자로 46000원 정도 낸다고 하니

우리 온가족 통신 요금은 9.6 만원인 셈이다.

stride 도입 기념 action / decision 뭔지 확인.

회사에서 stride 를 외부망 (인터넷망) 채팅 프로그램으로 도입했다. 빠른 소통을 위한 것이라고 한다. 보통 채팅은 email 이나 bug tracker 에 비해서 “유실” 될 가능성이 높은데 기업형 메신져를 도입하면 그 대화 내용이 중앙 보관되므로 이론상 기록이 남는다.

slack은 월 8달러/인당, stride는 월 3 달러/인당

채팅과 기록의 의미라면 stride가 저렴한 듯? 채팅창에 몇가지 기능이 있는 것 같아 살펴 보았는데 결론부터 얘기하면 별거 없다.

action / decision 개요

https://www.stride.com/blog/stride-actions-decisions 이 문서에 의하면

action 과 decision 은 많은 대화속에서 중요한 대화를 찾기 위해서 만들어졌다. 당신은 action 또는 decision 을 통해 대화의 일부를 추출해 낼 수 있다. 그러면 이러한 것은 하이라이트로 들어가게 되고 누구나 언제나 참고 할 수 있게 된다. 그래서 채팅 전체 내용을 훑어보며 중요한지 아닌지를 판가름 할게 아니라 명시적으로 하이라이트 할 수 있게 해준다. 그리하여 채팅룸을 스마트 콜라보로 승화시킬 수 있다. 그렇지만 액션과 디시전은 단순히 하이라이트 하는 것만은 아니다. 다양한 방법으로 효과적으로 사용할 수 있다. 보통 액션은 특정 팀원에게 할당하는데 사용하고 디시전은 긴 토론을 요약하게 하고 그 결과를 공유하게 한다. (공지사항 같은 개념?)

어떻게 쓰는가?

action / decision 이 뭔지 알았으면 슈퍼 프로덕티브 하게 써보자. 2가지 방식으로 만들 수 있다.

  1.  메세지 위에 마우스를 올리고 대화 우측에 … 메뉴를 클릭해서 만든다. (만들 때, 사용자를 assign 하면 최고!)
  2.  아니면 그냥 대화창에서 직접 만들어라

모든 action / decision 을 확인하고 있으면 대화창 우측에 하이라이트 버튼을 클릭해라.

액션이 클릭되어서 마킹 되면, 그 내용도 채팅창에 들어가서 누구나 알게 된다.

언제 쓰는가?

actions 과 decision 들은 채팅 참여자들의 재량이다. 모든 팀은 각자 적절하게 room 이 만들어져 있을 것이다.

Action

  • 이슈를 검토하고 팀메이트에게 이슈를 할당한다. 이슈가 해소되면 박스를 클릭하면 된다.
  • 일이 완료 되었음이 동료에게 알려진다.
  • 이러한 결과를 decision 을 만들어서 중요 공지를 한다.

Decision

  •  하루 일과 및 목표를 하이라이팅 한다.
  •  중요 토론의 결과를 알린다.
  •  일과 종료시 하루 리포트를 전파하고 다음 목표를 정한다.

결론

의미를 찾아내려고 했으나 찾아낼 수가 없다.

Admin 이 개인간 대화도 볼 수 있는가 알아보니

private 방은 그 chat log를 볼 수 없고 일반 1:1 대화는 볼 수 있다.

 

 

java stream parallel 을 이용한 Thread 병렬 처리와 몇개의 core 갯수만큼 병렬 처리 하는지 확인

CPU 가 논리 코어가 16개인 AMD ryzen 7 을 사용하는데 다음의 코드를 이용하면 thread 갯수별로 각 test 가 작동하는데 걸리는 시간을 측정해 볼 수 있다.

package test.test;

import java.util.stream.IntStream;

import org.junit.Test;

public class PararrelTest {
	@Test
	public void test64SleepThread() {
		IntStream.range(1, 64).parallel().forEach(nbr -> {
			try { Thread.sleep(1000); } catch (InterruptedException e) { }
		});
	}

	@Test
	public void test32SleepThread() {
		IntStream.range(1, 32).parallel().forEach( nbr -> {
			try { Thread.sleep(1000); } catch (InterruptedException e) { }
		} );
	}

	@Test
	public void test16SleepThread() {
		IntStream.range(1, 16).parallel().forEach(nbr -> {
			try { Thread.sleep(1000); } catch (InterruptedException e) { }
		});
	}

	@Test
	public void test8SleepThread() {
		IntStream.range(1, 8).parallel().forEach(nbr -> {
			try { Thread.sleep(1000); } catch (InterruptedException e) { }
		});
	}
}

테스트 결과와 같이
16코어로 16 x 4인 64개의 Thread를 1초씩 재우면 총 4초가 걸리고 (16개가 동시에 1초씩 쉰다.)
32개의 Thread는 2초가
그리고 16개와 8개는 1초씩 쉬게 된다.

BitCoin 주소를 이용해 헌사된 Nelson Mandela 의 명언 보는 코드

Bitcoin 돈을 받을 주소를 이용해서 블록체인 속에서 사라지지 않는 영원히 기억된 문구를 만들어 낼 수 있다.

https://blockchain.info/ko/address/15gHNr4TCKmhHDEG31L2XFNvpnEcnPSQvd

다음의 블록체인 주소에 들어가면 돈을 받을 주소가 나열되어 있는데 bitcoin 의 주소값인 base58 로 인코딩된 값을 역으로 디코딩 하여 출력하면 된다.

import static org.junit.Assert.*;
 
import java.io.UnsupportedEncodingException;
 
import org.apache.commons.lang3.StringUtils;
import org.bitcoinj.core.AddressFormatException;
import org.bitcoinj.core.Base58;
import org.junit.Test;
 
public class AddressDecodeTest {
 
    @Test
    public void test() throws AddressFormatException, UnsupportedEncodingException {
 
        String[] addresses = new String[] { "147qLbMuBPkhjGQjUxnizD1yGwEe18dMHn", "1AX5aSgcG2foSZpLdZD1vK6psojfBn9kwg",
                "1BceWTRrBwdivd3iC8xdwzqDnhwxfTxAsF", "1AyMMCme4dvs1AUcqQ2PcbVKYVVeC6Hkps",
                "1AcUCFbhKakvZeU8rems4aYtbjYStBRhcT", "1AX5XTatAggFnXZcawEJMHTKQCR3q6bciN",
                "1Bo1t2bNDDjhQ97D1T1E46zN7S5HHR44sp", "1AtSGJU3cTZLSVd4EvgnhmmDkdGJLinvVS",
                "1AtSGJU3dPEFVyiM2F6uDEbj5uSkAWHZiU", "1AFH5i3kaK7fEc78J1qkKhRWrMMFeuXcFf",
                "1A4UcZRARjdmHj8yLhF4iTDGGDQdqrzKY6", "1AFV8QDL4CfoqX9XhW3nGH6y7yipzpL3ty",
                "1A4e8xqe4g7dNNGYshX1wJCthVgoEwCybK", "1AcaG12FaR1AcEt4cJR7LqX3o6vTyyPaau",
                "1AFRWKXxi7JLfpvjxW3kuruW4eVG7W1NiJ", "1KubhUHhzzGcjprzrCsDtWzZEFYABtofCd",
                "1AcF19MRkLP8RPSzhpoHNU3NJVPTrsssQy", "16DLmocGtmcp7RckgywoLKnKLaRY4aV5Ka",
                "1B3pxn1mBuLQS7yr2YLcsC9VSjQj2m9Hxk", "1AFZvFuA5Pv3RTw679GfVYbAzykZqm3Ys2",
                "1AcHQwytpRKkX71DQasUk5TMw6qNED2Yqw", "15gHNr4TCKmhHDEG31L2XFNvpnEcnPSQvd",
                "15VAeb5KsRqbyNWWp7WHSACuVQahe5ngS7", "112CUyPHVEi3zyHViBzP3poagnvyUomYZ ",
                "1A8gyj9ETeGkS1hea2crNp1oJ7HfcRMuK8", "17mkD8JSfeVDx11ZumnEuKo6wVNw9mhipU",
                "1C3TPCe4pni96eQQXLFFe8LvV41qSC2KcL", "12TyUzmb4nCVVW87dsHUJCXvLWBYPuTpzB",
                "17xQY1Wan8TDFAmVtg8pe9mNDfp84YEn7r", "1BtmNAkEvWEts9is65unceNpRpgo9R2MxE",
                "16iwZjYtLBDUBxcMDvbjkX4fT6mEMGrWW ", "1CMDvFD3fgCw43u9p6EiWptaLLuz4byZGL",
        };
 
        for (String address : addresses) {
 
            byte[] decodedAddress = Base58.decode(address);
            String str = new String(decodedAddress, "UTF-8");
 
            System.out.println(str.substring(6, str.length() - 2));
        }
    }
}

JIRA 에 BigPicture 설치

회사에서 JIRA를 사용하는데 프로젝트를 매니징 하기 위해서 BigPicture를 설치하였다.

Agile 이 항상 좋은 것일까? 아니면 내가 Agile을 잘 몰라서 그런 것일까?

해야 할 일을 순서대로 정하고 자주 deploy 할 수 있도록 해야겠다. BigPicture 사용법을 블로그에 올릴 예정.