낭푼이의 블로그

널리 퍼트릴만한 여러가지 이야기

Ant javac 실패한 파일목록 추출

without comments

처음에 Ant 스크립트를 이용하여 컴파일 실패 목록을 추리는 로직을 구상했을 때는 매끄럽게 잘 흘러갈 줄 알았다.

아마도 javac 속성중에 수행 결과를 property나 file로 내보내는 속성이 있으며, 그것만 잘 파싱하면 되는 줄 알았는데, Ant자체의 기능보다는  javac의 근본적인 제약 사항 때문에 끝내 어찌 어찌 작성은 했지만, 그닥 매끄럽지 않은 과정이었다.

컴파일 실패 발생 시 성공한 잔여 class파일 생성여부
javavc 수행 결과는 각각 컴파일러 마다 다르다. sun 컴파일러인 경우, java파일 하나라도 실패하면, 아예 class파일을 하나도 생성하지 않는다.(여기 참조)
타 컴파일러들도 마찬가지 인지 모르겠지만,(이제 더 이상 개발이 중지된 오픈소스 컴파일러인) jikes경우 컴파일 실패한 파일을 제외한 나머지 성공파일의 class를 생성한다.

record 타스크 사용
javac는 exec나  java 타스크처럼 타스크 수행 결과를 별도의 property나 file로 내보내는 기능이 없다. 따라서 실패 파일을 추출할 로그 파일을 생성할려면 record 타스크를 사용해야 한다.
하기 예제에서 javac의 수행결과는 record타스크에서 지정된 파일에 기록되는데, Ant 내부적으로 record 타스크의 PrintStream은 finshed이벤트 (buildFinished, targetFinished and taskFinished)때 flush되며,  buildFinished 이벤트 때 close된다.(Ant Recrod 타스크)
이는 record 타스크가 들어가 있는 타겟(target)  수행 중간에 예기치 못한 종료가 발생하면, record의 buffer에 있는 마지막 내용이 파일에 기록이 안 될 수 있음을 의미한다.  (그래서 record만 별도의 타겟에서 구현을 권장한다.) 웹에서 검색해 보면, taskfinished가 발생하지 않아 buffer에 남아 있는 내용이 파일에 안 찍히는 경우에 대한 문의를 쉽게 찾아 볼수 있다.

javac 속성
javac의 failonerror 속성은 false로 설정해야 만  javac  이후 다음 스크립트 내용으로 진행이 가능하며, 이후 단계에서 컴파일 로그를 파싱할 수 있다.
failonerror와 별도로, errorProperyt 속성을 사용하면, javac(컴파일) 실패 시 지정한 속성에 true값을 세팅하므로, 다음 단계에서 javac(컴파일) 실패 여부를 별도로 확인할 수 있다.

컴파일 에러 메세지 한도
기본적으로 javac는 컴파일 에러 메시지를 100으로 제한한다. 이 이상의 실패 메시지를 로그에 남길려면 -Xmaxerrs 1000 옵션을 주어야 한다.
javac에서는 <compilerarg line=”-Xmaxerrs 1000″/> 이처럼 사용한다.
이 옵션이 sun의 컴파일러 말고 공통적으로 적용되는 옵션인지 확인이 필요하다.

filterReader와 filterChain을 이용한 컴파일 결과 파싱
컴파일 로그 파일에서 “[javac]~~~~~*.java:1128:컴파일 실패이유 어쩌고 저쩌교.
1. containregex로 java파일 이름이 들어간 라인을 추출하고,
2.replaceregex로 해당라인에서 (경로명 포함)java파일명이외의 내용을 제거한다.
3.trim으로 앞뒤 공백들을 제거한다.
4.sortfilter를 이용 라인별로 정렬을 한 후,
5.uniqfilter로 중복된 라인을 제거하면 실패 파일 목록이 생성된다.
(6.ignoreblank는 공백라인 제거)
위에서 반드시 sortfilter를 적용한 후에, uniqfilter를 적용해야 한다. 그렇지 않으면, unique하게 중복이 되지 않는다.(두줄씩 생김)

제약 사항
한 번에 1000개 이상의 컴파일 실패가 발생하는 경우, 컴파일 실패 파일이 누락될 수 있다.
보다 근본적으로 파싱로직이 \[javac\] (.*\.java):[0-9]{1}이라 문제가 발생할 수 도 있다.
(만약에 주석에 해당 구문이 들어가 있으며 오류가 발생할 수 도 있다.)

