8월, 2024의 게시물 표시

코드 타자 속도 wpm word per minute 측정 사이트 (+ 연습)

이미지
 https://www.speedcoder.net/ <img alt="" data-original-height="1304" data-original-width="2240" height="186" src="https://blogger.googleusercontent.com/img/a/AVvXsEiRSpHsLqVnmOzWZYwd5ssiPKIvF44tTMS_eHnhPxPNfI51i9Y_cvxQGQ8wOvPgBtkWAonN5i14Lu0z0_yDrZpQMwxuJHhmjh4ZioA_zF03JYytsv8CmoZOIqkIp_tnrtBmnfelSVRh1mDCLSXYNle9ClSzhII-l68n0jmiMbR-WcE9BmivbXfym9l7aTzz" width="320" /> https://codingspeedtest.com/?language=python 60초 제한 측정인데 ui 가 편하고 좋음 여기는 타자 레이스 할 수 있는 곳 자동차가 나오는 귀여운 디자인 https://play.typeracer.com/ 여기가 제일 나은듯 좀 오래된 사이트 https://10fastfingers.com/typing-test/english 이거 사이트 괜찮아 보이는데 왜 작동을 제대로 안하는 것 같지 https://www.keybr.com/

www 웹페이지 -> www 없는 페이지 리디렉션

이미지
  <img alt="" data-original-height="1186" data-original-width="1942" height="195" src="https://blogger.googleusercontent.com/img/a/AVvXsEgu3JFY7JVt0fv1K7rA27RXa7K-8LNV0cS3CMLogN4oSGEG0Xihoz0dNmqWOt7dABHiQVH2Lf1mAbVXQmHzg9qTgvl842qYDLlRpp08RrQCsGl_pAE3bh8jlyawGH0kP79ZoZ_WFpEJh76uPDjVjmp3IBCAF2A18PatgomOZ4pIRIRfnAqqwsw10iVPjrzo" width="320" /> 사용자들이 **www**로 웹페이지에 접근하려고 할 때, 이를 자동으로 **www 없는** 페이지로 리디렉션할 수 있습니다. 이를 해결하기 위한 몇 가지 방법을 소개하겠습니다. 주로 웹 서버 설정을 통해 www로 시작하는 URL을 제거할 수 있습니다. ### **1. Apache 웹 서버에서 리디렉션 설정하기** Apache를 사용하는 경우 `.htaccess` 파일을 사용하여 **www 리디렉션**을 설정할 수 있습니다. 아래의 코드를 `.htaccess` 파일에 추가하면, 모든 www 요청을 non-www로 리디렉션할 수 있습니다. ```apache RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] ``` 이 코드는: - **RewriteEngine On**: 리라이트 엔진을 활성화합니다. - **RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]**: www로 시작하는 모든 요청을 찾습니다. - **RewriteRule ^(.*)$ https://%1/$1 [R=301,L]**: 해...

React 에서 Context API 란?

 ### **Context API란?** React의 **Context API**는 컴포넌트 트리 전체에 전역적인 데이터를 쉽게 공유할 수 있도록 도와주는 기능입니다. 일반적으로 React에서는 데이터가 부모에서 자식 컴포넌트로 **props**를 통해 전달됩니다. 하지만 트리 구조가 복잡해질수록 상위 컴포넌트에서 하위 컴포넌트로 여러 단계에 걸쳐 데이터를 전달하는 것이 번거로울 수 있습니다. 이런 경우 Context API를 사용하면, 모든 컴포넌트에서 전역적으로 접근할 수 있는 데이터를 설정할 수 있어 props 드릴링(여러 단계의 props 전달)을 피할 수 있습니다. ### **Context API의 주요 개념** 1. **Context 생성**: `React.createContext()`를 사용하여 Context를 생성합니다. 2. **Provider**: `Provider` 컴포넌트는 Context에서 데이터를 공급하는 역할을 하며, 이 `Provider`를 통해 트리의 하위 컴포넌트들이 Context에 저장된 데이터를 접근할 수 있습니다. 3. **Consumer**: 하위 컴포넌트는 `Consumer`를 사용하거나 `useContext` 훅을 이용하여 Context 데이터를 소비할 수 있습니다. ### **Context API 기본 사용 예시** #### 1. Context 생성 ```jsx import React, { createContext } from 'react'; // Context 생성 const MyContext = createContext(); ``` #### 2. Provider 설정 Provider는 Context에서 제공할 데이터를 설정하는 컴포넌트로, 하위 컴포넌트들이 이 데이터에 접근할 수 있게 해줍니다. Provider는 컴포넌트 트리의 상위에 위치시켜야 하며, 해당 Provider 내부에 있는 모든 하위 컴포넌트들은 Context의 데이터를 접근할 수 있습니다. ```jsx import React, { u...

