Regular expression 정리

1. <\s*[A-z]+[^>]*>|<\s*/\s*[A-z]+> : html 태그만 선택 2. <\s*a[^>]*>(.*?)<\s*/\s*a> : html 태그 + 태그 안 텍스트 선택 3. [~#%&*{}\\:<>?\/+| ] : 파일이름에 안 쓰면 좋은 문자

Vue/Nuxt 정리

* Vue component의 최상위 template 태그   Vue component의 최상위 template 태그 아래에는 반드시 하나의 root element만 있어야 한다. v-if를 사용했다면 반드시 v-else(v-else-if)를 사용해서 렌더링되는 root element는 하나만 있도록 해야 한다.

서버(Ubuntu)/AWS 정리

* Mongodb + python + django + uwsgi   mongodb 서비스는 uwsgi 서비스보다 먼저 시작해야 한다. * net.core.somaxconn   아마존 EC2 인스턴스를 재시작할 때마다 net.core.somaxconn의 값이 초기화된다(기본값은 128인듯). 이 값이 너무 낮으면 uwsgi나 redis가 시작이 안된다.

코드 조각모음

[Javascript] * n명의 사용자를 랜덤으로 m개의 팀으로 나누는 방법 1) 팀 번호를 셔플   teams = [1, 2, ..., m].shuffle() 2) 사용자를 셔플(선택사항)    users = users.suffle() 3) 팀 배정   for user, idx in users {     user.team_no = teams[idx % m]   } * n명의 사용자를 랜덤으로 m명씩 팀으로 나누는 방법 1) 사용자를 셔플    users = users.suffle() 2) 팀 배정   for user, idx in users {     user.team_no = idx / m   } * array shuffle [1,2,3,...].sort(() => Math.random() - 0.5) * object deep copy obj2 = JSON.parse(JSON.stringify(obj)) * object shallow copy obj2 = {...obj}

Graphene-django 정리

1. Model의 related_name으로 가져오려면   예를 들어 ItemModel과 SubItemModel 모델이 있고 SubItemModel에서 item = models.ForeignKey(ItemModel, related_name='SubItems')  처럼 정의했다면, schema에서 SubItem(이름은 상관없다. 모델을 Query 클래스에서 가져오기 위한 클래스)을 만들어야 Item 안에서 related_name으로 찾아올 수 있다. 실제로 SubItem을 Query 클래스에서 사용하지 않아도 만들어야 한다. 2. Self reference   schema의 어떤 클래스에서 같은 클래스를 리턴하는 쿼리는 사용할 수 없다. 같은 클래스를 리턴하고 싶다면 같은 모델을 참조하는 다른 클래스를 만들어야 한다. 예를 들면 이렇다. class Item(DjangoObjectType):   class Meta:     model = ItemModel   children = graphene.List(_Item)    # children = graphene.List(Item)은 안된다.      resolve_children(self, info, **kwargs):     return ... class _Item(DjangoObjectType):   class Meta:     model = ItemModel 3. graphene.JSONString 타입과 한글   리턴 타입이면 리턴 시 자동으로 json.dumps를 해주고 인자로 받을때는 자동으로 json.loads를 해준다. 인자로 받을 때는 잘 모르겠는데 리턴할 때 한글이 포함되어 있으면 깨진다. 따라서 리턴 타입을 graphene.String으로 하고 수동으로 json.d...

Ediphy 정리

0. 용어 1) toolbar : 박스마다 pluginToolbarsById에 저장되는 값. 각 플러그인마다 특수하게 필요한 값은 보통 여기 저장된다. 꾸미기 관련된 값도 여기 저장된다. 2) toolbar.state(state) : 박스 클릭 시 오른쪽 툴바에서 보이는 값들은 여기에 저장된다. 3) box : boxesById에 저장되는 값. 주로 element간 상하관계나 위치값을 참조. 4) view toolbar : 박스말고 슬라이드 자체에 관한 값을 저장. 1. 플러그인을 추가하려면 1) /plugins/[PluginName]/... 에 플러그인을 작성 2) core/config.es6, config_noserver.es6, config_production.es6의 pluginList에 PluginName을 추가 2. DevTools   개발모드에서는 DevTools를 쓸 수 있다. 발생한 액션을 차례대로 볼 수 있다. 단 DevTools를 쓰면 같은 액션이 ReduxProvider와 DevTools로 2번 들어가므로 개발모드에서 됐던 기능이 배포모드에서는 안될 수도 있고 그 반대일 수도 있다. 3. dispatch()   dispatch()는 EditorApp.jsx에만 props로 들어가 있는 것 같다. child component로 보내주면 쓸 수 있는지는 아직 테스트하지 않음. dispatch 자체를 보내기 보단 dispatch를 쓰는 함수를 EditorApp에서 만들어서 그 함수를 보내는 방식인 것 같다. 4. 페이지 순서를 가져오려면   navItemsIds가 아니라 navItemsById[0].children을 참조해야 한다. navItemsIds는 만들어진 순서대로 저장되기 때문에 페이지 순서를 바꾸면 어긋난다. 5. EditorBox   표(BasicTable)나 빈 객체(EmptyObject) 안에 있는 플러그인이라면 EditorCanvasSli ...

Nginx + django + uwsgi 에서 ERR_CONTENT_LENGTH_MISMATCH 오류

0. 환경 - ubuntu 16.04 - nginx 1.10(버전이 낮아서 그런 걸 수도 있다) - django 1.11 + uwsgi - chrome 75 1. 오류 상황  2MB 정도의 json string을 request parameter로 넘기니 ERR_CONTENT_LENGTH_MISMATCH(400) 에러 발생 2. 해결방법 1) nginx nginx 설정 파일을 아래처럼 수정.     location / {         uwsgi_pass [경로]         include uwsgi_params;         uwsgi_buffering off;     } 일반 proxy(proxy_pass)를 사용한다면 proxy_buffering off; 모든 포트의 location /마다 추가해야 한다. 2) django settings.py에 아래 줄을 추가 혹은 수정. (django 홈페이지에 따르면 기본값은 2.5MB) DATA_UPLOAD_MAX_MEMORY_SIZE = [원하는 값(Bytes)] 수정 후 nginx와 uwsgi를 재시작한다.