20대 초반에 스페인어를 공부한 적이 있었다. 사실 공부라고 하기에는 좀 이상한데 뭐라고 딱히 표현할 말이 없다. 방식은 간단했다. 기초 회화 교재를 사서 책은 하나도 안 보고 테이프만 (그 때는 외국어 교재에 CD나 mp3가 아니라 테이프가 있었다) 계속해서 듣고 또 들었다. '아기들은 태어나서 아무 것도 모르는데도 듣고 또 듣다 보니 말을 배우잖아? 그러면 나도 무작정 계속 외국어를 들으면 그 말을 하게 되겠지'라는 생각에서였다.

 

반 년 동안인가 그렇게 테이프를 들었다. 하루에도 몇 시간씩 들었다. 그랬더니 테이프가 저절로 외워지기 시작했다. 아직도 알파벳은 대충 생각이 난다. 아 베 쎄 체 데 에 에페 헤 아체 이 호따 까... 저것도 알파벳이라고 알고서 들은 게 아니라 테이프에서 알파베또라고 하면서 말하길래 대충 어림짐작으로 알파벳인가보다 했던 것.

 

지금은 까먹었지만 대화도 저절로 외워졌었다. 물론 무슨 뜻인지는 전혀 알지 못했다. 그러던 어느 날 고등학교 후배와 연락이 닿았는데 어쩌다 보니 스페인어 이야기가 나왔다. 그 후배는 내 기억에 스페인 문화원이었던 것 같은데 어쨌든 어디에선가 체계적으로 스페인어 수업을 받고 있었다. 그 때 내가 무슨 생각으로 그랬는지는 모르겠는데 나도 스페인어를 공부하고 있다고 말을 해버렸고, 갑자기 그 후배가 스페인어로 말을 걸었다.

 

어? 뜻은 모르겠지만 내가 테이프에서 들었던 말이었다. 그래서 테이프의 그 다음 말로 내가 대답을 했다. 그랬더니 후배가 뭐라고 또 말을 했는데 그것도 테이프에 있던 말이었다. 그래서 나는 또 테이프대로 대답을 했다. 그렇게 네 번 정도 말(?)이 오간 후에 스페인어 대화(?)는 끝이 났다. 나에게는 참 신기한 경험이었다. 지금 생각해보면 아마도 영어로 치면 하우 알 유? 아임 파인 땡큐 앤 유? 뭐 이런 대화이지 않았을까 싶다. 그러니 내가 들었던 초급 회화 교재하고 대화가 똑같이 흘러갔겠지. 나는 아직도 내가 무슨 말을 했는지 모른다. 그런데 그 후배는 어땠을까? 아마도 내가 기초 스페인어 회화를 할 줄 안다고 생각했을 거다.

시간이 흘러 아마도 대학교에서 컴퓨터공학을 복수전공하게 된 뒤에 '중국어 방'이라는 사고 실험을 알게 되었다. 인공지능에 관한 이야기인데 내용은 이렇다. 방 안에 중국어를 전혀 모르는 사람을 들어가게 하고 모든 중국어 문장에 대한 대답이 적혀 있는 책을 준다. 그런 뒤에 중국어를 할 줄 아는 사람을 불러와서 방 밖에서 종이에 글을 적어서 방 안에 넣게 한다. 그러면 방 안에 있는 사람은 자기가 가진 책에서 그 글을 찾은 뒤 대답을 적어서 방 밖으로 보낸다. 그런 식으로 필담을 계속 나눈다고 했을 때에 방 안에 있는 사람은 중국어를 전혀 모르지만 방 밖에 있는 사람은 그 사실을 알 수 없다는 이야기이다. 그러니 어떤 프로그램이 튜링 테스트를 통과해도, 즉 컴퓨터가 채팅에서 사람을 감쪽같이 속이더라도 그것을 인공지능이라고 말할 수는 없다는 것이 요지이다.

내 스페인어 대화 경험과 비슷하다. 나는 20대 초반의 시도를 통해 나도 모르는 새에, 비록 스페인어를 배우는 데에는 실패하긴 했지만 유명한 사고실험을 직접 해 보았던 것이다.

