Buttercoco

반응형

안녕하세요 coconut 입니다~

이번에는 웹페이지에서 흔하게 사용하는 modal 내에서 가끔 쓰일 수 있는 이벤트인 Ctrl + C 와 같은 키보드 핸들링을

가능하게 해주는 옵션을 알아보겠습니다.


저는 당연하다고 생각했던 modal 내에서 클립보드 복사가 안되는 문제를 발견했습니다.

답답해서 여러가지 키워드로 구글링을 하다가 원인을 겨우겨우 발견하게 되었습니다.

 

modal이 create 되면 modal 창이 유지되도록 강제로 포커싱하는 이유였습니다.

$.fn.modal.Constructor.prototype._enforceFocus = function() {};

bootstrap4 기준 이 코드로 해결을 해줄 수 있습니다.

 

bootstrap vue  기준으로는 b-modal 생성 시에 no-enforce-focus 옵션을 넣으면 해결이 되는 문제입니다.

 

여기서 핵심은 사용하는 프레임워크 혹은 언어에서 강제 포커싱을 해제해주면 됩니다.

즐거운 코딩하시기 바랍니다~

반응형

2020년말 나는 비즈니스 겸 휴가로 제주도를 찾았다.

비수기에다가 항공권 가격도 매우 착해서 지갑에서 돈이 덜 나갔다.

또한 나는 11박을 서귀포시에 있는 슬로시티란 게스트하우스에다가 예약을 하였다.

11박에 약 18만원에 예약하여서 너무 싸서 방이 조금 안 좋을거라는 생각을 했지만 체크인 해보니 사장님이 친절하셨고, 매일 청결하게 청소를 해주셔서

괜찮았다. 거기다가 간단한 조식을 무료로 주고 하니 아침마다 가볍게 먹고 나갈 수 있어서 좋았다.


제주도로 들어오고 3 ~ 4일간은 클라이언트와 계속 연락하고 미팅하면서 일을 하고 카페에서도 바깥 분위기와 느낌을 받으면서 일을 겸사겸사 해주었다.

5일째 일이 어느 정도 협의가 되고 진행이 되어서 바깥에 조금씩 둘러보고 성산일출봉도 찾아서 나홀로 셀카를 많이 찍었다.

후에 내가 사진 찍은 것들을 살펴보니 사진도 많이 찍고 하는 사람이 잘 찍는 것 같았다.

성산일출봉

표정이 어색하다 ㅋ


제주도에서 대부분의 시간을 카페를 돌아다니며 컴터를 하면서 시간을 보냈는데 와닿았던 카페 몇 곳을 소개하자면 서귀포시 중심쪽에 있는

블루하우스 카페와 서귀포시가지에서 약간 서쪽의 내리막길로 가면 코너에 숨겨져 있는 서홍정원이 괜찬은 것 같다.


이 두 곳의 카페를 괜찬게 생각한 기준은 첫째로 느낌과 분위기이다. 블루하우스는 도심지에서 자기가 하고 싶은 일을 하면서 커피를 여유롭게 맛보는 느낌?

이고 두번째 서홍정원은 개인적인 생각으로는 서귀포시 주변의 카페중에서는 제일 느낌이 평화롭고 여유가 느껴지며, 심신이 안정되는 카페였다.

 

두 카페 모두 커피와 음식은 모두 맛있었으며, 주변 경치와 분위기가 매우 좋았다.

위의 사진은 서홍정원 안에서 셀카~

 

블루하우스는 내부 인테리어가 고급스럽고 돈이 많이 들어간 느낌이며, 서홍정원은 내부 인테리어도 좋고, 밖의 풍경 및 분위기 등 안팎의 환경 모두 좋았다.


암튼 카페 얘기는 여기까지하고 몇 일 게스트하우스에서 지내다가 저녁이 되면 게스트하우스의 다른 사람들과 자연스럽게 얘기를 하게 되었는데,

3 ~ 4일인지 저녁에 붙임성 좋으신 남자분이 합석해서 얘기하자고 사람들을 모았다.

