[Node.js] node-fetch와 cheerio 이용해서 웹 크롤링 하기

프로그래밍/JS 2022. 7. 8. 00:40

https://www.scrapingbee.com/blog/node-fetch/ Web Scraping with node-fetch In this tutorial we will see how to use the node-fetch package for web scraping. We will learn what the fetch API is and the different ways to use the package. www.scrapingbee.com 이번에 JS 의 비동기를 이용해서 빠르게 크롤링을 해보고 싶어졌습니다. 파이썬으로 크롤링 하는건 수도 없이 보이는데 Node.js 에서 웹 크롤링을 하는 예제가 많이 보이지 않아서 관련 링크를 첨부합니다. Node.js 에는 기본적으로 fetch() 가 없어..

[C/C++] 선언(Declaration)과 정의(Definition)의 차이

프로그래밍/C++ 2022. 6. 21. 01:08

* 본 글은 학부생의 눈높이에 작성되었습니다 int a; int a = 10; 오류C2086'int a': 재정의 위 코드를 Visual Studio 에서 실행해보면 int a가 재정의(redefinition) 됐다는 오류 메세지가 출력되면서 컴파일이 되지 않습니다. 이런 오류 메세지는 컴파일러마다 다른데 재정의가 아니라 재선언(redeclaration) 이라는 오류 메세지가 출력되기도 합니다. 과연 정의와 선언의 차이는 무엇일까요? 정의와 선언은 다양한 프로그래밍 자료에서 혼동되어 사용되는 단어긴 하지만 엄밀히 따지면 이 둘은 다른것 입니다. 오늘은 이에 대해 알아보겠습니다. 선언(Declaration) vs 정의(Definition) 모든 정의는 선언을 포함하고 있지만 모든 선언은 정의가 아니다. 즉..

Article Thumbnail
[C++] Natural Sort 사용하기

프로그래밍/C++ 2022. 6. 14. 01:30

숫자, 이름이 여러 섞여 있는 내용의 문자열에 대해 윈도우 탐색기와 같은 정렬을 기대하려면 Natural Sort 라는 정렬을 시행해야 합니다. Natural Sort 란 쉽게 말해서 인간이 하는 방식으로 영문자 숫자를 정렬하는 방식을 이야기 합니다. 파이썬에선 natsort 라는 라이브러리가 있어서 그냥 pip install 로 설치하고 사용하면 끝이였는데 C++에서는 당연하게도 직접 구현해야 합니다. 제목을 보시면 알겠지만 Natural Sort 구현하기가 아니라 '사용하기' 입니다. 깃허브에 이미 친절하게 구현을 해둔 분이 있어서 이걸 사용하시면 됩니다. https://github.com/scopeInfinity/NaturalSort GitHub - scopeInfinity/NaturalSort: ..

Article Thumbnail
[VIM] ESC 입력 시 (일반모드) 자동으로 영문으로 전환해주는 유틸리티

프로그래밍/Etc 2022. 6. 13. 23:57