쿠키 관련 링크

  우리 서비스가 쿠키를 수집한다면 꼭 알아야 할 개인정보 처리방침 작성 지침 https://www.openads.co.kr/content/contentDetail?contsId=9455 (GA4)구글 애널리틱스4 향상된 전환과 구글 동의모드 https://adbutler.tistory.com/9 How To Avoid A Cookie Banner While Using Analytics https://www.namehero.com/blog/how-to-avoid-a-cookie-banner-while-using-analytics/ Google Analytics 추적을 위해 쿠키 동의가 필요합니까? https://www.blobr.io/how-to-guides/do-you-need-cookie-consent-for-google-analytics-tracking [GA4] 동의 모드 행동 모델링 https://support.google.com/analytics/answer/11161109?hl=ko 쿠키 사용 동의가 중요하다구요? 쿠키 없이 데이터를 수집하는 기술, 구글 동의 모드 https://www.openads.co.kr/content/contentDetail?contsId=9722&categoryCode=CC107      

Hashing 15829

이미지
 Hashing 15829 스트리크 깨질까봐 브론즈 하나 함. 교육적인 문제 해시 함수 하나 알려줌 해시 충돌을 피하기 위해 서로수인 숫자로 이런걸한다고 작은 수를 계수로 두고 스트링별로 배정된 수에 곱해서 합한다고.. <img alt="" data-original-height="142" data-original-width="422" height="108" src="https://blogger.googleusercontent.com/img/a/AVvXsEiy6Xx6etSIIan5AQuz51liLb7BW38McWIOrzSedwajy21mo8n3SkWfkg8o1KSH7DJ0Bbv1gsX1gWfIA9Lmj8FuuP-3uGkV41TNbT4VJVVe5Gjgo0K33NSCf9DHRgCJ-aXNIXv0K08xGjRZLBGh61hUe0ihi_33hWN7Kmg7uZ4SWXTPlVJcWcTUTJYelY0t" width="320" /> ```python N=int(input()) string=input() hash_dict={} for i in range(97,123):     hash_dict[chr(i)]=i-96 total=0 for i in range(N):     total+=31**i*hash_dict[string[i]] print(total%1234567891) ```

프린터 큐 1966

프린터 큐 1966 https://www.acmicpc.net/problem/1966   어렵진 않은데 좀 헷갈림 리스트 쓰지 말걸 그랬나 연습겸 ```python #1966 testcase=int(input()) for _ in range(testcase):     N,M=map(int,input().split())     docs_importance=list(map(int,input().split()))     tmp=[x for x in range(N)]     count=0     while len(tmp)>0:         if docs_importance[tmp[0]]>=max(docs_importance):             count+=1             if tmp[0]==M:                 print(count)                 break             docs_importance[tmp[0]]=0             tmp.pop(0)         else:             pop_idx=tmp.pop(0)             tmp.append(pop_idx)          ```

LCS 9251

이미지
LCS 9251 https://www.acmicpc.net/problem/9251  dp문제 였다. 그것도 모르고 set으로 풀다가 메모리 초과남. 이렇게 간편하게 될줄 알았는데.. 오산이고 ```python tmp1=input() tmp2=input() subsets_tmp1=set([""]) for i in range(len(tmp1)):     subsets_tmp1.update(list(map(lambda x: x+tmp1[i],subsets_tmp1)))      subsets_tmp2=set([""]) for i in range(len(tmp2)):     subsets_tmp2.update(list(map(lambda x: x+tmp2[i],subsets_tmp2))) subsets_inter=subsets_tmp1.intersection(subsets_tmp2) print(len(max(subsets_inter,key=len))) ``` dp로 이렇게 풀어서 됬는데 이차원 배열로 비교하다가 같으면 그 대각선꺼 +1 다르면 위 왼쪽꺼 비교이다. 이런 식 ```python # 9251 str1=input() str2=input() dp=[[0 for i in range(len(str1))] for j in range(len(str2))] samefound=False for i in range(len(str1)):          if str1[i]==str2[0]:         samefound=True     if samefound:         dp[0][i]=1 samefound=False for j in range(len(str2)):          if str1[0]==str2[j]: ...

