전체 글

전체 글

    [스파크 완벽 가이드] Part 2. 구조적 API: DataFrame, SQL, Dataset

    [스파크 완벽 가이드] Part 2. 구조적 API: DataFrame, SQL, Dataset

    CHAPTER 4. 구조적 API 개요 구조적 API는 비정형 로그 파일부터 반정형 CSV 파일, 매우 정형적인 파케이(Parquet) 파일까지 다양한 유형의 데이터를 처리할 수 있다. 구조적 API에는 세 가지 분산 컬렉션 API가 있다; Dataset, DataFrame, SQL 테이블과 뷰 배치와 스트리밍 처리에서 구조적 API를 사용할 수 있고, 배치 작업과 스트리밍 작업을 서로서로 쉽게 변환할 수 있다. 스키마는 DataFrame의 컬럼명과 데이터 타입을 정의한다. 이는 데이터소스에서 얻거나 직접 정의할 수 있다. 본질적으로 DataFrame은 '비타입형'으로 런타임에 스키마와 비교하며, Dataset은 '타입형'으로 컴파일 타임에 스키마와 비교한다. 스파크의 DataFrame은 Row 타입으로..

    [스파크 완벽 가이드] Part 1. 빅데이터와 스파크 간단히 살펴보기

    [스파크 완벽 가이드] Part 1. 빅데이터와 스파크 간단히 살펴보기

    CHAPTER 1. 아파치 스파크란? 스파크는 통합 컴퓨팅 엔진이며, 클러스터 환경에서 데이터를 병렬로 처리하는 라이브러리 집합 스파크는 네 가지 언어(파이썬, 자바, 스칼라, R)을 지원하며 SQL뿐만 아니라 스트리밍, 머신러닝에 이르기까지 넓은 범위의 라이브러리를 제공 스파크는 저장소 시스템의 데이터를 연산하는 역할만 수행할 뿐 영구 저장소 역할은 수행하지 않음 스파크의 등장 배경 하드웨어의 성능 향상은 2005년경에 멈췄음 → 성능 향상을 위해 병렬 처리가 필요함 결과적으로 데이터 수집 비용은 극히 저렴해졌지만, 데이터는 클러스터에서 처리해야 할 만큼 거대해짐 기존 데이터 처리 애플리케이션의 전통적인 프로그래밍 모델이 한계점이 도래 → 스파크 탄생 스파크 실행하기 jupyter에서 제공하는 공식 d..

    YSCEC 크롤러2

    YSCEC 크롤러2

    YSCEC-CRAWLER2 /와이섹 크롤러/ 와이섹 크롤/ 크롤링/ 와이섹 연세대학교 지식창조 커뮤니티라는 거창한 이름의 사이트가 있습니다. 이 사이트는 연세대학교 재학생들의 강의 공지와 강의 자료들이 올라오는 사이트인데, 매일매일 로그인하고 수강하는 과목의 자료들이 업로드 되었는지 확인하는 작업이 여간 귀찮은게 아닙니다. 그래서 이번 개강을 맞아 나 대신 매일매일 와이섹 내용을 체크해주는 크롤러를 다시금 개발하게 되었습니다. 이전에 YSCEC-CRAWLER 를 올렸었는데, 이에 관한 내용은 다음 링크에서 확인해보시기 바랍니다. 블로그 : http://dytis.tistory.com/6깃허브 : https://github.com/pfldy2850/YSCEC-CRAWLER 개발환경 NodeJSES7 문법으..

    [ML lec 08] Deep Neural Nets for Everyone

    우리 인류의 궁극적인 꿈이라고 하는 것이 바로 우리를 대신해서 골치아픈 문제를 생각해주는 기계를 만들자라고 할 수 있습니다. 따라서 우리의 뇌와 같은 모습을 만들고자했고, 뇌에 대해서 공부를 하게되었습니다. 뇌를 공부하였더니, 굉장히 복잡하게 연결되있어서 놀랐고 또 연결된 부분부분들을 자세하게 봤더니 뉴런이라고 불리는 유닛이 너무나 단순하게 동작이 되었습니다. 봤더니 어떤 인풋이 있고, 길이에 따라 신호의 양이 달라졌습니다. 따라서 X*W으로 둘 수 있고. 이 것들이 다 합쳐지고, 어떤 bias가 더해져서 그것이 그 다음으로 전달되더라... 이 다 모여있는 값이 어떤 값 이상이 되면 활성화되고, 그렇지 않으면 활성화가 되지 않습니다. 이런 것에 영감을 받아서, 수학적으로 만들어낸 모델이 뉴럴 넽입니다. ..

    [ML lec 07] Application & Tips

    이번 포스트에서는 머신러닝 알고리즘을 실제로 사용하는데 있어서, 몇가지 팁을 알려드리겠습니다. 크게 러닝 레이트를 조정하는 방법과 전처리 방법 그리고 오버피팅을 방지하는 방법에 대해서 이야기하겠습니다. 우리가 cost function을 정의하고 그 cost function을 최소화하는 것에 Gradient descent 알고리즘을 사용해왔습니다. Gradient descent 알고리즘에서 우리는 Learning rate를 지정해주게 되는데요, 이 때 Learning rate를 잘 정하는 것이 중요합니다. Learning rate란 그래프를 내려가는 것의 step과 같습니다. 만약 step이 너무 크다면, 그래프 바깥으로 나가버리거나, 계속 주위를 맴돌게 되는 상황이 만들어질 수도 있습니다. 이것을 ove..

    [ML lec 06] Softmax Regression

    [ML lec 06] Softmax Regression

    이번에는 여러개의 Class가 있을 때, 그것을 예측하는 Multinomial Classification 중에서도 가장 많이 사용되는 Softmax Classification을 알아보겠습니다. 지난번 포스트에서 Logistic regression classification이라는 것에 대해서 알아봤습니다. 자세한 내용은 지난번 포스트를 참고해주세요. 아무튼 이 Logistic regression classification은 Binary classification에 사용됩니다. 기본적으로 서로 다른 데이터들을 구분하는 것인데, 아래와 같이 생각할 수 있습니다. 이러한 아이디어를 Multinomial classification에 적용을 시킬수 있습니다. 아래와 같은 데이터가 있다고 가정합니다. 여기에서 Bin..

    [ML lec 05] Logistic Classification

    [ML lec 05] Logistic Classification

    이번 포스트는 Logistic Classification에 대해서 다루도록 하겠습니다. 본론에 들어가기 앞서, 이전의 Linear Regression에 대해서 Remind해보겠습니다. Linear regression에서는 가설을 H(x) = WX + b 로 세웠고, 여기에 대해서 Cost function과 이 Cost를 minimize하기 위해 Gradient decent라는 optimizer를 사용하였습니다. 이 것 세가지만 있으면 Linear Regression을 잘 이해할 수 있고, 구현할 수 있습니다. Classification도 이것과 굉장히 유사합니다. Classification이 다른 점은 이전의 Regression이 어떤 numeric한 변수를 예측하는 것이었다면, Classificatio..

    [ML lec 04] multi-variable linear regression (*new)

    [ML lec 04] multi-variable linear regression (*new)

    이번 포스트에서는 지난번 Linear regression에 이어서, 하나의 변수가 아니라 여러개의 multi-varaible을 사용하는 방법에 대해서 포스트하겠습니다. 우선 포스트를 시작하기 전에 지난번에 올렸던 내용을 복습해보겠습니다. Linear regression을 설계하기 위해선 세가지가 필요합니다. 우선 Hypothesis가 있는데요, Linear regression에서는 H(x) = Wx + b로 가설을 세우게됩니다. 다음으로는 이 가설이 얼마나 맞는지에 대해서 판단하는 Cost function이 필요합니다. 마지막으로는 이 Cost를 최적화하는 Gradient Descent Algorithm이 필요합니다. 여기까지에 대해서 완벽히 이해하셨으면, 이번 포스트 내용에 대한 기초적인 이해는 충분하..

    [ML lec 03] Linear Regression의 cost 최소화 알고리즘의 원리 설명

    [ML lec 03] Linear Regression의 cost 최소화 알고리즘의 원리 설명

    이번 포스트에서는 지난 포스트에서 말했던, cost function을 어떻게 최소화해서 최종적으로 Linear Regression 학습을 마치는 지에 대해서 다루겠습니다. 지난 포스트에서처럼 우리의 Hypothesis는 다음과 같습니다. 그럼 x = 1, 2, 3, y = 1, 2, 3인 데이터가 있다고 생각하고, cost를 구해봅시다. 우선 H(x) = Wx + b 에서 b는 없다고 생각하고, 계산을 해봅니다. 계산을 해보면 다음과 같이 나오게 됩니다. 각각은 W = 1, cost(W) = 0W = 0, cost(W) = 4.67W = 2, cost(W) = 4.67 이 되어집니다. 이 때 그래프는 다음과 같이 그려지게 됩니다. 이 때, 우리가 구해야 하는 것은 Cost의 최솟값입니다. 따라서 이 그래..

    [ML lec 02] Linear Regression

    [ML lec 02] Linear Regression

    이론 우리가 Supervised Learning을 할 때에, 학생이 몇시간 정도 공부를 했더니 얼마정도의 성적을 받았다는 데이터를 학습을 하게됩니다. 여기서 우리가 예측을 하고자하는 최종적인 목표가 0~100의 범위를 가지는 값입니다. 이런 종류의 학습을 Supervised Learning 중에서도 regression이라고 합니다. 설명을 간단히 하기 위해서, 데이터셋을 다음과 같이 간단하게 두어 보겠습니다. 이 데이터를 그래프로 그려보면 오른쪽 그래프와 같이 표현됩니다. 그래서 우리가 이 regression 모델을 학습한다는 것은 어떠한 하나의 가설을 세울 필요가 있습니다. "어떤 Linear한 모델이 우리 데이터에 맞을 것이다" 라는 가설 하에 생성된 모델이 바로 Linear regression입니다..

    [ML lec 01] 기본적인 머신러닝의 용어와 개념 설명

    오늘은 - 머신러닝이란 무엇인가?- 러닝은 무엇인가?- regresion이 무엇인가?- classification이 무엇인가? 에 대해서 알아보도록 하겠습니다. 머신러닝이라는 것은 일종의 소프트웨어입니다. 우리가 많이 사용하는 앱 같은 것을 보면, 입력을 기반으로 어떤 데이터를 보여주고 하는 프로그램인데, 이런 것들을 explicit program이라고 합니다. explicit program은 개발자들이 이런 환경에서 이렇게 반응하고 저런 환경에서 저렇게 반응하라고 만들어놓은 프로그램입니다. 이런 explicit program에서는 한계점이 있습니다. 예를 들어, 스팸 메일 필터같은 경우 엄청나게 많은 규칙들이 생겨날 수 있는 상황이 있죠. 이런 상황을 해결하기 위해, Arthur Samuel이라는 사람..

    Mass Storage Structure

    Mass Storage Structure

    * 왜 디스크가 필요한가?- 충분한 메모리를 가질 수 없다!가상 메모리의 스왑 공간으로서의 디스크 등 - 메모리는 휘발성이다! * Read/Write Operations to a Disk1. 섹터 주소가있는 디스크를 제시하십시오.• 디스크 주소 = (드라이브, 표면, 트랙, 섹터)2. 헤드가 목표 트랙으로 이동합니다.• 시간 찾기3. 적절한 헤드가 활성화됩니다.4. 대상 섹터가 헤드 아래에 나타날 때까지 기다립니다.• 회전 대기 시간 5. 섹터 읽기 / 쓰기• 전송 시간 * Disk(Head) 스케쥴링- 디스크 대기열에서 둘 이상의 요청 가능성운영 체제는 요청에 대한 총 헤드 이동을 최소화하여 디스크 I / O 성능을 최대화합니다. - 디스크 스케줄링 알고리즘1) FCFS (선착순) 스케줄링공평하나 비효..

    I/O Systems

    I/O Systems

    * I/O Hardware Detail- CPU side: I/O bus와 I/O address하드웨어 장치와 통신하기 위한 주소, 물리적 메모리 주소 공간에 매핑 가능 - Device side: hardware controllerControl 및 status registers (CSRs) - 하드웨어 디바이스와 상호 작용하는 세가지 방법폴링 (예 : 플로피 드라이버)인터럽트 구동 (예 : 대부분의 다른 장치)DMA (직접 메모리 액세스) * I/O Architecture- Three componentsI/O portsI/O interfacesDevice controller - I/O portsI / O 버스에 연결된 각 장치에는 "I / O 포트"라고하는 고유한 I / O 주소 집합이 있습니다.각 장치..

    Virtual Memory

    Virtual Memory

    가상 메모리 개념 : physical memory로부터 유저의 logical memory를 분리이점 :전체 주소 공간이 physical memory에 상주하지 않아도 프로그램 실행 가능모든 코드나 데이터 영역을 가져올 필요가 없음프로세스를 분리한다.프로세스가 파일과 주소공간을 공유한다. 가상 어드레스 프로세스는 virtual(logical) address를 사용한다.다수의 프로세스의 메모리 관리를 쉽게 하기 위해가상 주소는 참조된 데이터의 실제 물리 고간과 독립적임.cpu를 통해 실행되는 instruction은 가상 주소를 발행한다.가상 주소는 하드웨어에 의해 물리 주소로 번역된다.(OS의 도움에 의해) Demand Paging 개념 : “필요할 때만 해당 페이지를 메모리에 가져오자”페이지레벨 스와핑을 ..

    Memory Management

    Memory Management

    메모리 관리의 배경 멀티 프로그래밍 : 다수의 프로세스가 한번에 메모리에 접근함-> 한 프로세스가 사용가능한 주소를 제약해줘야함 (Protection)-> 메모리 하드웨어의 업데이트를 빠르게 해야함 (protection과 translation) 메모리 관리의 정의 OS와 하드웨어에서 다수의 프로세스가 메인 메모리에 수용되도록 실행하는 작업 메모리 관리의 목표 프로세스간의 분리를 제공하기 위해. 최소의 오버헤드로 성능을 최대화하기 위해서 경쟁하는 프로세스간의 부족한 메모리 자원을 할당하기 위해. 메모리 관리의 쟁점 다수의 프로세스 지원 - 각각의 프로세스는 논리적으로 연속된 공간을 가져야함.- 각각의 공간의 크기는 가변적임. 프로세스가 할당된 메모리보다 더 크게 사용할 수 있게 함. - 모든 메모리 공간이..

    File System(2)

    File System(2)

    • 할당 방법 3가지- Contiguous allocation각 파일은 디스크에서 일련의 연속 블록을 차지합니다.단순하게 : 시작 위치와 길이만 필요합니다.효율적인 임의 접근공간의 낭비(동적 스토리지 할당 문제)CD-ROM에 널리 사용됨. (파일이 변하지 않으며, 모든 파일 사이즈를 알고 있습니다.)문제점1) 파일이 커질 수 없습니다.2) 필요한 공간보다 더 크게 추정합니다. - Linked allocation각 파일은 디스크 블록의 링크 된 목록입니다. 블록이 디스크의 어느 곳에나 흩어져 있을 수 있습니다.단순하게 : 시작 지점만 필요합니다.자유 공간 관리 시스템(Free-space Management)으로 공간 낭비가 없습니다.문제점1) 무작위 접근에 비효율적입니다.2) 포인터를 위한 공간이 필요합니..

    File System(1)

    File System(1)

    •파일 시스템의 기본 개념- 장기적 정보 저장에 대한 요구엄청 많은 양의 정보를 저장할 수 있어야 한다.프로세스가 그것을 사용하고 종료하더라도 남아있어야한다.다수의 프로세스가 동시에 접근할 수 있어야 한다. - 파일 시스템의 책임보조 저장소에 대한 추상화 구현(파일)파일을 논리적으로 조직화(디렉토리)프로세스, 사람, 기계 간의 정보 공유 허가비인가 접근에 대한 데이터 보호(보안) •파일- 파일이란?보조 저장소에 기록된 관련 정보의 명명된 집합체파워 결함이나 시스템 리부팅에도 유지됨OS는 파일을 통한 정보 저장의 일관된 논리적 뷰를 제공 - 파일 구조Flat: 연속된 바이트간단한 기록 구조 : lines, fixed length, variable length복합한 구조 : formatted document..

    리액트 #08 - Forms

    리액트 #08 - Forms

    이번에는 리액트에서 Form을 어떻게 다루는 지에 대해서 알아봅시다. 리액트는 데이터의 흐름이 단방향입니다. 따라서 여러 폼에 변화하는 같은 값을 적용하려면, 따로 처리를 해주어야 합니다. 아래와 같이 초기 value 값을 state.data로 적용해주고, 이 후에 onChange로 변하는 값을 state로 갱신합니다. App.js import React from 'react'; class App extends React.Component { constructor(props) { super(props); this.state = { data: 'Initial data...' } this.updateState = this.updateState.bind(this); }; updateState(e) { this..

    리액트 #07 - Component Life Cycle

    리액트 #07 - Component Life Cycle

    ReactJS에는 컴포넌트들에 대한 라이프 사이클 메서드들이 존재합니다. 이번 포스트에서는 이 라이프 사이클 메서드들에 대해서 알아봅시다. Life Cycle Methods- componentWillMount 서버와 클라이언트 모두에게 렌더링하기 전에 작동됩니다. - componentDidMount 클라이언트에서 첫 렌더링이 이루어지고 난 후에 작동됩니다. 이 메서드에서 AJAX 리퀘스트나 DOM, state 갱신을 진행합니다. 또한 다른 자바스크립트 프레임워크나 다른 함수들과 합쳐지는 것에 사용되며, 이 때는 setInterval이나 setTimeout 등과 같은 함수로 지연을 시키게 됩니다. - componentWillReceiveProps Prop가 갱신되면, 다른 렌더링이 작동하기 전에 불려집니다..

    리액트 #06 - Component API

    리액트 #06 - Component API

    이번에는 Component API 중 setState(), forceUpdate(), 그리고 ReactDOM.findDOMNode()라는 메소드에 대해서 알아보자. setState setState는 state를 변경할 때 사용합니다. 기존의 state를 대체하는 것이 아닌, 기존의 state에 변화를 줍니다. App.js import React from 'react'; class App extends React.Component { constructor() { super(); this.state = { data: [] } this.setStateHandler = this.setStateHandler.bind(this); }; setStateHandler() { var item = "setState..."..

    리액트 #05 - State & Props

    리액트 #05 - State & Props

    ReactJS #05 - State & Props 이번 포스팅에서는 리액트의 State와 Props에 대해서 알아보겠습니다. State State는 데이터가 오는 곳입니다. 리액트를 사용할 때에는 이 State를 최소화 하고, stateful 컴포넌트를 줄이는 것이 좋습니다. 만약 스테이트를 사용하는 10개의 컴포넌트를 사용한다면, 한 컴포넌트에서 다른 모든 state를 정의하고 다른 컴포넌트를 참조하여 사용하는 것이 좋습니다. App.js import React from 'react'; class App extends React.Component { constructor(props) { super(props); this.state = { header: "Header from state...", "con..

    2017 NDC #02 - 학생 서포터즈 지원/면접/결과

    2017 NDC #02 - 학생 서포터즈 지원/면접/결과 작년에 2016 NDC 학생 서포터즈에 지원했지만 면접까지 보고 떨어진 본인입니다. ㅋㅋ 2017 NDC 학생 서포터즈는 꼭 하고 싶어서, 다시 지원을 했고, 결과적으로 서포터즈 활동을 할 수 있어서 엄청 행운이라고 생각합니다. 이번에는 제가 서포터즈를 지원하고 면접을 보고, 결과를 받은 과정에 대해서 포스팅하겠습니다. 서포터즈 지원 우선 NDC 학생 서포터즈 지원은 2월 20일 부터 시작하여 3월 12일까지 진행되었습니다. 신청 방법은 NDC 홈페이지 - 사전등록 - 서포터즈 신청에서 할 수 있었습니다. 신청서에 기입하는 내용은 기본 인적 사항, 외국어(영어, 일본어, 중국어) 수준, 자기 소개, 지원 동기, 경력 사항 이었습니다. 저는 작년에 ..

    2017 NDC #01 - NDC란?

    2017 NDC #01 - NDC란?

    2017 NDC #01 - NDC란? 드디어 2017 NDC가 준비 중에 있다. 본인은 2016 NDC 학생 서포터즈에 지원했다가 떨어졌는데, 이번 기회에 다시 할 수 있게 되었다. 게임에 관심이 있다면, 누구나 관심있을 NDC. NDC에 대해서 알아보자. NDC란? NDC는 넥슨 개발자 컨퍼런스(Nexon Developer Conference)입니다. 넥슨 개발자 컨퍼런스는 지난 20년간 대한민국 게임산업을 이끌어온 넥슨인들이 각 프로젝트별로 산재된 지식과 경험을 공유하고자 2007년 사내 행사로 시작된 자발적인 게임 개발자 컨퍼런스입니다. 처음 시작하던 해에는 33개 세션이 전부였던 소규모 행사였지만, 이후 매년 꾸준히 세션을 확대해 현재 200여 명에 달하는 발표자들이 100~150여개 세션을 진행..

    리액트 #04 - Components

    리액트 #04 - Components

    React JS #04 - Components 리액트는 컴포넌트로 시작해서 컴포넌트로 끝난다고 해도 과언이 아니다. 이번 포스트에서는 리액트의 컴포턴트에 대해서 예시를 통해 알아보자. Stateless Example 처음에는 State가 없는 컴포넌트를 만들어보자. 우선 컴포넌트는 컴포넌트들끼리 참조가 가능하다. 다음과 같이 App.js를 수정해보자. import React from 'react'; class App extends React.Component { render() { return ( ); }} class Header extends React.Component { render() { return ( Header ); }} class Content extends React.Component {..

    Non-ASCII character 에러

    Non-ASCII character 에러

    Python : Non-ASCII character 에러 파이썬으로 작업을 하다보면, 주석을 한글로 달 때가 있는데 이런 경우에 신택스 에러가 발생한다. 에러 메세지는 다음과 같다. File "/Users/Documents/python/scapy/main.py", line 3SyntaxError: Non-ASCII character '\xec' in file /Users/Documents/python/scapy/main.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 이런 경우에는 코드 내에 한글이 들어있어, 파이썬이 읽어들이지 못하기 때문에 발생한다. 해결방법은 간단하게, 파이썬 코드 ..

    리액트 #03 - JSX

    리액트 #03 - JSX

    React JS #03 - JSX 리액트는 일반적인 Javascript 와는 다르게 JSX라는 템플릿을 사용한다. 꼭 필요한 건 아니지만, 많은 장점이 있다. - JSX는 Javascript 코드로 컴파일하는 과정에서 최적화된다. - JSX는 예측불가능한 결과를 내지 않는다. 대부분의 에러들은 컴파일과정에서 발견된다. - HTML에 친근하여 개발이 쉽고 빠르다. JSX 사용하기 JSX는 일반적인 HTML과 많이 닮았습니다. class App extends React.Component { render(){ return ( Hello World!!! ); }} HTML과 비슷하지만, JSX를 쓰기위해선 많은 것들을 염두해두고 있어야합니다. Nested Elements 많은 것들을 반환하고자 한다면, 하나의 ..

    리액트 #02 - 개발환경 구축

    리액트 #02 - 개발환경 구축

    React JS #01 2014년에 핫하게 나와서 최근까지도 많은 사랑을 받고 있는 리액트. 리액트의 시작부터 리액트 네이티브의 끝까지 공부하는 시간을 가져보겠다. 개발환경 구축 - 모듈 설치 이번에는 리액트를 시작하기에 앞서, 무엇보다 중요한 개발환경을 구축해보자. Babel babel은 최신의 Javascript 문법을 사용하게 해주는 툴입니다. 설치npm install babelnpm install babel-corenpm install babel-loadernpm install babel-preset-reactnpm install babel-preset-es2015 Webpack webpack은 모듈 번들러입니다. 웹팩은 클라이언트 사이드에서 사용되는 Javascript 파일들을 묶는 목적으로 사..

    리액트 #01 - Overview

    React JS #01 2014년에 핫하게 나와서 최근까지도 많은 사랑을 받고 있는 리액트. 오늘부턴 리액트의 시작부터 리액트 네이티브의 끝까지 공부하는 시간을 가져보겠다. React JS란? 페이스북에서 개발한 유저 인터페이스 라이브러리로써, 개발자로 하여금 재사용 가능한 UI를 생성할 수 있게 한다. 현재 페이스북, 인스타그램, 야후, 넷플릭스를 포함한 많은 큰 서비스에서 사용되고 있다. 특징은 다음과 같다. 특징- JUST THE UI React.js는 UI 컴포넌트를 만들기 위한 라이브러리입니다. 컴포넌트 지향 프레임워크는 여러 가지가 있지만 React.js는 정말 UI 컴포넌트만 지원합니다. 비록 지원하는 범위는 작지만, 애플리케이션을 만드는 방법을 크게 바꿀 수 있다는 점이 재미있습니다. 또한..

    homebrew update issue 'Please delete these paths and run `brew update`.'

    homebrew update issue 'Please delete these paths and run `brew update`.' brew update를 시전하다가 Please delete these paths and run `brew update`. 라는 에러와 동시에 업데이트가 중단되었다. - 에러 Error: Could not link:/usr/local/etc/bash_completion.d/brew Please delete these paths and run `brew update`.Error: Could not link:/usr/local/share/zsh/site-functions/_brew Please delete these paths and run `brew update`.Error: C..

    YSCEC 크롤러

    YSCEC 크롤러

    YSCEC-CRAWLER /와이섹 크롤러/ 와이섹 크롤/ 크롤링/ 와이섹 연세대학교 지식창조 커뮤니티라는 거창한 이름의 사이트가 있다. 이 사이트는 연세대학교 재학생들의 강의 공지와 강의 자료들이 올라오는 사이트인데, 매일매일 로그인하고 수강하는 과목의 자료들이 업로드 되었는지 확인하는 작업이 여간 귀찮은게 아니다. 그래서 매일매일 나 대신 체크를 해주는 스크립트를 개발해보았다. 개발환경NodeJSES7 문법으로 작성되었다. 소스코드https://github.com/pfldy2850/YSCEC-CRAWLER 설명selenium을 사용한 webdriverio라는 모듈을 사용하였다.이 모듈은 가상 웹 드라이버를 조작하여, 웹 브라우저를 자동으로 실시하는데 쓰이는데,주로 개발 과정에서 테스트를 목적으로 많이 ..