그림1

 

Written by nangpuni

4월 18th, 2013 at 4:59 오후

K-27, 차가운 바닷속에 가라앉은 옛 소련 핵잠수함의 비극

without comments

Group of K-27 sailors (pic: Vyacheslav Mazurenko)

바셰슬라브(오른쪽에서 두번째)와 그의 K-27 승무원 동료들, 1968

러시아 당국은 차가운 바닷속 깊이 가라앉은 옛 소련 핵잠수함 K-27의 원자로를 제거하기 위해, 안정적으로 인양할 수 있는지 조사하고 있다.

냉전이 최고조에 이르렀던 1968년, K-27은 북극항해 도중 잠수함에 탑재된 원자로에서 방사능이 누출되는 재난을 겪게된다.

이제 잠수함은 북극 카라해의 깊은 바닷속에 내버려졌지만, 당시  22살의 K-27 수석 준위였던 바셰슬라브 마주렌코(Vyacheslav Mazurenko)가 그날의 일들에 대해 얘기한다.

“우리는 70여일 동안 수면위로 부상하지 않고 전 세계를 운항하는 임무를 부여받았고, 임무 수행에 앞서 사전 준비 차원에서  모든 것이 이상없는지를 확인하고 있는 중이었어요.  7일 째 되는 날, 승무원들이 많이 지쳐있었지만, 그 날도 모든 것이 순조롭게 진행되는 듯 했어요.”

핵잠수함의 임무는 NATO를 비록한 적국의 데이타를 수집하는 것이었다.  K-27은 이전  옛 소련 잠수함에서는 전혀 사용하지 않았던 2기의 액체금속 냉각 반응로를 보유하고 있었다. 핵잠수함은 재 충전없이도 수면위로 부상하지 않고 몇 주간을 바닷속에 잠수할 수 있었다.

“평화로웠던 오전 11:35분, 갑자기 격벽이 열렸어요. 당시 제5격실에 2기의 원자로가 있어고, 저는 바로 그 옆에 있는  제 4격실에서 다른 승무원과 얘기를 하고 있었죠. 그런데 갑자가 몇몇 사람들이 뛰기 시작했어요.”

우리 격실에는 방사능 감지기가 있었지만, 솔직히 방사능 감지기에 별로 관심을 기울이지 않아서 꺼놓고 있었어요. 방사능 감독관이 즉시 감지기의 스위치를 켰고, 감지기가 켜지자 마자 바로 방사능 최고 수치를 넘겼어요. 우리는 놀랐고, 걱정이 되었습니다.”

K-27 sub being towed prior to being scuttled off Novaya Zemlya, 1981

방사능의 무색 무취한 특성 때문에 승무원들은 어떤 일이 일어났는 지 곧바로 알지 못했다. 하지만 2시간 이 지난 후, 몇몇 승무원이 제 5격실에서 왔고, 그들 중 일부는 들것에 실려나갔다.

당시 3일동안 거의 잠을 자지 못하면서 작업을 한 터라, 마주렌코는 그들이 피로해서 그런 줄 알았다.  하지만 5시간  경과 후, 잠수함은 북극 바렌쯔해에서,  기지가 있는 콜라(Kola)반도로 기수를 돌렸다.

잠수함이 기지에 접근했을 때 육지에 있던 방사능 경보기는 귀청을 때리는 경고음을 발하고 있었고, 기지의 사령부는 부둣가에서 모두 싸그리 철수한 상태였다고 마주렌코 준위는 회상한다.

곧 기지 사령관이 함장을 차에 태워 실어갔지만, 대부분의 나머지 승무원들은 2Km 떨어진 막사까지 걸어가야 했다.

몇몇 특수임무를 맡은 승무원들은 계속 상황을 살피라는 명령때문에  방사능에 오염된 잠수함에 하루 이상 남아있었다.

당시 사고에 대해 어떤 이들은 함장 파벨 레오노프(Pavel Leonov)를 비난하기도 하지만, 마주렌코 준위의 생각은 다르다.

“함장은 생사를 가르는 결정에 직면하여 큰 결단을 내렸어요. 잠수함이 기지로 복귀하기 위해 수면 위로 부상하였을 당시 기지에서 내려온 명령은 일단 엔진을 멈추고 다음 명령을 기다리라는 것이었어요. 하지만 함장은 곧장 기지로 돌아가기로 결정했습니다. 몇 시간 잠수함을 멈추었다가는 기지로 돌아가는 동안 누구도 살아남을 수 있다고 장담하기가 어렵다고 생각했기 때문입니다”

