My Life/Book Story2024. 3. 21. 00:20
Posted by chobocho
Coding/Java 삽질기2024. 3. 8. 00:36

IntelliJ에 있는 유용한 기능 중 하나가 JShell 콘솔이다.

아래와 같이 입력 후, 실행을 하면

결과를 실행 창에서 볼 수 있다.

 

Posted by chobocho
Coding/Python 삽질기2024. 3. 7. 00:45

Python으로 작성한 SQL문에서 대량의 insert를 수행시 느려지는 문제가 있어서, 

DB전문가에게 문의를 하니, 간단히 답을 알려 주셨다.

해결책은 "BEGIN TRANSACTION"을 사용하면 되는 것이었다.

이 한줄을 넣고 나니, 10배 이상 속도가 빨라졌다;;

[기존코드]

    def insert(self, data):
        insert_memo_sql = '''INSERT INTO minim(title, memo) VALUES(?, ?);'''
        try:
            cur = self.db_conn.cursor()
            cur.execute(insert_memo_sql, (data[0], data[1]))
            self.db_conn.commit()
            print(cur.lastrowid)
            return cur.lastrowid
        except sqlite3.Error as e:
            print(e)
        return -1

[개선코드]

    def insert_bigdata(self, big_data):
        insert_memo_sql = '''INSERT INTO minim(title, memo) VALUES(?, ?);'''
        try:
            cur = self.db_conn.cursor()
            cur.execute("BEGIN TRANSACTION")
            for data in big_data:
                cur.execute(insert_memo_sql, (data[0], data[1]))
            self.db_conn.commit()
            print(cur.lastrowid)
            return cur.lastrowid
        except sqlite3.Error as e:
            print(e)
            self.db_conn.rollback()  # rollback the transaction if there's any error
        return -1

 

'Coding > Python 삽질기' 카테고리의 다른 글

Cardioid 그리기  (0) 2024.02.17
[Python] PNG to ICO 변환 하기  (0) 2024.01.04
[Python] 프랙탈 나무 만들기  (0) 2023.09.15
Posted by chobocho
Coding/Python 삽질기2024. 2. 17. 19:16
import math
import pygame


def init_game():
    pygame.init()
    pygame.key.set_repeat(0)
    canvas = pygame.display.set_mode((800, 600))
    fps_clock = pygame.time.Clock()
    return canvas, fps_clock


def main():
    canvas, fps_clock = init_game()

    title = 'Cardioid'
    pygame.display.set_caption(title)
    max_dots = 300

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return

        draw_cardioid(canvas, max_dots)
        pygame.display.update()
        fps_clock.tick(30)


def draw_cardioid(canvas, max_dots):

    canvas.fill((0, 0, 0))
    start_x = canvas.get_width() // 2
    start_y = canvas.get_height() // 2
    radius = 250

    for i in range(max_dots):
        radian = (math.pi / 180) * (360 / max_dots) * i
        sx = start_x + int(math.cos(radian) * radius)
        sy = start_y + int(math.sin(radian) * radius)

        ex = start_x + int(math.cos(radian * 2) * radius)
        ey = start_y + int(math.sin(radian * 2) * radius)

        pygame.draw.line(canvas, (0, 255, 0), (sx, sy), (ex, ey))


if __name__ == '__main__':
    main()

100개의 점을 사용한 경우
200개의 점을 사용한 경우
300개의 점을 사용한 경우

'Coding > Python 삽질기' 카테고리의 다른 글

[SQL] BEGIN TRANSACTION  (0) 2024.03.07
[Python] PNG to ICO 변환 하기  (0) 2024.01.04
[Python] 프랙탈 나무 만들기  (0) 2023.09.15
Posted by chobocho
My Life/version 23 (2023)2024. 2. 16. 13:38

회사을 다니면서, 제 3자 입장에서 지켜본 일을 잘하는 선후배님들은 대체로 다음과 같은 특징이 있었다.

1. 일을 하게되면 왜? 해야하지를 확인한다.

  • 일을 할 때, 요청자(상사, 유관부서)의 의도를 정확히 파악하고 시작하려 한다.
  • 물론, 의미 없는 일이면 최대한 피해서 리소스 낭비를 줄이려고 한다.

2. 적자생존. (기록을 잘한다)

  • 집착적일 정도로 기록에 민감하다
  • 7-8년전 기록(메일)도 모두 가지고 있다
  • 일잘러 분들에게, 아웃룩, 원노트는 사랑이다

