레이블이 기술인 게시물을 표시합니다. 모든 게시물 표시
레이블이 기술인 게시물을 표시합니다. 모든 게시물 표시

2021-06-16

나의 첫 프로그래밍(?)

정확히 말하면 elisp(emacs lisp) 코드 다섯 줄(주석 제외)에 불과하지만, 나름 성취라고 할 수 있으므로, 기록 삼아 올려둡니다.

코드의 내용은 다음과 같습니다.

(defun new-file-with-date-time ()
  "날짜-시간 표기된 새 파일 만들기"
  (interactive)
  (find-file (format-time-string "~/Dropbox/txt/%y%m%d-%H%M%S.txt")))
(global-set-key (kbd "C-c C-n") 'new-file-with-date-time)
;; 날짜 시간 표기법은 이 링크를 참고 https://www.gnu.org/software/emacs/manual/html_node/elisp/Time-Parsing.html

이게 뭐 하는 거냐. 제가 글 쓸 때 쓰는 emacs라는 텍스트 에디터가 있습니다. 1976년에 만들어진, 저보다 나이가 많은 소프트웨어입니다.

구시대의 유물답게 emacs는 수많은 세팅을 자기 손으로 직접 해야 합니다. 그 단점은 반대로, 본인이 원하면 기존에 없던 기능을 써서 넣을 수도 있다는 뜻이 됩니다.

저 코드는 이런 뜻입니다. 이맥스에서 어떤 파일을 편집중이건, ctrl-c ctrl-n 을 입력하면, 210616-203308.txt 같은 이름의 새 파일이 열린다는 것입니다.

즉 저는 언제나 어느 상황에서나, '지금 이 순간'을 파일명으로 삼은 텍스트 파일을 만들고, 내용을 입력한 후, 저장할 수 있습니다. 저장 경로는 제가 텍스트 파일을 모아두는 드롭박스 내 txt 폴더.

이 '자체 확장 기능'은 세 가지 기능을 제공합니다. 1) 순간적으로 떠오르는 내용을 빨리 적어놓기 2) 메모에 고유 식별자(날짜-시간) 부여하기 3) 모바일에서도 접근 가능하게 하기(드롭박스라서 자동 싱크)

저는 프로그래밍을 따로 배워본 적이 없습니다. 단지 영어로 어떻게 어떻게 구글 검색을 좀 해보면 남들이 쓴 코드를 찾아볼 수 있고, 그걸 붙여넣어 실험해보다 보면 작동하는 결과를 얻을 수 있는 거죠.

그런 식이다보니, 솔직히 저 코드에서 (interactive)가 왜 들어가야 하는지 그 이유는 아직도 이해 못하고 있습니다. 하지만 뭐, 아무렴 어떻습니까. 제가 원하는 기능을 스스로 구현해냈으니, 그거면 된 거죠.

이런 글을 왜 쓰나 싶지만, 자랑? 기록? 뭐가 됐건 그냥 올려봅니다.

(참고로 제가 이준석의 '엑셀 시험' 어쩌구를 보고 콧방귀를 뀐 이유도 이런 겁니다. 저는 learning curve가 굉장히 가파른 고대 유물 소프트웨어를 즐겨 쓰는 사람이고, 심지어 간단한 스크립트도 짭니다. 하지만 이게 저의 '글쟁이'로서의 '능력'과 상관 있나요? 없습니다. 좋은 글쟁이는 글을 제 시간에 읽기 좋게 쓰는 사람이면 충분합니다. HWP에서 원고지 매수 확인하는 기능만 알아도 충분합니다. 이제 다시, 일하러 가야죠.)

2020-11-23

구글 블로거 블로그에 랜덤 게시물 위젯 만드는 방법

이 블로그의 오른쪽에 '랜덤 포스트'라는 위젯이 생겼습니다. 말 그대로, 이 블로그에 쌓인 포스트 중 다섯개를 임의로 불러내어 보여주는 위젯입니다.