prim vs kruskal vs Dijkstra 프림 크루스칼 다익스트라

 Prim 알고리즘과 Kruskal 알고리즘은 둘 다 최소 신장 트리(MST, Minimum Spanning Tree)를 구하는 대표적인 알고리즘입니다. 그러나 이 두 알고리즘은 작동 방식에서 차이가 있습니다. 아래에서 차이점을 설명하겠습니다. ### 1. 작동 방식 - **Prim 알고리즘**:     - Prim 알고리즘은 그래프에서 임의의 정점을 선택하고, 해당 정점에서 시작하여 인접한 정점으로 확장하는 방식으로 최소 신장 트리를 만들어 갑니다.    - 이미 선택된 정점들로부터 가장 가중치가 작은 간선을 선택해서 새로운 정점을 포함시킵니다.    - 이 과정은 모든 정점이 포함될 때까지 반복됩니다.    - **Kruskal 알고리즘**:     - Kruskal 알고리즘은 그래프의 모든 간선을 가중치 순서대로 정렬한 다음, 가중치가 가장 작은 간선부터 선택하면서 최소 신장 트리를 구성합니다.    - 이때 사이클이 생기지 않도록 간선을 선택하며, 사이클이 발생하면 그 간선은 버려집니다.    - 간선 중심적 알고리즘으로, 간선을 하나씩 추가하는 방식입니다. ### 2. 자료 구조 - **Prim 알고리즘**:     - 주로 **힙(Heap)** 자료구조를 사용하여 가장 작은 가중치의 간선을 효율적으로 선택합니다.   - 인접 리스트나 인접 행렬을 활용하여 인접한 정점을 관리하는 경우가 많습니다.    - **Kruskal 알고리즘**:     - **분리 집합(Disjoint Set)** 자료구조, 즉 유니온-파인드(Union-Find)를 사용하여 사이클이 생기는지 여부를 관리합니다.   - 간선 리스트가 정렬된 형태로 관리됩니다. ### 3. 시간 복잡도 - **Prim 알고리즘**:   ...

python 우선순위 큐

 파이썬에서 우선순위 큐를 사용하는 방법은 여러 가지가 있지만, 대표적으로 `heapq` 모듈을 사용하는 방법이 있습니다. `heapq`는 최소 힙(min-heap)으로 동작하며, 이 힙을 사용하여 우선순위 큐를 구현할 수 있습니다. ### 기본 사용법: `heapq` 모듈 `heapq` 모듈은 리스트를 힙처럼 다룰 수 있도록 해주는 함수들을 제공합니다. 이 모듈을 이용하면 우선순위 큐를 쉽게 구현할 수 있습니다. #### 1. 힙에 원소 추가하기: `heapq.heappush()` ```python import heapq # 빈 리스트를 힙으로 사용 heap = [] # 힙에 값 추가 (우선순위 큐에 삽입) heapq.heappush(heap, 10) heapq.heappush(heap, 1) heapq.heappush(heap, 5) print(heap)  # [1, 10, 5] -> 항상 최소값이 맨 앞에 있음 ``` #### 2. 힙에서 원소 꺼내기: `heapq.heappop()` ```python # 가장 작은 값 꺼내기 (우선순위가 가장 높은 값 제거) smallest = heapq.heappop(heap) print(smallest)  # 1 print(heap)      # [5, 10] ``` #### 3. 힙에서 최소값 확인 (제거하지 않음): `heap[0]` ```python # 최소값 확인 (제거하지 않음) min_value = heap[0] print(min_value)  # 5 ``` ### 우선순위 큐에 튜플 사용하기 우선순위 큐에서 각 요소에 우선순위를 부여하고 싶다면, (우선순위, 값) 형태의 튜플을 힙에 삽입할 수 있습니다. 튜플의 첫 번째 요소를 기준으로 우선순위가 결정됩니다. ```python import heapq pq = [] # 우선순위가 낮은 순서대로 정렬됨 (1이 가장 높은 우선순위) heapq.heappush(pq, (1, "작업 1")) hea...

