자기가 쓰고 있는 프로그래밍 언어에서 로그 함수의 밑이 어떤 것인지 모를 때에는 원하는 밑수에 로그값을 취해서 사용하려는 로그 함수를 나눠주면 좋다.

by snowall 2016. 4. 7. 15:57
#!/usr/bin/env python
# -*- coding: CP949 -*-
#
# generated by wxGlade 0.7.2 on Tue Apr 05 01:49:01 2016
#
# This is a converting program from thorlabs powermeter datafile taken from thorlab official data acquisition program to radius vs power after fiber taper process.
# IF you want to use this program for your own purpose except learning python and programming, you have to ask me licence policy and copyright.
# snowall@kaist.ac.kr / snowall@gmail.com / Keehwan Nam, Physics department, KAIST. 2016.
#
import wx

# begin wxGlade: dependencies
import gettext
# end wxGlade

# begin wxGlade: extracode
# end wxGlade
import numpy as np
import os
import re
import sys

import struct

f= open('sample.png', 'rb')

w, h = struct.unpack('>LL', f.read()[16:24])
displaysizeX = int(w)
displaysizeY = int(h)
f.close()
reload(sys)
sys.setdefaultencoding('cp949')
#~ displaysizeX=1280
#~ displaysizeY=1024
x,y=0,0
a=0
b=0
c=0
sec=0
minute=0
hours=0
msec=0
class MyDialog(wx.Dialog):
    x00=0
    y00=0
    def __init__(self, parent, id, title):
        wx.Dialog.__init__(self, parent, id, title, size=(displaysizeX,displaysizeY))
        self.canvas = wx.StaticBitmap(self, -1, wx.Bitmap("sample.png", wx.BITMAP_TYPE_ANY))
        self.canvas.Bind(wx.EVT_LEFT_DOWN, self.positionnow)
    
    def positionnow(self, event):
        self.x00=wx.MouseEvent.GetX(event)
        self.y00=wx.MouseEvent.GetY(event)
        print((wx.MouseEvent.GetX(event),wx.MouseEvent.GetY(event)))
        
    def drawTick(self, pl):
        self.mydc = wx.MemoryDC()
        self.canvas2 = wx.Bitmap("sample.png", wx.BITMAP_TYPE_ANY)
        self.mydc.SelectObject(self.canvas2)
        self.mypen=wx.Pen(wx.Colour(255,0,0),5)
        self.mypen.SetWidth(1)
        self.mydc.SetPen(self.mypen)
        self.mydc.DrawLines(pl)
        self.mydc.SelectObject(wx.NullBitmap)
        self.canvas.SetBitmap(self.canvas2)
        self.mydc = None
        self.canvas = wx.StaticBitmap(self, -1, self.canvas2)
        return
        
    def graphroutine(self, myf):
        self.convertedData=[]
        self.pointlist=[]
        src=open(myf, "r")
        src.readline()
        d=src.readline()
        a=d.split(" ")
        self.mini=np.inf
        self.maxi=0.
        while True:
            d=src.readline()
            if d=="":
                break
            a=d.split(" ")
            msec=float(((a[1]).split("."))[1])*0.001
            sec=float(a[2].split(":")[2].split("\t")[0])
            minute=float((a[2]).split(":")[1])*60.
            hours=float((a[2]).split(":")[0])*3600.
            self.time=msec+sec+minute+hours
            self.convertedData+=[[self.time,float(a[2].split(":")[2].split("\t")[1])]]
            if self.convertedData[-1][1]<self.mini:
                self.mini=self.convertedData[-1][1]
            if self.convertedData[-1][1]>self.maxi:
                self.maxi=self.convertedData[-1][1]
        self.time0=self.convertedData[0][0]
        self.time1=self.convertedData[-1][0]
        self.timescale=displaysizeX/(self.time1-self.time0)
        self.vertscale=displaysizeY/(self.maxi-self.mini)
        for cd in self.convertedData:
            self.pointlist+=[[np.ceil((cd[0]-self.time0)*self.timescale),displaysizeY-np.ceil((cd[1]-self.mini)*self.vertscale)]]
        self.drawTick(self.pointlist)
        src.flush()
        src.close()
        return
        
    def findV(self,no):
        logfile=open("log.csv","r")
        try:
            while True:
                d=logfile.readline()
                if d=="":
                    break
                a=d.split(",")
                if a[0]==str(no):
                    logfile.close()
                    return a
        except:
            logfile.close()
            return "0"

    def inverse_ratio(self,logdata):
        return np.sqrt(((2.*float(logdata[15]))-float(logdata[14]))/((2.*float(logdata[15]))+float(logdata[14])))
        
    def converting(self,f):
        self.time0=(self.x00/self.timescale)+self.time0
        tar=open(f[:-4]+"_processed.txt", "w")
        errorlist=open("errorlist.txt","a")
        plot=open(f[:-4]+".gpl", "w")
        shotnumber=re.search("\d+",f.split("\\")[-1]).group()
        expcondition=self.findV(shotnumber)
        shotlog=self.inverse_ratio(expcondition)
        try:
            for cd in self.convertedData:
                tar.writelines(str(cd[0])+"\t"+str(cd[1])+"\t"+str(float(expcondition[9])*np.power(shotlog,(cd[0]-self.time0)/(float(expcondition[11])/float(expcondition[15]))))+"\t"+str(cd[1])+"\n")
            plot.writelines("set logscale x\nplot \""+(f.split("\\")[-1])[:-4]+"_processed.txt\" using 3:4 w l ")
        except:
            errorlist.writelines(f+"\n")
            print "error"
        finally:
            tar.flush()
            tar.close()
            plot.flush()
            plot.close()
        
class MainPlotFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MainPlotFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.dig = wx.FileDialog(None, message="Choose data files", style = wx.FD_MULTIPLE)
        self.dia = MyDialog(self, -1, 'Close after click!')
        self.__set_properties()
        self.__do_layout()
        if self.dig.ShowModal() == wx.ID_OK:
            for fn in self.dig.GetPaths():
                self.dia.graphroutine(fn)
                self.dia.ShowModal()
                self.dia.converting(fn)
        self.Close()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MainPlotFrame.__set_properties
        self.SetTitle(("frame_1"))
        self.SetSize((displaysizeX, displaysizeY))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MainPlotFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(sizer_1)
        self.Layout()
        # end wxGlade
            
# end of class MainPlotFrame
if __name__ == "__main__":
    app = wx.App(0)
    #~ wx.InitAllImageHandlers()
    frame_main = MainPlotFrame(None, -1, "")
    frame_main.Show()
    app.MainLoop()


by snowall 2016. 4. 6. 17:54

#!/usr/bin/env python
# -*- coding: CP949 -*-
#
# generated by wxGlade 0.7.2 on Tue Apr 05 01:49:01 2016
#

import wx

# begin wxGlade: dependencies
import gettext
# end wxGlade

# begin wxGlade: extracode
# end wxGlade


class MainPlotFrame(wx.Frame):
    canvas = 1
  
    x00=0
    y00=0
    def __init__(self, *args, **kwds):
        # begin wxGlade: MainPlotFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.canvas = wx.StaticBitmap(self, -1, wx.Bitmap("sample.png", wx.BITMAP_TYPE_ANY))
        self.canvas.Bind(wx.EVT_LEFT_DOWN, self.positionnow)
      
        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MainPlotFrame.__set_properties
        self.SetTitle(("frame_1"))
        self.SetSize((1024, 768))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MainPlotFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(sizer_1)
        self.Layout()
        # end wxGlade

    def positionnow(self, event):
        self.x00=wx.MouseEvent.GetX(event)
        self.y00=wx.MouseEvent.GetY(event)
        print((wx.MouseEvent.GetX(event),wx.MouseEvent.GetY(event)))
        self.drawTick(self.x00,self.y00,self.x00+100,self.y00-30)
    def drawTick(self, x0, y0, x1, y1):
        self.mydc = wx.MemoryDC()
        frame_main.canvas2 = wx.Bitmap("sample.png", wx.BITMAP_TYPE_ANY)
        self.mydc.SelectObject(self.canvas2)
        self.mydc.SetPen(wx.Pen(self.colorDecision(),1))

        self.mydc.DrawLine(x0, y0, x1, y1)
        self.mydc.SelectObject(wx.NullBitmap)
        self.canvas.SetBitmap(self.canvas2)
        self.mydc = None
        self.canvas = wx.StaticBitmap(self, -1, self.canvas2)
        return 0
      
    def colorDecision(self):
        return wx.Colour(255, 0,0)      
      
  
