목록스터디 (150)
올해는 머신러닝이다.
Scaffold 위젯 추가 Flutter 카카오톡 오픈 채팅방 바로가기 : https://open.kakao.com/o/gsshoXJ 기본적으로 모바일 구조가 상단에 Appbar가 있으며 하단에 바텀시트가 있으며 floating action button이 있다.그 구조를 기본적으로 지원하는 하나의 위젯이 Scaffold라고 보면 된다.그럼 하나씩 적용해보자.import 'package:flutter/material.dart'; void main() { var app = MaterialApp( home: Scaffold( appBar: AppBar(), // 추가 ), ); runApp(app); }짜잔~ 이런 타이틀바가 생긴걸 볼수 있다. 이걸 AppBar 라고 한다.그리고 아래 floating butt..
Flutter 시작하기. Flutter 카카오톡 오픈 채팅방 바로가기 : https://open.kakao.com/o/gsshoXJ Flutter는 구글에서 나온 모바일 프레임워크입니다. Reactive Native 와 비슷하다고 보면 될것 같습니다. 네이티브 성격을 가진 하이브리드 앱인 셈이죠.무엇보다 강력한 점은 각 플랫폼(Android, IOS)에 있는 대표 디자인 즉 메테리얼 디자인을 손쉽게 짤수가 있습니다.하지만 플랫폼별로 다르게 나올수가 있는데 그 이유는 메테리얼도 플랫폼에 맞게 바뀌어서 나올 수 있기 때문입니다.만약 IOS 에서 특유의 시스템을 이용하고 싶으면 쿠퍼티노 위젯을 사용하면 됩니다.그 외에도 안드로이드 스튜디어, 비쥬얼 스튜디어 코드등 통합 IDE 도 사용 가능한 점이 큰 메리트입..
Pm2를 이용한 Spring boot deployEC2에 노드 서비스를 배포 함에 있어서 forever와 pm2를 이용을 하는 편이다.Pm2는 슬랙이나 외부 연동도 좋아서 자주 이용되는 편이다.그래서 이번에 Spring boot 도 배포를 하는데 pm2 를 이용할 수 있을까 찾아보니 당연히 가능하다.우선 스프링 부트를 배포를 해보자.mvn package 그럼 war or jar 파일이 나올것이다.나온걸 서버로 올려놓고. 노드를 설치를 한다.나는 주로 nvm 을 이용해서 설치를 하는 편이다.https://medium.com/@jjeaby/nvm-node-%EC%84%A4%EC%B9%98-a4bcab00a5efhttps://github.com/creationix/nvm설치를 진행 한 다음 pm2를 설치를 하..
가변 인자를 보통 넣어서 사용시 ( ... )로 사용되는데 이를 Variadic 이라고 한다. 예를 보자. func sum(numbers ...int){ sum := 0 for _, num := range numbers { sum += num } return sum } sum(1,2,3) //6 sum([]int{1,2,3}...) //6 sum(1) //1Sum 함수는 int 인자값에 대한 가변적으로 가능하다. sum([]int{1,2,3}...) //6의 경우 뒤에 ... 을 붙여서 할수 있는데 더 예를 보자면func f(ids []int){ // } func service(id int){ f([]int{id}) } func service2(id []int){ f(id) }위를 Variadic 을 적..
apt-get update apt-get install python2.7 ln -s /usr/bin/python2.7 /usr/bin/python
Boltdb 연동공식 Github빠르고 효율적인 저레벨 DB 중 하나인 bolt db 이다. key, value 로 되어있고 byte로 값을 넣을 수 있다는 장점이 있다.우선 설치는$ go get github.com/boltdb/bolt/... // DB 여는 작업 package main import ( "log" "github.com/boltdb/bolt" ) func main() { // Open the my.db data file in your current directory. // It will be created if it doesn't exist. db, err := bolt.Open("my.db", 0600, nil) if err != nil { log.Fatal(err) } defer db..
Golang 으로 CRUD Restfual Api 만들기최근 블록체인을 공부하면서 이더리움 코어를 보고 싶다는 생각이 자주 들었다. 그리고 하이퍼레저에서 스마트 계약 개발시 Go 로 짜고 있는 걸 보고 고랭을 배워야 겠다는 마음을 먹고 하나씩 보고 있습니다.언어를 제일 배우고 제일 먼저 해보는 건 무엇보다 게시판 하나 짜보는 거겠죠?그래서 Restful Api 를 먼저 구성해보고 화면단을 만들어서 해보도록 합니다.어설픈 TDD 방식으로 하나씩 짜보도록 하겠습니다.우선 Go 가 아직 설치가 안되신 분은 https://golang.org/dl/ 으로 가셔서 받으시길 바랍니다.그리고 환경 설정을 해줍니다.혹시 Gopath 와 Gopath bin 설정이 안되신 분은 여기 에서 따라해보시면 됩니다.현재 DB는 몽..
윈도우 상에서 도커를 이용해서 몽고 DB 세팅윈도우상에서 몽고디비 설치시 가끔 오류 나는 부분이 있다. 그럼 설치도 안되고 개발도 안된다.그럴때 도커를 이용해서 빠르게 테스팅을 할수 있다.우선 도커를 켜서 다음 명령어를 하자.docker pull mongo docker run --name database -d -p 27017:27017 mongo --noauth --bind_ip=0.0.0.0 27017 포트에 0.0.0.0 으로 바인딩하는 문구이다.-noauth 는 아이디랑 비번없이 들어갈 수 있다.만약 설정시 아래와 같이 가능하다.docker run --name some-mongo -d mongo --auth docker exec -it some-mongo mongo admin db.createUse..
다트 기본온라인 다트 편집기에서 실행가능하다.https://dartpad.dartlang.org/함수편기본 출력void main() { var test = "test"; print('test = $test'); }기본값 설정void printMsg(String msg, [String value = 'undefined']) { print('msg = $msg, value = $value'); } void main() { printMsg('1234', '5678'); printMsg('1234'); } ........................ msg = 1234, value = 5678 msg = 1234, value = undefinedname, value 쌍으로 map 형태로 인수 넣기void pri..
Java for Dart Codelab다트는 타입이 있는 언어입니다.온라인에서 에디터를 실행 후 바로 테스팅이 가능합니다.https://dartpad.dartlang.org/다트를 특별하게 만드는 이유생성자를 만드는 방법매개 변수를 지정하는 다양한 방법getter , setter 를 만드는 방법 및 시기다트가 privacy 를 처리하는 방법팩토리를 만드는 방법다트에서 함수형 언어가 동작되는 방법다른 다트 콘셉 그럼 시작해보자.class Bicycle { int cadence; int speed; int gear; } void main() { } main 함수로 실행한다.만약 argument를 가지고 싶다면 main(List args) 를 사용할 수 있다.기본적으로 접근 제어자는 가지고 있지 않다. 예를 ..
Geth 설치 및 로컬에 세팅 (윈도우 기준)로컬 테스트넷에서 Geth 를 가동하기 위해선 두가지를 준비해야함데이터 디렉터리 ( chaindata )Genesis.json 파일윈도우 기반에서 진행한다.윈도우로 GETH 설치를 진행하자. https://geth.ethereum.org/downloads/genesis.json 을 만들자.{ "coinbase" : "0x0000000000000000000000000000000000000001", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x8000000", "nonce" : "0x0000000000000042", "mixhash" : "0x000000000000000000000000000000000..
2018년 3월 9일자 확인됨우분투에 서버 설치하기시작하기전 기본 설정EC2 기본형 올리기 (프리티어급)express 노드 앱이 준비 되어 있다는 가정putty나 맥을 통해서 터미널로 접속이 가능해야함 (pem 파일 이미 등록된 상태)DB는 AWS RDS 이용합니다.파일 서버는 S3 이용합니다.방화벽 설정하기aws ec2는 콘솔에서 설정가능참고 링크 :https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-16-04ufw allow 80 Nginx 설치일반적으로 우분투에 설치시 최신버전을 설치를 안한다. 그래서 저장소 키를 가져와서 직접 최신걸로 업데이트를 할 수 있다.참고내용 :https://..
배열과 연결된 리스트의 장단점2장에서는 주된 설명은 배열과 연결된 리스트에 대한 비교 설명이 있었다.배열은 검색이 빠른 반면 삽입이 느리다는 것연결된 리스트의 경우 삽입이 빠르지만 검색부분에선 배열보다 느리다는 장단점이 있다.선택정렬 (Selection Sort)2번째 알고리즘 문제이다.만약 주어진 배열이 있으면 그 배열을 정렬하고자 할 때 선택정렬을 사용할 수 있다.기본 흐름은 다음과 같다. (순차적 정렬시)배열에 가장 작은 값 검색가장 작은 값 위치 값 획득그 위치 값을 배열에서 제거 하고 새로운 배열에 하나씩 추가함그렇게 해서 최종 새로운 배열로 결과값을 보여줌Python3 으로 구현시 다음과 같다.def findSmallest(arr): smallest = arr[0] smallest_index ..
이진탐색 (Binary Search)시나리오1~1000개 숫자 의 배열에서 특정 숫자만 뽑아내고 싶을 경우 어떻게 해야 될까?리스트로 한개씩 넣어서 검색해서 운좋으면 빠른 시간안에 검색이 될 수 있으나 최악의 경우 1000번의 수행을 해야 한다.이진탐색 알고리즘을 통해서 전체의 반을 검색하고 다시 반을 검색하는 방법을 사용할 수 있다.예를 들어 100의 중간 50부터 시작되는 함수로 시작된다4번만에 답을 찾은 경우이다. 그럼 log2 16 = 4 이라고 표시한다.즉 로그는 거듭제곱의 반대말이다.지수표현이 잘 안됨..10^2^ = 100 -> log10100 = 210^3 = 100 -> log101000 = 32^3 = 8 -> log28 = 3 (결과값을 앞으로 보내면 된다.)2^4 = 16 -> lo..
Truffle를 활용한 Pet-Shop 튜터리얼 분석광고 클릭시 많은 힘이 됩니다. Truffle 튜터리얼 중 펫샵을 활용해서 프론트 까지 적용해서 어떤식으로 웹에서 연동되는지 살펴보자.아래 주소에 있는 내용은 깔끔하게 정리되어 있다. 따라해보는 걸 추천한다. http://truffleframework.com/tutorials/pet-shop여기 글은 펫샵에 사용되는 소스를 분석해보자 한다. 이더리움 플랫폼 위 DAPP개발 프레임워크 중 하나인 truffle사용시 개발시 순서는 다음과 같다.개발환경을 설정한다.truffle box( 보일러 플레이트처럼 만들어준다.)를 이용해서 pet-shop 을 해제스마트 계약 소스를 (.sol) 작성한다.컴파일 및 배포를 한다.Ganeche 를 통해 테스팅을 한다.웹 ..
Truffle기초 - 계약 디버깅과 테스팅광고 클릭시 큰 힘이 됩니다. 감사합니다. Truffle디버깅 및 테스팅 하는 방법을 알아보자.Truffle 은 DAPP 개발을 편하게 해주는 프레임워크이다. 테스팅 및 컴파일, 배포까지 쉽게 해준다.테스팅은 Ganache 를 이용한다. Ganache 은 개발모드에서 가상으로 테스팅 및 배포까지 하게 해주는 프레임워크다른 웹에서 쉽게 테스팅을 할시 http://remix.ethereum.org/ 에서 쉽게 가능하다.그리고 truffle에서도 지원한다.우선 작업 할 폴더를 구성하자.mkdif simple-contract cd simple-contract truffle을 초기화를 해서 기본 구성을 만들 수 있다.truffle init 기본 구성은 위와 같이 나온다.b..
광고 클릭시 많은 힘이 됩니다. 감사합니다. 혹시 크립토키티 라는 걸 듣어보셨나요? 이더리움상에서 DAPP 형태로 고양이를 랜덤으로 만들어서 거래까지 가능한 플랫폼이다.현재 매출은 1200억 달러를 넘어섰다고 한다. 관련 기사 모음블록체인으로 만든 게임, '크립토키티스' 다시금 화제이더리움 가능성 - 한계 보여준 고양이 게임이런 플랫폼 게임 개발시 필요한 DAPP 개발 지식을 무료로 튜터리얼식으로 만들어서 공유 하는 곳이 있다.크립토좀비 바로가기왼쪽에는 설명이 나오고 오른쪽은 코드 실습을 통해서 하나씩 배워나가는 방식이다. 개발 내용은 DAPP 개발시 필요한 솔리티디 언어로 진행한다. 레벨이 현재 5개로 나누어 (계속 추가될 예정) 지며 각각의 레벨과 함께 게임도 같이 만들어 나가는 재미도 있다. 이 글..
광고한번 눌러주시면 크게 힘이 됩니다. 이번 포스팅은 제 딸들 코인인 수지토큰 을 발행해보겠습니다.우선 토큰과 코인은 차이가 있습니다. 코인과 토큰의 차이점?? 그럼 시작해보겠습니다. 우선 결과물은 다음과 같습니다.이더리움에 올릴수 있는 토큰은 ERC20 규격으로 만들수 있다. 이 토큰을 가지고 ICO에 올려서 서로간의 거래를 할 수 있습니다. 그럼 시작해보자. ERC20 위키바로가기규격 인터페이스 형태는 다음과 같다. 12345678910111213141516171819contract ERC20Interface { //총 갯수 function totalSupply() public constant returns (uint); //주어진 토큰오너에 대한 잔액조회 function balanceOf(addre..
예제로 배우는 DAPP 개발해보기 - 복권편이더리움 블록체인 위에 어플리케이션 형태로 올려서 개발할 수 있는 DAPP을 예제로 배워보겠다. 처음 예제는 복권(Lottery) 이다. 내용은 최근 세미나 한 자료를 기준으로 진행한다. 예제 자료는 다음의 위치에서 볼 수 있다. https://github.com/bear2u/lottery_exam1 결과물은 오른쪽과 같다. 지갑을 우선 설치를 해보자. https://metamask.io/ 에서 크롬 확장 프로그램인 설치를 하자. 로그인을 비밀번호를 입력 후 하면 되는데 문자열이 모니크 키값으로 주어지는데 꼭 다른 곳에 저장을 해놓자. 로그인시 보유한 이더와 서버주소를 확인 할 수 있다. 테스트 서버를 우선 설정해보자. 왼쪽 하단 서버 선택을 Rinkeby Te..
Collection 함수들RxJava에서 자주 쓰이는 함수중 하나인 Collection형태를 알아보자.우선 toList() 이다.여러개의 배출을 하나의 리스트로 만들어주는 것이다. 주의점은 리턴값이 Single 인것을 유념하자.아주 간단한 예제를 보자.ToListfun testToList(){ Observable.just("Alpha" , "Beta" , "Gamma" , "Delta" , "Epslion") .toList() //Single로 배출 .subscribeBy( onSuccess = { println(it) } ) } ==================================== [Alpha, Beta, Gamma, Delta, Epslion] 정렬을 원할땐 ToSortedList를 사용..
그룹핑하나의 Observable을 여러개의 옵저버로 패턴에 맞게 분리하는 방법에 대해서 알아보자.+4개의 문자 배열이 있다.+"Alpha" , "Beta" , "Delat" , "Epsilon" 이걸 문자 길이에 맞게끔 분리를 해보자.+val source = Observable.just("Alpha" , "Beta" , "Delat" , "Epsilon") val lengthGroupObservable = source.groupBy { it.length } //groupBy 가 중요함 lengthGroupObservable.flatMapSingle { it.toList() } .subscribeBy( onNext = { println(it) } ) ====================== [Beta] [..
Combinelatest두개의 리스트를 비교하는 걸 구현한다고 가정했을때 여러 가지 방법이 있을테지만그중에 conbinelatest 를 사용해서 리스트와 각각의 값을 비교하는 방법으로 진행해보자.다이어그램은 다음과 같다.val observable1 = Observable.fromArray("A" , "B" , "C" , "D") val observable2 = Observable.fromArray("E" , "C" , "B" , "G","F") Observables.combineLatest( observable1.toList().toObservable() , observable2 ){ list , value -> println("$list $value") if(list.contains(value)) va..
Lift 연산자연산자 오버로딩 하는 방법 줌 RxJava에서는 compose 와 lift 가 대표적으로 사용된다.compose 는 전 내용에서 설명해놓은 내용이 있다.Compose 활용Compose with parameter그럼 lift는 차이점이 무엇인가.Lift는 연산자를 오버로딩해서 새로 만드는 걸 목적으로 하며compose는 여러 연산자를 하나의 연산자로 만드는게 주 목적이라고 생각된다.우선 lift 구현 동작 부터 확인해보자. interface ObservableOperator { /** * Applies a function to the child Observer and returns a new parent Observer. * @PARAM observer the child Observer in..
아키텍쳐 어소시에트 관련 자격증 공부 링크 모음비공식 AWS 공인 솔루션스 아키텍트 - 어소시에이트 수험 가이드https://github.com/serithemage/AWSCertifiedSolutionsArchitectUnofficialStudyGuide/blob/master/README.md AWS공식 문서들아래 링크들은 어떠한 내용이 있는지 정도만이라도 한번 훑어 보셔도 많은 도움이 됩니다. AWS Well-Architected 프레임워크(한글화된 문서와 강연영상)https://aws.amazon.com/ko/blogs/korea/aws-well-architected-framework-in-korean/ AWS 한국어 설명서 목록: AWS학습과 사용을 위해서 꼭 한번씩은 읽어 보셔야 하는 문서들 입..
Using코틀린에서 기본적으로 Use을 제공한다.myStream.use { // 자동으로 열고 닫는다. val line = readLine()}하지만 Rx에도 자원관리를 할 수 있는 방법이 있다. 바로 Using 이다.공식문서는 http://reactivex.io/documentation/operators/using.html 그럼 우선 RxKotlin 에서 어떻게 보이는 지 살펴보자.fun using(resourceSupplier: Callable, //첫번째 인자 (열고)sourceSupplier: Function, //세번째 인자 (닫기) disposer: Consumer): Observable { return using(resourceSupplier, sourceSupplier, disposer, ..
코틀린은 다음과 같은 길이를 가지고 있다.TypeWidthLong64Int32Short16Byte8Double64Float32테스트를 해보자val int = 123 val long = 123456L val double = 12.34 val float = 12.34F val hexadecimal = 0XAB val binary = 0b01010101 println( "$int , $long , $double , $float , $hexadecimal , $binary") ================== 123 , 123456 , 12.34 , 12.34 , 171 , 85 String 멀티 라인val rawString = """ 안녕하세요 반갑습니다. 코틀린입니다 """ print(rawString) =..
RxKotlin우선 dependencies을 추가를 하자. compile 'io.reactivex.rxjava2:rxjava:2.1.0' compile 'io.reactivex.rxjava2:rxkotlin:2.0.2' io.reactivex.rxjava2:rxkotlin 의 경우 코틀린으로 확장해서 따로 유틸을 만든 것이다.주소는 여기 클릭 해서 한번 보도록 하자.그리고 소스셋을 지정해서 폴더를 구분해주자.sourceSets { main.kotlin.srcDirs += 'src/main/kotlin' } 그럼 코틀린 파일을 새로 만들어서 테스트 해보자.1~10까지 돌면서 문자값으로 변경해주는 예제이다.import io.reactivex.Observable fun main(args : Array) { O..
쓰레드가 이어져서 나오는 걸 직렬화라고 한다.예를 보자.public static void main(String[] args) { Observable.range(1 , 10) .map(i -> intenseCalculation(i)) .subscribe(i->System.out.println("Received " + i + " " + LocalTime.now())); } public static T intenseCalculation(T value) { sleep(ThreadLocalRandom.current().nextInt(3000)); return value; } public static void sleep(int millis) { try { Thread.sleep(millis); } catch (In..
RxJava 2부터 Disposable 형태로 변경됐다.일반적인 형태로 많이 쓰는건 consumer 형태이다.예를 보자.Observable testObservable = Observable.range(1 , 10); Disposable disposable1 = testObservable .doOnDispose(() -> System.out.println("onDispse 1")) .doOnComplete(() -> System.out.println("onCompleted 1")) .subscribe(item -> System.out.println("emitted 1 -> " + item)); //consumer 로 진행 System.out.println( "isDisposed -> " + disposab..
Debugging 하는 방법RxJava 사용시 디버깅 라이버러리는frodo 를 사용하면 좋긴 한데 ( RxJava 1지원..ㅠ)https://github.com/android10/frodo.git일반적인 테스트 방법을 소개한다..doOnNext()를 활용하면 된다.예를 들어 다음과 같은 내용이 있다고 가정하자.주어진 3개의 내용에 알파벳을 뽑아내는 경우이다.TestObserver testObserver = new TestObserver(); Observable items = Observable.just("521934/2342/Foxtrot", "Bravo/12112/78886/Tango", "283242/4542/Whiskey/2348562"); items.concatMap( s -> Observable..