덩치 7568

## 덩치 7568  https://www.acmicpc.net/status?from_mine=1&problem_id=7568&user_id=gongboo 문제 조건 널널해서 그냥 건성으로 싹다 비교하는걸로 풀음 ```python def a_is_smaller(a,b):     if a[0]<b[0] and a[1]<b[1]:         return True     return False n=int(input()) people=[] answer=[] for i in range(n):     people.append(list(map(int,input().split()))) for personA in people:     ans=0     for personB in people:         if a_is_smaller(personA,personB):             ans+=1     answer.append(ans) print(" ".join(list(map(lambda x: str(x+1),answer)))) ```

균형잡힌 세상 4949

 균형잡힌 세상 4949 https://www.acmicpc.net/problem/4949 ```python while True:     input_string=input()     if input_string==".":         break     stack=[]     for idx,character in enumerate(input_string):         if idx==len(input_string)-1:             if len(stack)>0:                 print("no")             else:                 print("yes")             break         if character in "[]()":             stack.append(character)             if stack[-2:]==["[","]"] or stack[-2:]==["(",")"]:                 stack.pop()                 stack.pop() ``` ## js로도 풀었다. ```javascript let d...

용액 2467

 용액 2467 https://www.acmicpc.net/problem/2467 아래와 같이 풀면 안됨 완전 착각해버림 하나씩 돌아가면서 그 수에 맞는 수를 투포인터 이분탐색으로 찾아가면서 하면되는 건줄알았는데. 실제로 그렇게 해서 풀었는데 그게 아니라 이분탐색 투포인터하는 과정중에 찾아지는 거였다. 그냥 불필요한 과정을 더 한것. ```python import math N=int(input()) liquids=list(map(int,input().split())) pointer_a=0 pointer_b_r=pointer_a+1 pointer_b_l=len(liquids)-1 pointer_b=pointer_b_l best_a,best_b=pointer_a,pointer_b for i in range(0,len(liquids)-1):     pointer_a=i     pointer_b_l=pointer_a+1     pointer_b_r=len(liquids)-1     pointer_b=pointer_b_l     while pointer_b_l<pointer_b_r:         mid=int((pointer_b_r+pointer_b_l)/2) #         print(pointer_a,pointer_b_l,pointer_b_r,mid)         if pointer_b_l+1==pointer_b_r:             if abs(liquids[pointer_a]+liquids[pointer_b_l])<abs(liquids[pointer_a]+liquids[pointer_b_r]):             ...

수 나누기 게임 27172

수 나누기 게임 27172 https://www.acmicpc.net/problem/27172 바보같이 나누기로 접근하다가 안돼서 배수로 접근 했더니 됐다 잘못된 접근방식으로 개고생, 왜 진작 이렇게 안했을까 사실 어렴풋하게 생각은 났는데 귀찮았다. 조금만 생각해도 이쪽이 배수 쪽이 더 가짓수가 적은데 왜 그랬을까 ```python import math N=int(input()) players=list(map(int, input().split())) player_set=set(players) scores_dict={x:0 for x in players} max_player=max(player_set) for player in players:     for i in range(1,math.ceil(max_player/player)+1):         if player*i in player_set:             scores_dict[player]+=1             scores_dict[player*i]-=1 for i in players[:-1]:     print(scores_dict[i],end=" ") print(scores_dict[players[-1]]) ```