# end of class MainPlotFrame
# end of class MainPlotFrame
if __name__ == "__main__":
    app = wx.App(0)
    #~ wx.InitAllImageHandlers()
    frame_main = MainPlotFrame(None, -1, "")
    frame_main.Show()
    app.MainLoop()


--

언젠가는 써먹겠지...


by snowall 2016. 4. 5. 03:06

몇년만인지 잘 모르겠지만 아무튼 선거철이다.


우리동네 국회의원 후보들의 정책과 공약을 살펴보자.

1. 이재선

새누리당이다. 대표 공약은 여고 신설, 박물관 건립, 도서관 건립 등등이 있다.

공약과 정책을 보니 딱히 깔만한 내용은 없다. 박범계 후보랑 비교해 보자.


2. 박범계

더불어민주당이다.

흥미로운건 1번에 이재선 후보가 "명품도서관 건립"을 내걸었는데, 현 국회의원이기도 한 박범계 후보의 대표 업적에 월평도서관 신축예산 확보가 있다. 월평도서관이 명품이 아니라는 건가.

아무튼. 이재선 후보에는 정부대전청사의 빈 땅을 대전시로 이관시킨다는 내용이 있는데, 박범계 후보에는 정부대전청사를 확장한다는 내용이 있다. 이게 "에코, 스마트 푸른 서구"라는 항목 밑에 있는데 환경친화적이거나 똘똘한 서구와 어떤 관계가 있는지는 모르겠지만 아무튼 정책이 충돌한다.

이재선 후보의 공약에는 도서관 신설이 하나 있는데, 박범계 후보의 공약에는 "월평도서관 완공"에 붙여서 탄방 어린이 도서관과 만년 어린이 도서관 신설이 추가로 있다.

거대 정당 국회의원 후보들이 앞다투어 도서관 신설을 공약으로 내거는 걸 보니 아무래도 이 동네는 책읽기를 정말 좋아하는 것 같다.

그리고 여고 신설 추진은 박범계 후보 공약에도 있다. 대전에 여아가 그렇게 많이 태어난 걸까...


3. 이동규

국민의당 후보다.

8대 공약으로 간결하게 정리했다.

1- 지방대학생을 국비유학생 선발하여 외국 유학을 보낸다. 지방대 졸업생의 10%를 국비 유학생으로 보낸다고 한다. 전국 대학생이 약 300만명이다.

http://biz.heraldcorp.com/view.php?ud=20150827000557

그럼 대학은 대략 4년제이므로 대략 1년에 80만명 정도가 졸업하고, 그중 10%를 선발하면 8만명이다. 지방대학이라고 했으니 서울 빼고 그 절반이라고 치자. 연간 4만명이다. 해외 유학을 국비 장학생으로 보내는 사업이면 전액 장학금이어야 한다.

http://blogkorea.collegetuitioncompare.com/2013/07/us-graduate-school-master-course-tuition-cost.html

대충 미국 대학의 석사과정 학비가 연간 2천만원 정도 들어간다. 뭐 생활비 포함해서 그렇게 든다고 치자. 4만명한테 2천만원씩 주면 8천억원 정도 예산이 들어간다. 대충 퉁 쳐서 1조원이라고 추산하자.

http://www.moe.go.kr/web/100026/ko/board/view.do?bbsId=294&encodeYn=N&pageSize=10&currentPage=0&boardSeq=56778&mode=view

교육부 1년 예산이 대충 55조원이고, 그중 10조원이 고등교육 예산이다. 근데 그중 1조원을 4만명한테 쓴다고 한다. 그럼 나머지 296만명이 9조원으로 혜택을 받아야 한다는 소리다. 과연 이런 정책을 대학생들이 좋아할 것인가.


2 - 초등학생들을 단기 해외 어학연수를 보내는데, 이걸 의무적으로 시행한다.

외국인 앞에서 영어로 말 한마디 못하는 현실에서 세계화 시대에 뒤처질 수 밖에 없다며 이런 정책을 제안했다. 예산은 뭐 그렇다 치고 (이것도 대충 1조원 정도 들겠지.) 문제의 핵심을 잘못 짚었다. 외국인 앞에서 영어를 못하는 건 어학연수를 안 다녀와서 그런게 아니라 영어 교육이 잘못되어서 그렇다. 어학연수를 간다면 외국에서 한국어를 쓸 일이 없는 환경에서 살아야 하는데, 초등학생들을 보호자 없이 보내는 것도 문제고, 보호자가 있으면 한국어를 쓸 일이 있으니 영어가 기대한만큼 늘지 않는다. 초등학생들을 단체로 외국으로 보내는데 다 떼어서 보낼 수도 없고, 무리지어 보낸다면 얘들이 영어로 처음 보는 외국인이랑 놀까? 지들끼리 놀겠지.