144명의 승무원이 방사능에 피폭되었다.

(후략)

 

 

 

 

 

원문보기
Eyewitness:  Tragedy of Soviet nuclear submarine K-27
Russia explores old nuclear waste dumps in Arctic

Written by nangpuni

3월 29th, 2013 at 10:17 오후

Posted in English

Tagged with

Ant- property 값 변경

without comments

Ant에서 한번 값을 세팅한 property값을 변경하는 것은 불가능하다.(Properties are immutable: whoever sets a property first freezes it for the rest of the build; they are most definitely not variables.) 따라서 변수처럼 수시로 값을 변경하면서 사용할 수 없다.

이에 대한 대안으로서 antcontlib에서는 Variable Task 를 제공하고 있다. (var는 값의 변경이 가능하다)

평소에는 antcontrib의 var를 써도 되지만 어떤 특정한 상황에서는 var를 못 쓰고, property에 값을 계속 세팅하면서 사용해야 하는 경우가 있다.

이를테면 Ant에서 for등을 이용하여 loop를 돌면서 어떤 특정 Task를 수행해야 하는데, for에서 delimeter로 파싱된 각각의 값을 loop내 특정 Task의 param으로 사용하고자 하는 경우에는 var를 사용할 수 없다.
for 자체가 property에 값을 세팅하지, var에는 값을 세팅 못 하기 때문이다.

쉽게 이해하기 위해 아래 예제를 보자.
아래의 예제의 경우 ${private.list} 파일을 읽어들여, target.list.co 속성에 읽어들인 내용을 세팅한다.(읽어들일 때 filterchain이용)

읽어들이는 파일은 각  내용은 특정 디렉토리에 있는 파일들의 경로명을 라인별로 갖고있다.

각 라인별로 읽어들인 파일 경로명에서 바로 상위 디렉토리 경로명을 추출하며, 추출된 경로명으로 특정 Taks(아래 예제에서는 java)를 실행해야 하는 데, 추출된 경로를 임시로 지정할 변수 비슷한 마땅한 것이 없다.
이 경우 antcontrib의 var를 쓸 수 없는 것이, for 타스크에서 delimeter로 추출한 값을 property에 세팅은 가능하지만, var에는 세팅이 안되기 때문이다.
loop를 돌 때마다 property에 세팅된 값들은 계속 변경이 되어야 하는데, property의 immutable속성 상 이전에 세팅된 값을 변경할 수 가 없다.

그런데 이 때 알게된 놀라운 한 가지!
<scriptdef>에서 javascript를 이용하여, property에 값을 세팅했을 때는 계속 property의 값을 변경할 수 있다.

하기 예제에서  javascript는 상위 디렉토리를 추출하기 위해서 보다는 loop를 수행하면서 동적으로 property의 값을 변경하고자 하는 용도 때문에 사용한 경우이다.

 

 

Written by nangpuni

3월 29th, 2013 at 10:15 오후

앨러배마 인질극, 5세 아이 무사히 구출

without comments

범인의 집 마당안에 당국 기관원들의 차가 주차되어 있다.

앨러배마 미들랜드 시 – 5살배기 어린이를 납치해 엿새 동안 지하 벙커에서 경찰과 대치를 하던 무장 괴한이 사살되고 아이는 다친 데 없이 무사히 구조되었다고 현지 시간 월요일날 현지 당국이 전했다.

에단(Ethan)으로만 알려진 납치된 어린이가 현지 시간 오후 3:12분에 안전하게 구출되었다고 스테판 리차드슨(Stephen E. Richardson) FBI특수요원이 전했다.
65살의 은퇴한 트럭 운전기사인 지미 리 다이크(Jimmy Lee Dykes)로 알려진 범인은 현지시간으로 지난 화요일, 스쿨버스 운저사를 총으로 쏴 살해하고 아이를 납치해 자신의 집 마당 지하벙커에서 경찰과 대치해 왔다.

근 며칠동안 당국은 인질 대치극을 무사히 끝내기 위해 협상을 벌여왔지만, 구체적인 협상 내용은 밝히지 않았다. 단지 납치된 어린이가 일종의 자폐증을 앓고 있다는 것과 아이가 무사하다는 것만 공개되었다.

지역주민들은 범인이 세상을 향해 자신의 분노를 표출하고자 아이를 납치했다고 생각하고 있으며, 유관 기관들도 납치의 주요 원인으로 이점을 지목하고 있다.