저 기능을 추가하기 위해서는 구글 블로거의 자바스크립트 위젯 추가 기능을 이용하여, 아래 내용을 붙여넣어주면 됩니다.


<ul id='random-posts'>
<script type='text/javaScript'>
var tow_numposts=5;
var tow_snippet_length=150;
var tow_info='yes';
var tow_comment='Comments';
var tow_disable='Comments Disabled';
var tow_current=[];var tow_total_posts=0;var tow_current=new Array(tow_numposts);function totalposts(json){tow_total_posts=json.feed.openSearch$totalResults.$t}document.write('<script type=\"text/javascript\" src=\"/feeds/posts/default?alt=json-in-script&max-results=0&callback=totalposts\"><\/script>');function getvalue(){for(var i=0;i<tow_numposts;i++){var found=false;var rndValue=get_random();for(var j=0;j<tow_current.length;j++){if(tow_current[j]==rndValue){found=true;break}};if(found){i--}else{tow_current[i]=rndValue}}};function get_random(){var ranNum=1+Math.round(Math.random()*(tow_total_posts-1));return ranNum};
</script>
<script type='text/javaScript'>
function random_posts(json){for(var i=0;i<tow_numposts;i++){var entry=json.feed.entry[i];var tow_posttitle=entry.title.$t;if('content'in entry){var tow_get_snippet=entry.content.$t}else{if('summary'in entry){var tow_get_snippet=entry.summary.$t}else{var tow_get_snippet="";}};tow_get_snippet=tow_get_snippet.replace(/<[^>]*>/g,"");if(tow_get_snippet.length<tow_snippet_length){var tow_snippet=tow_get_snippet}else{tow_get_snippet=tow_get_snippet.substring(0,tow_snippet_length);var space=tow_get_snippet.lastIndexOf(" ");tow_snippet=tow_get_snippet.substring(0,space)+"…";};for(var j=0;j<entry.link.length;j++){if('thr$total'in entry){var tow_commentsNum=entry.thr$total.$t+' '+tow_comment}else{tow_commentsNum=tow_disable};if(entry.link[j].rel=='alternate'){var tow_posturl=entry.link[j].href;var tow_postdate=entry.published.$t;if('media$thumbnail'in entry){var tow_thumb=entry.media$thumbnail.url}else{tow_thumb="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieye3CdBwT9Lx1vGJeUeAMSeOXuGDPw-joza3yEQ6dNdss_DYVwclmM_ADhUAQiUYXnq5s9I7GWW9UfMIMleO3xDjILgjqd0yCT1Hlyf47dTcfMZ39ui8Fl9KRe9FvJiKz6QzfLwQTJcI/s1600/default.jpg"}}};document.write('<li>');document.write('<img alt="'+tow_posttitle+'" src="'+tow_thumb+'"/>');document.write('<div><a href="'+tow_posturl+'" rel="nofollow" title="'+tow_snippet+'">'+tow_posttitle+'</a></div>');if(tow_info=='yes'){document.write('<span>'+tow_postdate.substring(8,10)+'/'+tow_postdate.substring(5,7)+'/'+tow_postdate.substring(0,4)+' - '+tow_commentsNum)+'</span>'}document.write('<div style="clear:both"></div></li>')}};getvalue();for(var i=0;i<tow_numposts;i++){document.write('<script type=\"text/javascript\" src=\"/feeds/posts/default?alt=json-in-script&start-index='+tow_current[i]+'&max-results=1&callback=random_posts\"><\/script>')};
</script>
<p><a href="https://www.talkofweb.com/show-random-posts-with-thumbnails-in-blogger" rel="nofollow" title="Talk of web Blogger Widgets">Grab this Widget</a></p>
</ul>
<style type='text/css'>
#random-posts img{float:left;margin-right:10px;border:1px solid #999;background:#FFF;width:100px;height:100px;padding:3px}
#random-posts li{margin: 0px 0px 10px 0px;}
</style>

