'분류 전체보기'에 해당되는 글 99건
- 축적의 시간II - 이정동 교수 2017.07.21
- 어쩌다 어른 2017.07.21
- How to install subversion 1.6.x on Mac 2014.07.13
- [HBase] Client 개발 참고 사항 2014.03.12
- [MySQL] 멀티 컬럼 select 2014.03.12
- [MySQL] 실행계획(EXPLAIN) 2014.03.12
- status vs state 2014.01.03
- 추억의 수학함수들 2013.11.20
- [NoSQL] CAP 이론 2013.11.14
- 흠.. 스팸댓글 때메 워드프레스로 옮길까 싶네.. 2013.11.11
축적의 시간II - 이정동 교수축적의 시간II - 이정동 교수
Posted at 2017. 7. 21. 00:13 | Posted in 좋은글KBS 스페셜 - 축적의 시간II - 이정동 교수
아이디어는 발에 차일 정도로 널렸다
스케일업이 필요하다
끈기있게 하나씩 실험하고 연습하고 반복해서 노하우를 쌓아야 한다. 이것이 '스케일업' 이다.
오랜시간이 필요.
구글과 애플이 내놓는 혁신은 오랜시간 스케일업의 결과이다. 절대 반짝이는 아이디어 때문이 아니다.
지금 어려우니 조금 더 좋아지면 스케일업 하자. 이것은 틀렸다. 살기 위해서 지금 해야 한다!
구글 애플도 여유 없기는 매한가지다.
역량이 뛰어난 한국의 10년 경력 엔지니어는 100년동안 스케일업 해온 회사의 같은 경력을 가진 엔지니어를 '절대' 이길 수 없다. 이 엔지니어는 110년 경력의 엔지니어이기 때문이다.
소비자는 정체성이 있는 제품을 원한다. 자기만의 색깔이 있어야!
항상 새로운 아이디어를 요구하거나 선택과 집중을 이야기하는 리더는 '옛날' 리더이다.
어쩌다어른 - 허태균
한국사람의 심리를 파헤치다
아이패드-신문을듣다 전화를보다 별을만지다
한국-더크게 더 빠르게 더세게-패스트팔로어-왜 만드는지 모르는것이다
실용성을 이기는 상징성-웨딩드레스
가상현실 - 아빠가 태워주는 자전거
나만의 이유, 나만의 가치를 찾아라, 찾아줘라
———————————————
감각을 파헤치다 - 김경일
다양한 경험을 해야 오래 산다
개발자들은 뭐든 만들수 있다고 말한다. 하지만 뭘 만들지를 모른다.
이건 경험이 부족해서이다 - 스티브잡스
비슷한 경험을 계속하면 시간이 빨리 간다.
다양한 경험을 해야 오래 산것 같은 느낌이 든다.
—> 귀차니즘을 타파해야 한다.
큰 성공 거둔 사람은 미래가 절대 안변한다고 생각한다.
미래를 작게 예측하더라. —> 빌게이츠 640kb
How to install subversion 1.6.x on MacHow to install subversion 1.6.x on Mac
Posted at 2014. 7. 13. 01:14 | Posted in OS/Maccheck subversion versions (on OS X 10.9.3)
$ brew versions subversion 1.8.9 git checkout 9b75c92 /usr/local/Library/Formula/subversion.rb 1.8.8 git checkout c6cf8ac /usr/local/Library/Formula/subversion.rb 1.8.5 git checkout fa4311c /usr/local/Library/Formula/subversion.rb 1.8.4 git checkout ce669eb /usr/local/Library/Formula/subversion.rb 1.8.3 git checkout 9b438ce /usr/local/Library/Formula/subversion.rb 1.8.0 git checkout f56b641 /usr/local/Library/Formula/subversion.rb 1.8.1 git checkout 55577bb /usr/local/Library/Formula/subversion.rb 1.7.10 git checkout 0060dc3 /usr/local/Library/Formula/subversion.rb 1.7.9 git checkout b0e6223 /usr/local/Library/Formula/subversion.rb 1.7.8 git checkout f7a42d2 /usr/local/Library/Formula/subversion.rb 1.7.7 git checkout a6dcc41 /usr/local/Library/Formula/subversion.rb 1.7.6 git checkout 6b8d25f /usr/local/Library/Formula/subversion.rb 1.7.5 git checkout 5d5cd70 /usr/local/Library/Formula/subversion.rb 1.7.4 git checkout dc4245c /usr/local/Library/Formula/subversion.rb 1.7.3 git checkout eb97154 /usr/local/Library/Formula/subversion.rb 1.7.2 git checkout d89bf83 /usr/local/Library/Formula/subversion.rb 1.6.17 git checkout 6e2d550 /usr/local/Library/Formula/subversion.rb 1.6.16 git checkout 83ed494 /usr/local/Library/Formula/subversion.rb
get 1.6.16 version formula
$ git checkout 83ed494 /usr/local/Library/Formula/subversion.rb
install subversion
$ brew install subversion
If an error occurs like this... 만약 빌드 도중 이런 에러를 만나면..
checking whether Apache version is compatible with APR version... no configure: error: Apache version incompatible with APR version
add --without-apx configure argument. configure 옵션에 --without-apxs 를 추가해준다.
/usr/local/Library/Formula/subversion.rb 파일을 열어 configure args에 --without-apxs 옵션을 추가.
https://github.com/Homebrew/homebrew-versions/issues/373
https://github.com/Homebrew/homebrew-versions/commit/1d203e29e6219967164337a00672fc071e355cec 참조
check subversion version
$ svn --version
If version is different, switch version
$ brew switch subversion 1.6.16
and re-check svn version on new terminal
$ svn --version svn, version 1.6.16 (r1073529) compiled Jul 13 2014, 00:18:37 Copyright (C) 2000-2009 CollabNet. Subversion is open source software, see http://subversion.apache.org/ This product includes software developed by CollabNet (http://www.Collab.Net/).
Completed.
[HBase] Client 개발 참고 사항[HBase] Client 개발 참고 사항
Posted at 2014. 3. 12. 14:50 | Posted in Serverpublic class BaseHTableInterfaceFactory implements HTableInterfaceFactory { private HTablePool hTablePool; public BaseHTableInterfaceFactory(Configuration config, int maxSize) { hTablePool = new HTablePool(config, maxSize); } @Override public HTableInterface createHTableInterface(Configuration config, byte[] tableName) { return hTablePool.getTable(tableName); } @Override public void releaseHTableInterface(HTableInterface table) throws IOException { table.close(); } }
public HTable(Configuration conf, final byte [] tableName) throws IOException { ... int maxThreads = conf.getInt("hbase.htable.threads.max", Integer.MAX_VALUE); if (maxThreads == 0) { maxThreads = 1; // is there a better default? } long keepAliveTime = conf.getLong("hbase.htable.threads.keepalivetime", 60); // Using the "direct handoff" approach, new threads will only be created // if it is necessary and will grow unbounded. This could be bad but in HCM // we only create as many Runnables as there are region servers. It means // it also scales when new region servers are added. this.pool = new ThreadPoolExecutor(1, maxThreads, keepAliveTime, TimeUnit.SECONDS, new SynchronousQueue(), Threads.newDaemonThreadFactory("hbase-table")); ((ThreadPoolExecutor)this.pool).allowCoreThreadTimeOut(true); /* 설명: 기본 생성자의 설정이다. coreThread=1, maxThreads=Integer.MAX_VALUE 이고, SynchronousQueue를 사용한다. 따라서 region 서버 수만큼 Thread를 생성하고 keepAliveTime 동안 유지했다가 Thread를 죽인다. 뜨문 뜨문 호출되는 경우 Thread가 만들어졌다 없어졌다를 반복할 것이므로, 환경에 맞게 조정해서 사용하라. */ ... }
- 일괄처리 연산은 Put처럼 쓰기버퍼를 사용하지 않는다. 동기적이며 바로 바로 처리한다.
- 각 작업에 대한 결과를 따로 보고 받을 수 있다. (Object results[])
- 일괄처리 명령은 NotServingRegionException(리전 이동을 알리는 예외)와 같은 일시적인 에러에는 여러 번 시도해본다. hbase.client.retries.number 속성이며 기본값은 10이다.
RowLock/Scanner
- hbase.regionserver.lease.period = 60000 (1분) 락 만료 시간 또는 스캐너 임대 만료 시간에 모두 사용됨.
- hbase.client.pause = 1000
- hbase.client.retries.number = 10
- hbase.client.rpc.maxattempts = 1
- hbase.rpc.timeout = 60000
- hbase.client.prefetch.limit = 10
참고: 소스분석 & O'Reilly - HBase 완벽 가이드
[MySQL] 멀티 컬럼 select[MySQL] 멀티 컬럼 select
Posted at 2014. 3. 12. 11:03 | Posted in Server`userid` bigint(20) NOT NULL,
`groupid` bigint(20) NOT NULL,
`state` tinyint(1) NOT NULL,
`col1` bigint(20) DEFAULT NULL,
`cal2` varchar(200) NOT NULL,
`cal3` varchar(100) NOT NULL,
`create_time` datetime NOT NULL,
`update_time` datetime NOT NULL,
PRIMARY KEY (`userid`,`groupid`),
KEY `idx_userid_createtime` (`userid`,`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
(1) 컬럼 조합 IN 쿼리
EXPLAIN
SELECT *
FROM mytable
WHERE (userId, groupid) IN ((1526291770280964803,2679212559264916326),(1526292017760867305, 2679249801360511502),(1526421185616035771,2679342905646882845));
id|select_type|table |type|possible_keys|key |key_len|ref |rows|Extra
1 |SIMPLE |mytable|ALL |NULL |NULL|NULL |NULL|172 |Using where
index를 타지 않는다.
(2) FROM절 subquery
EXPLAIN
SELECT a.* FROM (SELECT * FROM mytable WHERE userid IN (1526291770280964803,1526292017760867305,1526421185616035771)) a
WHERE a.groupid IN (2679212559264916326, 2679249801360511502, 2679342905646882845);
id|select_type|table |type |possible_keys|key|key_len|ref|rows|Extra
1 |PRIMARY |<derived2>|ALL |NULL|NULL|NULL|NULL|15|Using where
2 |DERIVED |mytable |range|PRIMARY,idx_userid_createtime|PRIMARY|8|NULL|15|Using where
userid가 index를 탄다. groupid도 인덱스를 걸어줘야 할 듯.
(3) 각 컬럼에 대해서 IN query
EXPLAIN
SELECT *
FROM mytable WHERE userid IN (1526291770280964803,1526292017760867305,1526421185616035771) AND groupid IN (2679212559264916326, 2679249801360511502, 2679342905646882845);
id|select_type|table |type |possible_keys|key|key_len|ref|rows|Extra
1 |SIMPLE |mytable|range|PRIMARY,idx_userid_createtime|PRIMARY|16|NULL|9|Using where
결론) 3번이 가장 나아보임.
[MySQL] 실행계획(EXPLAIN)[MySQL] 실행계획(EXPLAIN)
Posted at 2014. 3. 12. 10:39 | Posted in Server- ALL: full scan (extra에 "Using ditict"/"not exists" 가 있거나 LIMIT있는 쿼리는 예외)
- index: full scan but index order. 장점:정렬할 필요 없다. 단점: 전체 테이블을 인덱스 순서로 읽어야해서 random access가 일어남(비용 큼). (extra에 "Using index"가 나오면 커버링 인덱스를 사용하는 것임.(인덱스의 데이터만을 스캔한다는 것임))
- range: 제한된 형태의 index 스캔. index보다는 나은 성능을 보인다. 범위에 따라 성능차가 있다.
- ref: 어떤 조건 하나에 매치되는 행들을 반환해주는 인덱스 접근 방식. 여러개의 행을 찾게 될 수도 있으므로 탐색과 스캔이 함계 사용된다. unique하지 않은 인덱스 검색이 걸릴때 사용된다.
- eq_ref: MySQL이 기껏해야 값 하나만을 반환한다는 것을 알때 사용됨. 기본 키 혹은 unique 인덱스에 걸릴때 사용.
- const, system: 쿼리의 일부를 상수로 대체해서 최적화 할 수 있는 경우.
- NULL: 인덱스나 테이블에 접근조차 하지 않는 경우.
key: MySQL이 최적화를 위해 어떤 키를 사용하기로 했는지를 나타냄.
key_len: MySQL이 인덱스에 얼마나 많은 바이트를 사용하는지를 보여줌.
ref: key 에 나와 있는 인덱스에서 값을 찾기 위해 선행 테이블의 어떤 컬럼(또는 상수(const))이 사용되었는지를 나타냄.
rows: 원하는 행을 찾기위해 얼마나 많은 행을 읽어야 할지에 대한 예측값. 예측값은 인덱스의 선택도와 테이블 통계 정보에 의존적이므로 정확도가 상당히 떨어질 수도 있다.
MySQL이 조사해야 할 것이라고 생각하는 행 수를 의미할 뿐 결과에 있는 행 수를 의미하지 않는다. 여기서 보여지는 행 수가 그리 중요하지 않을 수도 있다. 예측한 모든 행을 읽지는 않을 것이며, 대체로도 그렇다.
extra: 앞 선 컬럼에 적합하지 않은 나머지 정보를 표시. (중요하고 빈번한 몇가지만 나열)
- Using index: 커버링 인덱스를 사용한다는 것을 알려줌.
- Using where: MySQL서버가 스토리지 엔진에서 값을 가져온 뒤 행을 필터링한다는 것을 의미.
- Using temporary: MySQL이 쿼리 결과를 정렬하기 위해 임시 테이블을 사용한다는 것을 의미.
- Using filesort: 이는 MySQL이 결과의 순서를 맞추기 위해 인덱스 순서로 테이블을 읽는 것이 아니라 외부 정렬을 사용해야 한다는 것을 의미. 메모리나 디스크에서 수행될 수 있으며, EXPLAIN으로는 어떤 방식을 사용하지는, 디스크에서 하는지 메모리에서 하는지 등은 알 수 없다.
- Range checked for each record(index map:N): 적합한 인덱스가 없으므로 각 레코드의 조인에서 각 인덱스들을 재평가한다는 것을 의미한다. N은 possible_keys에 나타나 있는 인덱스들의 비트맵 값이다.
status vs statestatus vs state
Posted at 2014. 1. 3. 16:30 | Posted in Etcstatus == how are you? [good/bad]
state == what are you doing? [resting/working]
로그함수(log func)
log2 8 = 3 (8이 되는 2의 지수를 구하는 함수. 항상 (1,0)을 지난다.)
곱하기 및 나누기의 계산을 간편하게 해내기 위해 존 네이피어가 발명한 것으로 알려져 있다.(위키피디아)
매우 큰 수를 다루기 위한 방법을 모색하던 중에 나온 함수. 곱셈을 덧셈으로 변환시킴으로써 천문학적 수를 계산하는 부담을 엄청나게 줄여 주었다.
은행에 예금한 돈이 언제 두 배가 되느냐 하는 문제를 풀어 본 기억이 있을 것이다.
꽤 복잡한 수식 이었다고 생각이 된다. 그러나 그 답은 아주 쉽게 얻을 수 있다.
즉 0.7이란 수를 이율로 나눠 주기만 하면 된다.
만일 연 이율이 14%라면 5년(0.7/0.14=5)이 걸리고 요즈음처럼 이자율이 내려가서 7%인 경우는 10년이 걸리는 셈이다.
그러면 0.7이란 수는 과연 무엇일까.
이는 2의 자연 로그인 것이다. 어떤 수의 자연로그는 그 수와 같아지는 e의 지수를 나타내므로, 2의 자연로그는 e0.7 =2에서 0.7이 된다.
상용로그의 밑은 10이다: 보통 밑(base)을 생략하고 log x 로 사용한다.
지수함수(exponential func)
y = a^x (a의 지수값을 구하는 함수. 항상 (0,1) (1,a)를 지나는 성질이 있고, x값은 0에 수렴한다. 0이 되지는 않는다. a>1 이어야 한다.)
미분(differential)
미세하게 쪼갠다는 의미이다. 곡선에서 가장 가까운 직선인 접선을 구하는 것이 미분이다.
이 접선의 기울기가 미분계수이며 곡선의 순간 변화율을 의미한다. '접선의 기울기의 함수'라고 보면 된다.
기울기를 구해야 하므로, 두 접의 델타(차이)값으로 구한다.
물리에선 시간에 대해서 "위치미분=속력", "속력미분=가속도"가 된다. 광학에서 곡선이나 곡면으로 빛을 쏘았을 때 반사되어 나가는 빛의 방향을 찾을 때 접선의 기울기를 구하면, '빛의 입사각과 반사각이 같다'는 단순한 원리로 알아낼 수 있다.(네이버캐스트 미분의 응용)
미분은 쪼개기, 적분은 합치기.
도함수(derivative)
함수 y=f(x)를 미분하여 얻은 f'(x)를 말하며, f(x)의 미분계수라고도 한다. 미분계수는 접선의 기울기이며 평균변화율의 극한값이다.
미분방정식
미분하여 f'(x)가 되는 x의 원래 함수 f(x)를 구하는 것을 미분방정식을 푼다라고 한다.
적분(integral)
'적'은 누적의 뜻. 적분은 미분의 역함수.
일반함수를 적분하면 면적함수가 되고, 면적함수를 미분하면 일반함수가 된다.
sum의 s를 길게 늘어뜨린게 적분기호 ∫ 인테그랄(integral)이다.
"x를 a부터 b까지 변환시키면서 f(x)에 dx를 곱한 것을 전부 합쳐라"라는 의미. f(x)는 y값이고, dx는 x축의 임의의 델타값인데, 높이(y=f(x))와 밑변(dx)의 곱은 넓이(면적)이 나오게된다. 이 때 가로(밑변)길이를 1/2하여 무한히 반복하여 나누면(극한으로 보내면) 0은 아니지만 0에 가까운 값이 되는데 이것이 dx이며, 높이(y=f(x)) 곱하기 밑변(dx)을 하면 하나의 기다란 선처럼 될 것이다. 이 선들을 모두 sum하는 것이 적분이다. 즉 넓이(면적)을 구할 수 있게 된다.
이것을 응용하여 이 함수 그래프를 x축을 중심으로 회전시키면 입체도형의 부피를 구할 수 있다. 높이(y=(fx)) 곱하기 밑변(dx)가 가느다란 선이므로, 이 선을 회전시킨다고 하면 이 선의 길이(=높이)는 반지름이 되게 된다. 이 반지름의 원 면적을 구해 sum하면 부피가 나오게 된다.
초월수
대수적 수(유리수를 계수로 가지는 다항방정식의 해가 될 수 있는 수)의 반대 개념.
계수가 유리수인 어떤 다항식의 해도 될 수 없는 수.
초월수 파이(π)
3.141592...
초월수 자연로그의 밑 e
자연로그는 상용로그과 구분하기 위해 ln x로 사용한다.
e=1+1/1!+1/2!+1/3!+…=lim(1+1/x)^x = 2.71828…
e는 자연로그의 값이 1이 되는 수이다??
흠.. 스팸댓글 때메 워드프레스로 옮길까 싶네..흠.. 스팸댓글 때메 워드프레스로 옮길까 싶네..
Posted at 2013. 11. 11. 01:10 | Posted in Etc이번 스킨은 깔끔하니 맘에 드는데,
티스토리 스팸댓글 때문에 지저분해진다..
로그인 사용자에게만 댓글 허용하면 괜찮을라나?
아래 큼지막한 광고도 작을걸로 줄이고, 공사가 한번은 필요한 듯.
근데 너무 귀찮다..ㅎ