당국은 벙커에 연결된 PVC파이프와 휴대폰등으로 범인관 끊임없이 얘기를 진행했다. 이름이 에단(Ethan)으로만 알려진 아이는 야스퍼거 증후군과 ADHD를 앓고 있었고, 당국은 아이를 위해 약과 음식, 그림책,장난감등을 PVC 파이프를 통해 내려보냈다.

“마지막  24시간 동안 인질협상은 악화되었고, 범인이 총을 들고 있는 게 관찰되었다.” ,”당 시점에서 FBI요원들이 아이에게 위험이 임박함을 느끼고, 벙커로 진입해 아이를 구출해 냈다.”라고 리차드슨은 말했다.

특정 시점부터 당국은 최첨단 장비를 이용하여 지하벙커안의 상황을 모니터링하고 있었고, 근처에 지하벙커와 유사한모형을 만들어 구출계획 수립 시 다양한 경우의 수에 대해 준비할 수 있도록 했다고, 구출작전의 관계자가 전했다.

월요일 오후부터 범인이 취한듯이 보였으며, 아이에 대한 위협이 커지자, 당국은 큰 폭음을 일으키는 두 개의 장비를 벙커안에 투하하고, 즉시 두세명의 FBI 인질 구조팀이을벙커로 진입시켜 아이를 구출해 내고, 범인을 사살했다. 지역 주민들이 들었다고 했던 큰 폭음은 범인이 낸 소리가 아니라 폭음탄의 소리였다.

에단은 부모와 재회했고, 안정을 취했다. “아이는 여타 5~6살 아이처럼 웃고, 먹고, 농담하고 있으며, 매우 용감했다”라고 관계자는 전했다.

지하 벙커에 부비트랩이 장착되어 있을것이라 예상되었지만, 발견된 것은 없었다. 하지만 폭발물 전문가들이 남아서 구조현장을 검증하고 있다.

인질 대치극은 현지 시간으로 저번 주 화요일 발생했다. 범인은 스쿨버스 운전사인 찰스 알버트 폴란드씨에게 자신의 마당에서 직접 가꾼 브로콜리를 주겠다며 접근하였다. 둘은 이전에 약간 알고 있던 사이로, 사건 며칠전 폴란드씨는 범인에게 집에서 만든 잼과 댤걀 선물을 준 터였다. 범인은 버스에 오르자, 폴란드씨에게 메모를 보여주며, 6~8세 아이 2명을 요구했다.

폴란드씨는 스쿨버스 후미에 있는 비상문을 열고, 아이들이 도망 칠 수 있도록 범인을 가로막아 섰다. 범인은 폴란드씨에게 4발의 총격을 가해 살해했고, 에단을 납치해 6일동안의 인질 대치극을 벌였다

아이는 구조 큰 외상은 없어 보였으며, 지역병원으로 이송되었다고 리처드슨은 얘기했다.

현장 부근의 있던 주민들은 정오에 폭발물이 터지는 것 같은 굉음이 들렸다고 했으며, 인질 대치극이 종료되어 안도하고 있다.

“우리가 기도했던 것이 이뤄졌다.”,  “우리는 기독교를 믿는 작은 지역공동체이며, 서로 이끌며, 기도하는 것이 이 비극을 이겨내게 할 것이다.” 라고 마이클 센(Michael Senn)목사는 얘기했다.

원문기사
   Boy, 5, Is Safe After Alabama Hostage Standoff

참조자료
  미국 앨러배마 6살 짜리 어린이 인질극 교착 상태

Written by nangpuni

2월 5th, 2013 at 9:39 오전

Posted in English,Pubs

Tagged with

모든 커밋은 반드시 통합서버에서 메인라인을 빌드해야 한다.(Every Commit Should Build the Mainline on an Integration Machine)

without comments

팀은 데일리 커밋을 수행하면서 테스트가 통과된 빌드를 자주 하게 되는데, 이는 메인라인이 건강한 상태에 있다는 것을 의미해야 한다. 그러나 사실 아직도 뭔가 잘못된 게 있다. 그 원인중에 하나는 숙련-사람들은 커밋을 수행하기전에 업데이트와 빌드를 하지 않는다-이며, 또 다른 원인은 개발자 머신간 환경의 차이 때문이다.