'중국어 방'에 중국어에 대한 지능이 있다고 봐야 하는지 말아야 하는지에 대해 학자들 간에 많은 토론이 있었던 것으로 안다. 토론이 있었다는 것은 다른 말로 하면 저 '중국어 방'이 중국어를 할 줄 안다고 봐야 한다는 의견이 많이 있었다는 말이다. 하지만 나는 분명히 말할 수 있다. '중국어 방'에는 중국어에 대한 지능이 없다. 왜냐하면 내가 바로 저것과 똑같은 방식으로 스페인어로 대화를 했지만 나는 스페인어를 전혀 이해하고 있지 못했으니까. 그 사실을 너무나도 잘 아니까. 내가 무슨 말을 하는지 나 스스로가 몰랐으니까.

이 글의 초안을 썼던 것이 2016년 알파고 대국 즈음인데, 그 후 8년간 인공지능은 상상할 수 없을 정도로 발전했다. 이젠 인공지능이 글을 쓰고 그림을 그리는 것이 너무나도 당연한 시대가 되었다. 그런데, 인공지능이 글을 쓴다고 해서 인공지능에게 참으로 지능이 있다고 말할 수 있을까? 혹은, 인공지능이 그림을 그려낸다고 해서 인공지능을 예술가라고 할 수 있을까? 사람 입장에서는 인공지능이 그린 그림을 보면서 충분히 아름다움을 느끼고 감동을 받을 수 있고, 그 그림을 예술이라고 말할 수도 있다. 내가 궁금한 것은 "인공지능이 예술을 한다"라고 말할 수 있는지이다. 풀밭에 핀 꽃을 보고서 내가 "와 이건 예술이다!"라고 할 수는 있지만, 그렇다고 해서 그 꽃을 예술가라고 부를 수 있는 것은 아니니까.

지금까지 방식의 인공지능이라면, 즉 뭔가 많이 복잡하고 계산이 빠를 뿐 사실 작동 원리 자체는 알고리즘일 뿐인 인공지능이라면 나는 그 인공지능에게 진짜로 지능이 있다고도, 그 인공지능 자체를 예술가라고 부르지도 못하겠다. 전기밥솥이 밥을 잘 하고 오븐이 피자를 잘 굽는다고 해서 전기밥솥과 오븐이 요리사는 아니니까. 촘스키가 그런 말을 했다고 한다. "만약 잠수함이 수영을 한다고 말할 수 있다면 로봇도 생각을 한다고 말할 수 있겠다." 적어도 내가 보기에는 잠수함이 하는 건 수영은 아니다.

결국 인공지능에게 참 지능이 있는지, 인공지능을 예술가라고 부를 수 있을지는 목적이 있는지로 판단할 수 있겠다는 생각이 든다. 내가 비록 스페인어로 대화를 하긴 했지만 내가 하고 싶은 말을 한 게 아니라 외운 것을 따라 한 것 뿐이기에 나에게는 스페인어에 대한 지능이 없는 것이고, 인공지능이 훌륭한 그림을 그려낸다고 해서 그 인공지능이 예술가인 것은 아니다. 인공지능이 목적을 갖고 어떤 일을 하기 전까지 인공지능은 그저 주어진 알고리즘에 따라 엄청 빨리 계산할 줄 아는 계산기에 불과할 것이다. 목적을 가지려면 당연히 자아라는 개념이 있어야 하는데, 자아를 가진 인공지능이 과연 나올까? 나온다면 언제쯤 나올까? 아니, 그에 앞서 자아라는 건 과연 무엇일까?

'글쓰기 > 수필' 카테고리의 다른 글

부르던 노래가 남아서  (1) 2024.11.13
머지되지 못한 커밋  (0) 2024.09.13
펄 쓰던 개발자의 회상  (0) 2022.08.23
이어령 선생님의 부고를 듣고  (2) 2022.02.27
리을 이야기  (2) 2022.01.10

초등학생 때 읽던 동화책에 이런 내용이 있었다.

어느 날 저녁에 아이가 창 밖으로 아빠의 노래소리를 듣는다. 아빠가 퇴근하고 집에 오셨구나 했는데 그 노랫소리는 저 멀리 멀어져간다. 아빠가 아니고 다른 사람이구나 하고 아이는 생각했다. 한 30분쯤 후 아빠가 집에 오셨다. 아이는 아빠에게 "아빠! 아까 아빠랑 목소리가 엄청 비슷한 사람이 노래를 부르면서 갔어요." 라고 말한다. 그러자 아빠는 그게 자기였다고 한다. 어리둥절해하는 아이에게 아빠가 설명해준다. "부르던 노래가 남아서 마저 부르고 왔단다."