그리고 영어를 못하는게 세계화에 방해가 되는 것이 아니다. 한국의 세계화에 방해가 되는건 세계에 중요한 언어가 영어밖에 없다고 생각하는 사람들이다.


3 - 어린이 재활병원의 전국 광역시도별 구축.

국립으로 하고 진료비와 입원비 등을 저렴하게 한다면 좋은 정책이다.


4 - 국가유공자와 직계후손에 대한 복지후생 강화

이것도 물론 제대로 시행된다면 반대할 이유가 없는 정책이다.


5 - 서구 분구 추진

이건 잘 모르겠다. 서구에서 둔산구가 따로 떨어져 나온다면 행정 서비스가 좋아지긴 하겠지.


6 - 국세 10% 선납제도 시행

국세를 미리 받아서 연금공단을 설립한다는데, 연금공단을 설립하는 건 국세의 사용처를 정하는 것이므로 선납과는 무관하다. 선납한 국세를 연금공단 설립에 다 퍼붓겠다는 건가. 뭔가 이상한 정책이다.


7 - 출입국 간소화 및 국적취득 간소화

다양한 해외인재 흡수를 목표로 한다는데, 과연 해외의 '인재'들이 헬조선에 이민을 올 것인가. 올 수도 있겠지. 국내의 인재들도 탈조선을 꿈꾸는 이 현실에서.


8 - 남북통일

일개 국회의원이 할 수 없는 일이다. 대통령 공약이면 모를까.


4. 김윤기

정의당이다.

국회의원 연봉을 절반으로 줄이고 특권을 없앤다고 한다. 특권을 없애는건 좋은데, 연봉을 절반으로 줄이면 뇌물 수수가 더 늘지 않을까. 물론 그렇다고 지금 뇌물을 안 받는건 아니겠지만.

대충 공약 내용을 보니 뭔가 꿈같은 소리가 많다. 좋긴 한데 좋기만 한 것 같진 않다.

서민의 삶 속에서 성장했다는 부분은 믿음직스럽긴 하다.


비례대표들...


몇가지 흥미로운 사례가 있다.

더불어민주당에는 물리학 전공자가 비례대표 7번 문미옥 후보가 있다. 국민의당에는 물리학 전공자가 비례대표 1번, 2번으로 두명이나 있다. 신용현 후보와 오세정 후보다.

국민의당 대표가 인맥이 인맥이다보니 비례대표들이 거의 다 박사급이다.

새누리당은 물리학과는 없고, 화학과 박사가 한명 있다. (보니까 공학 박사는 많다.)

개혁국민신당이라는 정당이 있는데, 대표가 선거공보를 활용해서 자기 회사 광고를 하고 있다. 마케팅 천재인 것 같다.

정의당, 노동당, 녹색당은 대충 맘에는 든다. 민중연합당은 민주노동당의 후신이라고 한다.

친반연합당은 과연 반기문 UN사무총장이 당원일까 궁금하다. 만약 당원이라면 그건 그거다로 더 무섭지만.


by snowall 2016. 4. 3. 00:01

오래간만에 퓔 받아서 몇가지 미래 예측을 적어둔다.

무선 조종 드론

요즘들어 드론이 유행하고 있는데, 아마 드론은 조만간 유해조수와 반려동물처럼 다뤄질 것이다. 즉, 허가받은 구역에서 등록된 드론의 비행은 자유롭게 허락하지만, 등록되지 않은 드론이나 비행금지구역에서 하는 드론의 비행은 격추시켜도 재산권 침해를 배상받지 못하는 형태가 될 것이다. 등록된 드론과 등록되지 않은 드론의 구분은 아마 드론마다 유심칩을 심어고 무선신호를 발신하도록 사용하는 형태가 될 것이다. 적어도 한국에서는, 그리고 세계의 수많은 도시에는 휴대전화망이 이미 가설되어 있다. 그리고 드론이 날아다니면 안되는 위험한 구역은 대체로 사람이 많이 사는 구역이다. 그리고 등록된 드론에는 반드시 배터리가 떨어지는 경우 근처의 충전 스테이션으로 돌아가서 강제로 충천후에 다시 비행을 시작하도록 하는 기능이 들어갈 것이고. 참고로 등록된 드론을 구분하는 무선신호는 스마트폰 앱과 연동되어서 드론을 조종하는데 같이 사용될 것이다. 한국이라면 스마트폰이 없으면 국민이 아니니까 이런식으로 등록을 하더라도 별 문제가 없을 것이다.

