반응형
반응형

Being good isn’t enough

잘하는 것만으로는 충분하지 않음 (joshs.bearblog.dev)

 

  • 기술적 역량만으로는 경력이 일정 수준에서 한계에 부딪힘
  • 영향력을 높이기 위해선 기술 역량, 제품 사고, 프로젝트 실행, 사람과의 협업 능력이라는 네 가지 축을 균형 있게 키워야 함
  • 약점을 찾고 성장하기 위해서는 피드백과 겸손이 핵심이며, 특히 존경하는 사람의 피드백을 받아 행동으로 옮기는 것이 가장 빠른 방법
  • 단순히 일을 잘하는 것뿐 아니라 보여주고 공유하는 것이 필요하며, 에이전시(agency, 주도성)를 갖고 스스로 기회를 만들고 실행하는 태도가 중요
  • 궁극적으로 원하는 것을 얻는 길은 그에 걸맞은 자격을 갖추는 것이며, 이는 노력 이상의 성장을 위해 반드시 필요한 접근방법임

 

 

커리어 조언의 모호함

  • 커리어 조언은 사람마다 좋은 조언의 기준이 다르기 때문에 모호함
    • 동일한 직함을 가진 두 사람도 필요한 조언은 크게 다를 수 있음
    • 누군가는 좋아하는 일, 다른 이는 의미 있는 일, 또 다른 이는 승진을 추구
  • 따라서 하나의 답은 없으나, 공통적으로 기술적 능력은 경력의 출발점임
    • 채용된 이유인 핵심 업무에서 탁월해야 하며, 초기에는 이로 주목받음
    • 예: 더 나은 코드, 보고서, 디자인은 자연스럽게 인정을 받음

기술적 실력만으로는 부족함

  • 초기에는 기술적 역량만으로도 인정받고 성장 가능
  • 하지만 일정 시점 이후에는 기술적 능력만으로는 차별화가 어려워짐
    • 동료들도 비슷한 수준의 기술적 역량을 보유
    • 더 큰 영향력을 발휘하려면 다른 역량 필요

영향력 확대를 위한 4가지 역량

  • 성공적인 노력은 4가지 핵심 역량의 결합으로 완성
    • 기술적 능력: 선택한 전문 분야에서의 숙련도
    • 제품 사고: 가치 있는 일을 식별하는 능력
    • 프로젝트 실행: 계획을 실현하는 능력
    • 인간관계 기술: 타인과 협업하고 영향을 미치는 능력
  • 이 4가지 역량은 모든 성공적 프로젝트에 필수적
    • 의미 있는 일을 실제로 일어나게 하는 것
    • 예: 제품 개발, 팀 협업, 프로젝트 완료 모두 이 역량의 조화 필요

역량 개발 방법

  • 네 가지 영역은 시간이 지나며 자연스럽게 익혀지지만, 의식적으로 훈련하면 더 빠르게 성장 가능
    • 자신의 약점을 찾는 데에는 피드백 겸손함이 핵심
      • 피드백은 개선점을 보여주고, 겸손함은 이를 받아들이게 함
    • 존경하는 사람에게 피드백을 요청하고 즉시 행동으로 옮김
      • 완벽한 계획을 기다리지 말고, 행동이 우선
  • 멘토링, 프로젝트 제안, 결과물 발표 등으로 역량 강화
    • 타인에게도 기회를 제공하며 협업 환경 조성

공개적으로 행동하기

  • 업무 성과는 스스로 말하지 않으면 인정받기 어려움
  • 일을 하고 그 결과를 공개적으로 보여주는 것이 중요, “일이 알아서 말해준다” 는 가정은 잘못임
    • 공개적으로 작업을 공유하고 결과를 알리는 습관 필요
    • 예: 프로젝트 발표, 팀 내 공유, 멘토링 활동

에이전시의 중요성

  • Agency(주도성, 자율적 실행력) 은 학력, 자격증, 운 보다 강력한 요소
    • 고주도성(High-agency) 인 사람은 일을 주도적으로 실현
    • 저주도성(low-agency) 인 사람은 기회를 기다리며 정체됨
  • 주도성은 선택 가능한 특성: 스스로 행동을 선택하면 됨