3. 논리적이다

  • 두리 뭉실 한 걸 싫어한다.
  • 매우 논리적이다.

4. 반드시 해야 할 일은 미루지 않는다

5. 회사(상사)가 원하는 걸 미리 캐치 하고 집중한다

6. 최대한 적을 만들지 않는다

  • 회사는 생각보다 인간 관계가 좁기에, 최대한 적을 만들지 않으려고 한다.
  • 물론 빌런은 예외다.

7. 다른 부서원들에게 친절하게 대하고, 설명을 잘 한다

  • 다른 부서의 질문, 요청에 친절하게 응대한다
  • 물론 빌런에 대해서는 예외다
  • 가끔 싸우다가, 미운정으로 결혼하시는 분들이 있긴 한데, 이건 인연이다.

8. 문의, 요청에 대한 답장이 빠르다

  • 요구 사항에 대한 응답이 빠르다
  • 기록을 잘 해두면, 비슷한 요청 사항에 빠르게 대응 할 수 있기에, 2번과 더불어 선순환이 이루어 진다

9. 질문을 잘한다

  • 질문 하기를 두려워 하지 않는다
  • 1번과 이어진 내용으로, 질문을 잘해야 일을 잘 할 수 있다

10. 업무 방식에 새로운 시도를 많이 해본다

  • 새로운 시도를 통해서, 보다 효과적인 방법을 찾으려고 노력한다

11. 단순 반복 작업의 자동화에 관심이 많다

  • 엑셀의 고급 기능의 사용에 능하다 (피벗은 기본)
  • RPA등의 업무 자동화 기술 과 같은 일을 자동화 할 수 있는 방법을 끊임 없이 연구 한다

 

Posted by chobocho
Coding/Python 삽질기2024. 1. 4. 00:01
import sys

from PIL import Image


def convert_png_to_ico(png_path, ico_path, size=128):
    icon_size = (size, size)
    img = Image.open(png_path)
    img = img.resize(size=icon_size)
    img.save(ico_path)


def print_icon_file_info(ico_path):
    ico_image = Image.open(ico_path)
    print(f"Image type: {ico_image.format}\nSize: {ico_image.size}")


def main(source_file, target_file, icon_size=128):
    allowed_icon_size = (16, 32, 64, 128, 256)
    if icon_size not in allowed_icon_size:
        print("Error: Invalid icon size.\nAllowed size = 16, 32, 64, 128, 56\n")
        return

    convert_png_to_ico(source_file, target_file, size=icon_size)
    print_icon_file_info(target_file)


if __name__ == '__main__':
    if len(sys.argv) == 3:
        main(sys.argv[1], f"{sys.argv[1]}.ico", int(sys.argv[2]))
    elif len(sys.argv) == 2:
        main(sys.argv[1], f"{sys.argv[1]}.ico")
    else:
        print("Usage: ImageFileName [size]\n")

'Coding > Python 삽질기' 카테고리의 다른 글

Cardioid 그리기  (0) 2024.02.17
[Python] 프랙탈 나무 만들기  (0) 2023.09.15
[Python] Python 소스 코드 빌드 해보기  (1) 2023.09.06
Posted by chobocho
My Life/version 23 (2023)2023. 12. 28. 02:30

[가나다 순 입니다]

경영의 모험

https://www.yes24.com/Product/Goods/16996111

 

경영의 모험 - 예스24

빌 게이츠가 자신의 홈페이지와 《월스트리트저널》을 통해 “내가 읽은 최고의 경영서”라고 추천하면서 43년 만에 다시 출간된 경영서의 고전. 《경영의 모험》은 시간이 오래 흘러도 변치

www.yes24.com

 

KODE VICIOUS 개발 지옥

https://www.yes24.com/Product/Goods/112187673

 

KODE VICIOUS 개발 지옥 - 예스24

소프트웨어 개발 업계 종사자를 위한 현장감 있고, 삐딱하고, 대담한 조언들 튜링상 수상자 도널드 E. 커누스 추천 도서15년 넘게 수많은 코더와 IT 업계 종사자들에게 현장의 날카로운 통찰력을

www.yes24.com

 

노력의 배신

https://www.yes24.com/Product/Goods/120481690

 

노력의 배신 - 예스24

우리가 아는 ‘1만 시간의 법칙’은 틀렸다! 치열한 노력 신화 뒤에 가려진 불편한 진실누구든지 무언가에 1만 시간을 투자하면 최고의 전문가가 될 수 있다는 ‘1만 시간의 법칙’. 열심히만 하