다각형의 면적 2166

 https://www.acmicpc.net/problem/2166 다각형의 면적을 구하는데 고등학교때 기하와 벡터 배울때 한 거 떠올려서 풀었다. 신발끈 공식. 오랜만에 생각해본다. 공식만 알면 그냥 풀리는 골드 중에서 제일 쉬운 문제 아닐까   ```python N=int(input()) points=[] for i in range(N):     x,y=map(int,input().split())     points.append((x,y)) a1,a2=points[0][0],points[0][1] area=0 for i in range(1,N-1):     b1,b2=points[i][0],points[i][1]     c1,c2=points[i+1][0],points[i+1][1]     area+=(a1*b2+b1*c2+c1*a2-(a2*b1+b2*c1+c2*a1))/2 print(round(abs(area),1)) ``` 하다가 오목한 도형일경우 빼줘야 하는 경우 때문에 전체 계산후 abs를 해야 했는데 그 부분을 고려 안해서 조금 고민했다. 관련해서 찾아보다가 볼록 껍질이라는 개념이 있다고 해서 흥미로워서 덧붙여둠. --- # 볼록껍질 관련 설명 볼록껍질(Convex Hull) 알고리즘은 2차원 평면 위에 주어진 점들 중에서 이 점들을 모두 포함하는 가장 작은 볼록 다각형을 찾는 문제를 해결하기 위한 알고리즘입니다. 쉽게 말해, 주어진 점들 중 가장 바깥쪽에 위치한 점들을 연결하여 만들어진 다각형을 찾는 것입니다. ### 볼록껍질의 정의 볼록껍질은 다음과 같은 성질을 가집니다: - 볼록 다각형: 이 다각형의 각 내부각은 180도보다 작으며, 다각형의 내부에 있는 임의의 두 점을 잇는 선분이 항상 다각형 내부에 위치합니다. - 주어진 점 집합을 모두 포함하는 최소의 다각형입니다. ### 볼록껍질 알고리즘의 종류 여러 가지 알고리즘이 있지만, 대표적...