그 분은 정말 사람에게 붙임성이 매우 좋았고, 말도 재치있게 매우 잘하셔서 재미있는 대화를 많이 나눴다.


천제연폭포 제1폭포

 

그리고 웃긴 건 제주도 어딜가도 스타벅스가 없는 곳이 없었다. 미래에 만약 달기지가 생긴다면 스타벅스가 제일 먼저 생기지 않을까? 이런 생각도 했다.

'life' 카테고리의 다른 글

메모의 힘  (0) 2019.11.05
(초)미세먼지 마스크 2종 비교  (0) 2018.03.29

반응형

안녕하세요 개발자 코코넛입니다. 새해가 지나고 처음으로 글을 쓰네요.

이번에는 파이썬을 쓰면서 유용하다고 생각되는 파이썬의 문법? 스킬들을

기록할 겸 정리해 보았습니다.

  • 컴프리헨션

이 기술은 알고 나서 정말 즐겨 사용하는 문법입니다.

시각적으로는 구조가 간단한 for루프를 한줄로 축약하여 표현할 수 있는데요,

그리고 기본 for 루프보다 속도도 더 빠르다고 합니다.

예) 리스트 컴프리헨션

import time

ex_list = 1000000

# for loop
result = []
start_time = time.time()
for e in range(ex_list):
    result.append(e)
duration_time = time.time() - start_time
print("for loop : " + str(duration_time))

# comprehension
start_time = time.time()
result = [e for e in range(ex_list)]
duration_time = time.time() - start_time
print("comprehension : " + str(duration_time))

# 실행한 화면

백만번 기준으로 리스트를 채울 경우 거의 2배의 속도 차이가 납니다.

 

예) 딕셔너리 컴프리헨션

import time

ex_list = 1000000

# for loop
result = {}
start_time = time.time()
for e in range(ex_list):
    result[str(e)] = e
duration_time = time.time() - start_time
print("for loop : " + str(duration_time))

# comprehension
start_time = time.time()
result = {str(e): e for e in range(ex_list)}
duration_time = time.time() - start_time
print("comprehension : " + str(duration_time))

# 실행한 화면

딕셔너리는 근소한 차이로 속도가 차이가 납니다.

이와 같이 컴프리헨션은 코드의 간결함과 속도를 살려줍니다.

하지만 위에 있는 1차 표현식 정도는 괜찬지만

result = [y for y in [x for x in range(ex_list)]]

이러한 2차 이상의 표현식은 코드의 가독성이 떨어지므로

2차 이상의 표현식을 컴프리헨션에 적용하는 것은 피하라고 권고합니다.

 

  • multiprocessing 모듈

이 모듈은 파이썬의 GIL(Global Interpreter Lock)의 문제를 가진 병렬 기반 threading 모듈을

우회?해서 대용하여 사용할 수 있는 모듈입니다. 말 그대로 멀티프로세싱이기에 메모리가 공유되지는 않습니다.

저는 주로 병렬로 처리할 작업들을 한 리스트에 모아서 다수의 프로세스에 균등 분할하여 실행하는 것을 좋아합니다.

proc_list = []
workers = 8

for wk in range(workers):
    front = int(len(tasks) * (wk / workers))
    rear = int(len(tasks) * ((wk + 1) / workers))

    proc = Process(target=func_name, args=(tasks[front:rear],))
    proc_list.append(proc)

for proc in proc_list:
    proc.start()

for proc in proc_list:
    proc.join()

 

이러한 식으로 코드를 생성하면 프로세스 8개에 작업을 균등하게 분할하여

병렬로 실행할 수 있는 것이죠.

참고로 proc.join()은 모든 프로세스가 종료될 때까지 기다리는 역할을 합니다.

 

여기까지 간단하게 2가지 제가 사용하는 유용한 스킬? 정도를 끄적여 보았습니다.

다음에는 파이썬의 비동기 실행 모듈인 asyncio 에 대해서 기록해 보려고 합니다.

여기까지~