www.yes24.com

 

대한민국 IT史 100 

https://www.yes24.com/Product/Goods/3583050

 

대한민국 IT史 100 - 예스24

한국은 어떻게 세계에서 두 번째로 인터넷을 개통할 수 있었을까?100장면으로 만나는 대한민국 IT 역사 다큐멘터리미국에 이어 세계에서 두 번째로 인터넷을 개통한 국가라는 사실을 알고 있었

www.yes24.com

 

디테일의 발견

https://www.yes24.com/Product/Goods/117458915

 

디테일의 발견 - 예스24

“새로운 거 없어?”네, 바로 여기 있습니다!고객을 사로잡은 101가지 한 끗을 모은 레퍼런스 북일주일에 한 번 돌아오는 온갖 회의에 들어갈 때마다 우리는 머리를 쥐어짠다. 새로운 것이 필요

www.yes24.com

 

명견만리_미래의 기회 편

https://www.yes24.com/Product/Goods/30666296

 

명견만리_미래의 기회 편 - 예스24

전국서점 경제경영 1위! KT경제연구소·박원순 시장 등 다수 추천화제의 KBS 〈명견만리〉, 두 번째 화두를 던지다인구쇼크, 일자리, 경제, 의료 등 향후 인류에게 가장 중요한 문제들에 대해 새로

www.yes24.com

 

명견만리_새로운 사회 편

https://www.yes24.com/Product/Goods/40936880

 

명견만리_새로운 사회 편 - 예스24

향후 인류에게 가장 중요한 문제들에 관해 새로운 담론을 제기하며 충격을 던졌던 『명견만리』. 인구쇼크, 교육, 기술 등 소수 엘리트 집단이 독점해오던 이슈들을 대중의 장으로 끌고 나옴으

www.yes24.com

 

명견만리_인류의 미래 편

https://www.yes24.com/Product/Goods/27916697

 

명견만리_인류의 미래 편 - 예스24

“《명견만리》는 우리의 시야를 한 단계 끌어올리는 책이다.”- 김난도(서울대 소비자학과 교수, 《트렌드 코리아》 저자)오늘날 가장 뜨겁고, 앞으로 인류에게 가장 중요하게 닥칠 문제들은

www.yes24.com

 

수학의 아름다움

https://www.yes24.com/Product/Goods/69284044

 

수학의 아름다움 - 예스24

중국 아마존 베스트셀러 제8회 국가 도서관 문진도서상 재5회 중화 우수 출판물상 한·중·일 검색 알고리즘을 개발한 구글 연구 개발자가 들려주는 세상을 바꾸는 알고리즘 수학 이야기 복잡한

www.yes24.com

생산성

https://www.yes24.com/Product/Goods/47245387

 

생산성 - 예스24

“생산성 높은 기업이 가장 창의적인 기업이다!”‘쥐어짜기’ 방식에서 ‘창의 중심’으로,개인과 기업의 ‘생산성 개선’에 관한 명쾌한 해법!- 공장의 낡은 개념 취급 받았던 ‘생산성’이

www.yes24.com

 

이노베이터

https://www.yes24.com/Product/Goods/109155558

 

이노베이터 - 예스24

초특급 베스트셀러 『스티브 잡스』에 이은 월터 아이작슨의 놀라운 역작! ‘최초의 컴퓨터에서 트위터와 페이스북까지, 디지털 혁명을 선도한 창의적인 천재들의 이야기’국내에서만 70만 부

www.yes24.com

 

일이란 무엇인가

https://www.yes24.com/Product/Goods/120169870

 

일이란 무엇인가 - 예스24

‘평사원’에서 ‘사장’까지 ‘갤럭시 성공 신화’ 고동진 삼성전자 전 사장이 삼성 직원들의 질문에 직접 답하다“이 책은 지금 자신의 업에서, 그 무엇도 아닌 오직 일로 성공하고자 하는

www.yes24.com

 

컴퓨팅의 정수

https://www.yes24.com/Product/Goods/120783885

 

컴퓨팅의 정수 - 예스24

이 책의 목적은 개발자가 컴퓨터 과학의 정수를 이해해 장기적으로 발전할 수 있다는 자신감을 갖도록 하는 것이다. 컴퓨터 과학의 정수와 본질을 구체적인 예제와 함께 열 개의 주제로 풀어냈

www.yes24.com

 

통계의 아름다움

https://www.yes24.com/Product/Goods/94466796

 

통계의 아름다움 - 예스24

