반응형

Programming 37

쪼잔한 Rust 3. 일반적인 프로그래밍 개념들

Rust는 그 사용법을 익히는 것만으로도 주니어 레벨에서 안전한 프로그래밍에 대한 철학을 배울 수 있겠다고 생각하게 될 정도로 철저하게 설계된 언어라고 생각한다. 공식 문서인 "The Rust Programming Language" 1독을 했지만, 역시나 일로써 계속 접하지 않으면 그 지식이 조금씩 날라가버리는 것이 아까웠다. 그래서 내 스스로도 다시 정리를 하고, 요점만 정리해서 공유하고자 "쪼잔한 Rust" 시리즈를 시작한다. 이 이름은 clickbait 용도로 사용했을 뿐, 공식 문서를 번역하는 것이 주된 내용이 될 것이다. 본문 번역에 치중하되, 그 양이 많기 때문에 핵심적인 내용만 고르려고 노력했다.한 챕터씩 차근 차근 이어나가겠다. Chapter 2는 생략하고 (그래도 직접 읽어보시길 추천한다..

Programming/Rust 2018.07.20

왜 Python에는 GIL이 있는가

Python 사용자라면 한 번 쯤은 들어봤을 (안 들어봤다 해도 괜찮아요) 악명 높은 GIL (Global Interpreter Lock)에 대해 정리해본다. Global Interpreter Lock그래서 GIL은 무엇인가? Python Wiki에서는 이렇게 말한다. In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once. This lock is necessary mainly because CPython's memory management is not threa..

Programming/Python 2018.06.02

왜 Python은 len 함수가 따로 있을까? Duck Typing과 Python Protocol

여기 Python list가 하나 있다. array = list(range(10000)) Python을 아는 사람이라면, array의 길이를 얻는 방법은 다음과 같이 간단하다는 것을 알 것이다. length_or_array = len(array) # == 10000 C++이나 Java 등의 다른 객체형 언어를 먼저 알고 있었다면 이런 의문이 들 수 있다. "array.size 또는 array.length 같이 안 하고 왜 len이라는 함수를 쓰지?" 질문에 대한 답을 하기 전에 먼저 코드 몇 뭉치를 보고 오는 게 더 좋을 것 같다. 1. len은 __len__을 호출한다. class ClassWithLen: def __init__(self, *items): self.storage = list(items)..

Programming/Python 2018.02.12

Python 계의 npm, Pipenv 첫 사용 후기

virtualenv + virtualenvwrapper를 통해 Python 가상 환경을 사용해왔었다. 사용하면서 딱히 불편한 점은 없었지만 가끔은 npm과 같이 기본적으로 고립된 환경과 비교하게 되는 때도 있었다. 일일이 가상 환경을 만든 것을 기억하고 관리하기가 조금 귀찮은 순간도 있는 것이다. 이렇게 npm, cargo 등의 여러 모듈 관리자의 좋은 점들을 모아서 더 나은 개발 환경을 제공하기 위해 Pipenv가 탄생했다고 한다. Requests 모듈의 창시자이자, flask 등의 유명한 Python 도구 개발에 참여하고, "The Hitchhiker's Guide to Python" 이라는 제목으로 책도 낸 Kenneth Reitz의 프로젝트 중 하나인 Pipenv를 눈 여겨 보고 있었다. 언젠가 ..

Programming/Python 2017.12.21

javascript array의 원소 삭제하기

javascript Array의 특정 원소를 지우는 법을 정리한다. python에서는 다음과 같은 코드로 같은 작업을 할 것이다. a = [1, 2, 3, 4] a.remove(3) 다음은 javascript 코드이다. 지우고 싶은 원소의 인덱스를 찾아서 splice 함수를 통해서 지운다. let a = [1, 2, 3, 4] const idx = a.indexOf(3) if (idx > -1) a.splice(idx, 1) 단순 array가 아닌 object를 담는 array에서 특정 field 값을 가지는 object를 지우고 싶다면 다음과 같은 방식으로 할 수 있다. functional programming style의 find 함수를 이용해서 원하는 object를 찾고, 그 이후는 같은 논리로 코..

NVM, Node Version Manager 소개

ubuntu에는 기본적으로 JDK, Python, Node.js 등의 프로그래밍 언어 및 도구들이 함께 설치되어 있다. Node.js가 설치되어있는 것을 확인해보려면 바로 쉘에서 아래와 같이 버전을 체크해보면 된다. ~$ node --version v4.8.3 ~$ npm --version 2.15.11 시스템에 기본으로 v4.8.3 버전의 Node.js가 설치되어있는 것을 확인할 수 있다. 하지만 Node.js 공식 사이트가 알려주는 최신 버전은 아래 스크린샷을 통해서 보듯이 v7.10.0, v6.10.3(LTS)이다. 최신 버전과 시스템 버전은 큰 괴리가 있음을 깨닫는다. 그럼 여기서 고민이 생긴다. 그냥 시스템에 깔려있는 Node.js를 쓸 것인가,아니면 최신 LTS 버전 (혹은 원하는 버전)을 설..

django admin에서 ForeignKey 선택 제한

다음과 같은 models.py가 있다. from django.contrib.auth.models import User class Article(models.Model): user = models.ForeignKey(User) title = models.CharField(max_length=50) content = models.TextField() created = models.DateTimeField(auto_now_add=True) 누가 블로그 같은 것을 만들었나보다. 위 model을 토대로 django admin 도구는 user 필드를 선택 위젯으로 나타내준다. 사용자가 많아지면, 만약 만 명이라고 생각해보면, 거기서 원하는 한 명을 선택하는 것은 매우 좋지 못한 일이다. 이를 피하기 위해서 어떻게 ..

Programming/Python 2017.02.18

Bootstrap modal 위에서 jQuery UI autocomplete 사용

jQuery UI의 자동 완성 (autocomplete) jQuery UI 자동 완성 기능은 이렇게 쓴다. $("#inputAutocomplete").autocomplete({ source: "/YOUR/SEARCH/URL", minLength: 2, }); 구체적인 사용법은 공식 문서를 참조하자. source에는 직접 배열 자료를 넣어줄 수도 있고, 위 예제처럼 input 값을 받는 요청(request) 주소를 줄 수도 있다. source가 주소일 경우, jQuery UI는 자동으로 GET 요청을 term 매개변수로 값을 실어 보낸다. DB에서 직접 찾거나, Elasticsearch 같은 검색 엔진을 사용해서 서버에서 처리해서 보내주게 하겠지? 그리고 minLength가 2이므로 최소 2 글자를 입력해..

iframe 높이 100% 맞추기

요즘 매일 NBA 포스팅만 하다보니 스스로 좀 민망하기도 해서 iframe 관련 간단한 포스팅을 하려 한다.iframe은 다음과 같이 쓴다. height="200px" 대신 height="100%" 이 필요할 경우가 있다. 하지만 이는 제대로 적용되지 않는다. 이를 해결하기 위해서는 css style을 다음과 같이 주면 된다. vw는 view-port width, 마찬가지로 vh는 view-port height를 의미하는 단위로, 사용자가 보는 스크린을 100 기준으로 재는 단위이다. 아래는 iframe에 다른 스타일도 적용한 예이다. .iframe100 { display: block; border: none; height: 100vh; width: 100vw; } 참조 링크http://stackover..

python json 모듈 사용시 not JSON serializable 에러를 피하는 방법

웹 기반 python 코드를 짜다 보면, 특히 다른 쪽 API와 통신을 자주 하게 된다면 json 모듈을 많이 이용하게 된다. python이 기본적으로 지원하는 데이터 타입인 list와 dictionary 구조를 유지한 채 json 형식으로 바꿔주고, 그 반대로 json 문자열을 해독해서 python 데이터 타입으로 바꿔주는 역할을 하는 것이 python의 json 모듈이다. import json data = {'key': ['value1', 'value2']} json_data = json.dumps(data) # json string from python data python_data = json.loads(json_data) # get python data back from json string a..

Programming/Python 2016.12.12