백준 알고리즘 1181 : 단어 정렬(Python3)

1181번: 단어 정렬 이 문제를 보고 떠오른 생각은 이전에 사용하려고 했던 방식인 문자를 아스키코드로 변환하여 숫자로 저장한 다음 숫자로 정렬할 생각이었다. 그래서 구현한 함수가 아래와 같다. 1 2 3 4 5 6 7 def trans_string_to_number(m_string): result = 0 weight = 2 ** len(m_string) for x in m_string: result += (ord(x)...

NodeJS - MVT(MVC) 패턴으로 분리하기

이제까지 내가 작성했던 코드들은 index.js에 모든게 모여있다. 그러므로 무언가 수정하기도 힘들고 점차 알아보기가 힘들어 졌다. 점차 자바스크립트와 노드의 문법이 익숙해지는 것 같아서 Django와 같이 MVT 패턴으로 (MVC 패턴과 똑같지만 용어만 좀 다르다고 생각해도 된다.) 분리하려고 한다. 1 2 3 - Model => Model - View => Template - Controller =>...

React로 Hello World 출력

Hello, React React로 Hello World를 출력해보자. 기본적인 설치 방법과 사용 방법을 기록하기 위해서 작성한다. How to install 1 npm install -g create-react-app How to make application 1 create-react-app hello-world 위 명령어를 이용하여 애플리케이션을 생성할 수 있다. 생성된 디렉터리 아래 src 내부의 모든 파일을 지운 뒤 index.js와 index.css를 생성하고 index.js에 아래와...

장고(django)에서 필터 date range 사용

Django 2.0에서 date range 2.0에선 시간을 문자열로 변환하여 사용했는데 문제없이 잘 됐다. 1 2 3 4 date_format = "%Y-%m-%d %H:%M:%S" seven_days_ago = (datetime.datetime.now() - datetime.timedelta(days=7)).strftime(date_format) now_date = datetime.datetime.now().strftime(date_format) return Post.objects.filter(created_date__range=[seven_days_ago, now_date], ...).reverse() Django 2.2에서 date range 위 방법을 그대로 사용하면 naive datetime이라고 뜨면서 위험하다고 알려준다. 해결 방법을 계속해서 찾았는데 타임존으로...

장고(django)에서 이미지 업로드

이미지 업로드 장고로 이미지 업로드 하는 방법을 찾아보면 대부분은 모델에 이미지 필드를 추가하고 폼을 생성하여 사용자에게 사진을 받는 방식으로 진행된다. 혹시나 그 방법이 궁금해서 들어온 방문자가 있을까 해당 방법과 동시에 필자가 이번에 찾아본 필드 추가 없이 업로드를 하는 방법을 정리할 것이다. 이미지 필드로 업로드 1 2 3 4 5 6...

러스트 언어(rust-lang)의 특징 Hello, Rust!

러스트가 추구하는 것은 C보다 빠르면서 안정적인 것이다. C나 C++은 프로그래머가 메모리를 제어한다. 그러한 이유로 실수가 발생할 수 있다. 메모리를 해제하지 않으면 메모리 누수가 발생할 수 있고 메모리를 중복하여 해제하면 보안에 큰 결함이 발생한다. 또한 이러한 오류는 프로그램의 각종 오류를 발생시킨다. 인터프리터 언어 그래서 Java와 Python 같은 언어들은 프로그래머가 실수하기 쉬운...

Pythonic이란 무엇인가?

파이써닉(Pythonic) 파이썬스러운 코드라는 의미. 아주 잘 짜여진 Python 코드를 Pythonic 하다고 부른다. 파이썬스러운 코드라? 파이썬은 무엇보다 읽기 쉽고 가독성이 높은 것을 추구한다. 파이썬에선 가독성이 높은 코드를 작성하기 위해 파이써니스타(파이썬 베테랑)들이 가이드라인을 제시하고 있고 이러한 가이드라인을 잘 따르는 코드가 파이썬스러운 코드다. Hitchhiker’s Guide to Python / PEP 8 위 홈페이지를 둘러보면...

장고(django)에서 QuerySet 합친 후 정렬

블로그 서비스에서 유저의 활동을 보여주고 싶었다. 가령 댓글, 좋아요, 시리즈 생성, 포스트 작성을 한 눈에 확인할 수 있도록 말이다. 이전에는 댓글을 우선 나열한 후 좋아요를 나열했는데 시간순서에 맞게 모든 항목을 조합하여 보여주고 싶었다. +도 안되고 어떻게 합칠까 어떻게 정렬시켜야 할까 정말 삽질도 많이하고 검색도 많이 했는데 엄청난 함수가 있었다. 1...

장고(django)에서 JSON 응답

이전에 유저 알림 기능을 구현할때 JSON으로 응답하는 것에 익숙치 않아서 2번의 요청을 보내야 했다. 첫 요청에서 알림의 갯수를 카운트하고 알림이 있다면 알림을 다시 요청하고 HTML을 렌더링해서 사용자에게 보내주었다. 두 응답 모두 문자열로 이루어졌고 기능이 정상적으로 동작하기에 유지하고 있었으나 최근 HASH MAP을 공부하면서 파이썬의 Dict와 JSON에 흥미가 생겨 알림도 JSON 응답으로...

파이썬으로 파일 변경 실시간 감지

자바 스프링 프로젝트를 리눅스에서 진행하고자 하였다. 전제 조건은 이클립스 혹은 STS를 전혀 활용하지 않는 것이다. 대충 스프링을 빌드하고 실행시키는 방법에 대해서 알았지만 이클립스처럼 편하지 않았다. 이를 자동화하기 위해서 처음에는 CRON 탭을 이용하여 매 분마다 지속적인 빌드를 실시했지만 아래와 같은 단점이 있다. 매 분 10초 동안은 404를 보거나 느린 반응속도를 보인다....

장고(django)에서 의도적인 404 일으키기

원하는 모델을 찾을 수 없을때 404 발생시키기 1 2 3 from django.shortcuts import get_object_or_404 user = get_object_or_404(User, id='baealex') 의도한 URL 혹은 GET, Parameter가 아닐때 404 발생시키기 1 2 3 4 5 6 from django.http import Http404 def setting(request): tab = request.GET.get('tab', '') if not tab in [ '', 'account', 'profile',...

[5초꿀팁] 파이썬 패키지 관리

파이썬 패키지 관리 팁 일반적으로 파이썬 프로젝트에서는 requirements.txt에 사용하는 패키지명들을 기록해둔다. requirements.txt에 의존 패키지들을 기록해두면 프로젝트 소스코드를 새로 받았거나 의존 패키지 버전에 변화가 있을 때 다음 명령어로 간단하게 설치할 수 있다. 1 (venv)$ pip install -U -r requirements.txt 현재 설치된 패키지들을 모두 requirements.txt에 기록하려면 다음 명령을 사용하면 된다. 1 (venv)$...

프로그래밍 언어에 관련된 기본적인 지식

각 프로그래밍 언어의 특징 및 패러다임에 대해서 분석하고 컴파일러와 인터프리터의 작동 원리 및 차이점을 아직 제대로 모르는 것 같아서 다시 복습하고자 한다. 내용들은 대부분 프로그래밍 언어 개념(원유헌), 클린 아키텍처(로버트 C. 마틴)에서 참고하였다. 프로그래밍 언어 먼저 프로그래밍이란 무엇이고 프로그래밍 언어란 무엇일까? 필자가 생각하는 프로그래밍이란 어떤 목적을 달성하기 위한 동작을 모아놓은 프로그램을...

RESTful API의 개념과 장고의 REST Framework

제작중인 서비스형 블로그의 발전을 위해서 RESTful과 프론트엔드 프레임워크의 도입을 시도하고자 하였다. RESTful API의 개념은 어느정도 알고 있었지만 이를 어떻게 장고에서 구현하는지가 이 글의 핵심이다. REST란? REST는 Representational State Transfer의 약어로서 웹의 장점과 HTTP의 우수성을 제대로 활용할 수 있는 아키텍처이다. HTTP URI를 통해서 자원을 명시하고 HTTP Method(POST, GET, PUT, DELETE)를 통해서...

장고(django)에서 검색(filter에서 OR) 만드는 방법

검색도 사실 큰 어려움은 없지만 새로 알아야 하는 것들이 있다. 필드안에 텍스트를 포함하는 함수나, OR 연산을 할 수 있도록 해주는 라이브러리 등이 그것이다. 생성된 모델 1 2 3 4 class Post(models.Model): author = models.ForeignKey('auth.User', on_delete=models.CASCADE) title = models.CharField(max_length=50) text = models.TextField() 우리가 검색할 모델의 구조는 위와 같다. 블로그라는 가정하에 포스트는...

처음부터 다시 장고(django)

장고 프로젝트를 하면서 이제는 장고를 어느정도 다룰 줄 아는 실력이 된 것이 아닌가 싶었다. 그런데 다른 새로운 프로젝트를 시작하려고 봤더니 괜히 불안했다. ‘처음 시작은 어떻게 하더라?’, ‘사용했던 패키지를 다 기억할 수 있을까?’ 싶은 생각이 들었기 때문인 것 같다. 그러다 필자가 예전에 작성한 장고 시작하기!라는 글을 보는데 당시에는 이런 개발 순서가...

장고(django) 떠먹여 주는 UWSGI와 NGINX 연동

UWSGI 연동에 많은 수행착오를 겪은 뒤 스트레스와 두려움 때문에 proxy_pass로 버텨오다가 소셜 계정 로그인을 추가하다가 어쩔 수 없이 도입을 해야할 것 같았다. 막상 추가하고 보니 proxy_pass와 크게 다른 것은 없어 보인다. 다만 기존의 runserver로 돌리는 거보단 역시 귀찮다. 1. PIP 설치 필자는 파이썬 가상 환경에서 설치를 진행했다. 1 pip install...

장고(django)에서 이메일 전송, 사용자 메일 인증

이메일 전송할 때 SMTP 서버부터 구축해야 하는 줄 알고 미뤄두고 있었는데 정말 간단한 방법으로 메일 전송이 가능했다. 우선 settings.py에서 아래 내용을 추가한다. 1 2 3 4 5 EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_HOST_USER = 'USER_NAME@gmail.com' EMAIL_HOST_PASSWORD = 'USER_PASSWORD' EMAIL_USE_TLS = True 유저와 패스워드에는 자신의 아이디와 패스워드를 입력하면 된다. 위...

파이썬으로 구현한 알고리즘 - 정렬

자료구조를 확실히 공부했더니 이전에는 이해되지 않았던 히프정렬이나 트리정렬에 대해서 정확하게 이해할 수 있었다. 구현하는 것도 재밌었고 새로운 알고리즘(유전정렬)을 고안해 보기도 하였다 :) 버블 정렬(Bubble Sort) 인접한 원소를 두 개 비교하여 자리를 교환하는 방식이다. 처음부터 마지막까지 원소를 비교하여 마지막에는 가장 (큰 또는 작은) 원소가 배치된다. 이를 정렬이 끝날때까지 수행하며 시간 복잡도는...

파이썬으로 구현한 자료구조(4) - 트리

트리(Tree) 리스트나 스택 또는 큐로 가계도나 조직도를 구현할 수 있을까요? 선형 자료구조로 계층형 구조를 표현하기 어렵습니다. 이처럼 계층형 구조를 가진 문제를 해결하기 위한 자료구조 형태가 트리입니다. 트리의 구조를 일정하게 제한하여 정의하면 트리의 연산이 단순하고 명확해진다. 전체 트리의 차수가 2 이하가 되도록 정의한 것이 이진 트리이다. 이 글에서 구현된 트리의 종류는...

파이썬으로 구현한 자료구조(3) - 큐, 데크

큐(Queue) 은행에서는 먼저 기다린 손님을 우선으로 일을 처리해 줍니다. 이처럼 삽입 순서와 삭제 순서가 일치하도록 하는 자료구조를 큐라고 합니다. 앞서 익혔던 스택의 경우에는 늦게 들어온게 가장 먼저 나가는 방식인 LIFO 였으나 큐의 경우에는 스택과 다르게 선입선출, FIFO(First In First Out) 방식을 사용한다. 우리의 법치국가 사회에서 가장 많이 볼 수 있는...

파이썬으로 구현한 자료구조(2) - 스택

스택… 지난번에 백준에서 현욱은 괄호왕이야!!!문제를 풀려고 했을때 지금 나올 스택을 활용하여 해결하고자 했으나, 역시 응용이 안됐다. 기본기의 부족때문일까… 스택 미로에서 길을 찾는 문제와 같이 삽입 순서와 삭제 순서를 역순으로 하여 풀어야 하는 문제들이 있는데, 이럴때 쓰는 자료 구조가 스택입니다. 스택의 예로는 대부분 팬케이크와 연탄에 빗대어 표현하곤 한다. 팬케이크는 아래로부터 차곡차곡...

파이썬으로 구현한 자료구조(1) - 연결 리스트

이번에 코딩 테스트를 하면서 지금 내게 부족하다고 판단된건 자료구조의 대한 무지라고 생각된다. 어떤 문제를 보면 어떤 자료구조를 이용할지 떠오르지만 막상 적용하는데 어려움이 있다보니 결국 for문 부터 적게된다. 이번에 파이썬을 활용해서 연결리스트, 스택, 큐, 트리, 그래프와 같은 기본적인 자료구조를 구현해 볼 생각이다. 이번건 절대로 작심삼일로 끝나지 않을 것이다! 연결 리스트 연속된...

NodeJS 카카오톡스러운 채팅 만들기(3) - 디자인 개선

데이터 베이스와 웹소켓을 활용하여 기본적인 채팅이 가능한 웹서버가 되었다. 이번에는 디자인을 개선하여 본격적으로 카카오톡과 비슷하게 구성하도록 할 것이다. 다만 이 글은 오로지 채팅창의 디자인만 구현한다. 결과물 먼저 결과물을 살펴보도록 하자. 구현 먼저 채팅이 전달되면 p 태그를 생성하여 #chatLog라는 div에 삽입하도록 하였다. 다만 카카오톡의 경우 상대의 메시지와 내 메시지를 다른 색상으로...

NodeJS 카카오톡스러운 채팅 만들기(2) - 데이터 베이스 연동

지난번에 웹소켓을 사용하여 구현된 채팅 프로그램에 데이터 베이스를 활용하여 이전 채팅을 보관하고 사용자에게 출력해서 보여줄 것이다. 먼저 mysql을 사용할 수 있도록 패키지를 설치해 주어야 한다. 1 > npm install mysql 이후 테스트를 위해서 데이터 베이스에 다음과 같은 테이블을 생성했다. 이 글에서는 데이터 베이스의 기초적인 설치와 설정 방법에 대해서는 다루지 않는다....

장고(django) 댓글 구현하는 방법

처음엔 장고에 익숙하지 않아서 우왕좌왕했는데 이제 익숙해지니 작업의 순서를 기억하며 작업하니 쉽게 느껴진다. 장고에서 작업할 때 기억해야 하는 것 모델 폼 URL 뷰 탬플릿 모델 만들고 모델 사용할 폼 만들고 폼을 사용할 URL을 만들고 URL에서 사용할 뷰를 만들어 준다고 머릿속에 각인해두자! 만들어진 뷰는 탬플릿에서 호출한다. 먼저 밝히는 것은 이 글에서...

NodeJS 카카오톡스러운 채팅 만들기(1) - 소켓 통신 이해

오늘 Node.js 공부하면서 드디어 웹 소켓과 관련된 내용이 나왔다. 웹 소켓으로 구현된 채팅 코드를 본 적이 있는데 코드는 상당히 짧았으나 자바스크립트 코드가 굉장히 읽기 어려웠고 내용도 모르니 어렵기만 했었다. 공부할때도 좀 긴가민가 했는데 어느순간 득음하였다. 웹에서는 소켓을 이용한 통신이 없었다. 최근에서야 실시간 통신을 흉내내기 위한 ws와 wss가 추가되었다. wss는 https와...

자바스크립트와 쿠키를 이용한 나이트모드

오늘 Node JS를 공부하면서 쿠키에 대해서 알게되었다. 크롬에 쿠키를 지운다는 것을 보고 쿠키라는 것의 존재는 알았지만 정확히 무슨 값을 가지고 무슨 동작을 하는지는 오늘에서야 알게되었다. 쿠키는 웹 브라우저에 저장되어있는 키-값 형식의 데이터입니다. 웹 서버가 Response를 보낼때 Set-Cookie 헤더를 통해서 생성됩니다. Cookie 헤더를 받은 웹 브라우저는 저장장치에 쿠키 데이터를 생성하고 저장합니다....

자바스크립트(JavaScript) include 사용하는 방법

예전에는 “소스코드를 뭐하러 나누지? 괜히 왔다갔다 불편하지 않나?” 이런 생각을 했었는데 그때는 코드가 길어봐야 1000줄 이내였기에 버틸 수 있었다. 무슨 기능을 만들었는지 다 기억도 하고있고 한 파일에 있어야 검색하는게 편리했다. 하지만 이제는 코드를 최대한 알아볼 수 있게 부분부분 나눠서 수정할 부분이 생기면 나눠진 코드에서 찾는다. 위와같은 이유도 있고 HTML 내에서는...

NodeJS, super()를 호출해야 this를 쓸 수 있다

튜토리얼을 통해서 NodeJS를 공부하고 있는데 만들어진 코드를 그대로 사용했으나 실행할때 에러가 발생했다. 오류의 내용을 다음과 같았다. ReferenceError: Must call super constructor in derived class before accessing ‘this’ or returning from derived constructor 코드를 살펴볼 때는 전혀 오류가 발생할 부분이 없었는데 위와같은 오류가 발생하니 뭔가 싶었다. 문제는 예제에서 만들어진 최상위 클래스가...

부트스트랩(Bootstrap) 디바이스별(반응형) 크기 조절

이 블로그에는 부트스트랩을 사용하고 있다. 블로그의 가독성을 올리기 위해서 많은 시간을 할애하는데 대부분 데스크탑과 모바일만을 중심으로 작업을 진행하였다. 그러다보니 태블릿 환경에서 최악의 가독성을 보이고 있었다. 문제는 .col-md 클래스만을 사용하여 크기를 조절했기 때문이었다. 처음 부트스트랩을 배운것도 다른 레이아웃에 적용된 것을 보면서 익혔기 때문에 그냥 그리드를 조절하려면 md 클래스를 사용해야 하는 줄...

깃허브 블로그(지킬, Jekyll) 카테고리 목록 만들기

지금까지는 HTML을 이용해서 직접 카테고리를 개설하였다. 미디움 스럽게 하기위해서 이미지 중심의 카테고리를 만든것인데 최근에 새로운 디자인의 카테고리를 개설하고 싶었다. 그래서 지킬의 카테고리라는 기능에 대해서 좀 더 알아야 했다. 지킬에서 카테고리는 대부분 다음과 같이 출력한다. 1 2 3 4 5 <ul> {% for category in site.categories %} <li><a href="{{ site.baseurl }}/{{...

장고(django) Pagination과 무한 스크롤 구현

제작중인 블로그에 무한 스크롤을 적용할 필요가 있었다. 무한 스크롤은 사용자가 필요한 만큼만 리소스를 요청하고 적용하기도 간단하다. 이 블로그에도 무한 스크롤을 적용했는데 그래서 더 무한 스크롤에 집착이 생긴다. 너무 좋은 기능이다. 여하지간 무한 스크롤을 사용하기 위해선 Pagination이 되어 있어야 하는데 장고에서 페이지네이션을 구현하는 것이 매우 간단했다. views.py 우선 페이지 네이션을 구현하기...

PHP Ajax 이미지 업로드

요즘 Ajax를 사용하는게 너무 재밌는 것 같다. 새로고침 없이 바로바로 결과가 나오는 점에서 크게 인상적이다. 텍스트 방식의 Ajax를 몇번써서 이미지 업로드도 크게 다른건 없을거라 생각했는데 지속적으로 에러가 발생했다. 1 2 3 4 5 <form id='image-form' enctype='multipart/form-data'> <input type='file' name='image'> <button type="button" onclick="image_upload();">보내기</button> </form> <p id="image-url"></p> HTML은 위와같이 작성되었다. 이미지를 업로드하면...

PHP Ajax 크로스 도메인 오류(Access-Control-Allow-Origin) 해결 방법

장고를 이용하여 블로그를 제작중에 있으나 장고로 만들기 불편한 것 같은 기능들은 PHP를 이용하여 개발하고자 하였다. 여하지간 서로 다른 도메인을 사용하는 중이다. 파이썬에서 requests 방식을 사용했을땐 큰 문제가 없었지만 form을 이용해서 Ajax를 활용하고자 하였을땐 아래와 같은 오류가 발생했다. 1 No 'Access-Control-Allow-Origin' header is present on the requested resource. 사실 충분히 이해를...

장고(django) 사이트맵 생성 방법

장고로 블로그를 개설하고 있는데 사이트맵은 SEO를 향상시키기 위해서 아주 기본적으로 제출해야 할 필수 요소다. 사이트맵은 봇에게 사이트의 구조를 알려준다. 필자는 장고에서 이 기본적인 사이트맵을 생성하는데 큰 난항을 겪었다. 겪은 이유는 대표적으로 장고의 메인 문서가 영어라는 것 나름대로 고집피워 소스를 정리하려고 했던 것 위 두가지 이유가 있었다. 영어라서 한 50% 정도만...

장고(django) 좋아요 버튼 만들기(AJAX)

필자는 미디움을 참고하여 결과물을 만들고 있다. 장고를 이제 좀 알겠다 싶었으나 제자리 걸음을 하고 있는 듯한 느낌이다. 이게 장고에 익숙하지 않아서 그런건지 데이터 베이스를 아직도 잘 모르는 건지 판단이 안된다. 여튼 좋아요 버튼을 만들어 보았다. 1.MODEL “좋아요는 댓글처럼 모델을 따로 만들어야 하나?”라는 고민을 했었지만 ManyToManyField를 사용하면 한 사용자가 한 포스트에...

장고(django) 템플릿에서 시간 비교

템플릿에서 아래 소스코드처럼 시간을 비교하려 하는데 안됐다. 1 {% if post.updated_date > post.created_date %} 안된다고 하기엔 좀 애매하긴한데 여하지간 의도한 바로는 새로 생성한 포스트에서는 안떠야 정상인데 뜬다. 그래서 찾아보니 다음과 같이 하면 된다고 하여 시도해 보았다. 1 {% if post.updated_date.date > post.created_date.date and post.updated_date.time > post.created_date.time %} 날짜끼리 따로 비교하고...

라즈베리파이(RaspberryPi) Processing(프로세싱) 설치 방법

라즈베리파이에서 프로세싱을 사용할 일이 생겼다. 프로세싱이 ARM 버전을 지원하여 정상적으로 사용할 수 있다. 2가지 방법으로 설치할 수 있는데 2번째 방법이 간단하고 여러모로 편리하여 추천한다. 1. tar 파일 받아서 https://processing.org/download/ 페이지로 이동하여 ARM 전용 tar 파일을 받는다. 1 2 3 pi@raspberrypi:~ $ tar -xvzf processing-3.2.1-linux-armv6hf.tgz pi@raspberrypi:~ $ cd processing-3.2.1/ pi@raspberrypi:~/processing-3.2.1 $...

장고(django) No Such Table 에러

당신이 이 오류를 겪고 있는 이유는 다음과 같을 것이다. DB를 삭제하고 다시 만든 경우 models.py를 확장한 경우 1번의 경우라면 간단하게 해결이 가능하다. migrate 할 때 아래와 같은 옵션을 덧붙혀서 데이터베이스를 생성하면 된다. 1 python manage.py migrate --run-syncdb 2번의 경우 필자는 이제껏 DB를 삭제하고 다시 생성하는 쉬운 방법을 택했으나 실제 서비스를...

장고(django)에서 마크다운(markdown) 적용하는 방법

장고의 포스트 모델이 단일 텍스트 필드라서 새로운 문서 에디터라도 넣어야되나 싶었다. 관련된 내용을 인터넷에서 찾아보니 깃허브에서 텍스트를 마크다운으로 변환해주는 API를 제공해 주는데, 글을 작성한 분께서는 파이썬의 requests 라이브러리를 이용하였다. 텍스트를 주고 HTML을 가져오는 것이다. 동적으로 변환해주면 매우 간단한데다 마크다운으로 저장되어 있으니 변환해 줄 필요없이 사용자가 편리하게 글을 편집할 수 있을...

PHP에서 Ajax 사용하는 방법

사실은 Ajax에서 PHP를 사용하는 방법이 맞지만 카테고리가 PHP이므로… 여하간 오늘 처음으로 Ajax를 사용했는데 정말 좋다. 이 방식을 이용하면 실시간 통신도 쉽게 구현할 수 있을 것 같다. 물론 성능은 고려하지 않고 하는 말이다. 필자가 Ajax를 사용하고자 한 이유는 NotePHPad를 업그레이드하기 위함이었다. 메모를 기록할때마다 새로고침이 되는 구조를 가지고 있어서 빠른 웹서버에선 느끼기...

파이썬 그래프 그리기 matplotlib

그래프는 생각보다 사용할 일이 다분한 것 같다. 필자가 진행하고 있는 프로젝트에도 필요하여 사용법을 찾아 보았다. 결과를 실시간으로 그려보고 싶었지만 스레딩이 필요한지 안되는 관계로 출력된 파일에서 필요한 부분만 잘라서 그래프로 그려보고자 하였다. 설치(우분투) 1 2 sudo apt-get install python-matplotlib sudo apt-get install python3-matplotlib 자신에 버전에 맞는 파이썬으로 위 명령어를 통해서 설치해...

유니티 / 파이썬 소켓 통신

유니티와 파이썬을 연동할 수 있는 방법을 모색하였다. 파이썬 코드 자체를 연동 시리얼 통신 장고를 이용한 백엔드 서버 소켓 통신 1번은 어떤 플러그인을 사용하면 된다고 했는데 지원이 중단된 듯 하였고, 백엔드 서버를 열기엔 필자가 장고에 대한 지식이 너무 부족했다. 결론적으로 선택한 것은 소켓 통신이다. 친구가 파이썬에서 서버를 작성하고 필자가 유니티에서 클라이언트를...

유니티 오브젝트 동적 생성

오브젝트를 생성했다가 생성한 오브젝트를 제거하고 다시 오브젝트를 생성하는 방법을 사용해야 했는데, 기본적으로 생성한 오브젝트를 사용하여 파괴한 경우 다시 생성하는 방법을 알 수 없어 일단은 복제하는 방법으로 오브젝트를 동적으로 생성하는 방법을 생각해 보았다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18...

유니티 1인칭 카메라 스크립트

유니티를 간만에 사용할 일이 생겼는데 간만에 하니까 정말 아무것도 기억이 안났다. 물론 간보듯이 살짝 해본게 가장 큰 문제였겠지만… 여튼간에 다시 사용해 본 김에 제대로 다시 공부하고 공부한 내용을 기록해 놓으려고 한다. 기본 환경 기본적인 환경 구성은 위와 같다. 아무 움직임 없는 큐브와 카메라로 구성되어 있다. CameraMove라는 스크립트를 생성하였다. 해당 스크립트를...

라즈베리파이(RaspberryPi) PyQt5 설치 방법

파이썬에서 GUI를 구현하는 방법으로는 tkinter를 사용하거나 PyQt를 사용하는 방법이 있다. PyQt는 디자인 툴이 있어서 레이아웃 설계가 상당히 편리하다. 1 2 3 sudo apt-get update sudo apt-get upgrade sudo apt-get install python3-pyqt5 위 명령어로 pyqt5를 설치한다. 그리고 아래와 같이 코드를 작성하면 끝! 1 2 3 4 5 6 7 8 9...

장고(django) 시작하기 in 우분투

오늘 처음으로 파이썬으로 웹을 구현하는 방법에 대한 궁금증을 가졌다. 그것은 다름이 아닌 기말고사에 시험이 없고 뭘 한다는 거였는데 일단 뭐라도 익혀주면 좋겠지 싶어서 필자가 젤 관심있는 웹을 연관시켰다. 찾아보니 플라스크, 장고가 가장 많이 이용되는 듯 하다. 플라스크를 먼저 공부하고 장고를 해보려했지만 튜토리얼은 장고쪽이 더 잘 만들어져 있어서 먼저 장고를 택했다....

c언어 split(문자열 자르기)

포인터랑 친해지기 위해서 파이썬에 기본적으로 있는 기능인 length와 split를 만들어 보고자 하였다. 다만 length의 경우 sizeof를 이용하면 간단하게 구현할 수 있었다. 물론 length 함수를 만드려고 하면 더 복잡해 진다. 그리고 예상외로 버그도 많았다. 그래서 결국은 split만 완성할 수 있었다… Source Code 1 2 3 4 5 6 7 8 9...

깃허브 블로그(지킬, Jekyll) 카테고리 다음글 이전글

전에 이 기능을 넣으려고 할때 “Jekyll Post Navigation Within a Category” 이 포스트를 발견했는데 플러그인 넣는 방법을 몰라서 일일이 변수 만들어서 체크하도록 해서 만드려고 하였으나, 내 지식의 한계로 인해서 만들 수 없었다. 플러그인 넣는게 이렇게 간단한 줄 알았으면 시도도 하지 않았을 텐데… _plugins에 .rb 확장자로 아무 파일이나 생성한다. 1 2...

express 프레임워크 기본 코드 이해하기

저는 NodeJS가 죽도록 어려웠습니다. 저는 서버 사이드 언어를 처음 접해본게 PHP였고 NodeJS는 PHP와는 전혀 다른 방식으로 되는듯 보였습니다. 시작하는데 어려움을 많이 겪었고 중급 난이도의 책을 먼저 본것도 큰 낭패였습니다. 하지만 NodeJS의 개념을 어느정도 알고나니 조금은 이해가 됐습니다. 이 글은 NodeJS를 처음 접하는 사람이 대상이며 조금이나마 도움이 되길 바라는 마음으로 작성되었습니다....

파이썬(Python) Tkinter을 이용한 GUI 프로그래밍

파이썬에서 GUI 프로그래밍을 하기 위해선 PyQt 혹은 Tkinter을 이용하여 구현할 수 있다. 하지만 PyQt는 Qt를 별도로 설치하여야 하는 불편함이 있다. 라즈베리파이에서 간단하게 구현하기 위해서 Tkinter을 선택했다. 우분투에서 패키지 설치 라즈베리파이에는 기본적으로 깔려있는 듯하지만 우분투에서는 기본적으로 깔려있지 않았다. 설치하는 방법은 다음과 같다. 파이썬2와 파이썬3를 각각 설치해야 한다. 1 2 3 sudo...

PHP 파일 리스트 출력하는 방법

디렉터리를 출력하거나 디렉터리안에 들어있는 파일리스트를 호출하는 함수다. 사용법은 상단에 나와있는 것처럼 첫 파라미터에 경로를, 두번째는 이름을 입력하면 된다. 이름은 자동으로 정렬되는 줄 알았는데 안되는걸 뒤늦게 알아채고 정렬도 추가하였다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22...

우분투에서 NodeJS 설치 및 테스트

PHP를 쳐보면 부정적인 글이 주로 보여서 지속적으로 다뤄도 되는지 걱정된다. 그래서 이번에 다른 언어를 공부하면서 차이점과 미래에 대한 대비를 하고자 하였다. ‘Node.js 6.x 블루프린트’라는 책을 예전에 받았었기에 생각나서 펴봤는데 초보자를 위한 책이 아니었다. 책에도 그렇게 나와있었다. 설치부터 골치였다. NodeJS는 자체로 웹서버를 열 수도 있다. 알아두면 좋은 언어인 느낌은 확실하다. 우분투에서...

HTML Canvas Javascript 기초

도형과 애니메이션을 이용한 그래픽을 표현하는데 파이썬을 이용할지 HTML을 사용할지 고민했다. 하지만 나의 궁극적인 목표는 웹개발자이므로 캔버스를 사용하고자 하였다. 이곳을 참고하여 기본적인 사용법을 익혔다. HTML 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <!DOCTYPE html> <html> <head> <meta charset="utf-8"...

깃허브 블로그(지킬, Jekyll) 마크다운 사용법 정리

상단이 표기법 하단이 출력값 입니다. 1 2 3 4 5 6 # 제목 ## 제목 ### 제목 #### 제목 ##### 제목 ###### 제목 제목 제목 제목 제목 제목 제목 1 2 3 --- *** ___ (underline) 1 2 3 4 문단은 그냥 작성하면 된다. 문단의 구분은 한칸의 공백으로 한다. 문단은...

자바스크립트 기초 유전 알고리즘

파이썬에서 만들었던 유전 알고리즘을 자바스크립트로 단순히 번역해 본 결과물이다. 자바스크립트에 익숙해 지고 싶어서 해봤는데 의외로 시간이 오래 걸렸다. 약간의 기초적인 지식은 알고 있다고 생각했는데 … 아니었나보다. 파이썬에 있는 numpy.argsort()가 없어서 일단 애먹었고, 자바스크립트 정렬에서도 좀 애를 먹었다. 문자 정렬은 잘되는데 숫자 정렬은 정렬에 또 다른 조취를 취해 주어야 한다. 해결한...

RGB를 HSI로 변환

Image Editor를 만들때 RGB를 조절하여 색상을 조절하는 기능을 구현하고 HSI를 조절하여 색상을 조절하는 기능을 추가하려고 했으나 관련 지식이 너무나 부족했고, 기본적으로 Hue를 변경할 수 있게해야 하는 합당한 이유를 찾을 수 없어서 만들지 않았었다. 오늘 HSI에 대해서 배우는데 갑자기 묵혀가고 있던 프로그램이 생각나 해당 기능을 추가해 보려고 한다. 하지만 여전히 Hue에...

파이썬(Python) - 유전 알고리즘 - 가방 채우기 2

어제 만든 가방 채우기는 물건이 같은 부피의 같은 가치가 있는 물건이 끝없이 나열되어있고 가방에 크기에 알맞게 넣는 알고리즘이었다. 이번에는 중복없이 한개씩 제공되는 물건중에 무엇을 챙겨야 할 지 결정하는 알고리즘이다. (원래는 이게 목적이었는데 어제 중요한걸 빼먹어 버렸다.) 예로들어 어디론가 놀러 가거나 급박한 상황이 발생했을때 물건에 다음과 같이 부피와 가치를 지정할 수...

파이썬(Python) - 유전 알고리즘 - 가방 채우기 1

유전 알고리즘을 만들때 가장 먼저 해야할 일은 항상 evoluation 함수를 만드는 것이며 evaoluation 함수는 추악한 오리와 아름다운 백조를 분리하는 작업이다. 저번에 만들었던 소스코드는 굉장히 간단한 내용이었기에 큰 어려움이 없었다. 조금더 유전 알고리즘에 익숙해지기 위해서 새로운 소스코드를 작성하고자 한다. Project2. 배낭에 가장 효율적인 물건 채우기 가방의 공간은 10으로 한정 각 물건의...

파이썬(Python) - 유전 알고리즘 - 기본

이 블로그에서 이론을 참고했다. 책에 나와있는 것과 유사한 내용인데 좀 더 정리가 잘 된 내용인 것 같다. 간단하게 정리하면 이렇다. 용어 염색체 : 유전 정보를 담은 문자열 유전자 : 문자열의 유전 정보 교차 : 두 개의 염색체를 조합 돌연변이 : 확률적으로 유전자의 정보가 바뀜 자손 : 교차와 돌연변이로 생성된 염색체...

아두이노(Arduino)를 이용한 네오픽셀(Neopixel) 제어

이번엔 아두이노와 네오픽셀을 이용하여 무드등을 만드는 방법에 대해서 작성합니다. 제가 처음 네오픽셀을 구매했던 이유는 아이백(IM-100) 휴대폰의 자매상품인 스톤에서 영감을 얻어서 비슷한 물건을 만들어보기 위해 구매했으나 너무나 귀찮아진 나머지 모니터 뒤에서 빛나는 무드등 용도로 사용하고 있습니다. 그래서 모니터에선 항상 아우라가 흘러넘칩니다. 준비물 아두이노 네오픽셀 저는 30개 짜리 네오픽셀 링을 사용하고 있습니다....

자바스크립트를 이용한 리디렉션

티스토리를 탈퇴했는데 블로그에 연결된 페이지가 몇몇 있는것을 확인했습니다. 그래서 다시 가입해서 링크된 페이지인 경우 이쪽 사이트로 리디렉션 해주기로 판단했습니다. 티스토리 블로그도 운영할까 생각은 해봤지만 이미 지운걸 다시 하는건 귀찮네요… 구글에 찾아보니 사용자의 편의를 위한 자바스크립트로 리디렉션을 해주는 경우는 큰 문제가 없다고 나와있습니다. 위와같이 만들었고 단순하게 HTML, CSS, JS를 이용하여 만들어진...

깃허브 블로그(지킬, Jekyll)에서 접기 펼치기 생성

1 2 3 4 5 6 7 8 <details markdown="1"> <summary>접기/펼치기</summary> ### 제목 여기에 내용을 작성합니다. </details> 위와같이 작성하면 접기/펼치기를 만들 수 있다. details안에 markdown="1"은 해당 태그안에 마크다운이 포함되어 있다면 적어주면 된다. div 안에도 적용할 수 있다. 최초에는 summary만 노출되며 summary를 클릭하는 경우 summary 이외의 모든 태그가 등장하고 다시 누르면...

아두이노 A4988 바이폴라 스텝모터 제어

CNC Shield v4를 이용해서 바이폴라 스텝모터를 제어하게 되었는데, 쉴드는 인터넷에서 봤던 수 많은 영상처럼 가볍게 작동 되어주지 않았다. 그래서 일단 쉴드에 부착된 모터 드라이버인 A4988만 떼어놓고 생각해 보고자 하였다. 왼쪽이 쉴드, 오른쪽이 A4988 드라이버 처음에는 드라이버를 제어하기 위해서 5V 1A의 전원공급기를 이용했다. 하지만 모터 드라이버는 동작하지 않았다. 많은 인터넷 자료를...

안드로이드 스튜디오 계산기 중급(onClick)

이전글에서는 클릭 리스너를 생성하는 과정만 다뤘으나 이번에는 XML에서 onClick을 구현하는 과정도 다루고 있습니다. 클릭 리스너를 생성하는 것이 일반적인 경우지만 때에따라 onClick으로 구현하는 경우가 효율적일 수 있습니다. 이번 계산기는 테이블 레이아웃을 이용하여 숫자 자판을 직접 구현할 것입니다. 아래는 완성된 계산기의 동작 화면입니다. Layout 이번에도 레이아웃을 먼저 설계할 것이며, 레이아웃은 Text 탭에서...

안드로이드 스튜디오 계산기 기초(EditText, Toast)

안드로이드 스튜디오의 아주 기초적인 내용을 다뤄보며 레이아웃에 어떻게 위젯을 배치하는지 배치한 레이아웃을 소스코드에서 어떻게 제어하는지 알아보고 더하기 뺄셈이 가능한 계산기를 만들어 보겠습니다. 계산기계의 Hello World 쯤으로 생각하면 될 것 같습니다. EditText와 Toast가 어떤건지 감이 안잡힌다고요? 먼저 아래에 완성된 어플리케이션의 동작화면을 보도록 하겠습니다. 너무 별거 없어 보인다고요? 시간이 지나면서 점점 발달하는...

백준 알고리즘 16738 : 초특가 숭놀자(Python3)

하… 런타임 에러가 왜 발생하는 거냐 도대체… Python3로 제출을 했던건 그래 내 잘못이 맞아. 하지만 Python2에서 런타임 에러는 좀 아니지; 백준을 하면 할수록 자괴감이 들지만 언젠간…나아지겠지 싶다. 아니 나아져야 한다. 일단 터미널에서 파이썬을 실행시켰을 땐 정말 멀정하게 동작한다. 아마 런타임 에러가 아니었어도 분명 예외는 어딘가 있었겠지만 일단 런타임 에러만 좀...

C# 윈도우폼 시계 프로그램 만들기

이 글은 제가 프로그래밍 초심자일때 작성하여 가독성이 떨어질 수 있으며(작성하는 현재 최대한 보완할 예정입니다.) 좋지 못한 습관을 나타낼 수 있으므로 참고만 하도록 합시다! 최종 프로그램은 현재시간, 타이머, 스톱워치를 포함하고 있습니다. 현재시각 - 사전설정 먼저 윈폼의 도구 상자에서 타이머를 꺼내옵니다. 그럼 위처럼 하단에 타이머가 배치됩니다. 타이머는 속성에서 시작한 상태로 동작할 것인지,...

Qt 윈도우 상단바 제거

가장 먼저 레이아웃을 더 예쁘게 만들기 위해선 기본 레이아웃을 벗어나는 것이 중요하다. 물론 기본 레이아웃 안에서도 충분히 예쁘게 만들 수 있으나 프로그램의 일관성을 유지한다거나 독특한 레이아웃으로 사람들의 시선을 사로 잡는 것도 중요하다고 생각한다. 다만 프레임을 제거하고 나면, 예로들어 윈도우에서 기본으로 제공하는 최소화, 최대화, 종료, 윈도우 이동 등을 사용할 수 없으므로...

텐서플로우(Tensor Flow) XOR 코드 분석

글씨가 왜 이렇게 자꾸 기울어 지는지... 핵심 소스 1 2 3 4 5 6 7 8 9 10 11 # 크기가 정해지지 않은(None), 2개의 입력값을 받는(placeholder) 변수 X = tf.placeholder(tf.float32, [None, 2]) #그래프를 계산하면서 최적화할(Variable), 0에 가까운 난수(truncate_normal) w1 = tf.Variable(tf.truncate_normal([2, 4])) # mat는 행렬을 의미하고 mul은 곱셈을 의미한다. A1...

라즈베리파이(RaspberryPi) 스텝모터 구동

라즈베리파이에서 하드웨어를 제어해 본 경험은 단 한번도 없어서 좀 어버버 했지만 인턴넷에 찾아보니 자료가 워낙 많아서 크게 어렵진 않았다. 회로를 연결하는 방법을 찾는게 오래 결렸을 뿐이다. 사용하려는 모터 드라이버(DRV8880)와 가장 유사한 회로를 찾았다. 참고한 사이트는 ROTOTRON이라는 사이트다. ▲ Rototron에서 참고한 회로 필자가 사용하려는 모터 드라이브는 위 모터와 조금 달랐던 점이...

파이썬(Python) 단층 퍼셉트론(AND, OR) 프로그래밍

한동안 나를 우울하게 만들었던 인공신경망 퍼셉트론을 이용한 AND, OR 연산의 결과를 만들어내는 소스코드를 드디어 작성했다. 사실 나중에 다시 보면 내가 왜 이걸 짜면서 자괴감에 빠졌나 생각이 들면서 부끄러워 질지도 모르겠다. 하지만 이것 때문에 우울했던건 사실이고 난 해결을 했다는 사실이 기쁠 뿐 이다. 뭐든지 해낼 수 있을 것 같다. 식을 뜨문뜨문...

가독성 떨어지게 코딩하기

‘유지보수가 어려운 코딩하는 방법’ 이라는 책을 읽고 있는데 느낀점이 있다면 유지보수가 어렵게, 가독성이 떨어지게 코딩하기 위해서는 남들보다 많은 지식을 겸비하고 있어야 한다는 것이다. 결국 형식에서 완전히 벗어난, 남들이 이해하기 어려운 코드를 작성하기 위해서는 프로그래밍 언어의 형식과 틀을 누구보다 잘 익히고 있어야 한다는 것이다. ‘나는 아직 한참 멀었구나! 열심히 공부해서 이와같은...

C# 윈도우폼 HiDPI 흐릿한 현상 해결

C# 윈도우폼을 만들다 보면 레이아웃 크기는 어찌저찌 맞춰지는데 결과적으로 빌드된 프로그램의 레이아웃 혹은 폰트가 흐릿하게 보이는 현상을 발견했다. 이를 해결하기 위해서 네이버 지식인에 질문했더니 SetProcessDPIAware을 호출하면 가능하다는 답변을 받았다. MSDN에 나와있다고 하지만 한글로 번역이 안되서 답답했다. 결론은 해결 방법이 2가지가 있다. 소스코드에 삽입 방법과 매니페스트 파일에 삽입하는 방식인데, 매니페스트 파일에...

C# 윈도우폼 자동시작 구현

프로그램을 윈도우 부팅과 함께 실행하는 방법은 여러가지가 있을것이다. 레지스트리에 추가하는 방법과 그렇지 않은 방법. 글쓴이의 경우에는 Qt를 사용할때 그렇지 않은 방법으로 해결했는데 C#에서도 역시 그러할 것이다. 물론 우선순위를 선정하여 빠르게 실행시키기 위해선 레지스트리에 등록해야 하지 않을까 싶다. 1 AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 위 폴더에 등록된 프로그램은 윈도우 부팅과 함께 자동으로 시작된다. 물론...

자바스크립트(Javascript) 기본 문법 정리

이전에 노트에 기록했던 내용을 블로그로 옮겨놓으려고 한다. 매우 기본적인 문법만 들어있다. 1. 변수 자바스크립트에는 변수형(int, double, string)이 존재하지 않는다. var 이라는 가변형 변수만 존재하여 초기화 할때 형태에 따라서 알아서 할당된다. var i; var x = 123; var y = "123"; var z = false; var w = null; 2. 연산자...

안드로이드 스튜디오 APK 파일 빌드하는 방법

제작한 어플을 플레이 스토어에 등재하거나 다른 사람에게 공유할때 APK 파일로 빌드 된 파일을 주어야 한다. 플레이 스토어에 공식적으로 올라가는 어플은 서명 과정을 거쳐야 한다. 이 포스트에선 서명에 대한 자세한 설명은 다루지 않고 과정만 다루고 있다. ※참고 먼저 필자가 APK 파일로 빌드를 진행하려 하자 위와같은 오류가 뜨면서 진행할 수 없었다. Gradle...

CSS3 색상 변환 애니메이션

애니메이션 CSS에서 애니메이션을 다룰때는 브라우저마다 차이가 있어서 주의해야 한다. 이 포스트에선 크롬을 중심으로 적용되는 애니메이션만 다룬다. ▲ 만들어질 애니메이션 필자의 블로그엔 그린/블루 색상이 곳곳에 보인다. 개인적으로 좋아하는 색상이라 자주 사용한다. 블로그 상단바에 위 애니메이션을 적용했으나 너무 요란해 보이고, 메모리가 부담되서 눈물을 머금고 제거했다. 각설하고 위와같은 애니메이션을 만들기 위해선 CSS에서 @keyframes라는 키워드를 사용해야...

R 프로그래밍 기초 문법 정리

잠시동안 배운 R 이번에 R 프로그래밍을 배울 수 있었는데, 새로운 언어를 익혀서 재미는 있었지만 너무 수학적인 언어라 다시 쓸일이 있을까 싶은 생각이 든다. 여하간 이번에 배운 R 프로그래밍 기초 문법을 블로그에 기록해 둘 생각이다. 1. 변수의 이름 변수의 이름에는 ‘.’ ‘_’ 등이 올 수 있다. ‘.’은 먼저 사용할 수 있지만 ‘_’는 먼저올 수 없다. a......

백준 알고리즘 1037 : 약수(C++)

[백준 알고리즘] 1037 : 약수 예시 입력 : 2 4 2 예시 출력 :  8 문제를 간단히 정리하면 1과 N이 아닌 약수를 제공할테니 실제 숫자를 구하라. 그렇다. 썩 어렵지 않은 문제다. 하지만 필자는 틀린 경험이 있다. 그것도 10개월 전. 10개월 전 소스코드 1 2 3 4 5 6 7 8 9...

아희 프로그래밍 안녕, 세상!

필자가 처음 아희 발견한 것은 백준 알고리즘의 소스코드 제출에 등재된 언어 목록에서다. 처음엔 오타인가? 싶었지만 그럴리는 없었고 궁금해서 인터넷에 바로 검색했다. 오직 한글로만 작성할 수 있는 난해한 프로그래밍 언어다. Hello, World! 발다빠빠따빠밪나파빠밣다빠밦다빠밪타빠밣다밣밤따밞밤따밣다빠밝타밪따빠밪타빠빠밝타밞밣따아멓희 아희의 기본적인, Hello, World! 구조다. 이 언어의 이름이 신기해서 찾아봤는데 구조가 더 말이 안됐다. 도대체 이게 어떻게 동작하는 것인지 궁금증이 생겼다. 필자의...

백준 알고리즘 1152 : 단어의 개수(Python2)

[백준 알고리즘] 1152 : 단어의 개수 예시 입력 :  The Curious Case of Benjamin Button 예시 출력 : 6 문제를 간단히 해석하면 이렇다. 띄어쓰기로 구분된 단어의 갯수를 파악해서 출력하라. 내 생각으로는 굉장히 쉬운문제라 생각했는데 생각보다 정답률이 낮았다(22%) 예전에 같은 생각으로 시도했던 문제였는데 최근에야 다시 풀어보았다. 파이썬으로 풀면 굉장히 간단할 것 같았다. 작성된...

C++ 연산자 오버로딩

연산자 오버로딩은 오버로딩의 확장형 개념이다. 프로그래머가 만든 함수를 오버로딩하듯 연산자(+,-,++)를 클래스에서 오버로딩하여 사용할 수 있다. 필자가 이해한 바로는 +,-와 같은 연산자를 함수 이름처럼 사용할 수 있다. 전에 공부할때는 그냥 함수 만들어서 쓰고말지 싶었는데, 쓰면 코드 난독화할때 좋을것 같아서 다시 공부했다. Basic Class 연산자 오버로딩을 설명하기위해 등장한 클래스이다. 먼저 Basic Class는...

Qt 단축키(Shortcut) 만들기

단축키는 개인적으로 프로그램의 진입장벽을 높이는 것이라고 생각한다. 단축키가 많은 프로그램은 어렵다는 고정 관념이 있다. 만약 당신이 사용하는 프로그램이 단축키로만 사용할 수 있다고 생각해 본다면 사용하고 싶을까? 그렇지 않을 것이다. 그럼에도 단축키는 꼭 필요한 기능이다. 다시 만약 당신이 쓰는 프로그램에 단축키가 하나도 없다고 생각해 본다면 사용하고 싶을까? 그것도 그렇진 않을 것이다. 밸런스가 중요하다....

Qt Connect 단박에 이해하기

처음 Qt를 접했을때 connect 함수의 사용법이 어렵다고 느껴졌었다. 공식 문서를 살펴보면 사용방법이 아래와 같이 작성되어 있었기에 상당히 겁이났다. 그래서 왠만하면 다른 방법으로 우회해서 기능을 구현했었는데, 사용법을 익히고보니 이렇게 쉬운걸 왜 쩔쩔맸나 싶은 생각이 들었다. 프로그래밍의 난이도는 낮추고 퀄리티는 쉽게 올릴 수 있었다! 1 QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal,...

파이썬(Python) 한 줄에 여러개 정수 입력 받는 방법

대부분 코딩 테스트의 문제는 한 줄에 여러개의 정수를 입력받는 부분이 많은데 다양한 방법으로 구현할 수 있다. 필자가 생각한 건 4가지 정도? 구석기 1 2 3 x = input().split() a = int(x[0]) b = int(x[1]) 가장 기초적이고 원시적인 방법이다. x를 split된 배열로 받고 각 배열을 int로 형변환하여 변수에 넣는다. 간석기 1...

C#으로 구현한 ALU 곱셈 연산

ALU에서 부호 없는 2진수 곱셈기의 방식은 Q레지스터의 각각(처음 부터 끝까지)의 비트수가 0이면 우측 시프트를 수행하고 1일 경우 A레지스터에 M레지스터를 더해주고 우측 시프트를 진행하는 방식이다. 만약 이 문구가 이해가 안 된다면 소스코드를 복사해서 돌려본 다음 계속해서 보고있으면 뭔가 감이 올 것으로 생각된다. 그렇게 Q레지스터의 비트수 만큼 연산이 진행되고 10진수로 변환하면 곱셈값은...

리눅스에서 Qt Creator 한글 문제

한글이 깨져서 나온다…. 어떤 사람이 인코딩 바꾸면 됀다고 그래서 했지만… 약간의 삽질 후 리눅스 민트는 한국인이 만든것처럼 한글이 자연스럽게 나왔지만 유독 Qt Creator와 Qt에서 빌드한 프로그램에서만 한글이 안됐다. 이번에 둘 다 해결할 수 있어서 참 다행이다. 참고로 필자는 fcitx입력기를 사용하고 있고 리눅스 민트 18.3 시나몬 버전을 사용하고 있다. 1 2...

우분투(Ubuntu)에서 Qt Creator 설치

최근에 뭔가 새로운 경험을 하고 싶은 마음이 들어서 윈도우에서 레인미터와 로켓독을 이용해 꾸몄지만 윈도우라는 환경을 떠나고 싶어졌다. 물론 데스크탑은 게임을 해야하기 때문에 윈도우를 써야만 하지만 랩톱의 경우엔 프로그래밍만 하므로 리눅스를 써도 큰 문제가 없을거라 판단하여 그나마 친숙한 우분투를 설치하게 되었다. 많은 걱정이 앞섰지만 결과적으로 굉장히 만족스럽다. 전에는 일주일을 못가서 윈도우로...

Qt 윈도우 파일배포 dll 쉽게 가져오는 방법

Qt에서 프로그램을 빌드하고 실행하려고 하면 다양한 오류가 발생한다. Qt5Widgets.dll이 없어 코드 실행… Qt5Gui.dll이 없어 코드 실행… Qt5Core.dll이 없어 코드 실행… 그럼 지금껏 일일이 dll 파일을 Qt 폴더에서 찾아서 직접 넣어주었다. 이 방법을 알고나서는 그럴일은 전혀 없었다. 실행이 안될까 조마조마한 일도 없고 말이다. 먼저 C:\test\test.exe가 있다고 가정하면, cmd를 실행하여 test.exe가 있는...

C언어 한글로 코딩하기, 안녕 세상!

왜 한글로 코딩하는 것에 집착하는가? 누군가에겐 분명히 영어가 어렵고 누군가에겐 분명히 프로그래밍이 어렵다. 내 옆자리에 앉았던 친구가 그랬다. 최소한 한글로 구성된 코드를 본다면 “아! 이런 원리구나!”라고 느낄 수 있을거라 믿었다. 나에게 프로그래밍은 분명 재밌다. 그 친구에게도 프로그래밍이 재밌었으면 좋겠다. 적어도 언어에 구애받지 않고 머릿속에 떠오른 단어들로 프로그램을 만들 수 있다면...

C언어 랜덤은 정말 랜덤일까? rand 함수 직접 만들기

C언어에서 랜덤값을 생성하기 위해선 대부분 stdlib.h의 rand()함수를 사용 할 것입니다. 하지만 rand()함수를 진짜 믿고 써도 되는 걸까요? 랜덤함수보다 더 좋은 성능의 함수를 사용하거나 만들 수는 없을까요? 어느 날 교수님께서 위와 같이 말씀하셨다. 그동안에 단 한번도 이런 궁금증을 가져본 적이 없으므로 필자는 흠칫 놀랄 수 밖에 없었다. 그리곤 진지하게 고민해보는 시간을...