사물인터넷

현재 IPv6로 충분한 수의 주소를 보유하고 있다.(물론 이것도 언젠가 부족할지도 모르지만.) 사물인터넷이 강력해지는 경우는 인터넷에 연결된 그 사물이 자신의 위치를 알고 있는 경우이다. 적어도 다른 사물과의 관계로부터 자신의 위치를 추정할 수 있다면, 그 위치 정보와, 사물에 내장된 센서 또는 기능을 연동해서 다양한 일들을 할 수 있다. 사람을 편리하게 한다면 집 주인의 생활패턴에 맞춰서, 또는 집 주인의 이동 경로를 따라서 항상 일정한 밝기를 유지하는 자동 조명이 있을 것이다. 물론 이건 유치한 사례이고, 좀 더 발전적인 아이디어를 내 본다면, 사물인터넷이 발달하는 경우 사람의 주거가 아무런 제한이 없게 된다. 지금 일부 회사에서 이루어지고 있는 스마트 오피스의 사례가 있는데, 회사에 출근해서 어느 자리든 앉아서 자신의 랩탑을 꺼내서 일을 한다거나, 자리에 있는 콘솔에 접속해서 업무를 처리할 수 있다. 기분 따라 창가에, 복도쪽에, 옥상에, 3층에, 어디든 앉아도 된다. 물론 아가씨 옆자리에 앉을 수 있을지도 모른다. 그러나 이제 사물인터넷이 더 발달하면 고정된 주거지가 크게 의미가 없게 될 수 있다. 한 개인이 자신의 취향, 장식, 실내 온도, 조도, 이런것들을 태그에 들고 다니면, 또는 생체 인식으로 확인시켜줄 수 있게 되면, 주거 구역의 아무 빈 집이나 들어가서 로그인하면 된다. 그럼 그 즉시 자신이 익숙한 환경으로 변한다. 집안 구조는 다를 수도 있지만 장식, 온도, 조도 등이 익숙하므로 크게 어색하지 않다. 1인 가구가 늘어나면서 이런 유형의 주거지가 보급될 것이다. 만약 여러 사람이 같이 있는 가족이 들어온다면 그 자리에서 벽을 없애고 두 집을 합쳐서 큰 한채로 개조하는, 변신하는 집이 보급될 수도 있다. 음, 그럼 출퇴근은 어떻게 하냐고? 출근할 때와 퇴근할 때의 집이 다른데 어떻게 하는가? 사람은 자기가 어디에 살고있는지 신경쓸 필요가 없다. 무인자동차에 타서 "퇴근"을 입력하기만 하면, 가족들이 기다리고 있는 "집"으로 가게 된다. 그 집이 내가 어젯밤에 잤던 집이냐 아니냐는 중요하지 않다. 익숙한 환경에 반가운 가족들이 있으면 되는거지.

어딘가 여행을 가더라도 거주지 예약이 필요 없다. 충분한 수량의 빈 집들을 공급해두면, 그냥 빈 집에 들어가서 쉬면 된다. 이 모든 비용은 은행에서 생체인식과 태그를 통해 자동으로 지출될 것이다.

이런 시대가 되면 뭐가 무섭냐면, 노숙자는 진짜(!) 갈데가 없다는 것이다. 통장에 돈이 없으면 아무 빈집도 못 들어갈테니까. 복지정책은 뭐 이런 노숙자들이 무료로 집을 쓸 수 있도록 할 수도 있겠지만. 빈 집이라고 해도 공짜로 들어가서 자면 불법이다. (절도?!)

인공지능