당시에는 아무리 읽고 또 읽어도 도저히 무슨 소리인지 모르겠어서 결국 이해하는 걸 포기하고 다음 이야기로 넘어갔었다. 단어나 문장이 이해가지 않는 것이 아니라 도대체 왜 노래가 남았다고 더 부르고 오는지, 그게 무슨 의미를 갖는 것인지가 아무리 생각을 해 봐도 이해가 되지 않았었다.

오늘 초저녁에 나갔다가 밤에 들어오면서 노래를 흥얼거리는데 아파트 입구에 도착했는데도 노래가 남았다. 정확히는 간주와 2절이 남았다. 그래서 더 걸었다. 이어폰도 스피커도 없었지만 고등학생 때 윈앰프로 수도 없이 들었던 노래의 간주는 머릿속에서 저절로 재생이 되었다. 그렇게 들리지 않는 간주를 다 듣고, 남은 2절을 마저 부르고 집으로 들어갔다.

어떤 이야기는 이해하는 데에 생각이 아니라 인생이 필요할 때가 있다. 초등학생 때 읽었던 그 동화가 바로 그랬다. 30년이 걸렸다. 동화 하나를 이해하는 데에, 그리고 도대체 노래가 남았다는 것은 무엇이고 그 남은 노래는 왜 마저 불러야 하는지를 깨닫는, 아니, 느끼는 데에.

'글쓰기 > 수필' 카테고리의 다른 글

스페인어, 중국어 방, 인공지능  (1) 2024.11.18
머지되지 못한 커밋  (0) 2024.09.13
펄 쓰던 개발자의 회상  (0) 2022.08.23
이어령 선생님의 부고를 듣고  (2) 2022.02.27
리을 이야기  (2) 2022.01.10

회사의 주인은 주주이지만 소속감을 느끼는 것은 직원이듯, 회사에서 작성한 코드의 주인은 회사이지만 그 코드에 애착을 느끼는 것은 개발자이다. 특히나 그 코드가 30대의 내 인생의 2년 3개월을 오롯이 바쳐서 만든 코드라면 더더욱.

개발자로 일을 하다 보면 코드 전달이라는 걸 하게 될 때가 있다. 일종의 인수인계인데, 최신 코드를 설명문과 함께 전달하고 필요에 따라 코드 설명회를 여는 과정이다. 코드를 전달받는 대상은 회사 내부의 다른 직원일 수도 있고 아니면 협력사가 될 수도 있다. 내가 얼마나 오랫동안 정성을 쏟아서 만든 코드이든 나에게는 가타부타할 권리가 없다. 회사에서 작성한 모든 코드는 회사의 것이고, 그걸 다 알고 계약서에 서명을 하고 입사했으니. 모든 절차를 마치고 태연한 척 '싱숭생숭해 할 필요 없어. 우리는 다 프로잖아?' 하는 허세 가득한 마음을 속으로 먹어 주면 모든 과정은 끝이 나게 된다.

그렇지만, 조선 시대에 유씨 부인이 바늘이 부러지자 슬픔을 금할 길이 없어 조침문(弔針文)을 지었다면, 나도 이제 내 손을 떠나가게 된 코드를 위해 글 한 토막은 쓸 수 있지 않을까. 유씨 부인은 17년 간 사용했던 바늘이 부러지는 순간 정신이 아득하고 마음을 빻아 내는 듯 해서 기색 혼절하였다고 하는데, 나야 그 정도는 아니지만 어쨌든 무언가 마음 속이 허한 것은 막을 길이 없다.