결론부터 얘기하자면 개발자들은 정기적인 빌드를 통합서버에서 수행해야 하며, 통합서버에서 수행되는 이 빌드가 성공적으로 끝나야만 커밋이 성공적으로 끝난다는 사실을 유의해야 한다. 커밋을 수행하는 개발자는 이에 대한 책임이 있으므로, 개발자는 메인라인 빌드를 모니터링하고, 에러가 나면 그것을 수정해야 한다. 이 말은 개발자가 오후 늦게 수행한 커밋에 대해 메인라인 빌드가 실패하면, 성공할 때까지 집에 못 갈 수 도 있다는 것을 의미한다.

위 사항을 장려하기 위해 내가 알고 있는 방법은 두가지다. : 수동 빌드를 하거나 CI서버를 사용하는 것이다.

“수동 빌드”개념은 단순하다. 본질적으로 수동빌드는 개발자가 저장소에 커밋하기 이전에 수행하는 로컬빌드와 유사하다. 통합서버에서 개발자가 메인라인의  (그의 최종 커밋본이 존재하는) head 를 체크 아웃하여, 통합빌드를 수행하는 것이다. 눈으로 진행사항을 보고 있다가 성공하면 커밋을 완료하는 것이다.(jim Shore의 설명을 보시길)

CI서버는 저장소에 대한 모니터 역할을 수행한다. 저장소에 커밋이 될 때마다 서버는 자동으로 소스를 통합서버에 체크아웃하여 빌드작업을 시작하고 빌드 결과를 커밋터에게 알려준다.커밋터는 (통상 이메일등으로) 빌드결과를 받기전까지는 커밋을 완료할 수 없다.

ThoughWorks의 우리들은 CI서버의 열혈팬이다. -실제로 우리는 널리 사용되는 오픈소스 CI서버인 CruiseControlCruiseControl.NET의 초기개발을 이끌었으며, 또한 우리는 이후에 그로부터 상용 Cruise CI서버를 만들게 되었다. 우리는 수행하고 있던 거의 모든 프로젝트에서 CI서버를 사용하였고, 사용 효과에 대해 만족했다.

모든 사람이 CI서버를 선호하지는 않는다. JimShor는 수동 빌드 접근법을 선호하는 이유에 대해 잘 정리된 주장을 제시한다. 나는 CI서버를 사용하는 것이, 단순하게 SW를 설치하는 것 이상의 작업을 필요로 한다는 그의 주장에 동의한다. 이글에 있는 모든 지침들은 CI가 효율적으로 진행되기 위해 제시된것 들이지만, 그와 마찬가지로 CI를 잘 하는 많은 팀들은 CI서버를 매우 유용한 툴로 생각한다.

많는 조직들이 시간 스케줄(예를 들어 밤에)에 맞추어 정기적인 빌드를 수행한다. 이것은 지속적인 빌드와 같은 의미는 아니며 지속적인 통합에는 많이 미흡하다. 전체적인 관점에서 지속적인 통합은 가능한한 문제를 빨리 찾아내자는 것이다. 야간빌드는 누군가 버그를 발견하기 전까지는 하루종일 그 버그가 미감지된 상태로 있다는 것을 의미한다. 이렇게 버그들이 시스템에 그렇게 오랫동안 존재해 있다면, 해당 버그들을 찾고 제거하는데는 오랜 시간이 걸릴것이다.

지속적인 빌드의 핵심은 메인라인 빌드가 실패하면 즉시 수정하자는것이다. CI 작업에서 주 관점은 개발자들은 항상 자신들이 잘 알고 있는 안정된 베이스에서 개발하고 있다는 것이다. 비록 사람들이 커밋하기 전에 업데이트와  로컬빌드에 주의를 기울이지 메인라인 빌드 실패가 발생지만, 메인라인 빌드가 실패하는 것은 나쁜일이 아니다. 메이라인 빌드가 실패되었을 때는 이를 빨리 수정하는 것이 중요하다. 메인라인 빌드가 깨지는 것을 회피하기 위해서 개발자들은 pending head 사용을 고려할 수 도 있다.

팀에 CI에 대한 소개를 할 때 이 점이 제일 정리하기 어려운 일중에 하나다. CI 도입 초기에 팀은 특히 그들이 기존 코드 베이스에서 작업하고 있다면, 메인라인빌드를 하는 일반적인 습관을 들이는 것이 힘들 수 있다. 그러니 실망하지 말고, 정기적으로 application에 인내와 꾸준함을 들여야만 목적을 이룰 수 있다.

메인글로 돌아가기

원문보기
Continuous Integration