결론과 추천 자료

  • 경력 성장은 노력뿐 아니라 전략적 접근 필요
    • 단순히 열심히 일하는 것 이상으로, 영향력 확대에 집중할 것
    • 노력과 성장의 차이는 약점 보완·가시화·에이전시 실천에 달려 있음
  • 장기적으로 원하는 것을 얻는 최선의 방법은 그에 걸맞은 자격을 갖추는 것
  • 추천 도서
    • The Staff Engineer’s Path by Tanya Reilly: 경력 관리에 대한 깊은 통찰 제공. 매년 다시 읽음

 

 

 

반응형
반응형

https://picocss.com/

 

 

[CSS] Pico CSS – 시맨틱 HTML을 위한 미니멀 CSS 프레임워크 (picocss.com)

 

  • Pico CSS는 HTML 태그 자체를 직접 스타일링하여 클래스 사용을 최소화
  • 외부 라이브러리나 JavaScript 없이 순수 CSS만으로 깔끔한 UI 경험 제공
  • 모바일 등 모든 기기에서 반응형 화면을 자동 지원함
  • 라이트/다크 모드를 사용자의 환경 설정에 따라 자동 적용함
  • 130개 이상의 CSS 변수와 여러 커스텀 테마 및 컴포넌트로 자유롭게 맞춤화 가능

 

 

 

소개

Pico CSS는 간결함과 시맨틱을 극대화하는 미니멀 CSS 프레임워크임. HTML의 시맨틱 요소를 직접 스타일링하고, 전체적으로 클래스 사용을 10개 미만으로 줄여 유지보수성과 읽기 쉬운 코드를 제공함. 클래스가 전혀 없는 버전도 제공되어 HTML 순수주의를 추구하는 사용자에게도 적합함.

주요 특징

Class-light & Semantic

  • HTML 태그에 직접 스타일을 적용하여, 필요한 CSS 클래스 개수를 대폭 줄임
  • 클래스가 없는(class-less) 버전도 지원하여 항목 기반 스타일에서 벗어난 자유도 보장함

Just CSS, No Dependencies

  • 외부 라이브러리, 패키지 매니저, JavaScript 없이 동작함
  • HTML 마크업만으로도 손쉽게 우아한 스타일 구현 가능함

반응형 디자인

  • 폰트 크기와 공간을 화면 크기에 따라 자동으로 조절하여, 모든 기기에서 일관되고 세련된 UI 경험 제공함
  • 추가적인 클래스 지정이나 설정 없이 자동 대응

라이트/다크 모드 자동 전환

  • 밝은 테마와 어두운 테마를 기본 제공함
  • 브라우저 또는 OS 환경의 prefers-color-scheme 설정에 따라 자동으로 색상 테마가 적용됨
  • 자바스크립트 사용 없이 오로지 CSS로 구현함

쉬운 커스터마이징

  • 130개 이상의 CSS 변수 제공으로 간단하게 스타일 커스텀 가능함
  • SASS를 사용한 심화 커스터마이징도 지원함
  • 20개의 핸드크래프트 컬러 테마와 30개 이상의 모듈형 컴포넌트를 제공, 브랜드별 UI로 간편하게 확장 가능함

최적화된 성능

  • HTML이 가볍고 간결하게 유지되어, 불필요한 코드 오버헤드와 메모리 사용 감소
  • 과도한 CSS 중복이나 JS 로딩 없이 빠른 로딩 속도 제공함
반응형
반응형

[python] 과거 당첨번호 중 출현빈도 상위 기준으로 로또번호 추출

 

 

 


"""
    python 기존 로또 당첨번호를 이용한 로또 번호 추출 프로그램

"""



import pandas as pd
import random
from collections import Counter

def load_winning_numbers(filepath="winning_numbers.csv"):
    """
    CSV 파일에서 로또 당첨 번호를 불러옵니다.
    """
    try:
        df = pd.read_csv(filepath)
        # 추첨 번호(drwtNo1 ~ drwtNo6)만 추출합니다.
        winning_nums_cols = [f'drwtNo{i}' for i in range(1, 7)]
        return df[winning_nums_cols]
    except FileNotFoundError:
        print(f"오류: '{filepath}' 파일을 찾을 수 없습니다.")
        print("동행복권 웹사이트 등에서 당첨 번호 데이터를 CSV 파일로 다운로드하여 같은 폴더에 넣어주세요.")
        return None
    except Exception as e:
        print(f"데이터 로딩 중 오류 발생: {e}")
        return None

