설명이 부족한 공식 문서 때문에 실무 개발자가 궁금해할... 사실, 내가 궁금했던 내용 중 하나.


https://docs.swift.org/swift-book/ReferenceManual/Patterns.html#grammar_value-binding-pattern

Patterns — The Swift Programming Language (Swift 4.2)

docs.swift.org 


공식문서의 내용에서 쓰는 let point는 튜블 패턴이다.

그런데 튜플은 튜플대로 사용하면 되는데 굳이 switch 문에 다시 바인딩을 시키는 것이 의아하다. 왜냐면 switch 문은 다양한 case에 따라 if 문의 개수를 줄이는데 유용하고 C언어에서 어셈블리로 변화했을 때 switch case문이 다중 if문에 비해 속도가 빠르듯이 더 나은 성능을 위해 switch를 쓰는데 하나의 case문이라면 의미가 없기 때문이다.

인자 개수에 따라 처리가 가능하다면 유용할 텐데 그러지 않다. switch 문의 인자 개수는 동일해야 한다. 만약,


let point = (3, 2, 4)


switch point {

// Bind x and y to the elements of point.

case let (x, y):

print("The point is at (\(x), \(y)).")

case let (x, y, z):

print("The point is at (\(x), \(y), \(z)).")

}


이런 예제라면 에러 난다. 그러면 상수값과 섞어 쓸 때 의미가 있게 된다.



let point = (3, 2)


switch point {
// Bind x and y to the elements of point.

case (3, let y):
print("The point is at \(y).")

case (let x, 2):
print("The point is at \(x).")


default:

print("default")

}






혹은, 

let point = (3, 2)
let point 2 = (3, 8)
let points = (point, point 2)


switch points {

// Bind x and y to the elements of point.

case ((3, 2), let y):

print("The point is at \(y).")

case (let x, (0, 0)):

print("The point is at \(x).")

default:

print("default")

}


이런 식이다. swift는 break문이 필요하지 않아 상위 case에서 참이 되어 버리면 하위 case는 쓸모가 없게 되긴 하지만 튜플 패턴에서 일정 값만 거르고 해당 값을 binding 해서 쓸 때는(굳이 binding 안 하고 써도 되겠지만) 써도 된다는 뜻.


여기서 let을 var로 바꾸었을 때 바딩 된 값이 ref 값인지 copied 값인지 궁금해진다. 


let point = (3, 2)

var point 2 = (3, 8)

let points = (point, point 2)



switch points {

// Bind x and y to the elements of point.

case ((3, 2), var y):

print("The point is at \(y).")

y = (4, 4)

print("The point is at \(y).")

case (let x, (0, 0)):

print("The point is at \(x).")

default:

print("default")

}


print("point 2 = ", point 2)

The point is at (3, 8).

The point is at (4, 4).

point 2 = (3, 8)


복사본이 전달된다. call by reference로 볼 수 있는데 call by assignment 방식 때문에 객체의 경우도 따로 조사를 해봐야 한다. swift에서 class init 후 전달되는 모든 값은 참조형으로 작동하기 때문에라도 한번 더 봐야 한다. 이 말은 3년간 Objective-C 할 때는 함수 포인터보다는 NSNotificationCenter를 통하여 각기 다른 객체(여기서는 파일이라고 생각하면 되겠다)에 메시지를 전달하여 해당 함수를 동작시켰다. 파라미터 전달 방식은 프로그램이 커지고 빌더 패턴이 하나라도 끼인 상태라면 전달이 상당히 복잡해져서 요구사항이 바뀐 경우 그냥 노티피케이션센터에 메시지 하나 더 정의해서 전달했다는 뜻이다. 물론, 안드로이드로 치면 해당 액티비티가 가진 멤버 자료들이 resume 되는 시점에 제대로 복구되는지 상관 않고 기능 구현만 했다는 뜻이다. 대부분 블랙박스 검증이니까 얼추 잘되면 그냥 오케이다. 그러나 의료 앱을 만드는 지금은 웬만한 자료는 가지고 있지 않는다. 함수형 프로그램의 철학대로 데이터의 흐름에만 집중을 한다. 가끔 저렇게 요구사항은 바뀌고 급하게 검증을 돌려야 하는 상황이면, Call by Reference를 십 분 활용하여



var pDashboard : DashboardScrollView? = nil




이렇게 꼭 필요한 자료가 있는 싱글톤에 정의하고, 



GS.s.pDashboard = self



만든 객체를 넣고



GS.s.pDashboard?. topScroll()



어디서든 호출할 수 있게 한다. 참고로 swift에서 싱글톤은

private init()

static let s


으로 만든다. 사실, 나의 실무 프로그래밍 책에 쓴 것럼 동시성을 체크해야 하지만 네트워크 상황에서도 DispatchQueue 를 전혀 쓰지 않고 있기 때문에 문제는 없어 보인다. closure를 이용하면 된다. (더블클로저를 이용한 프로그래스바 참조) 물론, 운영체제 혹은 프로세서의 멀티 프로세싱에서 앱이 따로 thread를 만들지 않으면 앱 실행 순서는 리니어 하다는 것을 가정해야 하는 위험이 있긴 하지만 다른 안정 장치로 의료용 앱을 보호해야 한다.


자 다시, call by assignment 로 돌아가자. 튜플은 값을 주고, 튜플도 객체니 그냥 call by reference로 믿어도 되겠지만 결국 책임은 실무 프로그래머에게 있으니 의심해 볼 수 밖에 없다.


class dummy {

var A : Int = 3

}


더미 class를 만들자.


var a = dummy()



switch a {

case var b :

print("a.A = \(a.A)")

print("b.A = \(b.A)")

b.A = 2

print("a.A = \(a.A)")

print("b.A = \(b.A)")

default:

print("defult")

}


print("a.A = \(a.A)")


a.A = 3

b.A = 3

a.A = 2

b.A = 2

a.A = 2



바뀐다. 그럼 이 경우는?



var a = dummy()



switch a.A {

case var b :

print("a.A = \(a.A)")

print("b = \(b)")

b = 2

print("a.A = \(a.A)")

print("b = \(b)")

default:

print("defult")

}


print("a.A = \(a.A)")



a.A = 3

b = 3

a.A = 3

b = 2

a.A = 3


안바뀐다.


결국, 파이썬처럼 call-by-assignment 로 동작하는 것을 볼 수 있다.



이제 switch 바인딩의 의미가 값 결정에 있지 않고 단순 커넥션이며, 객체에 따라 다르게 assignment로 동작한다는 것을 알 수 있다. swift는 직관적 리딩을 위해 파라미터 까지도 생략하려면 _(under score)를 써야 하게 해놨는데 복잡하게 프로그래밍 하는 것보다는 직관적으로 알 수 있게 하는게 나을 것이다.


그러나, 난 어렵게 프로그래밍 하는 것을 추천한다. 거대한 switch 문을 만들길 바란다. 대한민국은 프로그래머보다 경영자가 우대받는 사회니까. 우리팀이 이기길 바라는 것은 팀원으로 당연한거니까.



띄워쓰기가 맘에 안들수도 있겠다. 귀차니즘에 의해 Xcode의 ^I 정렬 방식을 따르고 브런치의 맞춤법 검사를 필터링 없이 돌린다.(소스에도 걸리는 것을 보니 ...)



혹 구독자를 위해 요약하면,




Swift의 value-binding pattern은 call by assignment 로 동작한다는 것. 물론, siwft 4.2 기준이며 5가 되었을 때도 공식문서에 별다른 말이 없으면 다시 확인해야 한다. product랑 가까운 개발자 일수록 이런 말 못할 고민은 늘어간다. 비트 하나 차이로 사람이 죽을수도 있으니... 늘 낮은 자세로 탐구하고 고민하고 책임져야 한다. ㅠㅠ 

요약 1
이 글은 Swift의 switch문에서 사용되는 value-binding pattern에 대해 설명하고 있습니다.

주요 내용은 다음과 같습니다:

1. Swift 공식 문서에서 설명하는 value-binding pattern은 튜플 패턴을 사용하며, switch문에서 바인딩을 할 때 사용됩니다.

2. switch문의 case에서 상수값과 섞어 사용할 때 의미가 있으며, let을 var로 바꾸었을 때 바인딩된 값이 참조값인지 복사값인지 궁금해집니다.

3. 실험 결과, value-binding pattern에서 바인딩된 값은 복사본이 전달되며, call by reference로 볼 수 있지만 실제로는 call by assignment 방식으로 동작합니다.

4. Swift에서 클래스 초기화 후 전달되는 값은 참조형으로 작동하므로, 객체의 경우도 따로 조사해봐야 합니다.

5. 실무에서는 요구사항 변경에 따라 싱글톤 패턴과 Call by Reference를 활용하여 유연하게 대응할 수 있습니다.

6. Swift의 value-binding pattern은 call by assignment로 동작하며, 객체에 따라 다르게 할당됩니다.

7. 의료 앱 개발과 같이 중요한 분야에서는 비트 하나의 차이로 인해 큰 문제가 발생할 수 있으므로, 늘 책임감을 가지고 탐구하고 고민해야 합니다.

요약2; 요약하자면, Swift 문서에서 설명하는 value-binding pattern은 call-by-assignment 방식으로 동작한다는 것입니다. 이는 switch 문에서 let 또는 var를 사용하여 튜플 패턴을 바인딩할 때, 값이 복사되어 전달됨을 의미합니다. 예제에서는 튜플 패턴의 사용과 switch 문에서의 바인딩을 통한 값 할당 방식을 보여주며, 이를 통해 Swift에서 값의 전달이 어떻게 이루어지는지를 설명합니다. 특히, 클래스 인스턴스와 같이 참조 타입의 경우에도 바인딩된 변수가 복사가 아닌 참조를 통해 값을 전달받는지, 아니면 복사를 통해 전달받는지에 대한 궁금증을 제시합니다. 또한, 이러한 동작 방식이 Swift의 버전에 따라 달라질 수 있으므로, 공식 문서를 통해 최신 정보를 확인해야 함을 강조합니다. 실무 개발자로서는 이러한 세부적인 동작 방식의 이해가 중요하며, 프로그램의 정확성과 효율성을 높이기 위해 깊이 있는 탐구와 고민이 필요함을 언급합니다.

선배님

이 한 분 계신다. 고마운 분이야 정말 많지만 가깝게 지내는 선배님은 딱 한 분이다. 각자 좋아하는 선배가 학교에 있는 이유는 다양하겠다. 나의 경우엔

 

- 10년이 넘도록 변함없이 한결같은 모습을 보여주시고,

- 쉼 없이 자기 일을 하며,

- 직장인이지만 정의 구현을 위해 당연히 해야 할 말을 늘 말하고,

- 적이 생기는 글을 SNS에 공개할 정도로 다른 사람 도움 없이 능력은 인정받고 있으며,

- 단, 한 번도 후배에게 밥을 얻어먹은 적이 없다.

 

보통 친구를 만나도 본인이 사는 것이라면 값싼 곳을 찾기 마련이고. 오히려 형들에게 내가 밥을 더 사주고 몇 번 얻어먹은 것으로 본인들은 자신들이 다 샀다며 기억 조작하기 일쑤다. 뭐라 형용할 수 없을 정도로 많은 케이스가 있다는 것을 말하고 싶다. 그리고 난 술을 마셔도 서로 돈이 없으면 편의점 가서 맥주 한 캔을 따도, 혹은 놀이터 가서 하염없이 이야기해도 좋은 친구들이 있다. 좋은 사람을 보는데 굳이 누가 뭘 사는 것이 중요한 것은 아니지만 선배님이 재벌은 아니므로, 수많은 후배들 자주 밥 사 주는 것은 분명 부담이라는 것을 안다. 그러나 그만큼 관계를 더 중요시한다는 말도 되겠다. 나는 이렇게 해 주는 후배는 없고, 제자는 있다.

 

그러나 옛날 사람인 선배님의 철학은 간단하다. 후배가 밥을 얻어먹냐고. 그래서 일부러 싼 곳을 찾지만 늘 당신이 먹었던 식당 중 최고의 식당을 찾고 그래서 가격도 만만치 않다. 물욕은 또 없으셔서 선물도 잘 받지 않는데, 기습적으로 드리지 않으면 선물을 줄 기회도 잘 없다.

 

 

 

 

nedrug.mfds.go.kr/pbp/CCBAI01/getList?totalPages=0&page=1&limit=20&sort=&sortOrder=&searchYn=true&searchTypeCode=A&itemName=&entpName=%ED%81%AC%EB%A6%B0%EC%9B%B0&btnSearch=

 

의약품안전나라

의약품등검색, 의약품 사이버민원, 제품 및 제조사 정보, 의약품광고검색, 규격기준정보 등 수록

nedrug.mfds.go.kr

소형, 대형 둘 다 많아 구입했었는데 찾다 보니... 의약품 안전나라에서 품질 이상으로 반품 회수 되었네. 피휴... 쿠팡은 이런 제품 있으면 알림이라도 오던데... ㅠㅠ 뭐 알림와도 해당 업체은 문 닫은 경우인지 몇 달 간 회수 안되는 제품 2개를 경험했지만.

 

믓튼, 위 링크 그대로 가면 정보가 있으니 참고 하셨으면 합니다. 소형은 아이를 위해 다량 구매 한 것인데... 이렇게 한 번 신뢰를 잃고 나면 다음부터는 크린웰 회사 이름의 제품은 구입이 꺼려 집니다.

 

휴안청 마스크, 토리 마스크, 순수 마스크 는 잘 쓰고 있습니다. 잠깐 집 앞에 놀이터 가도 한번 쓰고 버려서, 가족이 하루 3개씩 쓰니 이거 참... 마스크 비용만 해도 만만찮음.

haanel01.tistory.com/entry/%EB%86%8B%EA%B7%B8%EB%A6%87-%EB%B0%A9%EC%A7%9C%EC%9C%A0%EA%B8%B0%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9E%90%EB%A3%8C-%EC%A0%95%EB%A6%AC

 

놋그릇 - 방짜유기에 대한 자료 정리

방짜유기의 장점 - 소화를 촉진합니다. - 소량의 미네랄을 방출합니다. - 해충을 소독하여 제거하는 효과가 있습니다.(양푼에 미나리 같은 야채를 씻을 때 거머리나 벌레가 씻겨 나감.) - 농약, 나

haanel01.tistory.com