코드 출처: Show Random Posts with Thumbnails in Blogger

 

단, 이 코드를 그대로 붙여넣으면 1) 썸네일 이미지가 강제 표현되고 2) 게시물의 날짜가 연/월/일 이 아닌 일/월/연 순으로 표시됩니다. 그 문제의 해결 방식은 다음과 같습니다.

  1.  document.write('<img alt="'+tow_posttitle+'" src="'+tow_thumb+'"/>'); 삭제.
  2.  tow_postdate.substring(8,10)+'/'+tow_postdate.substring(5,7)+'/'+tow_postdate.substring(0,4) 를 tow_postdate.substring(0,4)+'/'+tow_postdate.substring(5,7)+'/'+tow_postdate.substring(8,10) 으로 변경.

기록 차원에서, 그리고 배운 적 없는 프로그래밍을 아주 조금이나마 해냈다는 뿌듯함을 표출하기 위해, 적어둡니다.

2020-04-18

인류를 위한 일회용품

가령, 한 여고생은 플라스틱 빨대에 대한 문제를 인식했지만, 같은 반의 친구들 중 같은 문제를 인식한 친구는 없었다. 하지만 그 학생은 E-Participation에서 같은 고민을 하고 있는 사람들을 만나게 되었고, 그 만남을 통해 통해 사실은 플라스틱 빨대를 만드는 기업들이 2~30년 전까지만 해도 단순 이익을 창출하려는 기업가가 아니라 소셜 기업가였음을 알게 되었다. 그 당시만 해도B형 간염의 바이러스가 대만의 큰 고민거리였고 , 바이러스의 전염을 막기 위해 플라스틱 식기를 만들게 되었던 것이다. 하지만 지금은 B형 간염 바이러스는 사라졌고, 당시와는 다른 새로운 사회적 문제가 생긴 것이다.

강현숙, 오주영, "[인터뷰] 대만 디지털 장관 오드리 탕 (2)", 2020년 4월 10

코로나 바이러스로 인해 ‘뉴노멀’이 도래했다는 말에 나는 쉽게 동의하기 어렵다. 이것은 ‘뉴’도 아니고 ‘노멀’도 아니기 때문이다. 인류가 생명을 위협하는 전염병의 존재를 잊고 살았던 최근 수십년간이 비정상이었을 따름이다.

투표장에서 비닐장갑을 나눠주는 것이 환경오염이라고 근심하던 분들이라던가, 스타벅스의 종이 빨대(주여…)라던가, 온갖 이슈들 속에서 문득 이런 인터뷰를 보게 되어, 재미있어서 적어두고 혼자 보기 아까워서 블로그에도 올린다.

오드리 탕: 공무원의 역할

우선 공무원이 책임져야 할 것은 세 가지이다. 첫번째는 확실성이다. 상수도와 인터넷이 끊김없이 제공되도록 하는 것도 확실성이다. 두번째는 정의와 균등함이다. 모두는 균등한 기회를 가져야 하며 사회정의가 유지되도록 노력해야한다. 세번째는 민주주의 의지에 대한 반영이다.

공무원의 역할은 민주주의 의지의 변화에 따라 함께 바뀔 것이다. 10년 뒤에는 사람들이 누군가가 대신 해주길 바라는 대신 직접적으로 민주주의적인 행동을 할 것이며 더이상 디지털 장관 같은 역할이 필요없게 될 수도 있다.

또한 머신러닝과 자동화 등이 공무원들이 하는 업무 중 ‘확실성’과 관련된 업무들을 대체할 것이다. 따라서 10년 후 공무원의 역할은 공공의 가치를 찾아 사회정의가 유지되도록 하는데 집중하게 될 것이다. 사람들 사이에 사회적 지위가 다르더라도 공유할 수 있는 공공의 가치를 구성원들이 찾아내고 관련 규범을 만드는 데는 인간의 지혜가 필요하기 때문에 이 역할은 절대 사라지지 않을 것이다.