본 포스트는 Martin Fowler 선생께서  쓴 글을 번역 게재한 글이다. 선생은 본인의 글을 직접 게재하는 것을 허용하지는 않지만, 번역은 허용하고 있다.
원문에도 한국어 번역글로 등록이 되어있는데, 이 글보다 몇 년 앞서 더 훌륭한 솜씨로 한글로 번역해 놓은 글이 있으니 참조하면 좋을 듯 하다. (황상철님의 실용주의이야기 의 ‘지속적인 통합‘)

Written by nangpuni

1월 31st, 2013 at 8:06 오후

미국 앨러배마 6살 짜리 어린이 인질극 교착 상태

with one comment

미국 앨러배마(Alabama)주의  한 용의자가 6살 배기 어린이를 인질로 잡고 경찰과 대치 상태에 있다.

US bomb squad on the scene of a hostage situation in Midland City, Alabama 30 January 2013

현재 범인이 어떤 요구사항을 갖고 있는지는 알려지지 않았다.

65살의 은퇴한 대형트럭 운전 기사 지미 리 다이크 (Jimmy Lee Dykes)는 그의 외딴 집 벙커에서 6살 배기 어린이를 잡고 인질극을 벌이고 있다.

사건발생 개요

현지 당국은 현지 시간 화요일 오후 미들랜드 시(Midland)에서 스쿨버스기사를 총으로 살해하고, 어린이를 납치한 사건이 발생했다고 발표했다.

목격자들에 따르면, 스쿨버스가 두명의  어린이들을 내리려고 멈추었을 때  범인은 버스문이 닫히지 않도록 버스문을 붙잡은 뒤  버스에 올라, 통로를 가로막고 저지하던  66살의 스쿨버스 운전 기사 찰스 알버트 폴란드씨(Charlse Albert Poland) 를 총기로 살해하고, 어린이를 납치했다고 전해진다.

현재 범인은 토네이도 대피 벙커 비슷한 곳에 숨어서 경찰과 대치하고 있으며, 당국은 벙커와 연결된 PVC  파이프를 통해 범인과 대화를 하고 있다. 벙커에는  전기와 음식이 있으며 어린이는 그 안에서 TV를 보고 있는 것으로 전해지고 있다. 당국은 범인의 동의하에 한 차례 어린이를 위한 의약품을 내려보냈다.

현재 범인이 어떤 요구사항을 요구하고 있는지는 알려지지 않고 있으며, 현장 인근에서 폭발물로 보이는 것이 발견되어 주변 주민들은 대피 해 있는 상태이다.

다수의 목격자에 따르면, 범인은 인질극을 위해 두명의 어린이를 납치하고자 했던 것으로 알려지고 있으며, 납치된 어린이는 범인과 어떠한 관계도 없는 것으로 알려졌다.

목격자들의 증언

현지에 거주하고 있는 마이클 크릴(Michael Creel)씨는 NBC와의 인터뷰에서 당시의 상황을 얘기했다.

“총소리를 듣고  여동생과 거리로 뛰쳐 나왔는데, 범인이 어린이를 차 밖으로 꺼내 교회 언덕쪽으로 달려가고 있었어요.”

크릴씨는 범인이 벙커속으로 들어가기전까지 그를 쫓았다.

“그는 67살이라 , 내가 그를 따라 잡을 수 있으리라  생각했지요.  그는 너비 4피트, 깊이 6피트, 길이가 8피트되는 벙커에 들어갔어요. 벙커는 3~4피트가량의 모래로 덮여있어, 언듯 보면 벙커가 존재하는지 알 수 없을 정도에요.”

크릴씨는 현장에 있던 몇몇 학생들에게서 범인이 두 명의 학생을 납치하려고 시도하다가 도망갔다는 얘기를 들었다고 얘기한다. 한 소녀는 범인이 스쿨버스 운전기사에게 6~8세 가량의 어린이를 요구했다고 말했다.

사건 직후 남은 어린이들을 근처 자신의 교회로 대피시킨 마이클 센(Michael Senn)목사는 많은 어린이들이 큰 정신적 외상(트라우마)을 입었으며, 버스에 있던 한 소녀는 운전기사는 4발을 맞았다고 얘기했다고 한다.

범인은 작년 12월 총기사고 및 이웃을 위협한 혐의로 체포된 적이 있었고, 이 건으로 수요일 법원 출두가 예정되어 있었다.

현지상황

