전체 글 13

최소한의 홈서버 비용

최소한의 홈서버 집에서 서버를 돌릴만한 가치가 있기 위해선 대충 다음 조건들을 반드시 만족해야 한다 홈 서버가... - (우리집) 인터넷 속도를 full로 이용할 수 있을것 - docker를 돌릴 수 있을것 - 포트포워딩 등 보안설정이 가능할 것 최소한의 홈서버 비용 IPTIME A2004M : 5만원 통신사 공유기를 쓰는 경우 포트포워딩이나 보안설정 기능이 제대로 안 되거나 하는 경우가 있다. 이때에 공유기의 TWIN IP 기능을 이용해 IPTIME같은 사설 공유기에다가 외부IP를 양도하면, 사설 공유기로 보안설정을 제대로 할 수 있다. 집에 있는 공유기의 보안 설정이 이미 잘 작동한다면 또 살 필요는 없다. Raspberry pi 4 : 9만원 라즈베리파이 3과 다르게 4는 정말로 살만하다! 왜냐? ..

라즈베리파이 인터넷 속도 테스트 with docker

openspeedtest를 이용해 라즈베리파이 인터넷 속도를 테스트해볼 수 있다. sudo docker run -p 3000:3000 -p 3001:3001 openspeedtest/latest 라즈베리파이 터미널에서 실행한다. 3000번 포트와 3001번 포트에 서버가 열린다. - 3000번: HTTP - 3001번: HTTPS 다른 컴퓨터에서 http://라즈베리파이IP:3000/ 로 접속해서 라즈베리파이 인터넷 속도를 테스트할 수 있다. openspeedtest는 서버를 연 컴퓨터(여기서는 라즈베리파이)와 접속자의 컴퓨터 사이의 인터넷 속도를 측정하기 때문에, 라즈베리파이의 최대 인터넷 속도를 측정하기 위해서는 라즈베리파이와 같은 네트워크에 연결되어 있는 것이 좋다. 라즈베리파이별 인터넷 속도 참고..

CNN(컨볼루션 신경망) - 차원에 대해 꼭 알아야 하는 것

CNN을 하면서 이런 그림을 많이 본다. 근데 실제 코드를 보고, 데이터의 차원을 보면 이게 어떻게 작동하는지 이해가 가지 않는 부분이 있다. class Autoencoder(Model): def __init__(self): super(Autoencoder, self).__init__() self.encoder = tf.keras.Sequential([ layers.Input(shape=(28, 28, 1)), layers.Conv2D(16, (3,3), activation='relu', padding='same', strides=2), layers.Conv2D(8, (3,3), activation='relu', padding='same', strides=2)]) - 인풋: 28*28*1 - 첫번째 Co..

PRGRM/ML 2021.08.19

React memo를 반드시 사용해야 하는 이유

React memo는 부모요소가 다시 렌더링될때 요소의 입력 prop이 같은 경우, 함수가 다시 실행되는 것을 방지한다. 얼핏 보면 컴포넌트의 입력 prop이 같은데 출력이 다른 경우가 있을 것 같지만, 그런 경우가 있다면 그건 잘못된 설계다. React hook에서 렌더 부분은 state와 prop에 대해 순수해야만 한다. 그런데 state도 그대로, prop도 그대로인 상태에서 재렌더링을 했다고 해서 리턴값이 바뀌면, 그것은 hook이 순수함수여야 한다는 원칙을 어긴 것이다. 사용하지 않아야 할 수도 있는 단 한 가지 예외상황은, props에 대해 객체를 넘겨줄 때 뿐이다. (부모 요소에서 객체를 넘겨줄 경우, 객체가 변화할 시에 객체의 키-값만 바뀌고 객체 자체는 바뀌지 않는 경우가 있기 때문이다...

PRGRM/JS 2021.08.18

create-react-app npm start 오류 해결법

오류와 함께 이런 매뉴얼이 뜬다. 일단 매뉴얼대로 해보고, 안되는 경우에는 다음을 체크해보라. 프로젝트 폴더 상위 폴더들에 node_modules 폴더가 있지 않은가? (node_modules는 node_modules가 위치한 폴더 아래에 있는 모든 폴더에 영향을 준다. 그래서, 상위 폴더에도 node_modules가 있고 하위 폴더에도 node_modules가 있는 경우에 모듈들이 충돌을 일으킬 수 있다.)

PRGRM/JS 2021.08.18

[Haskell] 모든 Monad는 Applicative다. >>= 만으로

모든 Monad는 Applicative다. >>= 만으로 () :: f (a -> b) -> f a -> f b fs () xs = fs >>= \fs -> xs >>= \xs -> (fs xs) 모든 Applicative는 Functor다. 만으로 fmap :: (a -> b) -> f a -> f b fmap fs xs = (pure fs) xs 아래 답변을 보고 "일반화"의 의미에 대해 생각해보면 좋다. Haskell - is there extended monad type [ m (a -> m b) -> m a -> m b ] Functor has (a -> b) -> m a -> m b Applicative has f (a -> b) -> f a -> f b Monad has m a -> (a -..

PRGRM/Haskell 2021.08.18

[Haskell] Functor, Applicative, Monad의 필요

카테고리 이론은 배제하고 설명합니다. 애초에 Functor, Applicative, Monad가 타입 클래스라는것 부터, 카테고리 이론에서 말하는 Functor, Applicative, Monad와는 거리가 있게 됩니다. (타입클래스는 연산 그 자체가 아닌, 해당 연산이 적용 가능함을 나타냄) 포장된 타입 포장된 타입은 많이 쓰입니다. 가장 가까운 예로는 Maybe가 있습니다. Maybe는 Integral을 포장할 수도, String을 포장할 수도 있습니다. 패턴 매칭으로 포장을 해제해, 포장된 타입이 보관하고 있던 값에 대한 처리를 할 수 있습니다. 보통은 유용성을 위해 처리 이후 다시 포장을 합니다. (닫힌 연산이라고 해석할 수 있습니다.) Functor 위에서 말했듯 포장된 타입이 보관하고 있는 값..

PRGRM/Haskell 2021.08.18