강현숙, 오주영, "[인터뷰] 대만 디지털 장관 오드리 탕 (3)", 2020년 4월 10일.

‘디지털 시대와 공무원의 역할’이라는 주제에 있어서, 지금까지 읽어온 수많은 텍스트 가운데, 가장 탁월한 축에 속한다. 공무원이란 무엇인가? 어떤 일을 하며 왜 해야 하는가? 기술 발전에 따라 그 일은 어떻게 달라질 것이며 어떤 식으로 존속해야 하는가? 같은 질문을 품고 답을 찾기 위해 노력해온 사람이 아니면 할 수 없는 이야기.

2020-03-27

n번방과 텔레그램, 기술과 선악의 문제

특정 기술의 기반 위에서 발생하는 악을, 기술 자체의 선악 판단의 근거로 삼아서는 안 된다.

비트코인도, 텔레그램도, 기술 그 자체는 문제가 아니다. 적어도 이번 사안에서는 그렇다.

텔레그램이 특정 국가의 ‘범죄 수사’ 목적에 따라 자료를 제공하기 시작하면, 러시아 정부가 추적하는 반체제인사와 성소수자 및 인권 운동가, 대륙 중국과 홍콩의 반 시진핑 운동가들 등의 신변이 모두 위험해진다.

n번방은 의문의 여지가 없는 악이지만, 반 시진핑 반 푸틴 운동가들은 정의의 편이니까, 다른 케이스라고 말하고 싶을 것이다. 그렇게 말하는 순간, 발화자는 텔레그램이라는 일개 인터넷 메신저 서비스의 운영진에게, 누가 선이고 누가 악인지 결정할 권한을 주는 셈이 되어버린다.

n번방에 관여한 개자식들은 모두 잡아서 처벌해야 한다. 일벌백계가 아니라 백벌백계가 답이다. 그런데 그게 텔레그램의 잘못인가? 지금은 그 이용자들이 또 다른, 기밀성이 보장되는 메신저 혹은 딥웹으로 향했을 것이다. 그럼 그건 또 그 서비스의 잘못인가?

이 사안을 두고 ‘기술에 대한 인문학적/시민사회적 성찰’을 하는 모습을 보면 너무도 의아하다. 이것은 경제적, 정서적으로 취약한 여성을 대상으로 한 성착취 범죄다. 성범죄는 성범죄로 다뤄야 한다.

다른 예를 들어보자. 미국의 중산층 이상 가정에서는 어린이 청소년들의 SNS 사용을 금지 혹은 제한하는 경우가 많다. 그런데 21세기다보니 기초적인 학교 과제를 위해 다들 구글 계정은 가지고 있고, 구글 문서 등을 이용해 숙제를 한다.

그러자 학생들은 공유 구글 문서를 만들어 채팅창으로 활용하고, 당연히, 그 공간에서 사이버불링도 죽어라고 한다.

그럼 이게 구글 탓인가? 구글이 모든 사용자의 모든 문서 사용 내역을 조회하여, 사이버불링이 발생할 경우 신고해야 하나? 당신들이, 혹은 우리가 바라는 세상의 모습은 무엇인가? 우리는 그것을 어떻게 달성할 수 있는가? 어떤 댓가를 지불해야 하는가?

‘텔레그램 탈퇴 선언’ 등을 종종 보면서, 나는 우리 사회가 (넓은 의미에서 ‘서구 문명’의 일부인) 기술에 대한 알러지 반응을 전시하며 도덕적 우위를 차지하고자 하는 경향에서 아직도 자유롭지 못하다는 것을 확인한다.

쉬운 답은 없다. 하지만 ‘쉬워보이는’ 답은 있다. 신기술에 손가락질을 하는 게 바로 그것이다. 글 쓰는 사람이라면 그런 ‘쉬워보이는’ 답을 팔아먹어서는 안 된다.