집에서 유기 수저를 쓰는데 냄새가 나서 한번 바꾸었다. 그리고 또 시간이 지나니 쇠 냄새가 나서 한번 더 바꾸게 되었다. 다른 곳에 선물 준 것 까지 하면 4세트는 될 것이다. 아이 껀 다른 회사 제품이었는데 2번 바꾸는 동안 단 한 번도 바꾸지 않고 잘 쓰고 있다. 우리 고유의 전통 문화를 살리려는 기업이 피해 볼만한 데이터 개수는 아니기 때문에 적지 않겠다. 쿠팡에서 샀었는데 해당 제품이 완전 품절 된 것도 확인했기 때문에 이미 사셨던 분들 제외하고는 피해 보실 분도 안 계실 것 같아서.

 

믓튼, 와이프가 식초물 이용, 마른행주 닦기 등으로 해 봐도 안되서 그냥 다른 회사 제품을 사기로 했다.

 

냄새야 어떻든 난 정말 입에 뭐가 많이 나는 사람이었는데 유기 수저 쓰는 동안 단 한 번도 나지 않았다. 그리고 냄새 때문에 다시 주문 하기 전 본래 쓰던 수저로 바꾸고 와이프 입에 뭐가 나서 알보칠을 쓸 수 밖에 없었다.

 

과학적 근거는 없지만 확실히 유기는 입병 방지에는 좋은 것 같아서 이 글을 써 놓게 되었다. 

 

 

keen-poitras-075b07.netlify.app/

 

인공지능이 말해주는 내 관상 테스트

인공지능이 말해주는 내 관상! 나와 닮은 연예인은 누구일까? 관상가 양반에게 관상 테스트를 받아 알아보세요!

keen-poitras-075b07.netlify.app

 

 

Your.Face

관상가 양반

동물상 테스트 by 조코딩

관상가 양반

인공지능이 말해주는 내 관상

13127659번 관상을 봤어요.

(2021.01.01 23:00 기준)

평생 재물운은 타고난 관상

나와 같은 관상을 가진 연예인 : 강동원

좋은 이마를 가졌고 성격이 강인하며 정적입니다. 눈이 봉황눈에 가깝기 때문에 재복이 좋은 눈이고 사람을 끌어들입니다. 눈썹을 보니 성격이 강직하니 자존심이 강하며 고집이 있습니다. 귀는 인복이 좋으며 정이 많은 귀입니다. 턱선이 약간 갸름하여 성격이 원만하고 입은 무겁습니다. 전체적으로 사람을 끌어들이는 기운이 강하여 성공운이 열린 얼굴입니다.

강동원

91%

이승기

6%

유승호

2%

김태희

0%

원빈

 

이미 천만번 이상 사용이 되었다니 정말 놀라움 따름이다. 연예인 얼굴을 어느 정도 학습 시킨 후 정해진 관상 결과를 카테고리 화 한 후 비슷한 얼굴을 따라가게 끔 만든다. 사진 데이터는 저장하지 않으므로, 저장소 낭비도 덜고 보안으로도 이용한다. 그리고 광고 삽입까지.

 

개발 능력 뿐 아니라, 기획, 마케팅, 영업 능력까지 모두 갖춘 이 시대의 irreplacealbe 인재다. "조코딩" 누군지 정말 궁금하다.

 

회사 동료가 받은 자가격리 지원 물품

 

- 최근 회사에 확진자가 나왔다. 해당 구청 홈페이지에는 5일 간 동선이 제대로 나오지 않는다. 예전에는 공개를 잘하더니 동선 조사도 힘든가 보다. 그래도 정보를 자유롭게 공개하며 함께 대응하려는 의지가 있는 사람들이 힘을 보태니 문제 해결의 기미가 보인다.

 

- 다만, 최근 코로나 끝날 때까지 재택 가능하다는 기업에서 오퍼가 와서 고민 중이다. 늘 어느 회사에 내가 더 기여를 할 수 있을지 고민했었는데, 코로나 때문에 재택근무는 우선순위 높은 기준이 되어 버렸다. 일주일 정도 재택 하다가 출근한 당일 1시간 뒤 퇴근하라는 통보를 받았는데. 코로나의 심각성에 대해 모두가 same page에 있는 기업과 아닌 기업은 김 한 장 차이다. 블로그로 옮긴 지난 내 글을 읽은 분은 아마 그게 천지차이라는 뜻임을 알 것 같다.물론, 이미 파악이 된 회사와 파악 전 회사의 경우는 다르겠지만 이 나이가 되니 오퍼를 주는 회사는 대표 혹은 임원 혹은 팀장이라 회사 생활은 뻔할 것 같다는 생각이다. 코로나 시국으로 같은 조건이면 연봉도 더 높이고 재택이 더 좋은 뻔한 기준점이 있는데 고민이 된다는 이유는. 결혼 10년이 되니 회사로의 출근의 중요성이 다른 의미로 보인다는 것이다. 물론, 난 아내를 매우 사랑한다. 집에서 45분 정도 거리지만 무릎이 좋지 않아 허락을 득한 회사 근처 숙소가 따로 있고 8코어 32램, 1200W, 3090이 달린 최고성능의 컴퓨터도 있다. 

 

- 밀접 접촉자의 경우 자가 격리에 들어가고 사진과 같은 물품을 받는다고 직장 동료가 사진을 보냈다. 그전에 인터넷을 통해 보던 개인 구호 물품과 달라서 계속 바뀌는구나 라는 생각이 들었다. 사진에 보이는 물품 중 오뚜기 제품이 많아서 기분이 좋았다. 오뚜기가 기부했을 수도 있겠지만 오뚜기는 사실 나라를 케어했던 기업이라 나라가 케어해 줘도 되는 기업이다.

 

- 박정희를 좋아하지 않지만 대단했던 대통령임은 부인할 수 없다. 그런 박정희가 사랑했던 기업은 유한양행과 삼양라면이었다. 조중동이 삼양라면은 죽였으나 지금도 여전히 아름다운 기업으로 좋은 제품을 생산하고 있는 두 기업이고, 오뚜기는 뭐, 굳이 내가 말 안 해도 어린 세대들이 알아줬으면 하는 기업 철학이 있는 기업이다.

http://www.usimin.co.kr/m/bbs/board_view.php?channel=&num=46845&page=3&keycode=tagText&keyword=%C1%B6%C1%DF%B5%BF%C6%F3%B0%A3&c1=&c2=

시민광장

www.usimin.co.kr

 

 

http://news.kmib.co.kr/article/view.asp?arcid=0923815318

news.kmib.co.kr

news.kmib.co.kr

 

 

난 개인적으로 아이유는 좋아해도 그 선행을 홍보하는 아이유 기업의 방식을 참 싫어하는데 오뚜기를 조금이라도 닮았으면 좋겠다. 물론, 개인의 선행은 무조건 알려야 한다고 설파했었지만. 그건 어디까지나 행동하고 알려도 탈세와 마케팅 목적은 아니기 때문이었다.

 

- 기업을 대표하는 대표주자의 행동이 참 중요하고, 그 때문에 이 글도 그 방향으로 흐르지만. 각 기업에서 열심히 다양한 방법으로 영업하는 영업맨들의 노력을 꺾고 싶은 마음은 없다. 굳이 오뚜기 제품이 아니더라도 국산 제품이면 좋겠다는 생각이다. 코카콜라는 너무 맛있지만 만약, 지급 물품에 들어가면 좀 거시기 한 마음이 드는 것은 어쩔 수 없다는 뜻. 어느 사진에서 본 기억이 있다.

 

- 만약, 우리나라 땅에서 기름이 나고, 또 그것을 나눌 정치적 힘이 있는 사람들이 평등의 참 의미를 알았다면 참 좋겠지만. 우린 정말 개뿔 아무것도 없이 잘 살고 있는 나라다. 미국의 도움이 참 고마웠기에 지금도 어찌 보면 해외파가 늘 대우를 받는다. 

 

- 그러나 진실은 정말 다르다. 세종대왕의 한글이나 이순신 장군의 전술 외에도 세계에 영향을 끼친 것이 참 많다. 멀리 볼 것 없이 김치가 일본에 뺏기고 한복이 중국에 뺏긴 것만 봐도 그렇다. 제약 회사가 어마어마하게 크고 새로운 것을 만드는 것. IT 분야에서 ARM의 설계도가 그렇게 중요한 것 등을 따진다면, 한국은 정말 세계에 크게 기여하는 나라가 아닌 이미 기여를 한 나라다. 물론, 의학 분야는 잘 모르지만 무조건 도움이 되고 있는 것 같고, IT 필드의 한국 개발자들만 봐도 지금도 기여하고 있다.

 

- 광개토 대왕 때처럼 독기 품으면 전 세계를 통일했었을지도 모르지만 늘 침략당하고 약간 호구스러움이 있다. 그래서 위기 때 강해지는 것이다. 코로나 시국에 이미 선진국이라고 부르는 나라들과 시민 의식에서 큰 차이를 보이는 것으로 다시 증명을 해 나가고 있다.

 

- 전체주의, 국수주의, 민족주의 등으로 가고 싶지는 않다. 어느 나라나 흉악범은 있고. 그 반대로 좋은 사람도 있고, 이미 글로벌 시대이기 때문이다. 다만, 개인주의가 참 유행하는 시대가 되었고. 전 세계가 자유경제체제에서 경쟁을 한다. 다만, 청팀이면 청팀 응원을 하고, 홍팀이면 홍팀 응원을 하는 것이 맞다.

 

- 이 이야기를 하다 보면, 정의란 무엇인가?로 다시 귀결된다.

 

- 이야기를 하면 끝도 없을 테고. 간단한 비유를 하자면. 우리 중 누가 봐도 많이 똑똑한 사람이 있다고 하자. 그 친구가 열심히 공부해서 지구 온난화 문제를 해결해 줄 것 같다. 그러나 워낙 큰 문제고 해결에 대한 확신은 그 친구 포함해서 모두가 할 수 없다. 다만, 국가대표처럼 우리가 인정한 사람이니 우리는 우리의 자라에서 열심히 우리 일을 하고 그 친구를 응원한다. 마치 축구 경기를 응원하는 것처럼 말이다. 해결하면 좋겠지만 해결이 안 되더라도 우리는 이해한다. 그러다가 그 친구가 문제를 해결하는 결과까지 내면 영웅이 되는 것이다.

 다만, 그 친구는 알아야 한다. 만약 그냥 길거리에서 청소를 하는 일을 담당했다고 하더라도 우리 사회에는 큰 변화는 없었음을 말이다. 그래서 겸손하라고 하는 것이다.

 

물론, 겸손하지 않아도 될 사람의 기준은 분명히 존재한다. 그 사람은 지구 온난화 문제 해결은 물론, 지구 전체가 멸망할 위기의 운석, 블랙홀 등의 사안을 모두 예측하고 해결 방법까지 낸 사람이다. 충분히 겸손하지 않아도 될 사람이다. 그게 아니라면 겸손이라는 강력한 장점으로. 다른 사람의 노고를 이해한다는 제스처를 주고. 실패하더라도 다른 사람에게 바통을 이어주는 것이 좋겠다.

 

- 우리나라가 코로나에 잘 대처했었냐고 누군가 물어보면 세계 최고 수준이었다고 말할 수 있을 것 같다. 물론, 그 영웅은 각자 자리에서 자리를 지켰던 사람, 그리고 자리를 뺏기더라도 살 길을 찾은 국민들, 대통령과 현 정부 사람들 그리고 비판하며 충분한 이유를 든 반대파 등. 다양하겠지만 한 명을 꼽으라면 단연, 정은경 질병관리청장일 것이다.

 

누가 그렸는지 참 고 맙.

 

crn.pw   -    코로나 파워

 

는 오늘 등록했기에 공유한다. 둘 다 우리 정부 사이트로 넘어간다.

 

http://crn.pw

코로나바이러스감염증-19(COVID-19)

코로나바이러스감염증-19 정식 홈페이지로 발생현황, 국내발생현황, 국외발생현황, 시도별발생현황, 대상별 유의사항, 생활 속 거리 두기, 공적마스크 공급현황, 피해지원정책, 홍보자료, FAQ, 관

ncov.mohw.go.kr

 

 


 

http://ncov.mohw.go.kr/bdBoardList_Real.do?brdId=1&brdGubun=13&ncvContSeq=&contSeq=&board_id=&gubun=

코로나바이러스감염증-19(COVID-19)

코로나바이러스감염증-19 정식 홈페이지로 발생현황, 국내발생현황, 국외발생현황, 시도별발생현황, 대상별 유의사항, 생활 속 거리 두기, 공적마스크 공급현황, 피해지원정책, 홍보자료, FAQ, 관

ncov.mohw.go.kr

 

https://www.seoul.go.kr/coronaV/coronaStatus.do

서울시 코로나19 통합사이트

서울시 코로나19 통합정보 사이트로 안전·방역(발생동향, 클린존, 선별진료소, 해외입국자 안내, 일일브리핑, 홍보물&공적 공급마스크, 보도자료, 일일 소식지&대응일지, 신고(응답소)), 생활정

www.seoul.go.kr

 

https://www.busan.go.kr/covid19/Corona19.do

부산광역시 코로나19 (BUSAN COVID-19)

www.busan.go.kr

 

http://covid19.daegu.go.kr/index.html

대구광역시 코로나현황

covid19.daegu.go.kr

 

https://www.incheon.go.kr/health/HE020409

https://www.gwangju.go.kr/c19/

코로나19

www.gwangju.go.kr

 

https://www.daejeon.go.kr/corona19/index.do

대전광역시 코로나19 - 발생 현황

www.daejeon.go.kr

 

https://www.ulsan.go.kr/u/health/contents.ulsan?mId=001002003000000000

울산광역시

www.ulsan.go.kr

https://www.sejong.go.kr/bbs/R3273/list.do?cmsNoStr=18839

일일동향 >

www.sejong.go.kr

 

https://www.gg.go.kr/contents/contents.do?ciIdx=1150&menuId=2909

발생동향 | 코로나19 | 경기도 소식 | 뉴스 | 경기도청

www.gg.go.kr

 

http://www.provin.gangwon.kr/covid-19.html

강원도청

www.provin.gangwon.kr

 

http://www1.chungbuk.go.kr/covid-19

http://www.chungnam.go.kr/coronaStatus.do

충청남도 코로나19 발생현황