재미와 지혜로 가득찬 96가지의 통계 이야기!중국에서 가장 많이 판매되는 통계/인공지능 교양 서적!이 책은 통계학부터 시작하여 데이터와 수학, 그리고 데이터 시각화까지 논의한다. 당연히

www.yes24.com

함께 자라기

https://www.yes24.com/Product/Goods/67350256

 

함께 자라기 - 예스24

‘함께’는 협력을 말하고, ‘자라기’는 학습을 말한다. 무엇이건 실제 바깥세상(야생)에 임팩트를 남기려면 혼자 힘으로만 되는 게 없다. 함께 해야 한다. 주변 사람들과 함께. 매일 부대끼는

www.yes24.com

 

Posted by chobocho
My Life/version 23 (2023)2023. 12. 28. 02:19
먼저 할 일
내 폰이 eSIM을 지원 하는지 확인 한다.
인터넷 사이트로 eSIM을 구매한다.
 
eSIM 설정

 
주의 사항
uSIM(물리심) + 알뜰폰 eSIM 조합으로 사용 중, 대만 eSIM을 사용 한 뒤
알뜰폰 eSIM을 다시 켜면, 휴대폰이 망을 못잡는 일이 발행한다.
이때는 알뜰폰 eSIM을 재발급 받아야 한다 (심 재발급 비용 발생)
Posted by chobocho
My Life/version 23 (2023)2023. 11. 9. 00:57
Posted by chobocho
Tip/Windows2023. 9. 22. 01:02

 C#을 배우면서 간단한 이미지 뷰어를 만들어 보았다.

기능:

 Drag & Drop 

R / L  키로 이미지 회전

Left, Right 화살표 키로 이미지 전환 (같은 폴더내)

Up 화살표키: 첫번째 이미지 (알파벳 순)

Down 화살표키: 마지막 이미지 (알파벳 순)

 

전체 소스코드:

https://github.com/chobocho/choboImageViewer

 

GitHub - chobocho/choboImageViewer: Simple image view by c#

Simple image view by c#. Contribute to chobocho/choboImageViewer development by creating an account on GitHub.

github.com

 

실행파일:

- 경고: 사용시 발생하는 어떤 이슈도 책임 지지 않습니다.

ImageViewer_32bit.zip
0.16MB

구현 관련

1. 메모리릭 이슈

-  PictureBox 에 이미지를 바꿀 때에는 반드시, dispose() 메서드 호출 후 null을 대입해야 한다.

            if (pictureBox.BackgroundImage != null)
            {
                pictureBox.BackgroundImage.Dispose();
                pictureBox.BackgroundImage = null;
            }

2. 파일을 읽어서, 파일이 위치한 폴더의 모든 이미지 파일 읽기. (Chat GPT 형님의 도움을 받았다)

    public void setFileName(string? filename)
    {
        if (filename == null || !File.Exists(filename)) return;
        string[] imageExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp", "ico" }; 
        
        // 이 부분 입니다.
        _filesList = Directory.GetFiles(Path.GetDirectoryName(@filename) ?? string.Empty)
            .Where(file => imageExtensions.Contains(Path.GetExtension(file).ToLower()))
            .Select(Path.GetFullPath).ToArray();

        Array.Sort(_filesList);
        _index = Array.IndexOf(_filesList, filename);
    }

3. 이미지 회전

- 여기서는 dispose() 메서드 호출 하지 않는다. 호출 하면 이미지 객체가 삭제된다.

- 마지막에 pictureBox.Refresh() 메소드를 꼭 호출해 주어야 회전한 이미지로 업데이트 된다.

        void rotateImage(System.Drawing.RotateFlipType angle)
        {
            var LoadedImage = pictureBox.BackgroundImage;
            LoadedImage.RotateFlip(angle);

            pictureBox.BackgroundImage = LoadedImage;

            var width = LoadedImage.Width > minimumSize ? LoadedImage.Width : minimumSize;
            width = LoadedImage.Width > maximumSize ? maximumSize : width;

            var height = LoadedImage.Height > minimumSize ? LoadedImage.Height : minimumSize;
            height = LoadedImage.Height > maximumSize ? maximumSize : height;

            this.Width = width;
            this.Height = height;

            pictureBox.Refresh();
        }

'Tip > Windows' 카테고리의 다른 글

[ScanSnap] 스캔스냅 사용팁  (0) 2021.08.09
[Excel] 엑셀 수식 자동 계산이 안 될 때  (0) 2021.08.07
검색 잘 하기  (0) 2021.08.07
Posted by chobocho