하지만 보내줄 땐 보내주어야 한다. 언제가 붙잡아야 할 때이고 언제가 보내주어야 할 때인지 사람은 본능적으로 안다. 보내주어야 할 때는 아쉬움이나 미련이 없게 충분히 슬퍼하고 애타한 뒤 깔끔하게 보내주어야 한다. 유씨 부인도 부러진 바늘을 대장간에 가져가면 왜 못 고치겠냐마는 '동네 장인에게 때이련들 어찌 능히 때일손가' 라며 마음을 정리하고 바늘을 고이 보내주었듯, 나도 이젠 코드를 보내줄 때가 되었다. 기실 바늘이나 코드는 자기가 어떻게 되었는지도 모른다. 괜히 바늘 주인이, 코드 개발자가 슬퍼하는 것이지. 아직 못다한 리팩토링이, 마음에 들지 않아서 바꾸고 싶었던 변수명이, 별도 브랜치에 작성까지 했으나 결국 메인에 머지되지 못한 커밋이 머릿속에, 그리고 마음 속에 자꾸 맴돈다. 이럴 줄 알았으면 수많은 코드 사이 어딘가에 이스터 에그 하나쯤 남겨놓을걸, 하는 큰 허전함을 뒤로 하고 마지막으로 아쉬우니 괜히 git pull 한 번 하고 너를 보낼게. 가서도 잘 컴파일되고 지내야 한다. 라이브러리 의존성 안 맞는다고 심술내면서 에러 내뱉지 말고. 건강히 착하게 잘 지내렴. 나는 이제 exit 할게. 안녕.

 

'글쓰기 > 수필' 카테고리의 다른 글

스페인어, 중국어 방, 인공지능  (1) 2024.11.18
부르던 노래가 남아서  (1) 2024.11.13
펄 쓰던 개발자의 회상  (0) 2022.08.23
이어령 선생님의 부고를 듣고  (2) 2022.02.27
리을 이야기  (2) 2022.01.10

ImportError: cannot import name 'Self' from 'typing_extensions'

 

위와 같은 에러가 발생할 경우 다음 명령어를 사용하시면 해결됩니다.

 

pip install typing-extensions --upgrade

 