www.chungnam.go.kr

 

https://www.jeonbuk.go.kr/board/list.jeonbuk?boardId=BBS_0000105&menuCd=DOM_000000110001000000&contentsSid=1219&cpath=

코로나19 > 일일상황보고 | 전북도청

www.jeonbuk.go.kr

 

https://www.jeonnam.go.kr/coronaMainPage.do

코로나 19 전라남도 상황판

www.jeonnam.go.kr

 

https://gb.go.kr/corona_main.htm

경북도청, 경북, 경북, 도청, Gyeongsangbuk-do

경북청. 전자민원 서비스와 각 분야별 도정소식을 제공합니다.

gb.go.kr

 

http://xn--19-q81ii1knc140d892b.kr/main/main.do#close

코로나19경남

코로나19경남 홈페이지

xn--19-q81ii1knc140d892b.kr

 

https://covid19.jeju.go.kr/

제주특별자치도 코로나바이러스감염증-19 상황실

제주특별자치도 코로나19 상황실

covid19.jeju.go.kr

 

 

 

나는 맥 사용자고 브라우저는 사파리를 쓴다. 그리고 단축 도메인으로 아예 도메인을 사서 쓴다.. pw가 저렴하다 보니(2천 원~6천 원/a year) 좀 남발을 하는 편이다. 즐겨찾기 쓰면 되지 않냐고 하지만, 즐겨 찾기는 이미 폴더 구조가 2 depth에 너무도 많아서 즐겨찾기를 찾아서 써야 할 판이다. 그래서 그냥 도메인을 사서 쓴다.

이미 많이 샀다. 재미있는 것은 아래 사진은 whois의 내 계정인데 사실 구글 도메인즈가 내 메인이다. 구글 도메인은 한국에는 막혀 있어서 공개하기 힘들다.(인터넷 연합 비슷한 단체들의 힘이라고 보는데 정말 대단하다고 생각한다. 사실, 구글 도메인 들어오면 2~10배 비싸게 받아먹는 국내 사기 기업들은 100% 망한다는 것을 장담한다. 왜냐면 마이그레이션도 한 방이고 당연히 법적으로 유저들을 위해 가능토록 풀 수 있기 때문이다. 하여튼, 뭉쳐서 자국민 호구 만드는 건 알아줘야 한다.)

개인적으로 쓰는 도메인은 공개하기 힘들고.

 

crn.pw는 크롬에서도 잘 된다. 안되면 사파리를 쓰시거나 8.8.8.8로 dns를 바꿔줘야 하는데 그럴 만한 사용자라면 그냥 네이버에서 코로나 확진자 정보를 찾는 게 나을 것 같다. 나도 cvd19.link 보다는 crn.pw를 많이 쓰게 될 것 같다. 뒤에 것이 더 직관적이라고 생각했었으나... 아무래도 더 짧으니...

 

20년 전 호스팅 사업할 때는 DNS 퍼지는데 2~3일은 걸렸는데 요샌 10분도 안 걸리는 것 같다. 그런데 왜 정부 사이트는 주소를 저렇게 어렵게 했을까? 그 이유는 https 인증서를 쓰지 않고. jsp를 쓰는 데 있다. 급해서 그럴 수도 있다. 애플은 nginx 엔터프라이즈, 한국을 제외한 업계 대부분은 node나 Django를 쓴다. 물론, 안 뻗은 서버는 내가 본 적이 없긴 하고 정부 사이트는. jsp 가 안전할 수도 있다. 다만, 왜 어렵게 했는지는 뻔하다. 그래서 카카오나 네이버와 거래가 있을 수밖에 없다. 뉴스 신문사들이 네이버 들어갔다가 다시 나왔다가 다시 들어간 이유와 같다. Edge Computing  이 해결 방법이라고 하지만 난 더 나은 설루션이 있다. 뭐, 그런 부분은 따로 자문을 하고 있기 때문에 여기서 마친다.

 

www.sdm.go.kr/news/corona19/coronaInfo.do?mode=view&sdmBoardSeq=236109

 

서대문구청 서대문구 확진자 이동경로 (update 2020. 12. 22.)

서대문구 확진자 이동경로 (update 2020. 12. 22.)의 상세페이지 입니다. 제목,조회수,등록일,내용으로 구성 제목 서대문구 확진자 이동경로 (update 2020. 12. 22.) 조회수 1019099 등록일 2020-03-18 17:03 서대문

www.sdm.go.kr

신속항원검사로 음성 나오긴 했는데... 코로나 초기에만 확진자들 동선 보다 관심이 없어졌는데 이제 파악 해야 겠네. 다른 것 보다 몇 번 확진자인지 알아야 할 것 같다. 선별진료소, 보건소는 무료고 검사 방법은 3가지다. 20~30분만에 나오는 것은 코로나 바이러스 농도가 짙을 때만 검출이 된다고 한다. 나머지는 1일~2일 정도 걸리는데 하루 걸린다고 한 것도 동료 이야기 들어 보면 5~6시간 만에 통보 되는 경우도 있는 것 같다. 그리고 24시간 지나도 통보 안되는 경우는 확실히 있다.(그래서 안내는 48 시간으로 하는 듯)

 

www.hani.co.kr/arti/society/health/950521.html

 

정확도 99%라는데…8차례 음성 후 9번째 양성 판정 왜?

인천 90대 노인 9번째 검사서 양성“지병으로 정확한 검체 확보 어려웠을수도”“바이러스 증식 전 검사 사례 많아”

www.hani.co.kr

이 기사 보니 무조건 안심할 것도 아니다.

 

 

 

서대문구 확진자 이동경로

 

