[카테고리:] 일상

  • 엑셀과 파워포인트를 파이썬에서

    엑셀과 파워포인트를 파이썬에서 연동시켜서 뭘 해보려고 했는데, 찾아보느라 삽질을 좀 했다. 그래서 다음과 같이 요약해 둔다.

    from win32com import client # 엑셀이나 파워포인트를 파이썬에서 연결하려면 꼭 써야 하는 명령이다.

    xl = client.Dispatch("Excel.Application") # 엑셀을 실행시켜서 파이썬에 연결한다.
    xl.Visible = 1 # 엑셀 창을 눈에 보이게 할지 말지를 선택한다. 0은 안보임, 1은 보임.
    xl.Quit() # 엑셀을 종료한다. 만약 client.Dispatch에서 xl1, xl2라는 식으로 엑셀을 두개 실행시켰으면 변수에 해당하는 엑셀만 종료된다.

    myfile=xl.Workbooks.Open(filename) # 엑셀에 지정된 파일을 열도록 한다. 그리고 그 파일 핸들러를 myfile이라는 변수에 저장해서 쓸 수 있게 한다. Workbook이란 엑셀 파일을 뜻한다.
    myfile.Save() # myfile에서 사용하고 있던 파일을 저장한다.
    myfile.Close() # myfile에서 사용하고 있던 파일을 닫는다.

    mynewfile=xl.Workbooks.Add() # 엑셀에서 새 파일을 연다. 그리고 그 파일 핸들러를 mynewfile이라는 변수에 저장해서 쓸 수 있게 한다.

    아래에서, 시트는 워크시트와 차트시트를 포함하는 전체 시트다.

    myfile.Sheets(sheet_no) # myfile에 있는 시트 중에 sheet_no를 선택한다. sheet_no는 정수(int)이거나 문자열이어서, 정수라면 그 시트의 번호를 말하고, 문자열은 그 시트의 이름을 말한다.
    myfile.Worksheets(sheet_no) # myfile에 있는 워크시트 중에 sheet_no를 선택한다.
    myfile.Charts(chart_no) # myfile에 있는 차트시트 중에 sheet_no를 선택한다.
    myfile.Sheets(1).Name= "XYZ" # myfile에서 1번 시트의 이름을 "XYZ"로 고친다.

    myfile.Worksheets(1).Range("F21").Value = 10 # myfile에서 1번 워크시트에 있는 "F21"이라는 셀의 값을 10으로 고친다.
    myfile.Worksheets(1).Range("F21:G25").Value = 10 # myfile에서 1번 워크시트에 있는 "F21"에서 "G25"의 범위에 있는 셀의 값을 10으로 고친다.

    myfile.Worksheets("결과").Range("A1:C10").Copy() # myfile에서 "결과"라는 워크시트에서 "A1"셀과 "C10"셀 범위의 셀들을 복사한다. 이것은 Ctrl-C를 눌러서 복사한 것과 같이 클립보드에 복사된다.
    myfile2.Worksheets(3).Range("B2:D11").Select() # myfile2에서 3번 워크시트에 "B2"셀과 "D11"셀 범위의 셀들을 선택한다. 이것은 마우스로 드래그해서 선택한 것과 같다.
    myfile2.Worksheets(3).Range("B2:D11").Paste() # 방금 고른 범위에 클립보드에 복사된 내용을 붙여넣기 한다 이것은 Ctrl-V로 붙여넣기 한 것과 같다. 복사할 때의 셀 범위의 크기와 붙여넣기 할 때의 셀 범위의 크기가 다르면 오류가 발생한다.

    myfile2.Worksheets(3).Range("A1:C10").PasteSpecial(-4163) # PasteSpecial은 붙여넣기에 옵션을 주는 방법이다. 안에 들어간 숫자는 붙여넣기 할 때의 옵션을 정한다. 그 숫자의 의미는 https://learn.microsoft.com/ko-kr/office/vba/api/excel.xlpastetype 에서 찾아볼 수 있다.

    myfile.Worksheets(2).Range("A3:R2863").AutoFilter(Field=9,Criteria1=">=400") # 주어진 범위에 필터를 주는 방법이다. Field=9는 가장 왼쪽인 A부터 시작해서 순서로 9번째인 I 열에 필터를 적용하겠다는 뜻이다. Criteria1>=400은 400보다 같거나 큰 값을 골라내겠다는 뜻이다. Criteria2도 지정 가능하다.
    myfile.Worksheets(2).Range("A4:R2863").SpecialCells(12).Copy() # 여기서 SpecialCells는 셀 중에 원하는 것만 골라내는 방법이다. 12는 보이는 셀들만 고르겠다는 뜻이다. 숫자의 의미는 https://learn.microsoft.com/ko-kr/office/vba/api/excel.xlcelltype 에서 찾아볼 수 있다.

    myfile.Worksheets(3).Range("A4").PasteSpecial(-4163) # 앞에서 설명했던 거라서 생략. 앞의 명령과 조합하면 2번시트에 있던걸 3번시트로 골라서 복사하는 명령이 된다. 단, 범위 선택을 이렇게 한 칸만 해주면, 나머지는 알아서 붙여넣기가 된다.
    myfile.Worksheets(2).AutoFilterMode=False # 필터 붙였던걸 끄고 모든 항목이 나타나게 한다. 필터를 걸 때는 Range가 있었는데 끌 때는 없다는 것을 조심하자.

    myfile.Worksheets("결과").Range("B4:F2863").Sort(Key1=myfile.Worksheets("결과").Range("B3"),Order1=1) # 정렬시키는 명령어. B4에서 F2862의 범위에 있는 값들을 정렬하는데, 그 기준을 B3의 열에 해당하는 값을 기준으로 삼겠다는 뜻이다. Order1은 1이 오름차순, 2가 내림차순이다. 자세한 것은 https://learn.microsoft.com/en-us/office/vba/api/excel.range.sort 을 참고하자.

    이제 차트를 그려보자.

    myfile.Worksheets(1).Shapes.AddChart(4,800,420,400,200).Select() # 일단 차트를 그리고 선택한다. Select()를 해주면 아래의 ActiveChart로 쓸 수 있다. Shapes에는 차트만 있는건 아니지만, 아무튼 여기서는 차트를 그릴 것이다. AddChart(차트 종류, 가로 위치, 세로 위치, 폭, 높이) 로 입력한다. 크기의 단위는 "포인트"다. 글자 크기를 이야기할 때의 그 포인트. 차트 종류는 숫자로 지정하는데, 원하는 모양에 따라 https://learn.microsoft.com/en-us/office/vba/api/excel.xlcharttype 을 참고해서 골라주자.
    xl.ActiveChart.SetSourceData(Source=myfile.Worksheets("Cal").Range("F4:F20")) # 차트에 그림을 그릴 데이터를 지정한다.
    xl.ActiveChart.HasTitle=True # 제목이 생기도록 한다.
    xl.ActiveChart.HasLegend=False # 범례는 없도록 한다. True라고 적으면 범례가 나타난다.
    xl.ActiveChart.ChartType=75 # 앞에 AddChart에서 아무 숫자나 넣어서 차트를 만들고, 여기서 차트 종류를 바꿔도 된다. 원하는 모양에 따라 https://learn.microsoft.com/en-us/office/vba/api/excel.xlcharttype 을 참고해서 골라주자.
    xl.ActiveChart.Axes(1).MajorUnit=50 # X축의 눈금 단위 50마다 하나씩 적기로 한다. 자매품으로 MinorUnit도 있다. Y축을 바꾸고 싶으면 Axes(2)를 쓰자.
    xl.ActiveChart.ChartTitle.Characters.Font.Size=12 # 제목의 글자 크기를 12포인트로 정한다.
    xl.ActiveChart.ChartTitle.text = myfile.Worksheets(2).Range("F3").Value # 제목 내용을 다른 셀에서 가져올 수도 있다.

    xl.ActiveChart.SeriesCollection().NewSeries() # 차트 하나에 그래프를 두개 그리고 싶을 때 쓴다.
    xl.ActiveChart.FullSeriesCollection(2).Name = "" # 범례에 들어갈 이름이다. 여기서는 빈칸을 뜻한다.
    xl.ActiveChart.FullSeriesCollection(2).XValues = myfile.Worksheets("Cal").Range("A4:A20") # 추가할 그래프의 X축 값들이다.
    xl.ActiveChart.FullSeriesCollection(2).Values = myfile.Worksheets("Cal").Range("W4:W20") # 추가할 그래프의 Y축 값들이다.
    xl.ActiveChart.FullSeriesCollection(2).Format.Line.Weight=3 # 추가할 그래프의 굵기다.
    xl.ActiveChart.FullSeriesCollection(2).Format.Line.Visible=True # 추가할 그래프를 보이게 설정한다.
    xl.ActiveChart.FullSeriesCollection(2).Format.Line.ForeColor.RGB=255 # 추가할 그래프의 색을 정한다. 255라고 쓰면 빨간색이다.

    myfile.Worksheets(1).ChartObjects(2).Copy() # 1번 워크시트에서 차트 2번을 고른다. ChartObjects는 생성된 순서대로 번호가 붙는다고 생각하면 된다. 즉, ChartObjects(2)는 그 시트에서 2번째로 생성된 차트를 고른다. 다른데 붙여넣고 싶으니까 Copy()를 했다.

    myfile.Worksheets(1).Columns("A").ColumnWidth = 8.38 # 워크시트 1번의 A열의 폭을 8.38로 정한다. 단위는 포인트다.

    파워포인트를 써 보자.

    ppt= client.Dispatch("PowerPoint.Application") # 파이썬에 파워포인트를 연결한다.
    ppt.Quit() # 파워포인트를 종료시킨다.
    presentation=ppt.Presentations.Add() # 새 프리젠테이션 파일을 생성한다. 원한다면 엑셀에서처럼 Open("파일이름")을 쓸 수도 있다.
    presentation.Save() #파일을 저장한다.
    presentation.SaveAs() # 파일을 다른 이름으로 저장한다.

    presentation.Slides.Add(4,12) # 새 슬라이드를 4번째 위치에 넣는다. 즉, 새로 만들어진 슬라이드가 4페이지다. 12는 레이아웃을 정하는 숫자인데, 그중에서도 12는 빈 슬라이드다. 다른 것도 써보자.

    presentation.Slides(4).Shapes.PasteSpecial(DataType=1) # 앞에 엑셀에서 복사한 차트를 붙여넣기 할 수 있다. DataType=1이라는 옵션은 그림으로 붙여넣기 하겠다는 뜻이다. 다르게 붙여넣고 싶으면 https://learn.microsoft.com/en-us/office/vba/api/powerpoint.pppastedatatype 을 참고해서 다른 숫자를 적자.
    presentation.Slides(4).Shapes(1).LockAspectRatio=False # 그림을 붙여넣기 할 때, 가로-세로 비율을 고정하지 않고 내 맘대로 정하고 싶을 때가 있는데 그때 False를 쓴다. 고정시키려면 True를 쓴다.
    presentation.Slides(4).Shapes(1).Left=20 # Shapes(1)은 1번째로 만들어진 그림을 고른다는 뜻이다. 여기서도 만들어진 순서대로 그림을 고를 수 있다. Left는 그림의 왼쪽 위를 기준으로 한 그림의 가로 위치다.
    presentation.Slides(4).Shapes(1).top=50 # Top는 그림의 왼쪽 위를 기준으로 한 그림의 세로 위치다.
    presentation.Slides(4).Shapes(1).Width=400 # Width는 그림의 폭이다.
    presentation.Slides(4).Shapes(1).Height=200 # Height는 그림의 높이다.

    tb=presentation.slides(4).Shapes.AddTextbox(1,50,25,200,50) # 4번 슬라이드에 텍스트박스를 추가한다.
    tb.TextFrame2.TextRange.Characters.Text="내용적기" # 방금 만든 텍스트박스의 내용을 적는다.
    TextFrame2.TextRange의 뜻은 구글에서 찾아보도록 하자.

  • Meet again

    Singer: Megumi Hayashibara 林原めぐみ
    Title: Meet again

    果てなく広がる青空 끝없이 펼쳐진 푸른 하늘
    そよぐ髪 風が告げる 바람이 머리카락을 스쳐가
    いつだってそこにいてくれた 언제나 거기에 있어줬어
    目を閉じて 静かに感じる 눈을 감고, 조용히 느껴봐

    天(そら)までのびた水平線 하늘까지 이어진
    弾け飛ぶ 光のシャワー 튀어 날아가는 빛의 샤워
    私の中の私が今 내 속에서 내가 지금
    動き出したら止まらない 움직이기 시작했다면, 멈출 수 없어

    両手いっぱい広げて 양손 활짝 펼치고
    倒れても深呼吸 넘어져도 심호흡
    向かい風も味方に 바람이 부는 것도 내 편으로
    取り込んで 돌려 세워서

    しのごの言ってないで 이러쿵저러쿵 말하지마
    やるしかないのなら 할수밖에 없는거라면
    あたって砕けて立ち上がれ 부딪치고 깨져도 다시 일어서

    誰のためのeveryday 누굴 위한 매일이야
    何のためのway of life 뭘 위한 삶의 방식이지
    答えなんて本当はシンプル 대답같은거 사실은 간단하잖아

    ありがとうを100万回 고맙다고 백만번 말하고
    ごめんねって言わないで 미안하다고 말하지 말고
    私は私の人生(みち)を行く 나는 나의 인생을 살아가

    にぎった手に力込めて 움켜쥔 손에 힘을 주고
    流れてく 確かな時間 흘러가는, 분명한 시간들
    振り向いたその笑顔から 돌이켜보면, 그 웃음에서

    変わらない 愛しさが揺れる 변하지 않는 사랑스러움이 넘쳐나
    前を向いて歩いて行こう 앞을 향해 걸어가는길
    清く 正しく 勇ましく 맑게, 맞게, 용감하게
    どこまでも続くこの道を 어디까지 가볼까, 이 길을
    まっすぐ目をそらさないで 금방 눈을 피하지 마

    迷ったっていいじゃない 헤메면 어때
    へこんだっていいじゃない 망가지면 어때
    今日が駄目でも 오늘 안된다고 해도
    NEXT(あした) Try again 내일 다시 한번 해봐

    あきらめる理由と 포기하는 이유와
    手にする夢の価値 손에 쥔 꿈의 가치
    どちらも使い方次第ね 어떤 것도 사용법은 다음에

    あれこれ 理屈より 이것저것 따지기보다
    心が感じてる 마음이 느끼는대로
    答えだけを信じて進もう 그게 답이라고 믿고 나가

    大好きを100万回 좋아한다고 백만번
    ちょっと待ってって言わないで 잠깐 기다려달라고 말하지 말고
    大丈夫 きっと楽しいよ 괜찮아, 분명히 재미있을거야

    両手いっぱい広げて 양손을 활짝 펼치고
    倒れても深呼吸 넘어져도 심호흡하고
    向かい風も味方に 바람이 부는 것도 내편으로
    取り込んで 돌려세워서

    しのごの言ってないで 이러쿵저러쿵 말하지 말고
    やるしかないのなら 할수밖에 없는거라면
    あたって砕けて立ち上がれ 부딪치고 깨져도 다시 일어서

    誰のためのeveryday 누굴 위한 매일이고
    何のためのway of life 무얼 위한 삶의 방식이야
    答えなんて本当はシンプル 답 같은건 사실은 간단해

    ありがとうを100万回 고맙다고 백만번 말하고
    ごめんねって言わないで 미안하다고 말하지 말고
    私は私の人生(みち)を行く 나는 나의 인생을 살아가는거야


    이 노래는 어떻게 살아야 하는지에 대한 화자 자신만의 방침이 담겨있다. 어떤 것을 어떻게 해야 할지 불확실한 상황에서, 어떤 선택을 해야 할지 모른다면 그 사람은 불안과 두려움에 빠질 수밖에 없다. 그런 불안함과 두려움을 이겨내고 어떻게 살아야 할까? 그런 두려움을 이겨내려면 어떻게 해야 할까? 용기를 내야 한다. 그 용기는 어떤 용기인가? 그저 선택하는 용기다. 노래의 처음에 말하는 “끝없이 펼쳐진 푸른 하늘”은 자신의 인생을 말한다. 사람은 끝내 죽을때까지 살아있다. 하늘은 어떤 규칙도 조건도 없이 그저 펼쳐져 있을 뿐이다. 그 안에서 길을 찾고 만들어 가는 것은 본인의 몫이다.

    그 속에 어떤 빛을 발견하고, 호기심에 그 뒤를 쫒는 일이 벌어진다. 하늘에 보이는 빛이 닿을 수 없는 하늘의 별빛인지, 닿기 위해서는 추락해야 하는 땅의 불빛인지 알 수 없지만 빛을 보고 그 빛을 따라가고 싶어졌다면 어쩔 수 없다. 갈 수밖에 없다. 이것이 인생을 살아간다는 것의 의미다. 무엇을 추구하는가는 사람마다 다르지만, 무엇을 추구하기로 결정했다면 그것이 무엇이든 끝까지 가서 확인을 해야 한다.

    그 길은 힘들 것이다. 하지만 화자는 거기서 다시 일어서라고 말한다. 양손 활짝 펼치고, 심호흡 한번 하고, 나를 방해하는 바람조차도 내 편으로 만들어낸다. 사실 내가 마음을 다잡고 다시 일어서는 것은 어떻게든 할 수 있겠지만, 나를 방해하는 바람을 내 편으로 만드는 것은 불가능한 일이다. 그저 바람이 내 편이 되기를 기다리는 수밖에 없다. 하지만 화자는 그것을 적극적으로 해내라고 말한다. 여기서 “할 수밖에 없는 거라면”의 의미는 어떤 의무감이나 외부의 규칙 때문에 해야만 하는 일이 아니다. 내가 하고싶어서 하는 일, 내가 궁극적으로 추구하는 것이기 때문에 “할 수밖에 없다”는 것이다. 그런 일이라면 부딪치고 깨져도 다시 일어서야 한다는 것이다.

    여기에 의문을 품는 사람들을 위해, 화자는 다시 물어본다. 누구를 위한 매일이고, 무엇을 위한 삶인지. 결국은 내 삶은 내가 짊어지고 가야 할 몫이고, 아직 죽지 않았다면 살아서 나가야 한다. 나를 도와준 사람들에게 고마움을 표시하고, 별 가치 없는 자신을 돕게 한 것에 대해 미안해 하기보다 그 도움의 뜻을 이어받아서 내가 더 적극적으로 살아가라는 뜻이다.

    2절에서는 더 강해진다. 좋든 싫든 시간은 흐르고 내게는 경험이 쌓인다. 그러고나면 거기에 의미가 있다. 앞을 향해 걸어가는데, 깨끗하게, 올바르게, 용감하게 앞으로 전진한다. 그 길의 끝이 어디로 이어질지는 모르겠지만 끝을 정하는 것은 자신의 의지다. 자신이 끝을 정할 수 있다면, 오히려 끝을 정하지 않고 어디까지 갈 수 있을지 시험해 보는 것도 좋지 않을까? 지금 끝낼 필요가 없다.

    누구나 인생은 처음이다. 아무리 오래 산 사람이라도 오늘, 지금은 처음 경험하는 시간이다. 그렇다면 헤멜수도 있고 망가질 수도 있다. 그러면 어떠한가? 내가 죽었는가? 죽지 않았다면 내일 다시 해볼 수 있다. 오늘 안된 일이 내일도 안될 것이라고 장담할 수 없다. 물론 내일 될 것이라고 장담할 수도 없다. 하지만 가능성이 남아있다면 다시 해볼 수 있다. 그래서 화자는 말한다. “포기하는 이유와 손에 쥔 꿈의 가치”를 두고 그걸 어떻게 쓸지 고민하지 말고 그저 마음이 느끼는대로 가라고 한다. 마음이 느끼는대로 가는 길이 답이 아닐 수도 있지만, 그래도 그것이 답이라고 믿고 가라는 뜻이다. 믿음은 현실과 다를 수 있다. 하지만 믿음은 현실을 바꿀 수 있다.

    그래서 자신이 손에 쥔 꿈을 선택했다면, 그 꿈을 좋아한다고 백만번쯤은 얘기하면서 추구하는 것이다. 꿈을 이룰 때 까지, 준비가 될 때 까지 잠깐만 기다려달라고 말하지 말고 지금 당장 시작해보자. 불안한가? 괜찮다. 재미있을 것이다.

  • Two thumbs up!

    하야시바라 메구미, 슬레이어즈 30주년 기념앨범

    目覚めるまで30秒 눈뜰때까지 30초
    指先にみなぎる 손끝에 넘쳐나는
    力を確かめて 힘을 확인하고
    跳ね起き、見据えた先 벌떡 일어나서 앞을 노려보지
    まだほの暗い霧の 아직 어렴풋한 검은 안개가
    奥に今日が息づきはじめる 깊숙히 오늘이 숨쉬기 시작해
    一筋の朝日 (ヒカリ) が闇を散らす 한줄기 아침햇살이 어둠을 걷어내

    寝落ちまでも30秒 추락까지도 30초
    頭を悩ませる머리를 굴려봐서
    無理難題なんて 너무 어려운 문제따위
    今は深層心理 (ゆめ) に任せて 지금은 무의식에 맡겨버리고
    答えは決まっている 답은 정해져 있어
    伸るか、反るか 할까 말까
    やり方次第と 다음번에도 될까
    なすべきことに 해야 할 일을 하기 위해
    的をしぼるだけ 목표를 쥐어 짜낼 뿐

    手放した物あれこれ全部 손대고 있는 것들 이것저것 전부
    数え上げたらきりがない 세보려면 끝도 없어
    悔やむことより 후회하기보다는
    今できる事 지금 할 수 있는 것을
    まずはソコから 일단 거기서부터

    再び重なった運命 다시 몇 겹으로 쌓인 운명
    めくりあげてシャッフル 잘 섞어주었으니
    どれを選んだとこで 어디를 고르든 어디든
    きっとたどり着ける 분명 어떻게든 도착할거야
    流した涙だって 흐르는 눈물이라도
    迷い選んだ道だって 어렵게 고른 길이라도
    ちゃんと続いてるから 짠!하고 계속될테니까
    Make a stand with your head high 고개를 들고 당당하게!

    ざっくり30日 대충 30일이
    繰り返し12回 열두번 반복돼
    時は流れていく시간은 흘러가
    人間の命 (いのち) は無限じゃない 인간의 생명은 무한하지 않아
    「いつかきっと」夢みて 언젠가 반드시!라고 꿈꾸며
    待っていたって来やしないから 기다려봐야 이뤄지지 않으니까
    有言実行をしかけなくちゃ 하겠다고 한걸 해버리지 않으면 안돼

    手に入れたものあれこれ全部 손에 넣은 이런저런거 전부,
    本当に必要なの? 정말 필요한거야?
    飛び立つ時に 날아오를 때에
    ただの荷物は (プライド) 그냥 자존심같은건
    邪魔になるだけ 방해될 뿐

    大嫌いだったあいつも 너무 싫어하는 그녀석도
    大好きな貴方も 좋아하는 당신도
    人生を彩る最高の出演者 (パフォーマー) 인생을 만드는 최고의 출연자(퍼포머)

    知らなかった気持ちも 모르고 있던 감정도
    無駄に見える経験も 쓸데없어 보이는 경험도
    心をまるごと 마음을 접는 것도
    使うためのトレーニング 잘 써먹기 위한 훈련

    人生は一度きり 인생은 한번뿐이니
    燃やし尽くせ華麗に 열정을 불태워 화려하게
    言い訳は後まわし 변명은 나중에
    まずは目の前にフォーカス 일단 눈앞에 집중해

    猪突猛進上等 미친듯이 달려들어 원하는대로
    食い込んでる足かせ 파고드는 족쇄를
    今とりはずしたなら 지금 벗어던졌다면
    YOLO Let’s make the most of today 오늘을 최고로 만들자


    메구미 스타일 그대로의 가사. 지치고 포기하려는 마음속에 열정과 용기를 직접 때려박아넣는 그 투박한 내용. 어떤 사람에게는 그저 그런 내용이겠지만, 나에게는 큰 힘이 된다.

    노래 내용은 Give a reason에서 이어진다고 볼 수 있다. Give a reason의 주제는 꿈을 포기하지 않고, 좌절하지 않고 끝까지 밀어붙여 나가면서, 그렇게 해서 꿈을 이루고 목표를 달성한 다음에도 끝나지 않고 이어지는 인생을 이야기한다. 하나의 목표를 이루거나 이루지 못했거나 어떤 경우에도 자신의 인생은 끝나지 않고 그 다음의 이야기가 이어진다.

    Two thumbs up은 그렇게 해서 어떤식이든 인생의 한 막이 끝난 다음의 이야기다. 지금까지 성공적이었든 그렇지 않았든, 당신이 당신의 인생을 뭐라고 평가하든, 인생은 끝나지 않고 계속된다. 그렇다면 어떻게 해야 하나? 인생은 다시 뒤섞였다. 어떤 길을 고르든 무엇이 나올지 미래는 알 수 없지만, 어떻게든 어딘가에는 도달할 것이다. 그러니 지금, 현실에 집중하자.

    지금까지 뭘 해서 어떤 능력, 기능, 결과물, 재산을 갖고 있든지. 그것에 신경쓰면서 그 다음을 준비하는 건 그 다음의 목표를 이루는 데 방해가 될 뿐이다. 지금까지 좋았던 상황이 그 다음에도 좋을 것이라는 보장이 없다. 냉정하게 판단해서 다음의 목표에 집중하고, 여기에 도움이 되는 것을 가져가고, 필요 없는 것은 버리자. 특히 쓸데없는 “자존심”은 원문에 “화물, 짐”이라고 표현되어 있는데, 날아오를때 필요 없다.

    인생은 한번뿐이니, 열정을 화려하게 불태워라! 변명은 나중에, 일단 현실에 집중하자.

  • 번역의 양심

    다른 사람이 번역한 책(모 전공서적)을 출간 전에 검토해 달라고 해서 읽어봤는데, 너무 엉망이어서 좌절했다. 몇 장 읽어보고 든 느낌은, “이렇게 해도 돈을 준다는 건가?”다. 비록 내가 번역 경력이 짧아서 남의 번역에 뭐라고 할 처지는 아니지만, 독자입장에서 그런 책을 읽는다면 출판사에 전화해서 환불해달라고 할 것 같았다. 그리고 솔직히 말해서, 내가 그정도 품질로 번역해도 된다고 하면 지금 작업 속도보다 5~10배는 더 빠르게 할 수 있다.

    개인적으로는 번역하면서 목표는 독자가 책을 읽었을 때 이해하기 쉬운 문장으로 옮기는 것이면서, 또한 독자가 도저히 이해하지 못한 문장에 대해서는 “이게 이렇게 적혀있다고?”라는 의심을 품고 원서를 찾아봤을 때 “정말 그렇군”이라고 탄식할 수밖에 없는 번역을 지향한다. 물론 내가 지금 담당하는 책들이 다들 양자컴퓨터 관련 도서들이다보니 모종의 한계는 있지만.

    좀 더 경험과 경력을 쌓다보면 더 알기쉽게 문장을 옮길 수 있게 되겠지. 지금까지 수많은 번역서들을 읽어봤지만, 위에서 말한 정도로 엉망인 적은 한번도 없었다. 아마 수많은 편집자들이 갈려나가며 작업을 했겠지. 아무튼 돈도 받고 이름도 걸고 하는건데, 양심의 문제를 넘어서 평판의 문제다. 그리고 지속가능성의 문제다.

    그러니까, 내 말은 공짜로 하는 것과 돈받고 하는 것 사이의 차이가 없으면 안된다는 얘기다.

  • iff

    p->q

    p는 q의 충분조건

    q는 p의 필요조건

    p<-q

    p는 q의 필요조건

    q는 p의 충분조건

    q if and only if p

    if p, q == p->q: 충분조건

    only if p, q == p<-q: 필요조건

  • 데이팅게임

    이 책의 제목은 ‘데이팅게임’인데, 매우 멀쩡한 교양과학책이다. 절대로 이성을 꼬시는데 필요한 테크닉이 실려있는 책이 아니다. 여기서 말하는 ‘데이팅’이란 날짜를 추적하는 것으로, 구체적으로 이 책에서 추적하는 것은 지구의 나이다. 지구의 나이는 학설마다 다른데, 기독교 성경에 의하면 6천년이고, 지구물리학에 의하면 46억년이다. 그 외에도 수많은 의견들이 있었다. 물론 지금의 정설은 46억년 정도이다.

    중요한 것은, 어째서 46억이라는 수치를 제시할 수 있었는가이다. 굉장히 황당해 보이는 이 큰 숫자는 지구의 나이이며, 시간으로 치면 인간이 상상하기에는 너무나 오랜 시간이기 때문에 결코 사실일 것 같지 않지만, 사람의 생각이야 어떻든 당신이 현대 과학을 믿는다면 이 숫자도 믿어야 한다.

    지구의 나이는 방사성 동위원소와 지질학적 연대를 이용해 측정하는데, 여기에는 중요한 기본적인 가정이 깔려있다. 즉, 지금 일어나고 있는 현상은 과거에도 일어났고, 미래에도 일어날 것이라는 점이다. 물리 법칙을 비롯한 과학의 근본 법칙들이 시간이 지남에 따라 변하지 않았다는 믿음만이, 당신이 46억년이라는 숫자를 믿기 위해서 가져야하는 유일한 가정이다.

    어떻든간에, 지구의 역사를 추적해 나가는 과정은 어떤 숫자를 제시하더라도 큰 논란이 일어날 만큼 굉장히 논쟁적이었고, 그 속에서 많은 사건들이 일어났다. 이 책은 일종의 역사책으로써, 지구 나이 추적에 관한 역사를 흥미롭게 적어내려간 책이기도 하다.

    수식은 없고, 수백편의 과학 논문으로 나온 이야기들임에도 불구하고 전혀 어렵지 않게 적혀 있으니 한번쯤 읽어 볼만한 책이다.

  • 선문답

    절벽에서 떨어졌는데 우연히 옆에 묶여있던 밧줄을 붙들어서 살아남았다. 더 지쳐서 밧줄을 놓치기 전에 내려가든가 올라가든가 해야 하는데, 내려가자니 밧줄이 짧을수도 있고, 올라가자니 지쳤다. 어떻게 해야 할까. 날씨는 점점 험악하게 바뀌고 있고 가진 것은 없다. 여기에 정답은 없다. 일단 선택하고, 그리고 다른 방향을 돌아보지 않는 신념이 필요할 뿐이다.

  • 맬웨어 광고

    페북에 이런 광고가 떴다.

    주소는 일부러 지웠음.

    들어가보면, 다음과 같은 홈페이지가 나온다.

    물론 밑에는 다른 여성들 사진도 많이 있다. 그건 그렇고.

    저기서 Download full hd album을 눌러서 다운받으면, 78메가바이트 정도 되는 압축파일을 받을 수 있다.

    그래서, 이 압축파일을 열어보면,

    미묘하게 파일 크기가 커다란 녀석이 4개가 있고, 나머지는 크기가 작은 편이다. 파일이름이 숨겨져 있는데, 전체를 다 펼쳐보면 다음과 같다.

    파일 확장자 exe파일만 19메가바이트이고, 나머지 JPG파일들은 크기가 작다는 걸 알 수 있다. 위의 압축파일에서 2개를 다운로드 받아봤는데, 사진 파일 1개를 빼고 나머지 내용은 다 같았다. 즉, 이건 굉장히 의심스러운 파일이다. 멀쩡한 그림파일인줄알고 몇개 클릭해 본 다음, 하나씩 클릭하다보면…

    내 노예 중 하나인 윈도우즈8.1에서 실행시킨 모습. 차단되었다.

    이렇게 “실행파일”이 실행되면서 무슨 일이 일어나게 되는 것이다.

    물론 인간의 욕심은 끝이 없고 같은 실수를 반복하기 때문에, 굳이 보안설정을 끄고 일부러 실행시켜보았다. 착한 어린이들은 집에서 절대로 따라하지 말자.

    당연히 관리자권한을 요청한다.

    뭔가를 체크하더니 “버추얼 머신에 설치해세요”라는 메시지가 나왔다.

    그래서, 한번 더 실행시켰더니

    이렇게 뜬다. libcrypto라니… 이건 암호화 모듈이잖아?

    그냥 스킵했다. 저게 없다고 에러가 나는걸로 봐서는, 아까 처음에 설치할때 뭔가 했던 것 같다.

    두번째로 없다고 나온 것은 libssl 이다. 이건 통신 암호화 라이브러리…?

    아무튼, 이상해서 저 에러메시지에 적힌 폴덕에 찾아바보았다.

    파이썬 3.7로 이루어진 뭔가가 나왔다. curl, ssl, crypto, rar 등이 있는걸로 봐서는 이건 랜섬웨어인 것 같다. 즉, 파일을 암호화시켜서 사용하지 못하게 해버리고, 그 암호화를 해제하는 키를 어딘가로 보내서 몸값을 뜯어낼 수 있도록 하는 내용이라는 추측이 든다. 저기서 메인프로그램으로 보이는 rnews.exe를 실행시켜봤을 때 아무런 일도 일어나지 않았다. 뭐가 암호화되지도 않은 걸로 봐서는 윈도우 자체 보안프로그램이 꺼버린 것 같다.

    unins000.exe는 언인스톨 프로그램인 것 같아서 실행시켜봤는데

    진짜 지울거냐고 물어보고, 진짜 지워졌다고 말하긴 했지만

    자기 자신만 지워진 채 아무것도 바뀌지 않았다.

    아무튼 함부로 실행시켰다간 자신의 소중한 무언가를 잃게 될 수도 있으니 주의하기 바란다. 그리고 이런 낚시성 광고를 돈 준다고 그냥 게시해주는 페이스북도 정말 반성했으면 좋겠지만. 반성하지 않겠지…

  • 원칙과 소신의 대통령 윤석열

    원칙과 소신의 대통령 윤석열

    다들 알다시피 윤석열은 이번에 대통령에 당선된 사람이다. 어린이들이 읽을 것을 전제하고 쓴 책이라 글자가 크고 문장이 쉽게 되어 있어서 읽는데 별 어려움은 없었다. 무슨 내용이 담겨있을지 읽어보기전에 매우 궁금했지만, 아무튼 초판본에 예약구매를 해서 아무런 사전정보 없이 읽게 되었다. 이 책의 내용은 윤석열이 어릴때부터 대통령 당선이 되는 상황까지의 이야기를 요약해서 적은 일종의 위인전이다. (결코 평전은 아니다.)

    서점에 가서 목차를 훑어보면 알 수 있겠지만, 일단 어린이들에게 도움이 될만한 교훈적인 이야기들이 많이 적혀있다. 정치색을 빼고 읽는다면 윤석열은 굉장히 모범적이고 교훈적인 삶을 살았던 사람이라는 것을 알 수 있다.(이 책 내용의 어디까지가 사실인지는 나도 모르겠다.)

    전반부의 어린시절 이야기는 언론에 보도된 자료가 거의 없을테니 내용이 어떻든 대충 넘어간다 치고, 후반부는 뭔가 실제 인터뷰를 하고 썼다기보다는 신문기사 내용을 그대로 옮겨왔다는 느낌이 강하게 드는 어떤 느낌적인 느낌이 있었다. 물론 자료조사를 열심히 해서 책을 쓰는 건 쉽지 않은 일이고, 대통령 당선자가 바쁜데 자기 위인전 내용에 대해 인터뷰 하고 있을 시간도 없을 것이고, 여러모로 이해는 되지만 그래도 아쉬운 점은 어쩔 수 없다.

    특이사항으로는 KC마크를 받은 책이라는 것이다. 내가 지금까지 수천권의 책을 봐 왔지만, KC마크가 찍힌 책은 태어나서 처음 봤다.(“KC마크는 이 제품이 공통안전기준에 적합하였음을 의미합니다”라고 적혀있다.)

    어째서인지 바코드 옆에 KC마크가 찍혀 있다.

    … 출판사에서 무슨 생각으로 이걸 인증 받았는지 잘 모르겠는데, KC마크는 “안전·보건·환경·품질 등 분야별 인증마크를 국가적으로 단일화한 인증마크.”라고 한다.

    https://standard.go.kr/KSCI/crtfcPotIntro/crtfcMarkIntro.do?menuId=541&topMenuId=536

    인증이야기 > 국가통합인증마크(KC) | e나라 표준인증

    국가통합인증마크(KC) 인증 인증이야기 국가통합인증마크(KC) 국가통합인증마크(KC)의 필요성 현재 우리나라에는 총 70여개의 법정의무인증제도가 있습니다. ‘제품 안전’이라는 똑같은 목적이더라도, 부처마다 인증마크가 달라 중복해서 인증받아야하는 불편함이 있었습니다. 그러다 보니 시간과 비용이 낭비되는 것은 물론이고, 국가간 거래에 있어 상호 인증이 되지 않아 재 인증을 받아야 하는 등 국제 신뢰도 저하와 국부 유출의 문제를 가져왔습니다. 이에 13개 법정의무인증마크를 국가통합인증마크 하나로 통합하였습니다.(‘11.1) K와 C를 하…

    standard.go.kr

    국가표준인증 통합정보시스템에 의하면 KC마크를 받아야 하는 대상이 적혀 있는데, “책”이 포함될만한 항목이 없어 보여서 좀 흥미로웠다. “어린이제품 안전 특별법”에 저촉될 수 있어서 인증을 받은 것인가. 대체 대통령 당선자에 대한 책이 어린이의 안전에 위해를 가할 우려가 있다는 생각을 누가 했을까. 이런저런 생각이 드는 부분이었다.

    음, 그건 그렇고 이 책이 어린이들에게 권장할만한 책인가?하는 점에 대해서는 여러가지로 논란이 있을 것 같은데, 개인적으로는 별로 추천하고 싶지는 않다. “어린 왕자”가 이 책보다 더 유익하고 재미있기 때문이다. 이 책 읽을 시간에 “어린 왕자”를 두 페이지 정도 더 읽는 것이 어린이의 인생에 도움이 될 것이라고 본다.

    그리고 사실 그보다, 아이가 이 책을 읽은 다음 “이 책에 나오는 사람이 테레비전에 나오는 저 사람이야?”라고 물어봤을 때, 할 말이 마땅치 않다면 굳이 읽으라고 할 필요가 없을 것 같다.

    대통령 선거가 끝난 직후 타이밍 좋게 나온 책이라 여러모로 잘 팔릴 것 같긴 하다. 나같은 사람도 사서 읽어보고 말이다.

    이건 여담인데, 박근혜 전 대통령을 탈탈 털어서 구속시키고 탄핵에 이르는데 결정적인 역할을 한 윤석열이 대통령에 당선된 이후, 문재인 대통령에 의해 사면을 받은 박근혜에게 가서 미안하다고 하면서 대통령 취임식에 초청했다는 사실은 안 적혀있다. 개정판에는 그 내용도 적혀있기를 바란다.

    정정: 어린이용 동화책 등에도 KC인증을 받도록 되어 있다고 합니다. 저도 이번에 처음 알았습니다.

    https://www.korea.kr/news/policyNewsView.do?newsId=148756164

    새학기 학용품 구입할 때 이런 점 주의하세요!

    [전국] 중학생이 되는 아이가 화려하고 반짝이는 표지의 디자인 노트만 골라 구매한다. 아이가 갖고 싶어하는 가방 색깔은 예쁜데 약품 냄새가 나서 구매할 지 고민중이다. 서울 시내 한 대형마트의 문구코너. 새학기를 앞두고 아이들의 학용품을 준비하기 위해 모인 학부모들의 발길로 문구코너는 요즘 연일 분주하다. 아이들의 입학을 앞둔 주부 미경 씨와 지혜 씨도 그

    www.korea.kr

    https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bookmoacom&logNo=220974118401

    어린이 동화책 KC인증 어떻게 대응하나

    5월 가족의 달! 어린이날을 앞두고 어린이 관련 책 제작에 대한 문의가 많다. 그러다보니 2017년부터 시행…

    m.blog.naver.com

  • #ボクノユビサキ(#나의 손끝)

    今がふんばり時なら 지금이 버틸 때라면
    覚悟を決めて行こう 각오하고 나가자
    この道を 이 길을

    誰だって強くなりたい 누구든지 강해지고싶어
    それが出来りゃ苦労はしないさ 그렇게 할 수 있다면 고생이 아니지
    憧れに 追いつけなくて 바라는데도 따라가지 못해서
    自分で自分を追い詰めている 스스로 자신을 밀어붙이고 있어

    勝ったものが正義なら 승리한 쪽이 정의라면
    負けた夢はどこへ行くのか 패배한 꿈은 어디로 가는걸까

    砕け散った祈りだって 기도가 이뤄지지 않아도
    よく見りゃ散り際 잘 보면 뿔뿔이 흩어져
    道しるべ置いてく 길표지가 되어가지

    力を込めて握った拳開いて 힘껏 쥐고 있던 주먹을 펴고
    やっと君と手をつなげた 겨우 너와 손을 잡았어
    僕の指先は 君の 나의 손끝은 너의
    涙をぬぐうために使いたい 눈물을 닦아줄 때 쓰고 싶어

    今がふんばり時なら 지금이 버틸 때라면
    四の五の言わず 이런저런 말 하지 말고
    さっさと行きつけるとこまで 어디든지 빨리 가자고
    心合わせ進もう 마음을 모아 나가보자
    もう一人じゃないから 더이상 혼자가 아니니까
    今一人じゃないから 이제 혼자가 아니니까

    襲い来る破壊衝動 덮쳐오는 파괴충동
    えぐり暴かれる心の闇 도려낼 수 없는 난폭한 마음의 어둠
    ぬぐえない自己否定の波 벗어날 수 없는 자기부정의 파동
    自分で自分を偽っている 스스로 자신을 속이고 있어

    ほっといてよ、ほっとけない 내버려둬, 놔둘 수 없어
    心の涙が見えるから 마음에 눈물이 보이니까

    誰だって泣きたい夜は 누구든지 울고싶은 밤에는
    繰り返し、訪れ 계속해서 찾아갈거야
    涙も浚うよ 눈물도 괜찮아

    力ずくでは開かない心開いて 있는 힘껏 닫힌 마음을 열었더니
    やっと君の魂が見えたよ 겨우 너의 영혼이 보인거야
    僕の両手は いつだって 내 양손은 언제나
    君の肩をそっと抱きしめたい 너의 어깨를 살짝 끌어안아주고 싶어

    ここがふんばり時なら 여기가 버텨야 할 때라면
    ちょっと辛いけど 조금 힘들더라도
    きっぱりと出口を探そう 착실히 출구를 찾아가자
    迷ったって行けるさ 헤메더라도 가는거야
    もう暗闇じゃないから 더이상 어둡지만은 않으니까

    孤独の美徳 고독의 미덕
    ねじれた愛情 부서진 애정
    高圧的な正義 강압적인 정의
    氷漬けの思春期 얼음같은 사춘기
    憑依合体 빙의합체
    ありったけの勇気 말뿐인 용기
    切り刻まれたぬくもり 새겨진 따스함
    許された非道 허락받은 지독함
    行き場の無い怒り 갈곳 없는 분노
    底なしの恨み 바닥없는 슬픔
    ベストプレイス 베스트 플레이스
    必死過ぎる弱さ 필사적인 약함
    秘めた勇気 감춰진 용기
    切り捨てた感情 버려진 성격
    閉じ込めた遠吠え 닫힌 뒷담화
    真実の眼差し 진실의 눈빛
    まねごとの行き先 흉내낼 뿐인 이 길
    痛みの矛先 아픔의 창끝
    冷たい煉獄 차가운 연옥
    1000年の約束 천년의 약속
    それでもやめない 그래도 그만두지 않아
    あきらめない心 포기하지 않는 마음
    今すぐ逃げ帰れ 지금 도망쳐서 돌아와

    力を込めて握った拳開いて 힘껏 쥐었던 주먹을 펼치고
    やっと君と手をつなげた 겨우 너와 손을 잡았어
    僕の指先は 君の 나의 손끝은 너의
    涙をぬぐうために使いたい 눈물을 닦아줄 때 쓰고싶어

    力ずくでは開かない心開いて 있는 힘껏 닫힌 마음을 열었더니
    やっと君の魂が見えたよ 겨우 너의 영혼이 보인거야
    僕の両手は いつだって 나의 양손은 언제나
    君の肩をそっと抱きしめたい 너의 어깨를 살짝 끌어안아주고 싶어

    ここがふんばり時なら 여기가 힘내야 하는 때라면
    ちょっと辛いけど 조금 힘들어도
    きっぱりと出口を探そう 착실히 출구를 찾아가자
    迷ったって行けるさ 헤메더라도 가는거야
    もう暗闇じゃないから 더이상 어둡지만은 않으니까
    光は差してるから 빛이 비출테니까