def analyze_number_frequency(winning_numbers_df):
    """
    각 숫자의 출현 빈도를 분석합니다.
    """
    all_numbers = []
    # 모든 당첨 번호 목록을 하나로 합칩니다.
    for index, row in winning_numbers_df.iterrows():
        all_numbers.extend(row.tolist())
    
    # 각 숫자의 출현 횟수를 셉니다.
    number_counts = Counter(all_numbers)
    
    # 빈도수 기준으로 내림차순 정렬
    sorted_counts = sorted(number_counts.items(), key=lambda item: item[1], reverse=True)
    
    return dict(sorted_counts) # {숫자: 빈도수} 형태로 반환

def generate_random_numbers():
    """
    가장 기본적인 방법으로 6개의 무작위 로또 번호를 생성합니다.
    """
    return sorted(random.sample(range(1, 46), 6))


def generate_numbers_based_on_frequency(number_frequency, num_recommendations=1, exclude_numbers=None):
    """
    과거 당첨 빈도를 기반으로 로또 번호를 추천합니다.
    (이 전략은 통계적 예측이 아닌, 자주 나온 번호 중에서 무작위로 선택하는 방식입니다.)
    """
    if number_frequency is None:
        print("경고: 번호 빈도 분석 데이터를 찾을 수 없어 무작위 번호를 생성합니다.")
        return [generate_random_numbers() for _ in range(num_recommendations)]

    # 빈도수가 높은 순서대로 숫자 목록을 만듭니다.
    # (실제로는 빈도수에 가중치를 두어 추출하는 더 복잡한 알고리즘도 가능합니다)
    sorted_numbers = list(number_frequency.keys())
    
    recommendations = []
    for _ in range(num_recommendations):
        generated_numbers = set()
        
        # 이미 추천된 번호들을 제외할 경우
        if exclude_numbers:
            available_numbers = [num for num in sorted_numbers if num not in exclude_numbers]
        else:
            available_numbers = sorted_numbers
        
        # 혹시 available_numbers가 6개 미만일 경우를 대비
        if len(available_numbers) < 6:
            print("경고: 추천할 수 있는 숫자가 충분하지 않습니다. 모든 번호에서 추출합니다.")
            available_numbers = list(range(1, 46))

        # 빈도수 기반으로 6개의 고유한 번호 추출
        # (단순히 빈도수 높은 순서대로 앞에서 6개 뽑는 것이 아니라,
        # 빈도수를 가중치로 해서 랜덤 샘플링하는 것이 더 무작위적입니다.)
        # 여기서는 편의상, 빈도수 높은 순서대로 나열된 리스트에서 랜덤하게 뽑습니다.
        
        # 더 나은 방법: 빈도수에 비례하여 숫자를 뽑기 (예: [1,1,1,2,2,3] -> 1,2,3이 나올 확률이 다름)
        # 이 예시에서는 단순화하여, 빈도수 순서대로 나열된 숫자 리스트에서 6개를 고유하게 뽑습니다.
        
        # 자주 나온 번호들 중에서 (예: 상위 20개) 무작위로 6개 선택
        top_n_numbers = sorted_numbers[:20] # 상위 20개 번호
        if len(top_n_numbers) < 6:
             # 혹시 상위 20개보다 전체 숫자가 적다면
             top_n_numbers = sorted_numbers

        # 상위 번호들 또는 전체 번호에서 무작위로 6개 선택
        try:
            chosen_numbers = sorted(random.sample(top_n_numbers, 6))
        except ValueError: # 만약 top_n_numbers가 6개 미만일 경우
            chosen_numbers = sorted(random.sample(available_numbers, 6))

        recommendations.append(chosen_numbers)
        
    return recommendations