수요일 오전 일찍부터 FBI가 사건을 이첩받아 지휘하고 있으며, FBI요원들, SWAT팀, 주방위군들이 상황에 대응하고 있다. 또한 사전 예방조치로 폭발물 대응팀도 배치되어 있는 상태다.

Law enforcement officials in bomb squad protective gear are driven to a scene of a shooting and a bunker as a standoff with a shooter continues in Midland City, Alabama January 30, 2013. (Reuters/Phil Sears)

관련 기사
Police in Alabama hostage standoff for six-year-old boy
Alabama hostage crisis enters second day, 6-year-old held in bunker

관련 포스트
앨러배마 인질극, 5세 아이 무사히 구출

Written by nangpuni

1월 31st, 2013 at 5:52 오후

Posted in English,Pubs

Ant FilterReader와 FilterChain설명

without comments

Ant의 FilterReader와 FilterChain은 Unix의 Pipe처럼 한쪽의 출력을 다른쪽의 입력으로 사용하기 위한 메커니즘으로, FilterReader로 읽어 들인것들을 FilterChain으로 묶어 다른 쪽의 입력으로 사용 할 수 있다. 

이해하기 쉽게  먼저 예제를 살펴보자.

  • 위 예제는  ${src.list}파일을 읽어들여 target.list라는 속성에 읽어들인 파일의 내용을 세팅(로딩) 하고 있는데, 이 때 target.list에 그냥 세팅을 하는게 아니라, 먼저 해당파일의 공백 라인은 건너뛰고(ignoreblank 필터리더), 역(reverse) 소팅을 해서 (sortfilter 필터리더) 읽어들인 후, target.list에 세팅을 하고 있다.
  • ignoreblank, sortfilter 두개의 필터리더가 하나의 filterchain으로 묶여 있고, loadfile Task가 이 nested element형태로 filterchain을 사용하고 있다.

Ant에서 FilterChain을 사용할 수 있는 Task는 ConcatCopyLoadFileLoadPropertiesMove 가 있으며, 각종 FilterReader들은 메뉴얼을 참조하면 된다.

아래 예제에서는 대상 디렉토리에서 복수개의 VisualStudio의 csproj파일을 복사하고 있는데, 이 때 파일을 그냥 복사하는게 아니라, 파일내의 내용을 특정 규칙에 맞추어 수정하고 복사하고 있다.

각 라인별로 “   <SccProjectName>어쩌고저쩌고</SccProjectName>“, “   <SccLocalPath>어쩌고저쩌고</SccLocalPath>“,”   <SccProvider>어쩌고저쩌고</SccProvider>“이 들어간 부분은 공백처리하고,공백으로만 되어 있는 라인은 없앤 체로 복사하도록 하고 있다.

참고로 Ant는 스크립트를  XML형식으로 표시하다 보니 xml 태그에 관련된 문자는 별도로 주의 해서 표시 해주어야 한다.
(예 < 문자를 표현 하려면 &lt; 으로 표시)

 

Written by nangpuni

1월 29th, 2013 at 7:45 오후

DARPA에서 만든 4발짜리 로봇

without comments

Darpa(Defense Advanced Research Projects Agency)에서 만들고 있다는 4발짜리 로봇
신기하다는 생각보다는 공포스럽다는 생각이 든다.-레지던트이블의 좀비 개들을 연상시킨다.
조금 신경써서 머리하나 예쁘게 만들어 얹으면 좋으련만…

Written by nangpuni

1월 10th, 2013 at 11:33 오후

Posted in Pubs

스페인 내전을 상기시키는 시리아(Syria)사태

without comments

인접국인 튀니지, 이집트, 리비아의 영향을 받아 시리아의 봉기가 발생했지만, 아랍내에서 시리아의 상황은 보다 특별하다고 Fouad Ajami는 얘기한다. 그는 시리아 내전에는 스페인 내전과 그 궤를 같이하는 생생한 것이 있다고 생각한다.

가여운 시리아 인민들. 그들은 국가의 병참고에 있는 제트 전투기-그들이 긍지를 갖고 바라보던 러시아제 미그기-가 이스라엘에 대항하기 위해 존재한다고 생각했다.

하지만 알레포(Aleppo)에 대한 공격과 이들리브(Idlib)의 폭격에서 그들은 발가벗겨진 진실을 잘 알게 되었다. 이 정권의 수립자 하페즈 알 아사드(Hafez al-Assad)가 구데타의 산실 역할을 한 공군사령관 출신인 것이 결코 우연이 아니었으며, 이 소수 정권의 우두머리는 자국내에서 전투기들을 어떻게 사용해야 할지 확실히 잘 알고 있었다.