VIM을 사용할 때 ESC나 Ctrl + [ 를 입력하면 일반 모드(Normal Mode) 로 이동이 되는데 한글 상태에서 일반 모드로 전환을 하면 영문 입력이 제대로 되지 않아서 일반 모드의 기능을 제대로 사용할 수 없습니다. 그래서 한글로 전환된 상태라면 일반 모드에서는 한영키를 한번 더 눌러줘야 하는 불편함이 있습니다. 매번 작성하면서 한영 유무를 확인한다는 것은 번거롭고, 특히 프로그램 개발자로써는 말도 안되는 일이라고 생각해서 인터넷에 공개된 소스코드를 참고해 관련 유틸리티를 제작했습니다. https://github.com/pgh268400/VIM_AUTO_HANGUL/releases/tag/v1 Release main_release · pgh268400/VIM_AUTO_HANGUL github..

Article Thumbnail
[C++] Visual Studio <std::filesystem> 사용하기

프로그래밍/C++ 2022. 6. 11. 23:39

서론 기존에 대학교 프로젝트로 C언어를 이용해 파일 이름 변경기를 만든적이 있었습니다. C언어에는 string class도 없어서 문자열들을 배열에 동적으로 저장하고 싶으면 char[] 을 이용해서 동적할당으로 구현해야 했고, 이에 따른 버그가 다량으로 발생했습니다. (예를 들어서 파일 이름을 변경할 때 치환할 문자열이 너무 길거나 illegal 한 문자가 들어가면 프로그램이 그대로 튕겨버린다던가..., C에서는 예외처리 문법도 없습니다 ;;) 또한 디렉토리 내에 파일을 순회할 때 C언어에서 공식적으로 파일 시스템에 관한 기능이 제공되지 않아서 우회책으로 dirent.h 이라는 헤더 파일의 조금 수정된 버전을 이용해서 기능을 구현했던 기억이 납니다. *dirent.h를 사용해서 디렉토리 순회하는 방법에 ..

Article Thumbnail
[C++] C++ 싫어. 파이썬 좋아.

프로그래밍/C++ 2022. 6. 8. 02:53

도대체 이놈의 언어는 동적 할당 하나 때문에 class에서 고려해줘야 하는게 몇개인지.. 복사 생성, 복사 대입, 이동 생성, 이동 대입... 하다보면 정말 C++이 얼마나 극한의 성능 최적화가 가능한지 알게 됨과 동시에, C에서 객체 지향 개념만 추가하다가 이것 저것 다 추가해서 누더기 괴물이 되어버린 C++이 얼마나 방대한 언어인지 새삼 깨닫게 됩니다.. 특히 임시값을 가리키는 Rvalue Reference는 또 어떻게 만들 생각을 했는지.. GC(가비지 컬렉터) 가 있는 언어가 정말 그리워 지는군요 ㅜ ㅜ 이와는 반대로 온갖 고생해서 컴파일하면 kb 단위 exe 용량이랑, 엄청 빠른 수행 속도 보고 또 그런 생각이 사라지기도 하고..

Article Thumbnail
[Flutter] 플러터 3.0 출시

프로그래밍/Flutter 2022. 5. 28. 00:45

https://docs.flutter.dev/development/tools/sdk/release-notes/release-notes-3.0.0 Flutter 3.0.0 release notes Release notes for Flutter 3.0.0. docs.flutter.dev 최근 Flutter 3.0이 출시 되었습니다. 놀랍네요. 솔직히 2.0까지 배워보면서 좋은 프레임워크는 맞는데 만든 곳이 그 구글이기 때문에.. 언제 폐기할지 모른다는 두려움이 은연중에 남아 있었습니다만 자사 앱도 몇년동안 플러터로 계속 빌드하고, 이번에 3.0까지 출시 해준걸로 봐서는 꽤나 전망이 밝아보입니다. Dart라는 언어로 코딩해야하는건 아직까지도 별로 마음에 들진 않습니다만 그래도 비동기가 간편하게 구현된다는 점은..

Article Thumbnail
[Linux] VSCODE로 쉘 스크립트 프로그래밍 하기 (Window, Linux 무관)

프로그래밍/Linux 2022. 5. 19. 00:57

이번엔 특별히 프로젝트를 우분투에서 Bash와 쉘 스크립트를 이용해 진행하게 되었습니다. 가장 기본적인 방법으로는 *.sh 포맷으로 파일을 하나 만들어서 쉘 스크립트 문법으로 프로그래밍을 하면 됩니다. 그런데 우분투 안에서 VIM이라던가, Nano 같은걸로 프로그래밍을 하면 일단은 문법 오류 자체가 잡히지가 않아서 별로고.. 특히 띄어쓰기도 하나의 문법인 쉘 스크립트에선 이런 실수가 한번 들어가서 실행이 안되면 어디서 오류가 발생한건지 알 방법이 없어서 정말 골때릴때가 많습니다. 그리고 일반적으로 서버 컴퓨터 아니면 개인용 컴퓨터에서 윈도우 쓰지 게임도 안되는 리눅스를 컴퓨터에 깔아놓을일도 거의 없잖아요..? VMWare를 키고 그 느린 가상 환경에 들어가서 작은 터미널 하나 켜놓고 작업을 하려니 너무 ..

Article Thumbnail
[디지털 논리] 카르노맵을 통한 부울식 간소화(최적화, optimization)

프로그래밍/Digital Logic 2022. 5. 12. 18:37

* 본 글은 학부생의 눈높이에서 작성되었습니다. 잘못된 부분이 있을 수 있으며 발견시 댓글로 정정부탁드립니다. 또한 이유없는 비방은 삭제처리될 수 있으니 유의 바랍니다. What is K-maps? 오늘 알아볼 것은 카르노 맵입니다. 카르노 맵이란 한마디로 복잡한 부울식을 복잡한 식 계산 없이 그림으로 그려 쉽게 간소화 시켜주는 도구입니다. 여기서 간소화는 복잡한 식을 동일한 더 적은 글자수와 더 적은 항들로 나타낼 수 있다는 의미가 됩니다. 디지털 회로 설계를 할때 AND Gate, OR Gate 등 여러 Gate를 사용하게 되는데 이를 표현할때 위 사진과 같은 부울식을 사용하게 됩니다. 부울식을 통해 회로를 설계할것이기 때문에 부울식을 간소화하게 되면 동일한 기능을 하면서 더 적은 Gate, 간략화된..

Article Thumbnail
[디지털 논리] 마인크래프트에서 구현한 7 segment 출력 회로

프로그래밍/Digital Logic 2022. 5. 9. 01:57

여담 저는 잼민이 시절(초등학교 시절)에 마인크래프트란 게임을 알게 됬는데, 실제로 몇 달 전까지도 간간히 하던 제 인생게임중 하나 입니다. 이번에 전선과목으로 회로 설계에 대해 배우는 디지털 논리 회로 과목을 수강중인데 시험이 끝나고 여유가 생기니 갑자기 디지털 논리에서 배운 논리 회로가 실제로 마인크래프트에서도 구현이 가능한 사실이 번뜩 떠올랐습니다. 마인크래프트는 실제로 제공되는 레드스톤 도구를 이용해서 기본적인 논리 Gate인 AND, OR, Not 부터 시작해서 NOR, NAND, IMPLY 등 대부분의 Gate를 구현할 수 있습니다. (심지어 Clock Pulse도 생성 가능합니다.) 저는 이런 AND, OR, NOT 게이트를 초딩때 마인크래프트 회로 강좌에서 봤는데 사실 뭔지는 정확히 이해하..

Article Thumbnail
[Baekjoon] 17626번: Four Squares

프로그래밍/BaekJoon 2022. 5. 1. 16:09

https://www.acmicpc.net/problem/17626 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1 www.acmicpc.net 문제 설명 라그랑주에 의하면 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명 되었습니다. 예를 들어서 3은 $3 = 1^2 + 1^2 + 1^2$ 으로 나타낼 수 있습니다. 3을 입력하면 항이 $1^2$ 3개이므로 (제곱수가 3개이므로) 출력값은 3입니다. 7은 $7 = 2^2 + 1^2 + 1^2$ 으로 나타내집니다. 7을 입력하면 항..

Article Thumbnail
많은 파일을 한꺼번에 폴더로 정리하자! Directory Packager

프로그래밍/Python 2022. 4. 29. 23:19

Directory Packager는 파일을 갯수단위로 묶어서 폴더로 정리해주는 프로그램입니다. 폴더를 묶을때 방식은 순차 작업, 균등 작업, 랜덤 작업으로 총 3가지를 지원합니다. 사용 방법 게임을 하면서 스크린샷을 찍었는데 플레이 타임이 100시간이 넘어가다 보니 파일이 1321개로 상당합니다. 티스토리에 올리려고 보니깐 한번에 50개씩 올리라고 하더라구요? 50개씩 파일 잡으니깐 햇갈리기도 해서 이런 다량의 파일을 파일 갯수 단위로 폴더로 정리해주면 어떨까 해서 한 번 프로그램을 만들어 봤습니다. 폴더 열기를 통해 작업할 폴더를 선택한 뒤, 순차 작업 모드로 50개, 폴더 명은 section_{i} 로 정합니다. {i} 는 자동으로 프로그램에서 붙여주는 번호에 대한 특별한 지정자 입니다. 예를 들어서..

Article Thumbnail
[Baekjoon] 1463번: 1로 만들기

프로그래밍/BaekJoon 2022. 4. 26. 03:51

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 설명 예전에 풀었던 백준 문제 "1로 만들기" 입니다. SolvedAC 기준 실버 3에 위치해 있는 문제로 나름 유명한(?) DP 문제입니다. DP 문제에 잼병인 본인에게는 처음에 DP를 사용해서 풀어야 한다는 걸 듣고 나서도 혼자 해결하진 못했고 아래 유투브 영상을 보고 이해할 수 있었습니다. 일단은 해법을 글로 자세히 설명할 것이긴 한데 유투브 영상을 먼저 올려 놓으면 제 글은 안보고 영상만 보고 나갈꺼 같아서 일단은 영상은 글 맨 말미에 두겠습니다 ㅎㅎㅎ 문제에 대해 간단히 설명을 하자면 임의의 정수..

Article Thumbnail
[PyQT5] SFTP를 이용한 만능 자동 업데이트 런처 구현

프로그래밍/Python 2022. 4. 22. 00:36

위 게임은 "서든어택 2"의 게임 런처(실행기) 입니다. 이 게임은 말아먹은 뒤로 매일 SNS에 출시 임박 글이 올라오는 전설의 게임입니다. 대부분의 게임은 위처럼 일반적으로 * 런처라는 프로그램을 이용해서 다운로드, 업데이트, 실행 관리를 합니다. 제가 업무 자동화에 관련된 프로그램을 만들고 배포하면서 이러한 런처를 만들어야 할 상황이 생겼습니다. 매번 업데이트 하고 파일 배포하는게 정말 귀찮더라구요. * 런처 : 다른 소프트웨어를 실행시키기 위해 사용하는 소프트웨어 제가 배포하고 있는 프로그램에 대한 런처를 만들어서 자동 업데이트 하고 실행까지 처리하면 좋을 꺼 같아서 요새 GUI 프로그래밍에 한참 사용하고 있는 PyQt5 프레임워크와 파이썬을 통해서 한번 구현해봤습니다. 사실 이렇게 다운로드를 받을..

Article Thumbnail
[C++] std_lib_facilities.h 헤더 파일 이란?

프로그래밍/C++ 2022. 4. 2. 03:22

위와 같은 원서로 C++ 강좌를 듣고 있는데 std_lib_facilities.h 라는 난생 처음 보는 헤더 파일로 프로그래밍을 배우고 있습니다. 사실 수업만 따라가면 알 수 있는 내용이였으나 이 파일을 아예 처음 보셨다거나 수업에서 접하게 되었는데 설명없이 넘어가서 뭔지 모르겠다는 분들을 위해 이 헤더 파일이 무엇인지 간단하게 설명해드립니다. /* std_lib_facilities.h */ /* simple "Programming: Principles and Practice using C++ (second edition)" course header to be used for the first few weeks. It provides the most common standard headers (in th..

Article Thumbnail
[Linux] 리눅스란 무엇인가? 리눅스 소개 및 개요 (introduction) / GNU, OS, GPL 등등

프로그래밍/Linux 2022. 4. 1. 23:46

컴퓨터에 관심이 많으신 분들이라면 리눅스에 대해 한번쯤 들어보셨을 겁니다. 사실 맥OS를 사용하지 않거나 UNIX 계열 운영체제를 사용해보지 않은 분들은 이름만 들어봤고 매우 생소하실겁니다. 저의 경우엔 자가 구축한 NAS의 헤놀로지 시스템의 OS가 일종의 리눅스 기반인데 그래서 리눅스를 직접적으로 사용해볼 수 있었습니다. 사실 위에서 UNIX 계열 운영체제라고 했는데 UNIX가 뭔지는 설명하지 않았습니다. 또 페도라, 리눅스, 우분투 주변에서 줏어 들은건 많은데 정확히 무슨 의미인지 모르시는 분들을 위해 정리하고자 본 글을 작성합니다. * 본 글은 블로그, 서적 등을 참고해서 작성했으며 틀린 내용이 있으면 댓글로 알려주세요! 운영체제 운영체제(OS, Operating System) 란 사용자와 컴퓨터 ..

Article Thumbnail
[C++] while(cin) 으로 자료형이 올바른 값을 계속 입력 받기

프로그래밍/C++ 2022. 4. 1. 00:40

수업을 듣다가 아래 두개의 구문에 대한 의문이 생기게 되었습니다. 과연 정확히 이 두 표현식이 정확히 의미하는 바가 무엇일까? 오늘은 아래 코드에 대한 해석과 비교하는 것에 대해 다룹니다. while(cin) while(cin >> x) //What is the difference? C++ 앞 부분을 조금이라도 공부해보신 분들이 있다면 cin 이라는 것에 대해 아실겁니다. C언어에서 scanf와 대응되는 것으로 C++에서는 이라는 헤더 파일에 있는 녀석인데 서식 문자 없이 간편하게 입력을 받을 수 있죠. int x; cin >> x; 위 2줄의 코드를 이용하면 C++에서 간편하게 변수에 값을 입력 받을 수 있습니다. (데이터 타입에 상관 없이 cin이 알아서 입력을 잘 처리해줍니다.) 그런데 만약 저 위..

Article Thumbnail
[Python] 문자열 한줄씩 읽기

프로그래밍/Python 2022. 3. 26. 02:12

drift professional midnight scatter relevance visit . . . (생략) 다음과 같은 단어 사전을 C++ vector에 하드코딩으로 집어 넣어야 하는 상황이 생겼습니다. 하나씩 콤마찍고 쌍따옴표 넣기는 너무 귀찮죠? 이럴때 파이썬을 이용해서 한번 똑똑하게 바꿔봅시다. dic = """ drift professional midnight scatter relevance visit """.strip() lst = dic.split('\n') print(lst) >>> ['drift', 'professional', 'midnight', 'scatter', 'relevance', 'visit'] """ 를 활용해서 문자열을 전체적으로 넣고 양끝 공백을 strip() 으로 지..

Article Thumbnail
[VSCODE] code-server에서 파일 한꺼번에 받기

프로그래밍/Etc 2022. 3. 18. 01:04

아래 방법 말고 되도록 해당 방법을 이용해주세요 https://pgh268400.tistory.com/433?category=1109022 헤놀로지 Docker에 code-server 을 올려서 웹에서 vscode로 작업을 하고 있는데 다음 폴더에 있는 파일을 전부 다운로드 받아서 압축할 일이 생겼습니다. 원래 보통 NAS 메인 폴더랑 마운트 해주면 소스코드 폴더가 공유가 되야 하는데 code-server은 구조가 다른지 되지 않았습니다. (jupyter notebook 서버로 올린건 NAS 폴더랑 컨테이너랑 잘 연결이 됬던거 같은데 ㅠㅜ) 확인해보니 마운트는 제대로 되는데 permission denied 로 권한이 없다면서 파일 쓰기가 안됬습니다. 그런데, 권한이 없는지 code-server에서는 do..

Article Thumbnail
[C++] new와 delete

프로그래밍/C++ 2022. 3. 12. 02:07

본 글은 C언어의 동적할당과 프로세스의 메모리 구조를 전부 알고 있다는 전제하에서 진행됩니다. 잘 모르신다면 아래 링크에서 #프로세스의 메모리 구조 부분을 읽어주세요. https://pgh268400.tistory.com/383 [C언어 강좌] #18 동적 메모리 할당과 가변 인자 안녕하세요? 파일입니다. 어김없이 또 C언어 학습에 있어 새로운 챕터가 시작되었군요. 이번 챕터와 다음 챕터를 마치게 되면 제 C언어 강좌는 끝을 내게 됩니다. 지금 강의는 31편째지만 이 많은 pgh268400.tistory.com C언어에서 동적 메모리 할당 메모리를 관리하는 문제는 언제나 중요한 문제입니다. C, C++ 는 언어 차원에서 메모리 관리를 프로그래머가 직접 하도록 설계 되어 있습니다, 또한 대부분의 객체지향 ..

Article Thumbnail