마크다운 블로그에 적용한거 코드박스가 css 수정 2

 코드박스에 줄간격 너무 커서 수정. .hljs{ background-color:#afcba1 !important; line-height:70% !important; }

스택 수열 1874

  스택 수열  1874 https://www.acmicpc.net/problem/1874 난독을 불러일으키는 문제 스택에 12345.. 순서로 Push하거 스택 Pop할 수 있는데 이 방법으로 주어진 수열을 만들 수 있냐는 문제였다. ```python #1874 n=int(input()) num_lst=[] for i in range(1,n+1):     num_lst.append(int(input())) # num_lst.reverse() push_pop_lst=[] stack=[] increasing_num=1 is_fail=False for num in num_lst: #     print(num, stack,push_pop_lst)     if len(stack)==0:         stack.append(increasing_num)         push_pop_lst.append("+")         increasing_num+=1     while stack[-1]!=num:         if increasing_num>n:             is_fail=True             break         push_pop_lst.append("+")         stack.append(increasing_num)         increasing_num+=1          if is_fail:       ...

www로 시작하는 링크 vs 없는 링크 사이 차이

 `www`로 시작하는 링크와 없는 링크 사이에 차이점은 주로 기술적인 면이나 접속 면에서 발생합니다. `www`는 "World Wide Web"의 줄임말로, 원래 인터넷의 초기에 웹 페이지에 접속할 때 사용되던 표준입니다. 하지만 현재는 `www` 없이도 웹사이트에 접속이 가능합니다. 1. **DNS 설정**: `www`를 사용하는 것과 사용하지 않는 것은 도메인의 DNS 설정에 따라 달라집니다. 어떤 웹사이트는 `www`가 있어야 제대로 작동하는 반면, 다른 웹사이트는 없어도 무방하게 설정되어 있습니다. 2. **쿠키와 같은 웹 기술**: `www`가 있는 URL과 없는 URL은 쿠키 사용 방식에서 차이를 보일 수 있습니다. 서브도메인(`www` 같은)에 쿠키를 설정하면 그 서브도메인에서만 유효하게 되지만, 최상위 도메인에서 쿠키를 설정하면 그 도메인의 모든 서브도메인에서 유효하게 됩니다. 3. **사용자의 인식**: 사용자는 종종 `www`를 웹사이트 주소의 일부로 인식하며, 이는 사이트의 공식성을 강조하는 데에 도움을 줄 수 있습니다. 즉, 기본적으로는 `www`를 사용하거나 사용하지 않는 것이 큰 차이를 만들지는 않지만, 웹사이트의 설정과 사용자의 접근성 측면에서는 영향을 줄 수 있습니다.

jupyter notebook 결정

jupyter 에서 js c++한번에 쓰려고  이렇게 하기로 했다 # html작성 이거 타이틀 꾸밀때 좋을듯 ```html %%html <div class="good">hello world</div> <style> .good{     color:red;     background-color:blue; } </style> ``` # c++은 bash로 파일 만들어서 실행. (상당히 느림) ```html %%bash # C++ 소스 코드 파일 작성 echo '#include <iostream> int main() {     std::cout << "Hello, World!" << std::endl;     return 0; }' > hello.cpp # C++ 코드 컴파일 g++ hello.cpp -o hello # 실행 파일 실행 ./hello ``` # js ```html %%javascript // JavaScript 코드를 작성 let arr = [1, 2, 3, 4, 5]; let sum = arr.reduce((acc, val) => acc + val, 0); console.log("Sum:", sum); // 결과를 문서에 표시 let output = `The sum of the array is: ${sum}`; element.text(output); ```

jupyter notebook 에서 Js -> IJavascript, c++ -> xeus-cling

jupyter notebook 으로 js 파일 만들기. npm install -g ijavascript ijsinstall `IJavascript`는 Jupyter Notebook에서 JavaScript와 Node.js 코드를 실행할 수 있도록 해주는 Jupyter 커널입니다. 이를 사용하면 Jupyter Notebook에서 JavaScript를 손쉽게 실행하고 테스트할 수 있습니다. ### IJavascript 설치 방법 1. **Node.js 설치**: 먼저, Node.js와 npm이 설치되어 있어야 합니다. Node.js는 JavaScript 런타임 환경이고, npm은 Node.js의 패키지 관리 도구입니다. Node.js와 npm이 설치되어 있지 않다면, [Node.js 공식 웹사이트](https://nodejs.org/)에서 설치할 수 있습니다. 2. **IJavascript 설치**:    터미널이나 명령 프롬프트에서 다음 명령어를 실행하여 IJavascript를 설치합니다.    ```bash    npm install -g ijavascript    ijsinstall    ```    `ijsinstall` 명령어는 Jupyter에 IJavascript 커널을 등록합니다. ### IJavascript 사용 방법 1. Jupyter Notebook을 시작합니다. `jupyter notebook` 명령어를 사용하여 Jupyter Notebook 인터페이스를 열 수 있습니다. 2. 새 노트를 만들 때, 언어 선택 옵션에서 `JavaScript (Node.js)` 또는 `IJavascript`를 선택합니다. 3. 이제 셀에서 JavaScript 코드를 실행할 수 있습니다. 예를 들어:    ```javascript    console.log("Hello, world!");    ``` ...

jupyter notebook 매직 명령어 magic

  Jupyter Notebook의 매직 명령어는 다양한 언어와 기능을 지원합니다. 매직 명령어는 일반적으로 셀 단위 또는 라인 단위로 실행되며, 다양한 프로그래밍 언어로 코드를 실행하거나 환경 설정, 데이터 시각화 등을 간편하게 수행할 수 있게 해줍니다. ### 주요 매직 명령어 예시 1. **`%time`, `%timeit`**: 코드 실행 시간을 측정합니다.    ```python    %time some_code()    %timeit some_code()    ``` 2. **`%%html`**: 셀의 내용을 HTML로 렌더링합니다.    ```html    %%html    <h1>Hello, world!</h1>    ``` 3. **`%%latex`**: 셀의 내용을 LaTeX로 렌더링합니다.    ```latex    %%latex    \begin{equation}    E = mc^2    \end{equation}    ``` 4. **`%%bash` 또는 `%%sh`**: 셀의 내용을 Bash 쉘 명령어로 실행합니다.    ```bash    %%bash    echo "Hello, world!"    ``` 5. **`%%writefile`**: 셀의 내용을 파일로 저장합니다.    ```python    %%writefile hello.py    print("Hello, world!")    ``` 6. **`%%capture`**: 셀의 출력(표준 출력 및 표준 오류)을 캡처합니다.    ```pyt...

신기한 웹게임을 발견했다

 모바일 형식의 게임을 완전 웹으로 만들어 둔거는 처음봐서 신기하다. 신기해서 개발자 도구 열어보니까 어플라이 권유를 콘솔 로그로 띄운다 ㅋㅋ g123이라는 일본회사인듯 로그인 안해도 그냥 캐쉬에 저장해서 진행할 수 있는 형태로 내가 좋아하는 로그인 없는 서비스 웹으로만 개발한건지는 모르겠는데 신기하네 리액트임 여기서 개발한 웹게임이 여러개인듯 https://h5.g123.jp/game/queensblade?lang=en

마크다운 블로그에 적용한거 코드박스가 잘 안보여서 css적용했는데

마크다운 블로그에 적용한거 코드박스가 잘 안보여서 css적용했는데 !important 하면 우선순위가 최우선으로 적용된다. 남의 코드에 내css넣을때 유용  .hljs{ background-color:#afcba1 !important; }

[Final Cut Pro] 소리를 점점 작아지게(페이드 아웃)

 Final Cut Pro에서 소리를 점점 작아지게(페이드 아웃) 하려면 다음 단계를 따르세요: 1. **오디오 클립 선택:** 타임라인에서 소리를 줄이고 싶은 오디오 클립을 선택하세요. 2. **오디오 키프레임 추가:** 타임라인 상단의 메뉴에서 `클립`을 클릭한 후 `오디오 애니메이션 표시`를 선택합니다. 또는 선택한 오디오 클립 위로 커서를 이동하면 나오는 작은 파형 아이콘을 클릭할 수 있습니다. 그러면 오디오 애니메이션을 표시하는 창이 열립니다. 3. **키프레임 생성:** 소리를 점점 줄이고 싶은 시작 지점에 플레이헤드를 위치시키고, 오디오 애니메이션 창에서 `옵션 키`를 누른 상태로 파형 위에 클릭하여 키프레임을 추가합니다. 동일한 방법으로 소리가 완전히 사라지길 원하는 지점에도 키프레임을 추가합니다. 4. **키프레임 조정:** 두 번째 키프레임을 아래로 드래그하여 음량을 0으로 만듭니다. 이때 첫 번째 키프레임에서 두 번째 키프레임으로 점점 소리가 작아지게 됩니다. 이제 재생하면 선택한 구간에서 소리가 점점 작아지게 됩니다. 추가로, 오디오 페이드 아웃을 더 부드럽게 만들기 위해 키프레임 간의 간격을 조정할 수 있습니다.

[keynote] 테마 저장, 애니메이션 animation

테마저장 https://support.apple.com/ko-kr/guide/keynote/tanb343cb739/mac animation Apple Keynote의 애니메이션 기능은 발표 자료를 보다 매력적이고 직관적으로 만들기 위해 다양한 애니메이션 효과를 제공합니다. 주요 기능 및 특징은 다음과 같습니다: 1. **객체 애니메이션(Object Animation)**:    - 텍스트, 이미지, 도형 등의 객체를 애니메이션화할 수 있습니다. 예를 들어, 객체가 슬라이드에 나타나거나 사라지는 방식, 이동하는 경로 등을 설정할 수 있습니다. 2. **빌드 애니메이션(Build Animation)**:    - 슬라이드에 있는 개별 요소를 순차적으로 나타내는 기능입니다. 텍스트를 한 줄씩 나타나게 하거나 목록의 항목이 하나씩 표시되도록 설정할 수 있습니다. 3. **전환 효과(Transition Effects)**:    - 슬라이드 간 전환 시 적용할 수 있는 다양한 효과를 제공합니다. 슬라이드가 페이드 인/아웃되거나 슬라이드 오버랩, 큐브, 뒤집기 등의 전환 효과를 사용할 수 있습니다. 4. **매직 무브(Magic Move)**:    - 두 슬라이드 간의 객체 이동을 자동으로 애니메이션화하는 기능입니다. 예를 들어, 첫 번째 슬라이드에서 특정 위치에 있던 객체가 두 번째 슬라이드에서 다른 위치로 이동하는 것을 부드럽게 연출할 수 있습니다. 5. **추가 애니메이션 옵션**:    - 애니메이션의 속도, 방향, 지연 시간 등을 세밀하게 조정할 수 있습니다. 이를 통해 발표자가 원하는 대로 애니메이션의 타이밍을 맞출 수 있습니다. 6. **애니메이션 미리보기**:    - 설정한 애니메이션 효과를 사전에 미리 볼 수 있는 기능이 있어, 실제 발표 중에 어떻게 보일지 확인하고 조정할 수 있습니다. ## 빌드 인(Build In)과 빌드 아웃(Build Ou...