명백한 주적 이스라엘은 항상 좋은 구실이었다. 하지만 다수의 수니파(Sunni)로 이뤄져 있고, 소수의 알라위(Alawites)파가 지배하는 이 나라는 지배자가 심판의 날을 준비하고 있다는 것을 언젠가는 깨달을 운명이었다. 독재자와 대다수 인민들간 잔혹한 총력전은 현재 진행형이다.

지난 2년간 아랍에서 일어난 봉기중에서, 시리아(Syria)의 투쟁은 별달랐다. 튀니지의 독재자 진 알 아비딘 빈 알리(Zine al-Abidine Ben Ali)가 그의 약탈품과 함께 쫗겨났고, 18일간의 놀라운 저항속에 호스니 무바라크(Hosni Mubarak)는 물러나야 했던 것을 생각할 때, 시리아의 이 봉기의 맹렬함은 다른 차원의 반란에 속한다.

시리안인들은 이러한 상황에 대해 이해해야만 했다. 그들은 견고한 정권에 도전하기 전에 시간을 가졌다. 첫번째 고무는 다른 아랍 국가들이 봉기한 후 2~3개월 후에 찾아왔다. 터키(Turkey)의 안타카야(Antakya) 변두리에 있는 난민 캠프에서, 지스르 알-슈후르(Jisr al-Shughur) -보안 기관의 잔인함을 뼈져리게 맛본 수니(Sunni) 마을- 출신 젋은 법률가는 내게 말하기를, 그는 오랜 전쟁을 치룰 각오가 되어 있으며, 2011년 봉기의 첫 여름 집을 떠날 때, 이미 겨울 옷을 챙겨 떠났다고 한다.

그는 통치자들에 대해  잘 알고 있다.-그들은 초토화 전쟁을 치룰 것이다. 그들은 소수였으며, 역사적으로 업신여김을 당했지만, 강한 힘을 갖고 있다. 그들은 다른 방법이 아닌  칼로 일어섰고, 전장에서 패배는  그들이 지난 40여년간 이룩한 세계의 종말임을 확신하고 있다.

법률가의 불길한 예감은 사실이 되었다. 정권과의 전쟁에서 수니파는 그들의 신념에서 위안을 찾으려 했다. 데라(Deraa), 하마(Hama), 홈스(Homs)등지의 시위자들은 2011년 8월 라마단의 성스러운 달에 구원이 있으리라는 혹시나 하는 희망을 버리지 않았다.

이슬람의 신앙 교리 중에, 라마단의 27번째 밤은 운명의 밤이다. 코란에는 “운명의 밤은 1000개의 달보다 더 좋다. 그 날 밤에는 신으로부터 나온 영혼과 천사들이 신의 칙령을 갖고 내려온다.”라고 써있다. 독재자에 맞서 신의 도움을 간절히 원했던 시리아인들은 라만단의 달에 정권에 심판이 내려지기를 갈구했다.

하지만 라마단이 왔다가 가버리고, 또 라마단이 되어도 정권은 계속되었고, 승기를 잡고 있었다.
리비아에서는 운명의 밤- 외국의 폭격기-이 왔지만, 시리아에는 오지 않았다.
(후략)

원문보기
  Viewpoint: Echoes of Spanish civil war in Syria

관련자료
시리아 개입을 어렵게 만드는 것들

 

Written by nangpuni

1월 10th, 2013 at 9:19 오후

Posted in English

Tagged with

3D프린터로 만든 변신로봇 – 걷고, 쏘고 ,변신하다

without comments

Brave Robotics에서 최신 공개한 변신 로봇.

헤드라이트와 Wi-Fi 무선 카메라를 장착하고, 팔에서 다트 화살 까지 발사가 되며, 이 모든 것들이 무선으로 조종된다.

Brave Robotics는 2002년 부터 로봇 프로토타입을 발표하고 있는데, 모두 자체 제작한 3D프린터를 이용해 만들고 있단다.

놀랍게도 Brave Robotics는 회사가 아니라 취미로 로봇개발을 하는 단체라 한다. (일본 단체인듯)

아래 로봇은 24,000 USD라고 하니, 우리 돈으로 대략 240만원 정도된다.

참고사이트
This 3D-printed robot walks, shoots, and transforms like an Autobot

Written by nangpuni

12월 22nd, 2012 at 6:20 오후

Posted in Pubs

Tagged with