# --- 메인 프로그램 ---
if __name__ == "__main__":
    file_path = "winning_numbers.csv" # 로또 당첨 번호 CSV 파일 경로
    
    print("==== 로또 번호 추천 프로그램 ====")
    
    # 1. 과거 당첨 번호 로드
    winning_numbers_df = load_winning_numbers(file_path)
    
    if winning_numbers_df is not None:
        # 2. 번호 빈도 분석
        number_frequency = analyze_number_frequency(winning_numbers_df)
        print("\n[과거 당첨 번호 출현 빈도 (상위 10개)]")
        for number, count in list(number_frequency.items())[:10]:
            print(f"  - 숫자 {number}: {count}회")

        # 3. 로또 번호 추천
        num_sets_to_recommend = 5 # 몇 세트의 번호를 추천받을지 설정
        
        # 빈도 기반 추천
        frequency_based_recommendations = generate_numbers_based_on_frequency(
            number_frequency, 
            num_recommendations=num_sets_to_recommend
        )
        
        print(f"\n[과거 당첨 빈도 기반 추천 번호 ({num_sets_to_recommend} 세트)]")
        for i, numbers in enumerate(frequency_based_recommendations):
            print(f"  세트 {i+1}: {numbers}")
            
        # 단순 무작위 추천 (비교용)
        random_recommendations = [generate_random_numbers() for _ in range(num_sets_to_recommend)]
        print(f"\n[단순 무작위 추천 번호 ({num_sets_to_recommend} 세트)]")
        for i, numbers in enumerate(random_recommendations):
            print(f"  세트 {i+1}: {numbers}")
            
    else:
        print("\n데이터 로딩 실패로 인해 번호 추천을 진행할 수 없습니다.")
        print("프로그램을 종료합니다.")
반응형
반응형

[Chrome] 읽기모드 사용하기. reader mode, reading mode

 

크롬 읽기모드 활성화 및 단축키 설정 방법

  1. 크롬 플래그(Flags) 설정 열기: 크롬 주소창에 chrome://flags를 입력하고 엔터를 누릅니다.
  2. 'Reader Mode' 활성화: 검색창에 **'Reader Mode'**를 입력한 후, 해당 항목의 설정을 'Enabled'로 변경합니다.
  3. 크롬 재시작: 설정 변경 후, 하단에 뜨는 'Relaunch' 버튼을 클릭하여 크롬을 재시작합니다.
  4. 읽기모드 활성화 단축키 만들기:
    • 재시작 후, 읽기모드를 적용하고 싶은 웹페이지를 엽니다.
    • 주소창 오른쪽 끝에 책 모양 아이콘이 나타나는데, 이 아이콘을 마우스 오른쪽 버튼으로 클릭합니다.
    • '읽기 모드 바로가기 만들기' 또는 **'단축키 지정'**과 유사한 메뉴를 찾아 원하는 단축키를 설정합니다.

이 방법을 통해 자주 사용하는 웹페이지에서 읽기모드를 더 편리하게 이용할 수 있습니다. 하지만, 모든 웹페이지에서 이 아이콘이 뜨는 것은 아니며, 주로 텍스트가 많은 기사나 블로그 글에서만 활성화됩니다.

 

 

 

 

 

 

반응형
반응형

인스타그램, 마침내 iPad 앱 출시 (about.instagram.com)

 

- 더 편하게 Reels 감상(아이폰 용과 다르게 릴스가 기본 화면. 타임라인은 탭해야 보임)
- 새로운 팔로잉 탭 도입: 전체(팔로우)/친구(맞팔)/최신(시간순) 보기
- 큰 화면에 최적화된 인스타그램 경험
  * 메시지와 알림 두개의 탭을 같이 보기
  * Reels 감상시 전체화면 크기로 재생하며 댓글보기 가능
- iPadOS 15.1 이상
- Instagram - App Store 링크(기존 앱이 iPad도 지원)

 

https://apps.apple.com/us/app/instagram/id389801252?platform=ipad

 

‎Instagram

‎Little moments lead to big friendships. Share yours on Instagram. — From Meta Connect with friends, find other fans, and see what people around you are up to and into. Explore your interests and post what's going on, from your daily moments to life's

apps.apple.com

 

 

https://about.instagram.com/blog/announcements/instagram-for-ipad/

 

iPad용 Instagram: 소통, 릴스 시청, 탐색을 더 넓히는 방법

iPad용 Instagram을 소개합니다! 릴스, 스토리, 팔로잉 탭을 더 큰 화면에서 볼 수 있도록 설계된 이 앱에서 소통을 이어가고 계속 재미있게 활동해보세요.

about.instagram.com

 

반응형
반응형

[python] Blackhole Glow using python

 

import matplotlib.pyplot as plt, numpy as np
plt.style.use("dark_background")
O = np.linspace(0, 10*np.pi, 2000)
r = 1/(1+0.2*O)
x, y = r*np.cos(O), r*np.sin(O)
plt.scatter(x, y, c=O, cmap="magma", s=3)
plt.axis("equal");
plt.show()

 

반응형

+ Recent posts