요새 알파고가 바둑으로 이세돌을 이기면서 인공지능이 뜨고 있는데 사실 문제는 인공지능이 얼마나 발전하느냐가 아니라 인간이 얼마나 인공지능에 의존하느냐다. 지금도 네비게이션의 안내를 따르지 않으면 아무데도 못가는 운전자들이 많이 늘어나고 있다. (참고로 난 차에 네비게이션이 아예 없다.) 인간이 인간의 존엄성을 지키기 위해서는 인공지능이 추천하는 어떤 제안을 그대로 받아들이는 것이 아니라 인간의 기준에서 다시 한번 생각하고 가치판단을 해야 한다. 예를 들어 최근에 마이크로소프트의 어떤 인공지능 채팅 봇이 인종차별적인 발언을 했다가 망했는데, 잘 생각해보면 우리가 인공지능에게 너무 감정이입을 하고 있다는 사실을 알 수 있다. 이것은 마치 개가 짖었다고 인종차별로 욕하는 것과 비슷하다. 차이점은 우리는 개소리를 알아들을 수 없지만, 우연찮게도 인공지능 채팅봇이 내뱉은 말은 알아들을 수 있다는 점이다. 인공지능이 인종차별적인 발언을 한 것이 문제가 아니고, 인공지능에게 그런 유형의 가치판단을 맡겼을 때 기계적으로 받아들일 것이 아니라 인간이 다시 판단해서 인간의 가치관에 맞는지 살펴보아야 한다. 일본에서 개발한 어떤 컴퓨터 프로그램이 소설을 쓴다고 하는데, 기계가 소설을 쓰는게 문제가 아니다. 기계가 소설을 심사하게 되는 상황이 문제다. 인간이 인간의 존엄성을 지키고 싶다면 판단을 인간이 능동적으로 해야 한다. 이세돌과 알파고의 대결에서 아자 황이 알파고의 착수를 참고만 하고 두기는 자기 맘대로 두었다면 그것은 알파고와 이세돌의 대결이 아닌 아자 황과 이세돌의 대결이 되었을 것이다. 인공지능은 보조적 역할이었을 것이고.

하지만 미래는 항상 바보들의 것이었고, 그 바보들은 아마 인공지능에게 수많은 판단을 맡길 것이다. 그 판단이 기계적인 일이라면, 가령 비가 내리는데 세차를 해야 하느냐, 운석이 우주에서 떨어지는데 어떻게 요격해야 하느냐, 그런 수준의 일이라면 인공지능이 올바른 판단을 할 것이고 믿고 맡겨도 될 것이다. 하지만 범죄의 심판과 같은 윤리적 문제는 최종적으로 인간이 주체적으로 판단해야 한다. 이게 안되면 인간은 기계에게 지배당하는 것이다. 기계가 지배하는 세상이, 설마 터미네이터나 매트릭스처럼 인간을 억압하고 뭔가 인간에게 괴로운 것을 강요하는 세상이라고 생각하는가? 틀렸다. 기계가 지배하는 세상은 인간에게 매우 행복하고 만족스러울 것이다. 뭐가 문제냐고? 그게 문제다. 등따시고 배부른데 뭔가 이상하다는 것.

인간을 지배하는 권력자들도 인간을 지배하는 일이 귀찮을 수 있다. 돈을 아무리 벌어봐야 할 수 있는 것은 제한되어 있다. 가고싶은 곳을 마음껏 다니고, 먹고싶은걸 마음껏 먹고, 애인을 마음껏 만들고, 다 할 수 있겠지. 하지만 가고싶은곳을 간다고 해도 멀리 가봐야 달나라, 먹고싶은걸 먹어봐야 한끼에 1인분이다. 애인을 아무리 많이 만들어도 하룻밤에 몇 명이상은 안된다. 이 얘기는 내가 한게 아니라 수천년 전에 장자가 먼저 했던 이야기이다. 인간을 지배하는 것은 사실 매우 귀찮고 번거로운 일이다. 그렇다면 어떻게 할 것인가. 바로 이걸 기계에게 맡긴다. 인간은 기계를 지배하고, 기계는 인간을 지배하는 세상. 기계가 권력자의 속성을 그대로 받아서 지배한다면, 아마 그 밑에서 지배당하는 인간들은 뭔가 이상하다는 느낌이 들지만, 그냥 적당히 먹고살만 하므로 대충 살지 않을까.

수십년 안에 그렇게 될 것이다. 한가지 장점이라면 그 결과 제 3차 세계대전은 일어나지 않을 것이라는 점이다. (왜일까? ㅎㅎ)

사회 변화