( 참조한 곳: https://github.com/python-openxml/python-docx/issues/1337 )

[EXIF Tag] 구글 포토에서 인식 가능하도록 날짜 정보 갱신하기

 

사진 및 동영상 파일의 EXIF 태그에는 여러 항목이 있는데, 구글 포토는 이 중 DateTimeOriginal 태그를 인식하여 사진이 찍힌 날짜를 추정합니다. 그래서 해당 태그가 아닌 다른 태그에 날짜가 저장된 파일의 경우 구글 포토에서 엉뚱한 날짜를 인식하는 경우가 종종 있습니다. 이를 방지하기 위해서는 exiftool 이라는 프로그램을 사용하여 다음과 같이 처리하면 됩니다. Exiftool은 https://exiftool.org/ 에서 다운받으실 수 있습니다.

 

아래 명령어를 순서대로 입력하면 됩니다. 명령어의 의미는 다음과 같습니다. 명령어 뒤의 /path/to/photos/ 는 사진이 있는 디렉토리의 경로입니다.

(1) DateTimeOriginal 태그가 없으면 FileModifyDate의 값을 DateTimeOriginal에 저장합니다.
(2) (1)의 내용을 K3G 파일에도 적용합니다.
(3) PNG 파일의 경우, DateTimeOriginal 태그가 있으면 그 값을 FileModifyDate에 저장합니다. 이 때 PNG 파일은 조금 특별해서, EXIF:DateTimeOriginal의 값을 가져와야 합니다.

(4)(5)(6) GIF, MP4, MOV 파일에 대해서, DateTimeOriginal 태그가 있으면 그 값을 FileModifyDate에 저장합니다.

 

exiftool -if 'not $DateTimeOriginal' -overwrite_original_in_place '-DateTimeOriginal<FileModifyDate' -r /path/to/photos/

exiftool -if 'not $DateTimeOriginal' -overwrite_original_in_place '-DateTimeOriginal<FileModifyDate' -r -ext k3g /path/to/photos/ 

exiftool -if '$DateTimeOriginal' -overwrite_original_in_place '-FileModifyDate<EXIF:DateTimeOriginal' -r -ext png /path/to/photos/ 

exiftool -if '$DateTimeOriginal' -overwrite_original_in_place '-FileModifyDate<DateTimeOriginal' -r -ext gif /path/to/photos/ 

exiftool -if '$DateTimeOriginal' -overwrite_original_in_place '-FileModifyDate<DateTimeOriginal' -r -ext mp4 /path/to/photos/ 

exiftool -if '$DateTimeOriginal' -overwrite_original_in_place '-FileModifyDate<DateTimeOriginal' -r -ext mov /path/to/photos/ 

 

 

한편 예전 핸드폰인 Cyon과 Optimus, 그리고 VK의 경우 추가로 해 주어야 하는 작업들이 있습니다. 먼저 Cyon과 Optimus의 경우 동영상 파일을 Cyon은 MP4, Optimus는 3GP로 저장하는데, 이 경우 MediaCreateDate 태그가 존재하기 때문에 그 값을 DateTimeOriginal과 FileModifyDate 으로 복사해오면 됩니다.

 

exiftool -if '$MediaCreateDate' -overwrite_original_in_place '-DateTimeOriginal<MediaCreateDate' -r -ext mp4 /path/to/photos/ 

exiftool -if '$MediaCreateDate' -overwrite_original_in_place '-FileModifyDate<MediaCreateDate' -r -ext mp4 /path/to/photos/ 

exiftool -if '$MediaCreateDate' -overwrite_original_in_place '-DateTimeOriginal<MediaCreateDate' -r -ext 3gp /path/to/photos/ 

exiftool -if '$MediaCreateDate' -overwrite_original_in_place '-FileModifyDate<MediaCreateDate' -r -ext 3gp /path/to/photos/ 



그리고 VK 핸드폰의 경우 FileModifyDate 태그조차 사진을 찍은 날짜가 아니라 파일을 컴퓨터에 저장한 날짜로 되어있기 때문에 다음과 같이 파일명에서 날짜를 추출해야 합니다.

 

rename s/P-/20/g ./*.*

exiftool -if 'not $DateTimeOriginal' -overwrite_original_in_place '-DateTimeOriginal<Filename' -r /path/to/photos/

exiftool -if '$DateTimeOriginal' -overwrite_original_in_place '-FileModifyDate<DateTimeOriginal' -r /path/to/photos/ 

 

 

[맥] 예기치 않은 오류가 발생했기 때문에 작업을 완료할 수 없습니다(오류 코드 -50).

 

[맥] 예기치 않은 오류가 발생했기 때문에 작업을 완료할 수 없습니다(오류 코드 -50).

 

이 오류는 파일 복사나 이동 중 파일명 혹은 파일 전체 경로가 너무 길어서 발생하는 오류입니다.

 

예를 들어 [ /Users/MyName/Desktop/안녕하세요_이_파일_이름이_너무_길어서_복사가_잘_안_될것_같지만_그래도_복사를_해_보려_하는데_과연_잘_될지_모르겠네요_복사가_잘_되도록_응원해주시면_정말로_감사하겠습니다.txt ] 같이 이름이 너무 긴 파일을 복사할 때 해당 오류가 발생할 수 있습니다.

 

파일명을 짧게 바꿔주시면 해결됩니다.

리눅스에서는 명령행에서 Home 키를 누르면 현재 명령의 맨 앞 글자로, End 키를 누르면 맨 뒤 글자로 커서를 옮길 수 있는데 맥에서는 그게 안 됩니다. 맥에서는 다음 단축키를 사용하면 됩니다. Ctrl은 컨트롤 키입니다 (커맨드 키가 아닙니다).

 

명령행 맨 앞 글자로 가기: Ctrl + A

명령행 맨 뒤 글자로 가기: Ctrl + E

f3을 사용하여 SD카드 및 USB 불량 여부 확인하기

 

집에서 사용하던 SD 카드가 있었는데 어느 순간부터 읽기가 잘 안 되었습니다. 수명이 다 하면 쓰기가 안 되는 경우는 예전에 본 적이 있는데 이번 SD 카드는 쓰기는 되고 읽기가 안 되었습니다. 어떻게 하면 불량 여부를 검사할 수 있을지 알아보다가 f3이라는 프로그램을 알게 되었습니다. f3은 Fight Flash Fraud의 약자로 "가짜 플래시 메모리와 싸우자" 정도의 뜻입니다. 공식 웹사이트는 https://fight-flash-fraud.readthedocs.io/ 이고 깃허브 주소는 https://github.com/AltraMayor/f3 입니다. 설치 방법은 웹사이트를 참조하시면 되는데, 리눅스나 맥 환경에서 설치 가능하고 윈도에서는 도커를 사용하면 됩니다.

 

설치가 끝나면 f3write를 통해 SD 카드 혹은 USB에 테스트용 데이터를 쓰고, 그 후 f3read를 통해 데이터를 잘 읽을 수 있는지 검사하면 됩니다. 먼저 f3write를 통해 다음과 같이 제 SD 카드를 검사하였습니다. /Volumes/my_sd_card 에는 SD 카드가 마운트 된 위치를 써 주시면 됩니다. 제 SD 카드는 32 GB 짜리이고 쓰기 속도는 평균 16.52 MB/s 라고 합니다. 일단 쓰기는 잘 되었습니다.

 

주의!! SD 카드에 테스트용 데이터를 쓰게 되므로 기존에 있던 데이터가 삭제될 수 있으니 기존 데이터를 일단 백업해놓은 뒤에 테스트하세요.

$ f3write /Volumes/my_sd_card
F3 write 8.0
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

Free space: 31.23 GB
Creating file 1.h2w ... OK!
Creating file 2.h2w ... OK!
Creating file 3.h2w ... OK!
Creating file 4.h2w ... OK!
Creating file 5.h2w ... OK!
Creating file 6.h2w ... OK!
Creating file 7.h2w ... OK!
Creating file 8.h2w ... OK!
Creating file 9.h2w ... OK!
Creating file 10.h2w ... OK!
Creating file 11.h2w ... OK!
Creating file 12.h2w ... OK!
Creating file 13.h2w ... OK!
Creating file 14.h2w ... OK!
Creating file 15.h2w ... OK!
Creating file 16.h2w ... OK!
Creating file 17.h2w ... OK!
Creating file 18.h2w ... OK!
Creating file 19.h2w ... OK!
Creating file 20.h2w ... OK!
Creating file 21.h2w ... OK!
Creating file 22.h2w ... OK!
Creating file 23.h2w ... OK!
Creating file 24.h2w ... OK!
Creating file 25.h2w ... OK!
Creating file 26.h2w ... OK!
Creating file 27.h2w ... OK!
Creating file 28.h2w ... OK!
Creating file 29.h2w ... OK!
Creating file 30.h2w ... OK!
Creating file 31.h2w ... OK!
Creating file 32.h2w ... OK!
Free space: 576.00 KB
Average writing speed: 16.52 MB/s
$

 

이제 읽기를 테스트할 차례입니다. 다음과 같이 f3read를 사용합니다. 왼쪽에서 오른쪽으로 ok / corrupted / changed / overwritten 이라고 되어 있는데, 정상 SD 카드라면 ok를 뺀 나머지 칸은 다 0이어야 합니다. 제 SD 카드의 경우는 7번째 구간까지는 정상적이나 8번째 구간부터 데이터가 망가져 있는 것을 볼 수 있습니다. 테스트가 끝나면 요약을 해 주는데 이 SD 카드는 전체 32 GB 중 7.48 GB 만 정상이고 나머지는 고장난 카드입니다. 버려야겠습니다.

$ f3read /Volumes/my_sd_card
F3 read 8.0
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

                  SECTORS      ok/corrupted/changed/overwritten
Validating file 1.h2w ... 2097152/        0/      0/      0
Validating file 2.h2w ... 2097152/        0/      0/      0
Validating file 3.h2w ... 2097152/        0/      0/      0
Validating file 4.h2w ... 2097152/        0/      0/      0
Validating file 5.h2w ... 2097152/        0/      0/      0
Validating file 6.h2w ... 2097152/        0/      0/      0
Validating file 7.h2w ... 2097152/        0/      0/      0
Validating file 8.h2w ... 1009269/  1087883/      0/      0
Validating file 9.h2w ...       0/  2097152/      0/      0
Validating file 10.h2w ...       0/  2097152/      0/      0
Validating file 11.h2w ...       0/  2097152/      0/      0
Validating file 12.h2w ...       0/  2097152/      0/      0
Validating file 13.h2w ...       0/  2097152/      0/      0
Validating file 14.h2w ...       0/  2097152/      0/      0
Validating file 15.h2w ...       0/  2097152/      0/      0
Validating file 16.h2w ...    2880/  2094272/      0/      0
Validating file 17.h2w ...       0/  2097152/      0/      0
Validating file 18.h2w ...       0/  2097152/      0/      0
Validating file 19.h2w ...       0/  2097152/      0/      0
Validating file 20.h2w ...       0/  2097152/      0/      0
Validating file 21.h2w ...       0/  2097152/      0/      0
Validating file 22.h2w ...       0/  2097152/      0/      0
Validating file 23.h2w ...       0/  2097152/      0/      0
Validating file 24.h2w ...       0/  2097152/      0/      0
Validating file 25.h2w ...       0/  2097152/      0/      0
Validating file 26.h2w ...       0/  2097152/      0/      0
Validating file 27.h2w ...       0/  2097152/      0/      0
Validating file 28.h2w ...       0/  2097152/      0/      0
Validating file 29.h2w ...       0/  2097152/      0/      0
Validating file 30.h2w ...       0/  2097152/      0/      0
Validating file 31.h2w ...       0/  2097152/      0/      0
Validating file 32.h2w ...     640/   488961/      0/      0

  Data OK: 7.48 GB (15692853 sectors)
Data LOST: 23.75 GB (49808460 sectors)
	       Corrupted: 23.75 GB (49808460 sectors)
	Slightly changed: 0.00 Byte (0 sectors)
	     Overwritten: 0.00 Byte (0 sectors)
Average reading speed: 0.00 Byte/s
$

 

유용한 내용이었으면 하트모양 공감을 눌러주세요!

[리눅스] The following packages have been kept back 원인과 해결 방법

 

우분투에서 sudo apt-get upgrade 실행 시 다음과 같은 메시지가 나오면서 업그레이드가 안 되는 경우가 종종 있습니다.

$ sudo apt-get upgrade

The following packages have been kept back:
  dkms ubuntu-advantage-tools
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

$

 

이는 기존에 설치되어 있던 프로그램 중에서 의존성이 변경된 경우가 있어서 업그레이드를 위해서는 기존에 컴퓨터에 설치되어 있지 않던 프로그램을 새로 설치해야 할 경우에 나타나는 경고 메시지입니다. 위 예제의 경우 dkmsubuntu-advantage-tools를 업그레이드 하기 위해서는 기존에 없던 프로그램들을 새로 설치해야 하기 때문에 경고만 해 주고 업그레이드를 실행하지 않은 것입니다.

 

이런 경우 새롭게 필요한 프로그램들을 추가로 설치하면서 apt-get upgrade를 실행하려면 다음과 같이 --with-new-pkgs 옵션을 주면 됩니다. 말 그대로 '새로운 패키지와 함께 (with new packages)' 업그레이드를 진행하라는 옵션입니다. 해당 옵션을 주었더니 새롭게 dctrl-toolsubuntu-pro-client-l10n 두 종류의 프로그램을 설치하면서 dkmsubuntu-advantage-tools를 업그레이드하는 것을 볼 수 있습니다.

$ sudo apt-get --with-new-pkgs upgrade

Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  dctrl-tools ubuntu-pro-client-l10n
The following packages will be upgraded:
  dkms ubuntu-advantage-tools
2 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 349 kB of archives.
After this operation, 590 kB of additional disk space will be used.
Do you want to continue? [Y/n]

$

 

한편 이렇게까지 해도 안 되는 경우가 있다면 다음과 같이 aptitude를 설치하신 후에 aptitude를 통해 업그레이드를 진행하는 방법도 있습니다. 하지만 대부분 여기까지 오지 않아도 위의 방법으로 해결이 될 것입니다.

$ sudo apt-get install aptitude -y
$ sudo aptitude safe-upgrade

[이클립스] C/C++ Build Settings에 Tool Settings가 없을 경우 해결법

 

1. Properties -> C/C++ Build -> Settings에 가면 Tool Settings가 없는 경우가 있습니다.

2. 그럴 경우 Properties -> C/C++ Build로 가서 Makefile generation에 있는 Generate Makefiles automatically와 Expand Env. Variable Refs in Makefiles를 체크해주고 Apply and Close를 누릅니다.

3. 다시 Properties -> C/C++ Build -> Settings에 가면 Tool Settings가 나타나 있습니다.

 

 

 

 

+ Recent posts