▣ 공개기준

  - "확진자의 이동경로 등 정보공개 안내(3판)" 지침('20.7.1. 중앙방역대책본부)

  - "확진환자의 정보공개 관련 개인정보보호 강화 안내문" ('20.10.7. 중앙방역대책본부)

     에 따라 관내 확진자에 대한 동선을 공개 하고 있습니다.
 

※ 공개기간 : 확진자가 마지막 접촉자와 접촉한 날로부터 14일 (공개 기간 경과 후 정보 삭제)

※ 공개정보

    (시간) 증상 발생 2일 전부터 격리일까지 

    (장소‧이동수단) 접촉자가 발생한 장소 및 이동수단 공개

      - 시간에 따른 개인별 동선 형태가 아닌 장소 목록 형태로 공개

         단,  해당 공간 내 모든 접촉자가 파악된 경우 공개하지 않음
 

※ 비공개 정보

    (개인정보) 성별, 연령, 국적, 거주지(읍면동 이하) , 직장명, 임상정보는 공개하지 않음

 

▣ 12월 확진자 경유장소

12월확진자경유장소-순번,게시일자,장소유형,상호명,주소,노출일자,소독여부로 구성순번게시일자장소유형상호명주소노출일시소독여부

455

12.22. ※ 역학조사 진행 중

454

12.22. ※ 역학조사 진행 중

453

12.22. ※ 역학조사 진행 중

452

12.22. ※ 역학조사 진행 중

451

12.22. ※ 역학조사 진행 중

450

12.22. ※ 역학조사 진행 중

449

12.22. ※ 역학조사 진행 중

448

12.22. ※ 역학조사 진행 중

447

12.21. ※ 역학조사 진행 중

446

12.21. ※ 자택 외 서대문구 이동 경로 없음
※ 서-435 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

445

12.21. ※ 자택 외 서대문구 이동 경로 없음
※ 직장 동료 확진자와 접촉
※ 서울역 선별진료소 검사

444

12.21. ※ 자택 외 서대문구 이동 경로 없음
※ 구로구 확진자 접촉
※ 구로구 선별 진료소 검사

443

12.21. ※ 자택 외 서대문구 이동 경로 없음
※ 서-444 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

442

12.21. 의원 **의원 남가좌동 2020.12.16.(금) 09:53~10:21
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 감염경로 확인 중
※ 은평성모병원 진료소 검사

441

12.21. ※ 자택 외 서대문구 이동 경로 없음
※ 서-419 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

440

12.21. ※ 자택 외 서대문구 이동 경로 없음
※ 구로구 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

439

12.21. ※ 자택 외 서대문구 이동 경로 없음
※ 서-428 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

438

12.21. 음식점 **음식점 북가좌동 2020.12.19.(토) 20:11~확인 중
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-425 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

437

12.21. ※ 자택 외 서대문구 이동 경로 없음
※ 서-432 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

436

12.21. ※ 자택 외 서대문구 이동동선 없음
※ 서-431 확진자 접촉
※ 서대문구보건소 선별진료소 검사

435

12.20. 편의점 **편의시설 홍은동 2020.12.18.(금) 06:02~09:00
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-429, 430 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

434

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 서대문구보건소 선별진료소 검사

433

12.20. ※ 자가격리중 확진으로 서대문구 이동동선 없음
※ 해외입국자
※ 서대문구보건소 선별진료소 검사

432

12.20. 음식점 **음식점 연희동 2020.12.18.(금) 17:44~18:03
(마스크 착용)
소독완료
※ 접촉자 분류 완료 되어 상호명 비공개 처리함
※ 감염경로 확인 중
※ 서대문구 보건소 선별 진료소 검사

431

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인중
※ 홍제임시선별진료소 검사

430

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 서-416 확진자 접촉
※ 서대문구보건소 선별진료소 검사

429

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 서-416 확진자 접촉
※ 서대문구보건소 선별진료소 검사

428

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 마포구 확진자 접촉
※ 서대문구보건소 선별진료소 검사

427

12.20. ※ 자가격리 중 확진으로 서대문구 이동동선 없음
※ 서-356 확진자 접촉
※ 서대문구보건소 선별진료소 검사

426

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 성남시 확진자 접촉
※ 서대문구보건소 선별진료소 검사

425

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 종로구 확진자 접촉
※ 서대문구보건소 선별진료소 검사

424

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 서대문구보건소 선별진료소 검사

423

12.20. ※ 자택 외 서대문구 이동동선 없음
※ 성북구 확진자 접촉
※ 서대문구보건소 선별진료소 검사

422

12.20. 의원 **의원 연희동 2020.12.16.(수) 16:57~16:59
2020.12.19.(토) 12:39~12:41
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-414 확진자 접촉
※ 서대문구보건소 선별진료소 검사

421

12.20. 의원 **의원 신촌동 2020.12.17.(수) 08:00~17:00
2020.12.18.(토) 08:00~18:00
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-254 확진자 접촉
※ 서대문구보건소 선별진료소 검사

420

12.19. ※ 자택 외 서대문구 이동동선 없음
※ 서-401 확진자 접촉
※ 신촌임시선별진료소 검사

419

12.19. 의원 **의원 북아현동 2020.12.12.(토) 11:46~12:08
2020.12.15.(화) 18:00~18:06
2020.12.16.(수) 10:32~10:35
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-401 확진자 접촉
※ 신촌임시선별진료소 검사

418

12.19. ※ 자택 외 서대문구 이동동선 없음
※ 서-401 확진자 접촉
※ 서대문구보건소 선별진료소 검사

417

12.19. ※ 자택 외 서대문구 이동동선 없음
※ 서-401 확진자 접촉
※ 서대문구보건소 선별진료소 검사

416

12.19. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 서대문구보건소 선별진료소 검사

415

12.19. 음식점 **음식점 홍제동 2020.12.14.(월) 14:37~15:10
(마스크 착용)
소독완료
음식점 **음식점 홍제동 2020.12.15.(화) 14:20~14:59
(마스크 착용)
소독완료
의원 **의원 홍제동 2020.12.16.(수) 14:20~16:00
(마스크 착용)
소독완료
음식점 **음식점 홍은동 2020.12.16.(수) 16:00~17:00
(마스크 착용)
소독완료
음식점 **음식점 홍은동 2020.12.17.(목) 15:07~15:32
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함/식사 시 마스크 미착용
※ 서-404 확진자 접촉
※ 서대문구보건소 선별진료소 검사

414

12.19. 의원 **의원 연희동 2020.12.12.(토) 13:46~13:55
2020.12.16.(수) 13:32~13:46
2020.12.18.(금) 10:55~11:01
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 감염경로 확인 중
※ 서대문구보건소 선별진료소 검사

413

12.19. ※ 자택 외 서대문구 이동동선 없음
※ 마포구 확진자 접촉
※ 서대문구보건소 선별진료소 검사

412

12.19. 음식점 **음식점 신촌동 2020.12.14.(월) 13:10~13:52
2020.12.15.(화) 13:00~14:01
2020.12.17.(목) 13:00~13:57
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함/식사 시 마스크 미착용
※ 광명구 확진자 접촉
※ 신촌임시선별진료소 검사

411

12.19. 의원 **의원 천연동 2020.12.17.(수) 15:26~15:58
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-402 확진자 접촉
※ 서대문구보건소 선별진료소 검사

410

12.19. ※ 자택 외 서대문구 이동동선 없음
※ 은평구 확진자 접촉
※ 은평성모병원 검사

409

12.18. ※ 자택 외 서대문구 이동동선 없음
※ 서-391 확진자 접촉
※ 서대문구보건소 선별진료소 검사

408

12.18. ※ 자택 외 서대문구 이동동선 없음
※ 송파구 확진자 접촉
※ 서대문구보건소 선별진료소 검사

407

12.18. ※ 자택 외 서대문구 이동동선 없음
※ 송파구 확진자 접촉
※ 서대문구보건소 선별진료소 검사

406

12.18. 의원 **의원 신촌동 2020.12.14.(월) 17:55~18:28
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 강동구 확진자 접촉
※ 신촌역임시검사소 검사

405

12.18. 음식점 **음식점 홍제동 2020.12.14.(월) 19:39~21:13
(마스크 착용)
소독완료
의원 **의원 천연동 2020.12.15.(화) 16:03~16:08
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함/식사 시 마스크 미착용
※ 성북구 확진자 접촉
※ 서울역임시선별진료소 검사

404

12.18. 의원 **의원 연희동 2020.12.14.(월) 10:00~10:09
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 감염경로 확인 중
※ 서대문구 보건소 선별 진료소 검사

403

12.18. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 서대문구보건소 선별진료소 검사

402

12.18. ※ 자택 외 서대문구 이동동선 없음
※ 중구 확진자 접촉
※ 서울역임시검사소 검사

401

12.18. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 신촌역임시검사소 검사

400

12.17. ※ 자택 외 서대문구 이동동선 없음
※ 서-386 확진자 접촉
※ 마포구보건소 선별진료소 검사

399

12.17. ※ 자택 외 서대문구 이동동선 없음
※ 서-386 확진자 접촉
※ 마포구보건소 선별진료소 검사

398

12.17. ※ 자가격리 중 확진으로 서대문구 이동동선 없음
※ 성남시 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

397

12.17. ※ 자택 외 서대문구 이동동선 없음
※ 중랑구 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

396

12.17. ※ 자가격리 중 확진으로 서대문구 이동동선 없음
※ 마포구 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

395

12.17. ※ 자택 외 서대문구 이동동선 없음
※ 서-378 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

394

12.17. ※ 자가격리 중 확진으로 서대문구 이동동선 없음
※ 구로구 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

393

12.17. ※ 자택 외 서대문구 이동동선 없음
※ 서-392 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

392

12.17. ※ 자택 외 서대문구 이동동선 없음
※ 성동구 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

391

12.17. ※ 자택 외 서대문구 이동동선 없음
※ 중구 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

390

12.17. ※ 자가격리 중 확진으로 서대문구 이동동선 없음
※ 전남 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

389

12.17. ※ 자택 외 서대문구 이동동선 없음
※ 중구 집단발병 관련
※ 중구보건소 선별진료소 검사

388

12.17. 음식점 **음식점 충현동 2020.12.14.(월) 12:10~12:50
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함/식사 시 마스크 미착용
※ 중구 집단발병 관련
※ 강북삼성병원 선별진료소 검사

387

12.17. 음식점 **음식점 충현동 2020.12.14.(월) 12:10~12:50
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함/식사 시 마스크 미착용
※ 중구 집단발병 관련
※ 강북삼성병원 선별진료소 검사

386

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 마포구 보건소 선별 진료소 검사

385

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 강서구 확진자 접촉
※ 강서구 보건소 선별 진료소 검사

384

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 중구 확진자 접촉
※ 종로구 보건소 선별 진료소 검사

383

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 용산구 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

382

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 서대문구 보건소 선별 진료소 검사

381

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 서-377 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

380

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 서-377 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

379

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 서-371 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

378

12.16. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 세브란스병원 응급실 검사

377

12.15. 의원 **의원 연희동 2020.12.14.(월) 09:43~09:54
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 강서구 확진자 접촉
※ 강서구 보건소 선별 진료소 검사

376

12.15. ※ 자택 외 서대문구 이동동선 없음
※ 강서구 병원 집단발병 관련
※ 강서구 보건소 선별 진료소 검사

375

12.15. ※ 자가격리 중 확진으로 서대문구 이동동선 없음
※ 서-273 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

374

12.15. ※ 자택 외 서대문구 이동동선 없음
※ 서-334 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

373

12.15. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 불명
※ 서대문구 보건소 선별 진료소 검사

372

12.15. ※ 자택 외 서대문구 이동동선 없음
※ 서-361 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

371

12.15. ※ 자택 외 서대문구 이동동선 없음
※ 강서구 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

370

12.15. ※ 자택 외 서대문구 이동동선 없음
※ 서-369 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

369

12.15. ※ 자택 외 서대문구 이동동선 없음
※ 고양시 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

368

12.14. ※ 자택 외 서대문구 이동동선 없음
※ 동대문구 병원 집단발병 관련
※ 동대문구 보건소 선별 진료소 검사

367

12.14. ※ 자택 외 서대문구 이동동선 없음
※ 덕양구 확진자 접촉
※ 마포구 보건소 선별 진료소 검사

366

12.14. ※ 자택 외 서대문구 이동동선 없음
※ 서대문구 보건소 선별 진료소 검사

365

12.14. ※ 자택 외 서대문구 이동동선 없음
※ 직장 내 확진자 발생
※ 서대문구 보건소 선별 진료소 검사

364

12.14. ※ 자택 외 서대문구 이동동선 없음
※ 서대문구 보건소 선별 진료소 검사

363

12.14. ※ 자택 외 서대문구 이동동선 없음
※ #서-264 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

362

12.14. ※ 자택 외 서대문구 이동동선 없음
※ 서대문구 보건소 선별 진료소 검사

361

12.14. ※ 자택 외 서대문구 이동동선 없음
※ 서대문구 보건소 선별 진료소 검사

360

12.14. 의원 **의원 북아현동 2020.12.3.(목) 09:58~10:12
2020.12.4.(금) 09:26~09:34
2020.12.5.(토) 09:38~09:51
2020.12.7.(월) 09:34~09:41
(마스크 착용)
소독완료
음식점 **음식점 북아현동 2020.12.10.(목) 17:14~18:09
(마스크 착용,
식사 시 미착용)
소독완료
※ 추가 역학 조사 진행 중
※ #서-348 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

359

12.14. ※ 자택 외 서대문구 이동동선 없음
※ #서-355 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

358

12.14. ※ 자택 외 서대문구 이동동선 없음
※ #서-355 확진자 접촉
※ 서대문구 보건소 선별 진료소 검사

357

12.13. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 불명
※ 서울대학교병원 선별진료소 검사

356

12.13. ※ 자택 외 서대문구 이동동선 없음
※ 마포구 모임 내 확진자 관련
※ 서대문구 보건소 선별진료소 검사

355

12.13. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 불명
※ 서대문구 보건소 선별진료소 검사

354

12.12. ※ 자택 외 서대문구 이동동선 없음
※ 중구 콜센터 관련
※ 서대문구 보건소 선별진료소 검사

353

12.12. 의원 **의원 남가좌동 2020.12.5.(토) 11:49~13:01
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 감염경로 확인중
※ 서대문구 보건소 선별진료소 검사

352

12.12. 의원 **의원 남가좌동 2020.12.7.(월) 10:45~11:47
(마스크 착용)
소독완료
※ 자택 외 서대문구 이동동선 없음
※ 서-351 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

351

12.12. 의원 **의원 남가좌동 2020.12.5.(토) 10:18~10:27
2020.12.11.(금) 10:43~10:44
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 감염경로 확인중
※ 서대문구 보건소 선별진료소 검사

350

12.12. 의원 **의원 홍제동 2020.12.10.(목) 14:16~14:23
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-337 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

349

12.12. 의원 **의원 홍제동 2020.12.10.(목) 11:18~13:00
(마스크 착용)
소독완료
의원 **의원 홍제동 2020.12.10.(목) 14:21~14:23
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-337 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

348

12.12. ※ 자택 외 서대문구 이동동선 없음
※ 서-338 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

347

12.12. ※ 자택 외 서대문구 이동동선 없음
※ 서-338 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

346

12.12. ※ 자택 외 서대문구 이동동선 없음
※ 인천서구 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

345

12.12. ※ 자택 외 서대문구 이동동선 없음
※ 서-263 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

344

12.12. ※ 자택 외 서대문구 이동동선 없음
※ 서-339 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

343

12.12. 의원 **의원 충현동 2020.12.10.(목) 16:19~16:41
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-339 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

342

12.12. 음식점 **음식점 신촌동 2020.12.7.(월) 11:42~12:09
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함/식사 시 마스크 미착용
※ 강서구 교회 관련
※ 마포구보건소 선별진료소 검사

341

12.11. ※ 자택 외 서대문구 이동동선 없음
※ 서-331 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

340

12.11. 의원 **의원 홍은동 2020.12.2.(수) 16:11~16:24
2020.12.10.(목) 14:49~14:55
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 서-331 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

339

12.11. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 강북삼성병원 진료소 검사

338

12.11. ※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인 중
※ 서대문구 보건소 선별진료소 검사

337

12.11. 의원 **의원 연희동 2020.12.10.(목) 11:13~13:00
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 감염경로 확인 중
※ 서대문구 보건소 선별진료소 검사

336

12.11. 의원 **의원 천연동 2020.12.8.(화) 17:19~17:31
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함
※ 은평구 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

335

12.11. ※ 자택 외 서대문구 이동동선 없음
※ 양천구 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

334

12.11. ※ 자택 외 서대문구 이동동선 없음
※ 강서구 확진자 접촉
※ 신촌세브란스병원 선별진료소 검사

333

12.10. 음식점 **음식점 홍제동 2020.12.8.(화) 12:30~12:51
(마스크 착용)
소독완료
편의시설 ** 홍제동 2020.12.8.(화) 12:51~13:28
(마스크 착용)
소독완료
※ 접촉자 분류 완료되어 상호명 비공개 처리함/식사 시 마스크 미착용
※ 성동구 확진자 접촉
※ 서대문구 보건소 선별진료소 검사

332

12.10. 보건소 서대문구보건소 연희동 2020.12.09.(수) 17:00~18:00
(마스크 착용)
소독완료
※ 자택 외 서대문구 이동동선 없음
※ 마포구 확진자 접촉

331

12.10. 의원 **의원 홍은동 2020.12.4.(금) 15:34~15:41
(마스크 착용)
2020.12.7.(월) 13:43~15:57
(마스크 착용)
소독완료
보건소 서대문구보건소 연희동 2020.12.09.(수) 12:00~14:00
(마스크 착용)
소독완료
※ 접촉자 분류 완료 되어 상호명 비공개 처리함
※ 감염경로 확인 중

330

12.10. 보건소 서대문구보건소 연희동 2020.12.08.(화) 16:30~17:30
(마스크 착용)
소독완료
※ 자택 외 서대문구 이동동선 없음
※ 마포구 공영홈쇼핑 관련

329

12.10. 음식점 **음식점 홍제동 2020.12.04.(금) 19:23~19:53
(마스크 착용)
소독완료
의원 **의원 홍제동 2020.12.5.(토) 09:58~12:41
(마스크 착용)
소독완료
편의시설 ** 홍제동 2020.12.6.(일) 18:48~19:49
(마스크 착용)
소독완료
음식점 **음식점 홍제동 2020.12.6.(일) 19:57~20:28
(마스크 착용)
소독완료
음식점 **음식점 홍제동 2020.12.8.(화) 19:05~19:32
(마스크 착용)
소독완료
보건소 서대문구보건소 연희동 2020.12.08.(화) 14:20~15:00
(마스크 착용)
소독완료
※ 접촉자 분류 완료 되어 상호명 비공개 처리함 / 식사 시 마스크 미 착용
※ 감염경로 확인 중

328

12.10. 음식점 **음식점 연희동 2020.12.07.(월) 13:50~15:59
(마스크 착용)
소독완료
보건소 서대문구보건소 연희동 2020.12.09.(수) 13:00~13:30
(마스크 착용)
소독완료
※ 접촉자 분류 완료 되어 상호명 비공개 처리함 / 식사 시 마스크 미 착용
※ 서-323 확진자 접촉

327

12.10. 보건소 서대문구보건소 연희동 2020.12.09.(수) 09:26~11:00
(마스크 착용)
소독완료
※ 자택 외 서대문구 이동동선 없음
※ 서-235 확진자 접촉

326

12.10. 의원 **의원 남가좌동 2020.12.05.(토) 09:10~09:26
(마스크 착용)
소독완료
※ 접촉자 분류 완료 되어 상호명 비공개 처리함
※ 종로구 파고다타운 확진자 접촉
※ 신촌세브란스병원 선별진료소 검사

325

12.9. ※ 자택 외 서대문구 이동동선 없음
※ 마포구 직장동료 확진자 접촉
※ 서울적십자병원 선별진료소 검사

324

12.9. ※ 자택 외 서대문구 이동동선 없음
※ 마포구 직장동료 확진자 접촉
※ 서울적십자병원 선별진료소 검사

323

12.9. 음식점 **음식점 북아현동 2020.12.05.(토) 17:00~18:00
(마스크 착용)
소독완료
음식점 **음식점 신촌동 2020.12.05.(토) 19:00~21:00
(마스크 착용)
소독완료
연습장 **연습장 신촌동 2020.12.05.(토) 21:00~22:00
(마스크 착용)
소독완료
※ 접촉자 분류 완료 되어 상호명 비공개 처리함 / 식사 시 마스크 미 착용
※ 강남구 직장동료 확진자 접촉
※ 강남구보건소 선별진료소 검사

322

12.9. 보건소 서대문구보건소 연희동 2020.12.08.(화) 16:30~17:30
(마스크 착용)
소독완료
※ 자택 외 서대문구 이동동선 없음
※ 감염경로 확인중

321

12.9. 음식점 **음식점 북아현동 2020.12.07.(월) 10:07~10:21
(마스크 착용)
소독완료
보건소 서대문구보건소 연희동 2020.12.08.(화) 15:30~15:50
(마스크 착용)
소독완료
※ 접촉자 분류 완료 되어 상호명 비공개 처리함 / 식사 시 마스크 미 착용
※ 서-314 확진자 접촉

320

12.9. 보건소 서대문구보건소 연희동 2020.12.08.(화) 14:20~15:00
(마스크 착용)
소독완료
※ 자택 외 서대문구 이동동선 없음
※ 서-316 확진자 접촉

319

12.9. 보건소 서대문구보건소 연희동 2020.12.08.(화) 14:00~15:00
(마스크 착용)
소독완료
※ 자택 외 서대문구 이동동선 없음
※ 서-309 확진자 접촉

318

12.9. 보건소 서대문구보건소 연희동 2020.12.08.(화) 14:00~15:00
(마스크 착용)
소독완료
※ 자택 외 서대문구 이동동선 없음
※ 서-309 확진자 접촉

317

12.9. 음식점 **음식점 홍제동 2020.12.02.(수) 19:13~19:41
(마스크 착용)
소독완료
음식점 **음식점 신촌동 2020.12.07.(월) 11:13~11:33
(마스크 착용)
소독완료
※ 접촉자 분류 완료 되어 상호명 비공개 처리함 / 식사 시 마스크 미 착용
※ 서-309 확진자 접촉
※ 신촌세브란스병원 선별진료소 검사

코로나 치료 후기

코로나 입원 후기

코로나 걸린 디시인 12일 격리 치료 후기.jpg

 

 

 

 

 

 

격리 치료기 > 시식 후기 ㅋㅋ

www.clien.net/service/board/park/15636905?type=recommend

응급실 근무중입니다. 생굴에 관련하여... 116

84

Bryan

 41,800  

 2020-11-29 16:55:30 수정일 : 2020-11-29 16:56:58 220.♡.150.38

 

안녕하세요?

 

응급실 근무중인 의사입니다.

 

아래 굴에 관련된 글에 댓글을 남겼지만 글로도 올려봅니다.

 

https://n.news.naver.com/article/056/0010942547

 

어제 생굴과 관련하여 해양수산부의 노로바이러스 주의 요망 뉴스가 있었습니다.

 

최근 2~3일간 주말 김장철에 들어가

 

수육에 생굴을 먹고난후 발생한 복통, 설사, 발열로 응급실로 내원하는 환자들이 급격히 늘어 났습니다.

 

내원환자 절반정도가 생굴관련 환자네요.. 쿨럭~ ㅠㅠ

 

특히 통영산 굴은 우리나라 굴생산량의 70%를 담당하고있어, 특히 주의를 요하고 있습니다.

 

일반적인 세균성 장염에 비해 바이러스성 장염은 증상도 심하고 유병기간도 길기 때문에

 

올해 생굴은 안드시는 것이 좋을듯합니다.

 

바이러스성 장염은 손을 통해서도 전염이 되므로 수시로 손 잘씻으시고, 

 

가급적 안드시는 것이 좋지만 꼭 드셔야한다면 1분이상 끓여 드시는것이 좋겠습니다.

www.youtube.com/watch?v=fnPxWncC4FM

www.youtube.com/watch?v=hReAStK45gc

 

 

www.clien.net/service/board/park/15637034?type=recommend

 

코로나로 죽다 살아난 사람입니다. 이제 좀 여유가 생기는거 같아요 277

99+

 53,668  

 2020-11-29 17:38:12 수정일 : 2020-11-29 17:38:41 121.♡.243.225

퇴원하고 잠깐 관련 글을 쓰긴했었는데 그땐 키보드칠 힘도 없어 달달 떨면서 쳐서 제대로 못쓴거 같네요. 

코로나 걸려 격리시설 ->중환자실 테크를 거쳐 살아난 사람입니다. 

 

저의 경우 처음엔 소화불량증상이 있어 병원에 갔다 열이 있다고 해서 3일동안 자가격리하다가 열이 안내려  

보건소 가서 검사받고 양성판정받고 집에 들어가서 짐싸서 엠뷸런스에 누워 이천에 격리소인가 갔다가 

거서3일정도 지내는데 열이 안내려서 병원에 가려고 구급차를 타고 내려서 무슨 마스크 씌우는거까지만

기억나고 눈떠보니까 중환자실에 3주가 지나있더군요. 전 첨에 눈떴을땐 하루이틀정도 지난줄만 알았습니다.

 근대 계절이 바뀌어있더라구요?

 

병실에 타블렛이 있길래 보니 병원비가 3천인가 찍혀있어 기겁을 하고 이거 다 나오냐고 간호사님에게 물어보니

자긴 잘 모르겠고 다 나오진 않을꺼예요 라는 말만 하시더군요. 첨엔 팔다리 묶여있어서 움직이지도 못하다가

눈뜨고 일주일쯤 지나고 풀어주셔서 몸을 살펴보니 허벅지 양쪽에 뭘로 짼거 같은 상처4개가 있길래 이게 뭐냐고

물어보니까 에크모를 단거라고 하더라구요. 에크모가 그 당시엔 뭔지 몰랐는데 나중에 들으니 거의 마지막수단쯤 돼더군요;

시계도 없는 허연벽에 기계음만 들리는데 차라리 기절해있는게 나을정도로 시간이 안가 정신병걸릴꺼 같았어요.

나중엔 환각에 환청도생기더군요. 왜 감옥가면 독방이 무서운건지 이때 알았습니다. 

근대 환각이 좀 웃겼어요 아이언맨이랑 배트맨도 보이더라구요

 

눈뜨고 이주쯤 됐나? 폐에서 코로나균이 사라졌다며 중증치료실로 옮기는데 거긴 사람이 좀 있어서 그래도 덜 지루했습니다.

움직일수 없는건 그대로였지만 그래도 사람들끼리 떠드는 소리가 들리는게 정말로 정신적으로 도움이 돼더군요.

테블렛에서 티비를 볼수 있어서 틀었는데 근 5년을 안본 티비 그때 다 본거 같습니다. 미생 정말 재밌더군요..

내려와서 처음으로 스마트폰을 만졌는데 그렇게 무거운줄 몰랐습니다. 겔폴드는 아예 들수도 없었고 아이폰도 두손으로

 겨우 잡고 쓸수 있었죠. 밥도 혼자서 못먹어 간호사님이 계속 먹여줘야 했습니다. 그래도 지금 생각해보면 그런 호강이 없었던거 같네요

 

일주일쯤 지나서 드디어 산소마스크를 때고 일반실로 내려오고 재활하는데 인생처음으로 보행기를 써봤습니다. 아기들쓰던

그거에서 크기만 키운 느낌이더군요 ㅡㅡ; 그래도 회복이 빨라서 첫날은 50미터도 못걸었는데 일주일쯤 지나니 계단도 일층정도는

오르내릴수 있게 되었습니다. 그러니까 비로소 의사님이 이제 퇴원하세요 하더군요.  집에 전화해서 정산하고 대려와라 하는데

마눌님이 6천!!이 찍혀있다고 하더라구요. 마지막에 다 감액받고 30만원 좀 안나오긴 했는데 그거 다 나왔으면 퇴원해도

살기 싫엇을꺼 같아요. 

 

코로나로 입원한 사람 물건은 다 태우더군요. 전 그래서 양복만 드라이 맡기고 추리링 속옷은 이번에 전부 새로샀습니다

입고 간건 보건소에서 태우고 있던건 마누라가 불길하다며 다 버렸죠 ..양복은 비싸서 차마 못버렸나봅니다 ;

 

퇴원하고 제일 좋았던건 샤워를 하루종일 할수 있던거랑 정말로 맛없던 병원밥에서 해방된거였습니다.

병원밥은 정말 맛없더군요.. 전 코로나로 고생한거보다 병원밥먹는게 더 힘들었던거 같습니다.

 

 

 걸렸던 사람이 이런말 하긴 좀 그렇지만 너무 겁먹지 마세요.. 한국병원 좋아요.

 

0-=0-=0-=0-=0-=

 

www.dkuh.co.kr/mobile_2016/board/board?bo_table=01_03_01&wr_id=3221&page=9

 

단국대학교병원 모바일

환자의 심장과 폐 기능을 대신하여 죽어가는 사람도 살린다는 에크모(ECMO)! 작성자 2020-05-12 09:16 조회7,697회 관련링크 본문 죽어가는 사람도 살린다는 에크모(ECMO)!환자의 심장과 폐 기능 대신, 위

www.dkuh.co.kr

 

패키지 관리자들(아나콘다, pip, pycharm내장...)과 직접 파일 옮기는 등의 작업들을 하다 꼬이는 부분이 많다. 필요할 때 없는 부분도 많고... 결국엔 pyCharm 과 패키지는 버전별로 수동 관리가 가장 정확한 것 같다. 그 외엔 논문뿐... 스샷은... 이제 제대로 올리지 못할 것 같다. 전처럼 하나하나 설명하는 것도 내 밥줄을 스스로 끊는 격이라. 참 서울은 살기 힘들다. ㅋ. 즐기지 못하는 사람이 너무 많아서. 그래도 다행이다. 정점에 있는 사람들은 식견이 괜찮아서. 그러니 산업이 유지되는 것이겠지.

프로젝트는 종료 되었으나 내가 본 것 중

꽤 괜찮은 공개 자료를 올려 두려고 한다. 보통 시간 지나면 페이지가 없어지는 경우가 워낙 많아서...

 

딥러닝을활용한영상기반폐질환진단및유사증례검색SW개발.pdf
0.37MB

https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html

 

Training Custom Object Detector — TensorFlow 2 Object Detection API tutorial documentation

Before we begin training our model, let’s go and copy the TensorFlow/models/research/object_detection/model_main_tf2.py script and paste it straight into our training_demo folder. We will need this script in order to train our model. Now, to initiate a n

tensorflow-object-detection-api-tutorial.readthedocs.io

https://teachablemachine.withgoogle.com/train/image

 

Teachable Machine

Train a computer to recognize your own images, sounds, & poses. A fast, easy way to create machine learning models for your sites, apps, and more – no expertise or coding required.

teachablemachine.withgoogle.com

 

https://emaru.tistory.com/41

 

TensorFlow - (streaming)Object Detection API 사용하기 3편

안녕하세요 마루입니다~ 오늘은 Google의 Object Detection API 사용하기 3편을 포스팅해볼려고 합니다 ㅎㅎ 1편이 Jupyter notebook에서 2편은 Local에서 사용했었다면 3편은 Local에서 웹캠의 스트리밍에 Object

emaru.tistory.com

 

https://ballentain.tistory.com/18

 

1.2. Pretrained model 다운로드 및 압축 풀기

object_detection_tutorial.ipynb을 살펴보면 전체적인 흐름이 다음과 같다. 사용하고자 하는 pretrained model의 tar.gz 파일 다운로드 tar.gz 파일 압축 풀기 pretrained model의 계산 그래프 로드 모델 실행..

ballentain.tistory.com

 

https://ukayzm.github.io/python-object-detection-tensorflow/

 

Python Object Detection with Tensorflow

구글은 텐서플로로 구현된 많은 모델을 아파치 라이센스로 공개하고 있습니다. 그 중에서 object detection API 사진에서 물체를 인식하는 모델을 쉽게 제작/학습/배포할 수 있는 오픈소스 프레임워��

ukayzm.github.io

 

https://www.geeksforgeeks.org/object-detection-vs-object-recognition-vs-image-segmentation/

 

Object Detection vs Object Recognition vs Image Segmentation - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

https://musma.github.io/2019/02/15/tensorflow-on-windows.html

 

Windows에서 Tensorflow Object Detection API 설치하기!!

Windows에서 Tensorflow Object Detection API 설치하기!

musma.github.io

 

https://blog.naver.com/laonple/221327285813

 

4. Tensorflow(텐서플로우) - MLP(다층 신경망) 구현하기!

안녕하세요 라온피플(주)입니다. 이번 시간에는 Tensorflow를 이용하여 MLP를 구현해보겠습니다.MLP...

blog.naver.com

 

https://www.tensorflow.org/tutorials/images/classification

 

이미지 분류  |  텐서 플로우 코어  |  TensorFlow

이 학습서는 꽃의 이미지를 분류하는 방법을 보여줍니다. keras.Sequential 모델을 사용하여 이미지 분류기를 만들고 preprocessing.image_dataset_from_directory 사용하여 데이터를로드합니다. 다음과 같은 개�

www.tensorflow.org

 

https://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/image-classification.html

 

Image Classification 알고리즘 - Amazon SageMaker

기존 딥 러닝 프레임워크와의 더 나은 상호 운용성을 유지하기 위해 다른 Amazon SageMaker 알고리즘에서 일반적으로 사용되는 protobuf 데이터 형식과는 다릅니다.

docs.aws.amazon.com

 

https://cloud.google.com/ai-platform/training/docs/algorithms/image-classification-start#console_2

 

기본 제공 이미지 분류 알고리즘 시작하기  |  AI Platform Training  |  Google Cloud

베타 이 제품이나 기능은 출시 전 상태로 변경되거나 지원이 제한될 수 있습니다. 자세한 내용은 제품 출시 단계를 참조하세요. AI Platform Training의 기본 제공 알고리즘을 사용하면 학습 애플리케

cloud.google.com

 

AIaaS 가 대세지...

분류는 해서 회사에서 잘 써먹었다. 나 이런거 해요. 나 잘하죠? 나 대단하죠? 그러니 건들지 마세요. 그런 수준?

 

그런데 이 프로젝트는 의사가 없으면 터무니 없는 프로젝트라는 것을 알게 되었다.

 

supervised 가 아닌 deep learning 을 이용해서 뭘 한다고 해도 검증, 평가를 위해서도 의사가 해야 한다는 말이다.

 

그러나 수 많은 삽질로 얻게 된 것은  private repo만 하다, open source contributing 이 뭔지 그 느낌을

 

FSF 이 후 다시 상기하게 되었다. 회사일도 오픈소스에 기여하고 그것을 쓰면 되겠다는 생각으로 바뀌었다.

 

그리고 생각보다 공개된 의학 data 가 공개 인터넷 상에 많다는 것(CT만 국한된게 아니라 의학 지식들도)

 

인터넷에 많지만 의사가 없으면 그 지식을 엮지 못한다는 것 등을 알았다.

 

언젠가 다시 시작할 수 있지만 의학 관련 회사를 가지 않는 이상은 불가능 할 것 같고,

 

병원이 더 설립이 되겠지 그것이 일반 아파트로 들어가지는 않을거라는 생각이다.

 

물론, 병원도 건축 기준이 있고 관련해서 누군가에게 이야기 들은 바로는

 

국내 유명 병원이 동남아 쪽에 분점 설치를 의뢰 받고 건물까지 받았지만 그것을 기준에 부합하고 리모델링 하는데 비용이 많이 들어서

 

포기했다는 말도 들었다. 아무래도 자본주의 사회다 보니 비용이 걱정되는 것 같은데...

 

이게 참... 병원이 필요한게 돈으로만 환산 된다면 자원 광물도 없고, 못 사는 나라에서의 병원을 짓는 것은 항상 요원할거라는 판단이다.

 

글로벌하게 보면 병원 뿐 아니라 당장 물이 더러워서 식중독으로 죽는 아이들도 넘쳐나는 상황이다.

 

이런 시각으로 보니 불모지의 땅에 꼭 병원이 아니더라도 뭔가 가치 창출을 하려는 사람들의 행적이 새삼 대단하게 생각되었다.

 

믓튼, 그랬다.

"""
====================
Read DICOM directory
====================

This example shows how to read DICOM directory.

"""

# authors : Guillaume Lemaitre <g.lemaitre58@gmail.com>
# license : MIT

from os.path import dirname, join
from pprint import pprint

import pydicom
from pydicom.data import get_testdata_file
from pydicom.filereader import read_dicomdir

# fetch the path to the test data
filepath = get_testdata_file('DICOMDIR')
print('Path to the DICOM directory: {}'.format(filepath))
# load the data
dicom_dir = read_dicomdir(filepath)
base_dir = dirname(filepath)

# go through the patient record and print information
for patient_record in dicom_dir.patient_records:
if (hasattr(patient_record, 'PatientID') and
hasattr(patient_record, 'PatientName')):
print("Patient: {}: {}".format(patient_record.PatientID,
patient_record.PatientName))
studies = patient_record.children
# got through each serie
for study in studies:
print(" " * 4 + "Study {}: {}: {}".format(study.StudyID,
study.StudyDate,
study.StudyDescription))
all_series = study.children
# go through each serie
for series in all_series:
image_count = len(series.children)
plural = ('', 's')[image_count > 1]

# Write basic series info and image count

# Put N/A in if no Series Description
if 'SeriesDescription' not in series:
series.SeriesDescription = "N/A"
print(" " * 8 + "Series {}: {}: {} ({} image{})".format(
series.SeriesNumber, series.Modality, series.SeriesDescription,
image_count, plural))

# Open and read something from each image, for demonstration
# purposes. For simple quick overview of DICOMDIR, leave the
# following out
print(" " * 12 + "Reading images...")
image_records = series.children
image_filenames = [join(base_dir, *image_rec.ReferencedFileID)
for image_rec in image_records]

datasets = [pydicom.dcmread(image_filename)
for image_filename in image_filenames]

patient_names = set(ds.PatientName for ds in datasets)
patient_IDs = set(ds.PatientID for ds in datasets)

# List the image filenames
print("\n" + " " * 12 + "Image filenames:")
print(" " * 12, end=' ')
pprint(image_filenames, indent=12)

# Expect all images to have same patient name, id
# Show the set of all names, IDs found (should each have one)
print(" " * 12 + "Patient Names in images..: {}".format(
patient_names))
print(" " * 12 + "Patient IDs in images..: {}".format(
patient_IDs))

parisot1.pdf
1.30MB

 

pyDicom 과 오픈 소스가 많아서 dcm 이미지를 바로 부를 수 있었다. 문제는 학습을 돌리는데 그래프가 좀처럼 올라가지 않는 것이었다. 그래서 다운 받은 파일을 온라인 dcm 뷰어로 열어보니... 동일 X-ray만 모두 둔게 아니었다. 우선, 의학 지식이 없어 X-ray를 볼 줄 모르는 것도 문제였다. 받은 자료의 폴더 하나가 하나의 환자 혹은 시간 단위의 같은 환자 일 수 있었고, 해당 폴더는 2개로 나누어 지는데 그 중 하나는 MRI 같았다. 여러장을 볼 때 특정한 위치의 몇 장에서 breast 모양이 약간 나오는 것으로 봐서는 X-ray가 여러 층으로 되어 있는 것 같았다.(그래서 MRI라고 추측 해봄)

 자료 출처가 있는 곳으로 가서 설명을 자세히 보면 되겠다. 아래 쪽 폴더의 X-ray(좌측 검은색 물체가 약간 보이는)는 당최 뭔지 모르니 train data에서 빼야 겠다는 생각이 들었다. 그리고 환자별 MRI가 모두 암 환자의 MRI가 맞다면, 암이 보이는 X-ray가 가슴모양이 그나마 나오는 

여기서 암이 다 보이는 것인지 알아 봐야 했다. 그래야 일단 비슷한 분류끼리 모아서 한 번에 학습을 시킬텐데 말이다.

 

전문의 한테 물어봐야 하는 단계에 왔다. 상식적으로 생각해봐도 X-ray는 단층이라 x, y만 있으니 암세포는 z축으로 자랄 수도 있을 것 같다. 그래서 당연히 모든 X-ray 를 봐야 할 것 같다. 이 정도 진행을 해 보니 차라리 학습 전에 2D 만으로 3D를 구성하고 암세포가 있는 해당 3D 파일 구조에서 암세포를 학습 시키는 것이 더 나을 것 같다는 생각도 들었다.

 

이러니 IBM 왓슨 암 진달률이 떨어져서 요즘 병원에서 점차 물러나고 있는 추세 인 것 같다. 동양인 서양인 데이터도 다르다고 하던데 그 부분도 검증을 해 봐야 하고 말이다.

 

의료 분야는 정말 생각할게 많네. ㅡㅡ;

 

다행히 아는 전문의가 있고 자주 기술 문제 문의로 전화를 주시기 때문에 의료 데이터에 대해서 여쭤볼 수 있을 것 같다. 가슴 쪽 말고 다른 CT를 좀 보다보면 세웠던 가설에 대한 검증도 될 것 같지만 전문가는 만나서 물어보는게 최고지. 다음 주 술 자리만 3개라... 2주 쯤 걸릴 것 같다.

 

암이던 아니던 어느 부위인지 자동 인식 하는 분류부터 만들고 들어가면 더 쉽겠네.

의학 자료 구글링은 좋은 크롤러를 만날 수 있었고, 한국 개발자라 자랑스럽다는 것을 알았으나,

이런 방식의 시도는 자료가 오픈 되었다는 것을 알았을 때, 약간 바보 같은 짓이었다. ^^

 

 

다운로더 까지 제공하며 3개의 BREAST CANCER 이미지만 100기가다...

덕분에 GTA5를 지웠다. ㅠㅠ 뜨어어어어... 언젠가 스트레스가 극에 달했을 때 다시 설치 해야지.

다이콤이라 뷰어를 찾아 봤다. 어차피 가공하려면 소스 레벨에서 해야 되나... 밤이라 오버워치 하면서 한다고 집중도 안되니. 토이 프로젝트라는 것을 잊지 말자. 그 누구의 지원도 그 누구의 기획도 없는 자유로운 취미 활동. 어느 정도의 몰입은 좋지만 밸런스를 잘 못 맞추면 또 일이 되어 버린다.

https://www.fosshub.com/IrfanView.html?dwl=iview454_x64_setup.exe

 

IrfanView

IrfanView: Free software download for windows.

www.fosshub.com

음... DICOM만 선택해서 깔았는데 플러그인 깔라고 한다.

http://dk.kisti.re.kr/?q=node/7

 

VIEWER | Digital Korean

 

dk.kisti.re.kr

여기 뷰어들이 있는데 더 설치하는 것은 나에게 의미 없으니 파이썬 소스를 찾았다.

 

https://pydicom.github.io/pydicom/stable/auto_examples/input_output/plot_read_dicom.html

 

Read DICOM and ploting using matplotlib — pydicom 2.0.0 documentation

© Copyright 2008-2020, Darcy Mason and pydicom contributors

pydicom.github.io

 

https://anaconda.org/conda-forge/pydicom

 

Pydicom :: Anaconda Cloud

License: MIT 251105 total downloads Last upload: 27 days and 38 minutes ago Installers Info: This package contains files in non-standard labels. conda install linux-64  v0.9.9 win-32  v0.9.9 noarch  v2.0.0 win-64  v0.9.9 osx-64  v0.9.9 To install this

anaconda.org

 

 

(base) C:\Users\joe>conda install -c conda-forge pydicom

Collecting package metadata (current_repodata.json): done

Solving environment: done

 

## Package Plan ##

 

  environment location: J:\Anaconda3

 

  added / updated specs:

    - pydicom

 

 

The following packages will be downloaded:

 

    package                    |            build

    ---------------------------|-----------------

    ca-certificates-2020.6.20  |       hecda079_0         184 KB  conda-forge

    certifi-2020.6.20          |   py37hc8dfbb8_0         151 KB  conda-forge

    conda-4.8.3                |   py37hc8dfbb8_1         3.1 MB  conda-forge

    openssl-1.1.1g             |       he774522_0         5.7 MB  conda-forge

    pydicom-2.0.0              |     pyh9f0ad1d_0        26.5 MB  conda-forge

    python_abi-3.7             |          1_cp37m           4 KB  conda-forge

    ------------------------------------------------------------

                                           Total:        35.6 MB

 

The following NEW packages will be INSTALLED:

 

  pydicom            conda-forge/noarch::pydicom-2.0.0-pyh9f0ad1d_0

  python_abi         conda-forge/win-64::python_abi-3.7-1_cp37m

 

The following packages will be UPDATED:

 

  ca-certificates     pkgs/main::ca-certificates-2020.1.1-0 --> conda-forge::ca-certificates-2020.6.20-hecda079_0

  conda                       pkgs/main::conda-4.8.3-py37_0 --> conda-forge::conda-4.8.3-py37hc8dfbb8_1

 

The following packages will be SUPERSEDED by a higher-priority channel:

 

  certifi               pkgs/main::certifi-2020.6.20-py37_0 --> conda-forge::certifi-2020.6.20-py37hc8dfbb8_0

  openssl                                         pkgs/main --> conda-forge

 

 

Proceed ([y]/n)? y

 

 

Downloading and Extracting Packages

certifi-2020.6.20    | 151 KB    | ############################################################################ | 100%

conda-4.8.3          | 3.1 MB    | ############################################################################ | 100%

pydicom-2.0.0        | 26.5 MB   | ##########################################################################2  |  98%

 

anaconda navigator에서 안 보인다. 커맨드로 설치.

 

 

잘되네.

그런데 왠지... dcm으로 돌리는 AIaaS도 있을 것 같다.

 

그나저나 GTA5로 될게 아니었다... breast cancer 자료 타래가 10 타래 넘어간다.(카테고리 용어 지겨워서...) 어느 타래는 접근 제한으로 암호를 물어 본다.

그러나 지금 하드 용량으로도 10TB 받지 못한다 ㅠ 왜냐면 꽉 차서 ㅋ 뭘 지워야 하나... 가족 사진이 반 이상인데 ㅠ 

어느 타래는 1TB 넘는 타래도 있고, 100GB도 있다. 당장은 저렇게 까지는 많이 필요 없을 것 같아서 집에 있는 10TB 이상의 공 하드 디스크(오래전에 쟁겨놔서 1, 1.5TB 짜리 들이다.. ㅠㅠ)를 달 필요는 없을 것 같다. 쟁겨 놓는거 좋아해서 쓰레드 리퍼도 포장 된 채로 있는데 ㅠ

 

믓튼...

이런 방식으로 진행한다. 최고의 대학교에서 박사 받았던 아는 형도 어느 날 갑자기 자율 주행차 만들라고 해서 구글링부터 했다더라. 1년 정도 연구가 큰 진전이 없어서 세계 유수 회사들과 연계했다고...

 

삽질도 다 같이 삽질하면 됴코. 여긴 없나요?

_breast cancer_ CT.7z
1.60MB

All of the data is attached above.

 

AutoCralwer solution is not working properly when the datas are huge.

The saving mechanism is not working I think.

After one more try without "naver" option, I will fix the code.

 

current code snapshot

---

"""
Copyright 2018 YoongiKim

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""


import os
import requests
import shutil
from multiprocessing import Pool
import argparse
from collect_links import CollectLinks
import imghdr
import base64


class Sites:
GOOGLE = 1
NAVER = 2
GOOGLE_FULL = 3
NAVER_FULL = 4

@staticmethod
def get_text(code):
if code == Sites.GOOGLE:
return 'google'
elif code == Sites.NAVER:
return 'naver'
elif code == Sites.GOOGLE_FULL:
return 'google'
elif code == Sites.NAVER_FULL:
return 'naver'

@staticmethod
def get_face_url(code):
if code == Sites.GOOGLE or Sites.GOOGLE_FULL:
return "&tbs=itp:face"
if code == Sites.NAVER or Sites.NAVER_FULL:
return "&face=1"


class AutoCrawler:
def __init__(self, skip_already_exist=True, n_threads=4, do_google=True, do_naver=True, download_path='download',
full_resolution=False, face=False):
"""
:param skip_already_exist: Skips keyword already downloaded before. This is needed when re-downloading.
:param n_threads: Number of threads to download.
:param do_google: Download from google.com (boolean)
:param do_naver: Download from naver.com (boolean)
:param download_path: Download folder path
:param full_resolution: Download full resolution image instead of thumbnails (slow)
:param face: Face search mode
"""

self.skip = skip_already_exist
self.n_threads = n_threads
self.do_google = do_google
self.do_naver = do_naver
self.download_path = download_path
self.full_resolution = full_resolution
self.face = face

os.makedirs('./{}'.format(self.download_path), exist_ok=True)

@staticmethod
def all_dirs(path):
paths = []
for dir in os.listdir(path):
if os.path.isdir(path + '/' + dir):
paths.append(path + '/' + dir)

return paths

@staticmethod
def all_files(path):
paths = []
for root, dirs, files in os.walk(path):
for file in files:
if os.path.isfile(path + '/' + file):
paths.append(path + '/' + file)

return paths

@staticmethod
def get_extension_from_link(link, default='jpg'):
splits = str(link).split('.')
if len(splits) == 0:
return default
ext = splits[-1].lower()
if ext == 'jpg' or ext == 'jpeg':
return 'jpg'
elif ext == 'gif':
return 'gif'
elif ext == 'png':
return 'png'
else:
return default

@staticmethod
def validate_image(path):
ext = imghdr.what(path)
if ext == 'jpeg':
ext = 'jpg'
return ext # returns None if not valid

@staticmethod
def make_dir(dirname):
current_path = os.getcwd()
path = os.path.join(current_path, dirname)
if not os.path.exists(path):
os.makedirs(path)

@staticmethod
def get_keywords(keywords_file='keywords.txt'):
# read search keywords from file
with open(keywords_file, 'r', encoding='utf-8-sig') as f:
text = f.read()
lines = text.split('\n')
lines = filter(lambda x: x != '' and x is not None, lines)
keywords = sorted(set(lines))

print('{} keywords found: {}'.format(len(keywords), keywords))

# re-save sorted keywords
with open(keywords_file, 'w+', encoding='utf-8') as f:
for keyword in keywords:
f.write('{}\n'.format(keyword))

return keywords

@staticmethod
def save_object_to_file(object, file_path, is_base64=False):
try:
with open('{}'.format(file_path), 'wb') as file:
if is_base64:
file.write(object)
else:
shutil.copyfileobj(object.raw, file)
except Exception as e:
print('Save failed - {}'.format(e))

@staticmethod
def base64_to_object(src):
header, encoded = str(src).split(',', 1)
data = base64.decodebytes(bytes(encoded, encoding='utf-8'))
return data

def download_images(self, keyword, links, site_name):
self.make_dir('{}/{}'.format(self.download_path, keyword))
total = len(links)

for index, link in enumerate(links):
try:
print('Downloading {} from {}: {} / {}'.format(keyword, site_name, index + 1, total))

if str(link).startswith('data:image/jpeg;base64'):
response = self.base64_to_object(link)
ext = 'jpg'
is_base64 = True
elif str(link).startswith('data:image/png;base64'):
response = self.base64_to_object(link)
ext = 'png'
is_base64 = True
else:
response = requests.get(link, stream=True)
ext = self.get_extension_from_link(link)
is_base64 = False

no_ext_path = '{}/{}/{}_{}'.format(self.download_path, keyword, site_name, str(index).zfill(4))
path = no_ext_path + '.' + ext
self.save_object_to_file(response, path, is_base64=is_base64)

del response

ext2 = self.validate_image(path)
if ext2 is None:
print('Unreadable file - {}'.format(link))
os.remove(path)
else:
if ext != ext2:
path2 = no_ext_path + '.' + ext2
os.rename(path, path2)
print('Renamed extension {} -> {}'.format(ext, ext2))

except Exception as e:
print('Download failed - ', e)
continue

def download_from_site(self, keyword, site_code):
site_name = Sites.get_text(site_code)
add_url = Sites.get_face_url(site_code) if self.face else ""

try:
collect = CollectLinks() # initialize chrome driver
except Exception as e:
print('Error occurred while initializing chromedriver - {}'.format(e))
return

try:
print('Collecting links... {} from {}'.format(keyword, site_name))

if site_code == Sites.GOOGLE:
links = collect.google(keyword, add_url)

elif site_code == Sites.NAVER:
links = collect.naver(keyword, add_url)

elif site_code == Sites.GOOGLE_FULL:
links = collect.google_full(keyword, add_url)

elif site_code == Sites.NAVER_FULL:
links = collect.naver_full(keyword, add_url)

else:
print('Invalid Site Code')
links = []

print('Downloading images from collected links... {} from {}'.format(keyword, site_name))
self.download_images(keyword, links, site_name)

print('Done {} : {}'.format(site_name, keyword))

except Exception as e:
print('Exception {}:{} - {}'.format(site_name, keyword, e))

def download(self, args):
self.download_from_site(keyword=args[0], site_code=args[1])

def do_crawling(self):
keywords = self.get_keywords()

tasks = []

for keyword in keywords:
dir_name = '{}/{}'.format(self.download_path, keyword)
if os.path.exists(os.path.join(os.getcwd(), dir_name)) and self.skip:
print('Skipping already existing directory {}'.format(dir_name))
continue

if self.do_google:
if self.full_resolution:
tasks.append([keyword, Sites.GOOGLE_FULL])
else:
tasks.append([keyword, Sites.GOOGLE])

if self.do_naver:
if self.full_resolution:
tasks.append([keyword, Sites.NAVER_FULL])
else:
tasks.append([keyword, Sites.NAVER])

pool = Pool(self.n_threads)
pool.map_async(self.download, tasks)
pool.close()
pool.join()
print('Task ended. Pool join.')

self.imbalance_check()

print('End Program')

def imbalance_check(self):
print('Data imbalance checking...')

dict_num_files = {}

for dir in self.all_dirs(self.download_path):
n_files = len(self.all_files(dir))
dict_num_files[dir] = n_files

avg = 0
for dir, n_files in dict_num_files.items():
avg += n_files / len(dict_num_files)
print('dir: {}, file_count: {}'.format(dir, n_files))

dict_too_small = {}

for dir, n_files in dict_num_files.items():
if n_files < avg * 0.5:
dict_too_small[dir] = n_files

if len(dict_too_small) >= 1:
print('Data imbalance detected.')
print('Below keywords have smaller than 50% of average file count.')
print('I recommend you to remove these directories and re-download for that keyword.')
print('_________________________________')
print('Too small file count directories:')
for dir, n_files in dict_too_small.items():
print('dir: {}, file_count: {}'.format(dir, n_files))

print("Remove directories above? (y/n)")
answer = input()

if answer == 'y':
# removing directories too small files
print("Removing too small file count directories...")
for dir, n_files in dict_too_small.items():
shutil.rmtree(dir)
print('Removed {}'.format(dir))

print('Now re-run this program to re-download removed files. (with skip_already_exist=True)')
else:
print('Data imbalance not detected.')


if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--skip', type=str, default='true',
help='Skips keyword already downloaded before. This is needed when re-downloading.')
parser.add_argument('--threads', type=int, default=4, help='Number of threads to download.')
parser.add_argument('--google', type=str, default='true', help='Download from google.com (boolean)')
parser.add_argument('--naver', type=str, default='true', help='Download from naver.com (boolean)')
parser.add_argument('--full', type=str, default='false', help='Download full resolution image instead of thumbnails (slow)')
parser.add_argument('--face', type=str, default='false', help='Face search mode')
args = parser.parse_args()

_skip = False if str(args.skip).lower() == 'false' else True
_threads = args.threads
_google = False if str(args.google).lower() == 'false' else True
_naver = False if str(args.naver).lower() == 'false' else True
_full = False if str(args.full).lower() == 'false' else True
_face = False if str(args.face).lower() == 'false' else True

print('Options - skip:{}, threads:{}, google:{}, naver:{}, full_resolution:{}, face:{}'.format(_skip, _threads, _google, _naver, _full, _face))

crawler = AutoCrawler(skip_already_exist=_skip, n_threads=_threads, do_google=_google, do_naver=_naver, full_resolution=_full, face=_face)
crawler.do_crawling()

=-=-=-=-=

err msg

Downloading images from collected links... "breast cancer" CT from google
Exception google:"breast cancer" CT - [WinError 123] 파일 이름, 디렉터리 이름
 또는 볼륨 레이블 구문이 잘못되었습니다: 'C:\\morpheus\\JOE\\AutoCrawler-mast
er 2\\AutoCrawler-master\\download/"breast cancer" CT'
Task ended. Pool join.
Data imbalance checking...

 

Downloading images from collected links... "breast cancer" CT from google
Exception google:"breast cancer" CT - [WinError 123] 파일 이름, 디렉터리 이름
 또는 볼륨 레이블 구문이 잘못되었습니다: 'C:\\morpheus\\JOE\\AutoCrawler-mast
er 2\\AutoCrawler-master\\download/"breast cancer" CT'
Task ended. Pool join.
Data imbalance checking...

 

is the problem

 

[4876:14980:0625/200842.641:ERROR:ssl_client_socket_impl.cc(959)] handshake f ailed; returned -1, SSL error code 1, net_error -200

 

[4876:14980:0625/200842.641:ERROR:ssl_client_socket_impl.cc(959)] handshake f ailed; returned -1, SSL error code 1, net_error -200

 

 

 

collect_links.py 48 line

 

chrome_options = Options()

        chrome_options.add_argument('--headless')

        chrome_options.add_argument('--no-sandbox')

        chrome_options.add_argument('--disable-dev-shm-usage')

        self.browser = webdriver.Chrome(executable, chrome_options=chrome_options)

 

still...

 

 

430: https://www.oncologynurseadvisor.com/wp-content/uploads/sites/13/2019/01

/c752406354ff50ac055bfccde4105efd_bookmarkImage_335x250_large_original_1.jpg

[0625/211556.818:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; retu

rned -1, SSL error code 1, net_error -100

[0625/211556.820:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; retu

rned -1, SSL error code 1, net_error -100

[0625/211557.085:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; retu

rned -1, SSL error code 1, net_error -100

[0625/211557.088:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; retu

rned -1, SSL error code 1, net_error -100

 

maybe keyword?

흠...

다양한 시스템(맥, 윈서버, 윈10)에서 돌리다보니,  문제의 양상이 다양하다. 이제 Click time out - //input[@type="button"] 으로 나타난다. 

 

chrome_options.add_argument('--headless') 옵션을 주니 창이 나오지 않아 더 빠른 것 같은데...  위의 에러가 나서 창을 띄우니 제대로 받아진다.

 

Collecting links... Breast cancer CT from google
Scrolling down
Scraping links
Collect links done. Site: google, Keyword: Breast cancer CT, Total: 434
Downloading images from collected links... Breast cancer CT from google
Downloading Breast cancer CT from google: 1 / 434
Download failed -  Invalid URL 'None': No schema supplied. Perhaps you meant http://None?
Downloading Breast cancer CT from google: 2 / 434
Downloading Breast cancer CT from google: 3 / 434
Downloading Breast cancer CT from google: 4 / 434
Downloading Breast cancer CT from google: 5 / 434
Downloading Breast cancer CT from google: 6 / 434
Downloading Breast cancer CT from google: 7 / 434
Downloading Breast cancer CT from google: 8 / 434
Downloading Breast cancer CT from google: 9 / 434
Downloading Breast cancer CT from google: 10 / 434

 

구글인데 434 밖에 없나? 쩝.. ㅠㅠ 창으로 확인해 보니 더 자료가 없다고 한다. 데이터 제공처를 더 찾아보고 키워드 조합도 다양하게 try 해봐야겠다. 

 

Breast cancer CT.7z
3.13MB

그래도 이미지 퀄리티가 괜찮네. 

breast cancer CT 말고 breast cancer ct scan images 로 키워드 바꾸고 full resolution mode로 해 본다.

그러니 700개가 나온다.

너무 적은데? ...

 

인터넷 뒤져보니 내 상상보다 많은 이미지 데이터가 이미 있다.

https://www.cancerimagingarchive.net/collections/

 

TCIA Collections - The Cancer Imaging Archive (TCIA)

TCIA data are organized as “collections”; typically these are patient cohorts related by a common disease (e.g. lung cancer), image modality or type (MRI, CT, digital histopathology, etc) or research focus. Supporting data related to the images such as

www.cancerimagingarchive.net

데이터 받는 앱도 있고. 아마 토렌트 겠지?

믓튼, 저 사이트 외에도 꽤 있다. 잘 정리해 둬야지.

 

어머니께서 유방암이셨기 때문에 유방암부터 시작한다. 19개의 선택지 중 구글링(네이버 이미지 검색은 자료가 거의 없다) 해서 나오는 CT 이미지가 많은 것을 우선 순위로 하는게 맞다. 방향이 잘못되었을 때 다시 이 곳으로 돌아와서 시작하면 될 것 같다.

https://en.wikipedia.org/wiki/Breast_cancer

 

Breast cancer - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Cancer that originates in the mammary gland Breast cancerMammograms showing a normal breast (left) and a breast with cancer (right)SpecialtyOncologySymptomsA lump in a breast, a change

en.wikipedia.org

breast cancer가 학명인 것 같다.

이런 사이트도 찾았다.

https://www.nationalbreastcancer.org/types-of-breast-cancer/

 

Types Archives - National Breast Cancer Foundation

Types of breast cancer include ductal carcinoma in situ, invasive ductal carcinoma, inflammatory breast cancer, and metastatic breast cancer.

www.nationalbreastcancer.org

음 이런 좋은 사이트를 놓칠 뻔 했네.

breast cancer로 구글링 해보니

https://learningenglish.voanews.com/a/google-ai-system-could-improve-breast-cancer-detection/5231018.html

 

Google AI System Could Improve Breast Cancer Detection

A Google artificial intelligence system was as good as expert radiologists at discovering which women had breast cancer in a new study.

learningenglish.voanews.com

올 해 1월 1일 구글 AI를 통하여 근육 조직 사이의 암을 발견했다는 내용이었다. 

음... 내 눈으로 봐도 암 인지 모르겠다. 결국 평가 방법도 AI 여야 한다는 것이네. 이미 확정된 암 CT 사진을 돌려서 만들어진 모델이 암을 판별하는 것인지 아닌지 봐야 한다는 뜻.

 

이 정도만 해도... 늘 같은 위치에서 각은 각도로, 각은 기기로 각은 해상도 등 같은 표현 방법으로 표현된 데이터를 학습 시켜도 퀄리티가 잘 나올지 의문인 상태다. 그냥 암세포만 가까이 찍은 CT로 암세포인지 판별하는 방법이 더 나을 것도 같다.

 

병원과 연계가 힘드니, 수집 된 구글링 된 사진이 breast cancer CT 사진인지 아닌지부터 알아내는 것이 중요할 것 같다. 

 

01010101101010101011101011010100010110001010110010010101010101010101011001010101010101101010

 

1년이 되어 리모트 컴퓨터를 켰는데 ftp 붙는데만 30분 걸렸다 ㅡㅡ; 보통 재부팅 시간 1~2분 내외였는데. 확인 방법은 간단, 켜질 때까지 ping 걸어 두고 보는 것.(노가다 폴링 방식) MSTSC가 먹기까지 또 20분 더 걸렸다. 부팅은 늦지만 서비스가 순서대로 사는 중에도 FTP 파일 전송이 되는 것을 보고 확실히 윈도우 서버 버전은 안정화에 중점을 둔 솔루션이 맞다는 생각이다.

 

켜진 후에 오토 크롤 돌렸다. 그동안 맥에서만 83으로 올리다 보니 윈도우용 업글을 안해서 드라이버 업글했다. 83이 크롬 최신인데 벌써 84도 나왔네 ㅋㅋ

https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.39/

 

https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.39/

 

chromedriver.storage.googleapis.com

그 사이 해당 데이터를 제공하는 웹 서핑을 30분 정도 할 예정.

 

그리고 업데이트도. 윈도우 서버는 선택적 업데이트를 해야 한다. 이거 몰라서 다른 작업 못하게 막는 서버팀 봤었는데, 때론 작은 지식이 매우 큰 결과를 낼 때도 있다.

1년 즈음 되면 업데이트를 한다.(다들 서버 뚫리니 어떠니 할 때는 매일 보안 업데이트 검색하고 적용하고 그랬는데) 대학생 때 서버 호스팅 사업을 시작으로 서버는 20년을 해 보니 보안이 뭔지 조금 알겠다.

우선, IP만 안 알려지면 된다. 크래킹 하려면 도메인에 IP 연결된 대표 서버를 깨면 되고, 다른 서버 보다 DNS 서버 보안이 가장 중요하다.

 

Downloading breast cancer ct scan images from google: 736 / 743
Downloading breast cancer ct scan images from google: 737 / 743
Downloading breast cancer ct scan images from google: 738 / 743
Downloading breast cancer ct scan images from google: 739 / 743
Downloading breast cancer ct scan images from google: 740 / 743
Downloading breast cancer ct scan images from google: 741 / 743
Downloading breast cancer ct scan images from google: 742 / 743
Downloading breast cancer ct scan images from google: 743 / 743
Done google : breast cancer ct scan images
Task ended. Pool join.
Data imbalance checking...
dir: download/breast cancer ct scan images, file_count: 676
Data imbalance not detected.
End Program

Process finished with exit code 0

암 종류별 사진 크롤링 이후에는

비슷한 것 끼리 묶고

묶여진 자료만 학습

 

테스트베드는 윈도우 데탑... 다른 애들은 다들 일해서...

 

C:\Users\joe>pip3 install tensorflow

Collecting tensorflow

  Downloading https://files.pythonhosted.org/packages/af/50/d7da24189d95e2084bb1cc350a8e4acdf1b0c9b3d57def7a348f0d9cb062/tensorflow-2.2.0-cp37-cp37m-win_amd64.whl (459.2MB)

     |                               | 15.7MB 204kB/s eta 0:36:06    

설치

엥 그런데 파이썬 어딨었지?

뭐가 진짜야

C:\Users\joe>echo %PATH%

o:\WinAVR\bin;o:\WinAVR\utils\bin;O:\arm\DS-5 v5.27.1\sw\ARMCompiler5.06u5\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;J:\!!!!!!!!\visualSVN\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Xoreax\IncrediBuild;C:\Program Files (x86)\Bitvise SSH Client;O:\CMake\bin;o:\Git LFS;C:\Program Files\Git\cmd;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\ePapyrus\Papyrus-PlugIn;C:\Program Files (x86)\ePapyrus\Papyrus-PlugIn\Addins;J:\Program Files\Java\jdk-11.0.3\bin;J:\Program Files\Java\jdk-11.0.3\bin;C:\ProgramData\chocolatey\bin;;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\joe\AppData\Local\Microsoft\WindowsApps;;o:\PyCharm\bin;

C:\Users\joe\AppData\Local\Microsoft\WindowsApps\python3.exe

 

얘군.

 

진행 중이던 내용은 역시나 에러 발생

 

WARNING: The script f2py.exe is installed in 'C:\Users\joe\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts' which is not on PATH.

  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: 'C:\\Users\\joe\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python37\\site-packages\\tensorflow_estimator\\python\\estimator\\canned\\linear_optimizer\\python\\utils\\__pycache__\\sharded_mutable_dense_hashtable.cpython-37.pyc'

 

WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.

You should consider upgrading via the 'python -m pip install --upgrade pip' command.

 

pip3로 깔았는데 ㅡㅡ;

 

믓튼,

C:\Users\joe>python -m pip install --upgrade pip

Collecting pip

  Downloading https://files.pythonhosted.org/packages/43/84/23ed6a1796480a6f1a2d38f2802901d078266bda38388954d01d3f2e821d/pip-20.1.1-py2.py3-none-any.whl (1.5MB)

     |██████████████                  | 655kB 70kB/s eta 0:00:12

마찬가지겠지.

kdown, pyasn1, rsa, cachetools, pyasn1-modules, google-auth, idna, certifi, urllib3, chardet, requests, oauthlib, requests-oauthlib, google-auth-oauthlib, tensorboard, tensorflow

  WARNING: The script wheel.exe is installed in 'C:\Users\joe\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts' which is not on PATH.

  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: 'C:\\Users\\joe\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python37\\site-packages\\tensorflow_estimator\\python\\estimator\\canned\\linear_optimizer\\python\\utils\\__pycache__\\sharded_mutable_dense_hashtable.cpython-37.pyc'

 

 역시나 

C:\Users\joe>

C:\Users\joe>pip3 install tensorflow-gpu

Collecting tensorflow-gpu

  Downloading tensorflow_gpu-2.2.0-cp37-cp37m-win_amd64.whl (460.4 MB)

     |                                | 256 kB 192 kB/s eta 0:39:46

 

윈도우 환경 텐서면 gpu로 가겠지? 하고 gpu로 재시도.

 

 

sts-oauthlib, google-auth-oauthlib, tensorboard, wrapt, google-pasta, gast, termcolor, scipy, opt-einsum, astunparse, tensorflow-gpu-estimator, tensorflow-gpu

  WARNING: The script chardetect.exe is installed in 'C:\Users\joe\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts' which is not on PATH.

  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

  WARNING: The scripts pyrsa-decrypt.exe, pyrsa-encrypt.exe, pyrsa-keygen.exe, pyrsa-priv2pub.exe, pyrsa-sign.exe and pyrsa-verify.exe are installed in 'C:\Users\joe\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts' which is not on PATH.

  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: 'C:\\Users\\joe\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python37\\site-packages\\tensorboard_plugin_wit\\_vendor\\tensorflow_serving\\sources\\storage_path\\__pycache__\\file_system_storage_path_source_pb2.cpython-37.pyc'

 

아나콘다 가야겠네.

 

아나콘다로 모두 설치하고,

파이참으로 마무리.

 

리눅스도 우분투 전에는 늘 소스로 설치해야 하고, 순서나 패키지 궁합이 맞지 않을 때 수 없이 지웠다 재설치를 반복해야 했었다. 이제는 깔끔하게 환경 설정이 되지 않는 경우 해당 시스템을 바꿀 정도라... 뭐, 그래서 지금은 숙성된 AI를 하기 딱 좋은 시기인 듯 보인다. 

 

J:\Anaconda3\python.exe O:/PycharmProjects/test001/bs/tensorflow-gpu_test.py

2020-06-24 01:57:56.286036: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll

2020-06-24 01:58:00.182514: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll

2020-06-24 01:58:00.220162: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:

pciBusID: 0000:09:00.0 name: GeForce RTX 2080 SUPER computeCapability: 7.5

coreClock: 1.845GHz coreCount: 48 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 462.00GiB/s

2020-06-24 01:58:00.220480: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll

2020-06-24 01:58:00.228728: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll

2020-06-24 01:58:00.233755: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll

2020-06-24 01:58:00.235671: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll

2020-06-24 01:58:00.240970: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll

2020-06-24 01:58:00.244173: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll

2020-06-24 01:58:00.255182: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll

2020-06-24 01:58:00.255874: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0

2020-06-24 01:58:00.256555: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

2020-06-24 01:58:00.261185: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:

pciBusID: 0000:09:00.0 name: GeForce RTX 2080 SUPER computeCapability: 7.5

coreClock: 1.845GHz coreCount: 48 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 462.00GiB/s

2020-06-24 01:58:00.261506: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll

2020-06-24 01:58:00.261658: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll

2020-06-24 01:58:00.261815: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll

2020-06-24 01:58:00.261989: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll

2020-06-24 01:58:00.262142: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll

2020-06-24 01:58:00.262296: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll

2020-06-24 01:58:00.262461: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll

2020-06-24 01:58:00.263027: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0

2020-06-24 01:58:00.997862: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:

2020-06-24 01:58:00.998035: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102]      0

2020-06-24 01:58:00.998133: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0:   N

2020-06-24 01:58:00.999020: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6265 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 SUPER, pci bus id: 0000:09:00.0, compute capability: 7.5)

2020-06-24 01:58:01.003901: I tensorflow/core/common_runtime/eager/execute.cc:573] Executing op MatMul in device /job:localhost/replica:0/task:0/device:GPU:0

2020-06-24 01:58:01.004173: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll

tf.Tensor(

[[22. 28.]

 [49. 64.]], shape=(2, 2), dtype=float32)

 

소스는

https://www.tensorflow.org/guide/gpu?hl=ko여기 참고

 

GPU 사용하기  |  TensorFlow Core

Note: 이 문서는 텐서플로 커뮤니티에서 번역했습니다. 커뮤니티 번역 활동의 특성상 정확한 번역과 최신 내용을 반영하기 위해 노력함에도 불구하고 공식 영문 문서의 내용과 일치하지 않을 수

www.tensorflow.org

# import os
# os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
tf.debugging.set_log_device_placement(True)
#
# hello = tf.constant('Hello, TensorFlow!')
#
# print(hello.numpy())

# 텐서 생성
a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)

print(c)

 

그런데 2080 super 8GB 샀던 것 같은데 왜 6GB로 나오는겨 --> 6GB 를 설정하는거네. 2GB니 하던 게임이 죽는다.

https://developer.nvidia.com/cuda-gpus#compute

 

 

CUDA GPUs

Recommended GPU for Developers NVIDIA TITAN RTX NVIDIA TITAN RTX is built for data science, AI research, content creation and general GPU development. Built on the Turing architecture, it features 4608, 576 full-speed mixed precision Tensor Cores for accel

developer.nvidia.com

Compute Capability 는 ...

GPUCompute Capability

Quadro RTX 8000 7.5

얘랑 같다고?

ARM Firmware 강사라고 중간에 어떻게 연결되는지 파다가는 인생도 멍들 것 같아서 그러려니 하고 일단 넘어가야 겠다.

음... 15년 게임컴 하다... 나중에 클라우드만 쓰다 다시 개인컴이라 직접 체감하는 수 밖에는... 그래도 2080인데 또 무한 대기는 아니겠지.

https://www.ncc.re.kr/

 

국립암센터

이 웹사이트는 국립암센터 공식 웹사이트 입니다.

www.ncc.re.kr

그런데 암 종류 정리를 어디서 찾는지 모르겠다.

디비피아 논문을 찾아 보니,

윤담희, 이종훈, 손창규, 유화승, 이연월, 방선휘, 조종관, 이남헌, 조정효, LEE. (2006). 암의 종류 및 증상에 따른 삶의 질 평가 척도에 관한 연구 현황 분석. , 27(3), 555-560.

있는데 다운로드가 안된다.

구글에서 제목 검색으로 찾아 보니,

https://www.jikm.or.kr/upload/pdf/200609/1%5b1%5d.pdf

표로 암의 종류가 정리되어 있지는 않았다.
논문 내용 중 

폐암(EORTC QLQ-LC14), 유방암(EORTC QLQ-BR23), 대장암 (EORTC QLQ-CR38), 식도암(EORTC QLQOES18), 위암(EORTC QLQ-ST22), 두경부암 (EORTC QLQ-H&N38), 난소암(EORTC QLQOV28), 자궁경부암(EORTC QLQ-CX24), 간암 (EORTC QLQ-HCC18) 등 암 부위 특이성(cancer site specific) 모듈과 함께 사용할 수 있다10.

유방암(FACT-B), 방광암(FACT-Bl), 대장암 (FACT-C), 두경부암(FACT-H&N), 폐암(FACTL), 난소암(FACT-O), 전립선암(FACT-P)

의 키워드로 봤을 때 암 종류는 이 정도 인 것 같다. carcinoma 가 암땡이를 뜻하는 단어라는 것을 알게 되어 좀 더 검색이 쉬웠다. 그런데 논문 내용 중

http://www.proqolid.org/

은 404 에러. 뭔지 궁금했다.

carcinoma 로 검색하니

https://www.plusmedical.ro/en/articole/tratament-cancer-oncologie/?gclid=EAIaIQobChMIp_ntxc-X6gIVWqqWCh3aoQCQEAAYASAAEgJcSvD_BwE

 

Tratament cancer (oncologie) - PlusMedical

Transplantul de ficat consta in inlocuirea ficatului bolnav, care nu isi mai poate indeplini functiile, cu un ficat sanatos fie de la un donator decedat, fie de la o persoana in viata

www.plusmedical.ro

자료가 나왔다.

 

The most common types of cancer

  • Oral cavity cancer
  • Lung cancer
  • Tumors on the brain
  • Skin cancer
  • Throat cancer (larynx)
  • Liver cancer
  • Bone tumors
  • Colorectal cancer
  • Lymphoma
  • Breast cancer
  • Bladder cancer
  • Stomach cancer
  • Cancer pancreatic
  • Pediatric oncology and hematology
  • Prostate cancer
  • Endometrial cancer (uterus)
  • Uterine cervical cancer
  • Thyroid cancer
  • Ovarian cancer

내 생각보다 더 종류가 많았다. 19가지.

most common types라 그 외에도 더 많겠지? 

내 친구가 대학 병원에 수백만원 짜리 효도 건진을 부모님께 시켜 드렸는데 암 발견을 못했었다. 그 뒤에 이상 증상이 있어도 건진을 이미 했다며 병원에서도 따로 암 건진을 안 받으셔서 그게 금방 말기가 되어 결국 돌아가셨었다. 친구가 소송을 준비했는데 다른 병원에서도 도와주는 사람이 없어서 결국 포기 했는데, 그 만큼 우리나라에 의료 사고가 많다는 것을 말하는 것이라고 했었다.

뭐, 이 뿐 아니라 병원끼리 자료 공유는 안되는 것은 익히 아는 사실이라 하나의 병원과 계약된 솔루션은 아마 다중 계약이 안 될 것으로 판단된다. 인터넷으로 CT 자료를 구하려고 하는데, 

우리나라 사람이 메인 개발자인 Auto Crawler란 좋은 오픈 소스가 있다.

 

이렇게 동작되네.

몰라서 질문 하나 남겨둡니다. 당장 답이 필요한 것은 아니라 언제 시간 나실 때 한번 말씀주세요. 암 진단기(CT)를 아파트 단지에 설치해서 같은 아파트의 방사선 자격증 있는 분이 예약 받았을 때 간편하게 CT를 찍을 수 있고 병원 가기 전 AI로 자동 판별이 되는 솔루션을 생각하고 있습니다. 혹시, 아파트 단지에도 저런 의료기기를 설치할 수 있나요? 병원에서만 가능한 건가요? 어머니께서 암 수술 후 완쾌 하셨는데 워낙 병원을 안 가시려고 하니 제가 찝찝해서 일년 동안 한 번 만들어 보려구요. 혹은 아이디어가 전파되어서 다른 분이 더 빨리 만들어주시면 좋을 것 같아서 카톡으로 질문 남겨 둡니다. 좋은 하루 되세요!

[ 30 초 뒤 ... ]

CT는 방사선 기기라서 설치 운영관련 별도의  법적 기준이 필요하구요. 방사선 기기 등록 과 별개로 병원이나 의사 진단 처방 없이는 사용이 불가합니다

[ㅠㅠ]

음...

로 시작했다. 불가능한 프로젝트라 TOY PROJECT로 적격.

 

의사도 병원도 환자도 관련 제품 판매 회사 등, 모두가 win win 하는 서비스가 되면 될 것 같네.

 

우선, 암은 흔한 질병이라고 한다. 그래서 가까운 곳에서 진단을 할 수 있게 만들 가능성이 보인다.

 

2020년 6월 23일 시작.

 

 

 

+ Recent posts