당신이 느끼는 사회는, 세상은 별로 변하지 않을 것이다. 스마트폰이 등장하기 전에도, 컴퓨터가 나타나기 전에도, 전기가 발명되기 전에도, 그 전에도, 그 이전에도, 사람들은 나름대로 편하게 잘 살아왔다. 사회의 계급 구조는 계급을 나누는 기준은 변해왔어도 계급 구조 그 자체는 없어지지 않았고, 계급에 매여있는 사람들은 그 계급 안에서 적당히 만족하고 적당히 살아가는 법을 배우며 적당히 버티며 살아왔다. 하지만 드론이 날아다니고, 컴퓨터가 지배하고, 사물인터넷이 온 사방에 깔린 사회는 오히려 취약하다. 사람들은 지금보다 인터넷 여론에 더 신경쓰게 된다. 사람과 사람의 대면은 아마 직장에서 만나는 직장 동료와 학교 친구 정도가 될 것이고, 어떤 식으로든지 길거리에서 만나는 사람은 없어질 것이다.

인터넷 여론은 어느 강력한 권력자가 통제할 수 없다는 점에서 더 무섭다. 중앙 권력자가 있는 경우, 언론은 그의 입김을 무시할 수 없다. 물론 언론의 존재 가치와 존재 의미는 그 권력자의 권력을 견제하고 부조리를 고발하는 것에서 있는 것이지만, 현실 세계에서의 그 어떤 언론도 권력의 입김에서 자유롭지 못하다. 하지만 인터넷 여론은 세상을 살고 있는 대다수의 관점이 반영된다는 점에서 언론과 다르다. 언론을 장악하고 싶은 경우 권력자는 언론사의 간부와 임원진을 통제하면 된다. 즉, 계층 구조이기 때문에 상층부를 제어하면 그 아래도 같이 움직인다. 하지만 인터넷 여론은 그 상층부가 없으므로 통제할 방법이 없다. 통제를 한다면 인터넷 전체를 끊어야 하는데 그럼 더욱 더 큰 혼란이 올 것이다. 그러므로 권력자는 인터넷 여론의 강력한 힘을 알지만 통제할 수 없어서 괴로워한다. 좋은거 아니냐고? 인터넷 여론은 그 무엇도 통제할 수 없지만, 그 강력한 힘을 결집시키는 일은 매우 쉽다.

대다수의 사람들은 타인의 고통에 무관심하거나, 아니면 대체로 그냥 외면하고 살아간다. 하지만 그것이 자신의 일이 되고, 자기 주변 사람들의 일이 되면 목소리를 내기 시작한다. 바로 여기에 개입할 수 있다. 사람들은 자기가 불만이 쌓였을 때 목소리를 낸다. 따라서 사람들을 움직이게 하려면 불만이 생기게 만들면 된다. 불만은 어떤식으로든 만들게 할 수 있다. 사물인터넷의 세계에서는 더욱 간단하다. 사물인터넷이 센서만 있는 것이 아니라 조절기, 스위치가 깉이 있는 경우, 이 조절기와 스위치는 분명 그 주인의 지시에 따라야 한다. 하지만 미묘하게 오차가 생겨서 불만이 생기게 한다면?

내가 걱정하는 부분은 사물인터넷 해킹이다. 사물인터넷은 아마 폭발적으로 보급될 것이다. 값싼 센서와 통신칩이 조만간 출시될 것이고, 그럼 전 세계의, 적어도 대도시 급의 동네에는 전부 보급된다. 모든 곳에서 경쟁적으로 도입하겠지. 사물 인터넷 보안은 반드시 뚫린다. 뚫기는게 문제가 아니라, 너무 많은 사람들이 뚫을 수 있다는 것이 문제다. 사물인터넷은 분명 여기저기에 설치된다. 그럼 여기는 이 집단에 뚫리고, 저기는 저 집단에 뚫리고. 큰 세력이 만들어지는게 아니라 작은 세력들이 서로 충돌한다.

어쟀든.

결과적으로 사람들은 그냥 아무생각없이 편하게 살아갈 것이다. 점점 왜 사는지 잘 모르게 될 것이고. 아마 이런 생각 자체가 귀찮아질 것이다. 기술의 발전은 인간에게 매우 행복한 미래를 안겨줄 것이다. 아무 걱정없이 살 수 있는 행복한 미래를 안겨줄 것이다. 그리고 아무 걱정 없이 살다 못해 아무 생각 없이 살게 되는. 자신의 미래와, 자신의 꿈과, 자신의 죽음도 생각하지 않게 되는 그런 행복한 미래를 가져다 줄 것이다.

어떤가?

by snowall 2016. 3. 26. 04:27
| 1 2 3 4 5 6 7 ··· 715 |