반응형

레지나 하틀리 (Regina Hartley)

최고의 신입사원이 항상 최고의 이력서를 갖고 있진 않은 이유

Regina Hartley: Why the best hire might not have the perfect resume



최근 금수저, 흙수저라는 말을 자주 들을 수 있다.

네이버에서 각 수저에 대한 정의를 찾아보면 다음과 같다.

금수저는 부모의 재력과 능력이 너무좋아 아무런 노력과 고생을 하지않음에도 풍족함을 즐길수 있는 자녀들을 지칭한다

흙수저는 부모의 능력이나 형편이 넉넉지 못한 어려운 상황에 경제적인 도움을 전혀 못받고 있는 자녀를 지칭하는 신조어이며 금수저와는 전혀 상반되는 개념이라 할 수 있다.



위 그림에 보이는 것 처럼 우리 나라에서 말하는 수저론(?) 부모의 재력을 기준으로 한다.

하지만 강연에서는 사람들이 지나온 삶의 역경과 고난을 기준으로한 수저론으로 이야기를 풀어간다.

초점은 조금 다르지만 개개인의 차이에 대해서 이야기한다는 것에서는 우리가 고민해보아야할 주제를 정확히 잘 찍어주었다.

최근 독서모임 RAD 에서 읽은 '미움받을 용기'에서 소개되는 내용과 처럼 각자가 경험했던 고난과 역경, 현재 처한 현실을 스스로가 발전적으로 타파해야한다는 생각이 든다. 물론 이런 생각이 드는 것은 나 역시 금수저가 아니기 때문이다.


여전히 대부분의 국내 기업은 강연내용과 같은 인사를 인정하지 않을 가능성이 높다고 생각한다.

분명히 연구에 의한 데이터가 말해주는데도 "현실은 그렇지 않아"라고 일축하는 곳이 많을 것이다.

시도해보지도 않고 경험하지 않았음에도 "내가 다 해봤어"라고 외치시는 소위 꼰대들은 그럴것이다.


우리는 아직 일을 하고 살아갈 날이 많이 남았기에 이런 문화를 타파할 방법을 스스로 고민해보는 것이 좋다고 생각한다. 

전세계 40만여명의 임직원이 일하고 있는 UPS의 인사전문가가 가진 생각을 한 번 들어보자.




반응형
반응형

Body parts on a chip



대학 1,2학년 시절에 한참 MEMS(MicroElectroMechanical Systems) 바람이 불었던 것으로 기억합니다.

기계 전자 등 분야에서 엄청난 효과를 거둘 것으로 생각했으나 재현성이 좋지 않아 기대 만큼의 빛을 보지 못한 것으로 알고 있습니다.

그런 과정에서 MEMS 기술이 안착한 곳이 바로 BIO 쪽이었으리라 생각합니다.

많은 연구들을 통해서 Micro 이하의 세계를 알아내고 이해하는데 도움이 되는 Tool이 개발되었습니다.


국내에도 여러 기업에서 MicroArray, DNA Chip을 이용한 진단 키트가 개발됐고,

해외의 Caliper(현재 PerkinElmer에 합병됨)등 기업들은 미세 채널이 그려진 MEMS Chip을 이용한 이용한 진단기기까지 개발했습니다.





현재는 위 강연에서 보신것 처럼 다양한 생명연구 그리고 의학연구를 수행하는데 필요한 도구들의 개발이 진행되고 있습니다.

이 강연 마저도 2013년 강연이니 최신 자료를 한 번 더 찾아봐야겠습니다.

모 기업에서는 다양한 검사를 Chip 만 갈아끼우면 가능하게 하는 형태의 제품도 개발한다고 하더라구요.

학부시절 모듈 또는 소프트웨어만 바꾸면 어떤 검사든 할 수 있는 장비가 가장 이상적인 검사장비라는 이야기를 들었는데

이런 시도들이 성공해서 적정가격으로 제공될 수 있다면 정말 임상에는 희소식이 아닐까 생각합니다.


저는 이런 MEMS 기술의 방향을 보고 원래 목적한 분야에서 실패한 기술이라고 해도 다른 영역에서는 좋은 역할을 할 수 있다는 교훈을 얻었습니다. 하지만 여전히 임상에서는 기존 검사법들에 비해 재현성에 있어서 좋은 평을 얻지는 못하는 것 같습니다. 이런 문제들이 조속히 해결되기를 바랍니다.^^



반응형
반응형

DB 작업 중에 특정 Column의 값의 일부를 바꾸고 싶을 때가 있습니다.

저는 report라는 table에 있는 report_path 라는 Column 에 xxxx.pdf 라고 되어 있는 것들을 xxxx.html로 바꿔야할 일이 있었는데요


아래 처럼 replace()를 활용한 Update Query를 작성해 주면 됩니다.

UPDATE table SET column=replace(str,  find_string, replace_with)  ;


예시)  UPDATE report SET report_path=replace(report_path, 'pdf', 'html') WHERE signatured=1;


실행하면 아래와 같이 column의 내용 중 특정 문자만 바뀝니다.


       

 Query 실행 전 

  Query 실행 후

 

 

     



SQL Query 공부 좀 해야겠어요..

할 때마다 찾아보면서 하려니 일이 오래거리네요 ㅠ




반응형
반응형

대학 다닐 때 친구와 함께 인공혈관 지지체(scaffold)를 제작했던 기억이 있어 글을 써봅니다.
실제로 몸에 넣을 수 있는 물건을 만든 것은 아니지만 정말 재미있던 실험이었습니다.
요즘 임플란트라고 하면 막연하게 치과용 임플란트를 많이 떠올리게 되는데, 몸 속에 들어가는 모든 인공물을 임플란트라고 하지요.

몸에 넣는 삽입물에는 유기재료에서 무기재료까지 다양한 것이 있습니다. 최근 생명과학과 공학의 원리를 이용하여 이용하여 손실된 기관의 기능을 복원 혹은 보존을 목적으로 생물학적 대체물의 재생에 적용되는 학문간상호 협조를 필요로 하는 분야인 조직공학이 발달하면서 새로운 조직 성장 요구를 충족하는 적합한 분해율을 지닌 3차원 구조의 지지체를 통해서 조직을 재생하는 방식의 치료법도 연구되고 있습니다.

예전에 포스팅한 적이 있는 Anthony Atala의 강연 속 (http://kkoseul.tistory.com/60 )의 인공장기도 그런 것이죠.
  
저는 전기방사라는 방법을 이용해서 수 마이크로 미터 단위의 가느다란 폴리우레탄 실(fiber)을 만들어서 둥근 쇠봉에 코딩하여 혈관 지지체를 만들었었습니다.  

 

Electrospinning method

Electrospinning method



그리고 전자현미경(FE-SEM)으로 그 단면을 촬영해보는 좋은 기회도 얻었었죠.
결과는 ... 실이 떡이 되서 비드(Beads)가 보여 안타까웠지만요 
아래 사진에 보이는 fiber 사이 사이의 기공에서 세포들이 자라게되고 나중에는 이 지지체가 분해되면서 완전한 조직으로 회복하게 되는 원리입니다.
 

scaffold1

scaffold2

마지막으로 수압으로 언제까지 견디나 실험도 했었지요.. 
이때 에피소드가 있었던게 저는 갑자기 물이 새길레 엄청 실망하고 교수님께 저희가 실험에 실패한것 같다고 말씀 드렸더니
교수님曰 : 바보야 물이 새야 세포도 살지 막혀 있음 우째 살끼고!!ㅋㅋ 
이러 사연이었네요 ㅋㅋ 
 

compliance test

Compliance test


학부 수업 중의 실험이었지만 정말 재미있는 경험이었습니다.
모든 의공학도들 화이팅 ㅋ 

반응형

'의공학 BME > 의용재료' 카테고리의 다른 글

소재와 문명  (0) 2011.08.31
반응형

오늘은 HTML 문서를 PDF로 변환해 주는 wkhtmltopdf 라는 Open source(LGPL) 프로그램을 소개하려 합니다.

http://wkhtmltopdf.org

http://wkhtmltopdf.org




저는 어떤 문서양식을 만들때 가능한 HTML을 사용해서 만듦니다. 왜냐하면 그것을 Web 서비스에 이식하기도 좋고 엑셀이든 워드든 어떤 문서 편집 프로그램 보다 원하는 형태의 문서를 쉽게 만들어 낼 수 있기 때문입니다.

물론 이렇게 말씀 드리면 마우스로 끄적거리는 것이 훨씬 쉽지 않냐고 말씀 하시는 분도 있겠지만 여러가지 CSS generator가 마련되어 있는 요즘은 상황에 따라 Ctrl+C, Ctrl+V 가 훨씬 빠르고 간편합니다.

물론 문서의 내용과 구조는 그대로 두고 각 요소의 배치나 색, 글꼴 같은 디자인만 바꾸고 싶을 때 HTML+CSS의 조합은 빛을 발합니다. 여러가지 이유로 요즘 개발 중인 프로젝트에 고객에게 프린트에서 줄 문서를 HTML로 만들었는데...한계에 부딪힙니다. 

제 깜냥으로는 세상에 존재하는 모든 웹 브라우저의 입맛을 마추지 못한 것이죠. 화면에 변환되어 나타나는 모습도 다르거니와 같은 브라우저라도 버전이 다르거나 사용자 설정이 다르니 인쇄되는 모양이 제각각이 되어 버립니다.

그러다 찾은 것이 이 wkhtmltopdf !!!
QT Webkit rendering engine 이라는 것을 사용해서 html 문서를 pdf로 변환해 줍니다.
이 프로그램 덕분에 어떤 환경에서도 항상 정형화된 사이즈와 모양의 문서를 출력할 수 있게 되었습니다.

사용 방식은 cmd (shell) 에서 아래와 같이 하면 됩니다.
 >wkhtmltopdf html경로+파일명(또는 URL) pdf경로+파일명

예) C:\>wkhtmltopdf test.html test.pdf 
     또는
    C:\>wkhtmltopdf google.com google.pdf



실행 방법이 간단해서 PHP와 Java에서 exec()함수와 ProcessBuilder로 어렵지 않게 사용할 수 있었습니다.
다른 언어에서도 마찬가지 방법으로 사용할 수 있겠지요.

이제 정말 필요한 것을 잘 찾는 사람이 능력자가 되는 세상이 오고 있는 듯 합니다.
읽어주셔서 감사합니다.

반응형
반응형

샤이 레셰프 : 초저가 대학 학위
Shai Reshef : An ultra-low-cost college degree


OCW (Open CourseWare)가 소개된지 아주 많은 시간이 흘렀다.
우리가 이름만 들어도 대단하다고 생각하는 미국 대학들에서 시작된 이 프로젝트들을 통해
영어를 할 줄 알면 누구나 학위를 딸 수 있다.

MIT OpenCourseWare

MIT OpenCourseWare



그리고 이 강연의 강연자인 샤이 레셰프가 설립한 University of the poeple은 학위를 얻는데 까지 4000달러면 충분하다.
이 돈은 모두 40번의 시험을 치르기 위한 응시료일 뿐이다. 우리나라의 대다수 사립대학 공대의 한학기 등록금보다 저렴한 수준이다.

University of the people

University of the people



이런  OCW 또는 웹상의 대학들은 개개인의 가능성을 희망으로 변화시켜주는 역할을 한다고 생각한다.
옛날 어른들에게 이런 말을 듣곤 한다.

   "저 사람은 좀 더 배웠으면 나라를 살 사람이다."

그렇다 우리나라는 정말 어려운 시기를 거치면서 자신의 재능과 감각을 미쳐 알 새도 없이 생업의 전선에 뛰어든 사람들이 많다.
극한의 상황에 놓인 내전 국가들이나 빈국들은 지금도 그런 상황이다.
이런 상확 속의 사람들이 인류의 안정과 발전을 위해 해낼 수 있는 것이 있다면 분명 기회가 주어져야한다.
어른들이 가끔 하던 위와 같은 말이 자취를 감추게될 날이 서서히 다가오길 바란다.

이미 여러 매체에서 대학의 붕괴에 대해 논하고 있고 이런 대학의 붕괴는 대학의 물적 양적 붕괴일 것이라 생각한다. 물론 최고의 석학들과 눈을 마주치며 호흡할 수 있는 것의 가치는 그들이 내는 학비만큼의 값어치를 한다는 데는 동의한다. 하지만 이런 붕괴 과정을 통해 대학은 환골탈퇴하여 더욱 알찬 교육을 할 수 있는 형태로 바뀌지 않을까 기대해본다. 기득권을 유지하려는 대학은 점점 좋은 학생을 받기 어려울 것이고 잊혀질 것이라 생각한다.

관심도 없는 분야를 전공하여 잘 알지도 못하면서 전공자라는 명함만 내세우는 일이 사라지길 절실히 바라는 한 사람으로서 이런 변화는 정말 반가운 것이다.
억지로 쑤셔넣은 경험치 쌓기 같은 학점 채우기에서 벗어나서 정말 배우고 싶은 것을 배우고 사람들과 교감하고 그것을 통해서 이로운 일을 할 수 있다면 그보다 멋진 일은 없을 것이다.

쌩뚱맞지만 오늘도 역시 이런 일들을 가능하게 한 21세기의 이오니아 "인터넷"에 감탄한다.

나는 게으름을 핑계로 항상 영어를 소홀히 했다. 요즘 이런 강연을 들을 때마다 후회막심이다.
언젠가 TED를 자막 없이 볼 수 있는 날이 올 수 있도록 노력해야겠다.
그리고 언젠가 꼭 하고 싶던 것들 꼭 알아야만 하는 것들에 도전하겠다.
통계, 병리, 분자생물, 면역, 생리, 뇌, 정보, 사람......

늦은 밤 15분도 안되는 강연은 오늘도 나를 반성하게 한다.

반응형
반응형
Sergei Lupashin: A flying camera ... on a leash

요즘  쿼드콥터가 유행을 타고 있다.
사진 기자들이 더욱 넓은 시야의 사진을 보도하고
아마존 같은 대형 유통망에서도 이 것을 이용한 배송 서비스를 고안할 정도이다.

Sergei Lupashine

Sergei Lupashine



자유로운 비행에 대한 열망도 있을 것이고
아니면 현상을 정확히 바라보기 위한 거리를 찾고자 하는 노력이 이 비행체를 선택한 것일거다.
하지만 이 비행체는 4개의 위험한 프로펠러를 노출하고 있고, 무거운 카메라 또는 물체를 운반한다.
주인의 손을 떠나 통제를 잃을 경우 정말 위험한 사고로 이어질 수 있다.
더구나 현재 이 장치들은 사용자의 조작에 민감하게 반응한다.

세르게이 루파신은  이에 대한 해결 법으로 개줄을 제시한다.
흔히 볼 수 있는 개줄과, 4개의 프로펠러를 감싸는 바구니 형태의 망
그리고 연을 날리듯이 쉽게 조종하는 단계까지 구현해냈다.

나 역시 엔지니어인지라 이런 생각의 본질에 대해 이야기하지 않을 수 없다.
분명히 무인 비행체에 대한 제도의 정비는 늦을 수 밖에 없고 사람들은 이 비행체들에 대한 불안감을 늘 가지고 있다.
그리고 어떤 장치를 조종하는 방법이 어렵다면 사용자의 노련하고 숙련된 솜씨가 필요하다.
이런 상황을 슬기롭게 타파하고자한 강연자의 태도와 철학에 감탄한다. 학교에서도 가장 이상적인 의료기기는 교육하지 않고 메뉴얼을 보지 않아도 직관적으로 사용법을 알 수 있고, 바르게 사용할 수 있는 것이라 배운 바 있다.

배운 것을 실천 하는 것은 참 어렵다. 하지만 항상 마음 속에 되새기며 잊지는 말아야할 것이다. 최종목적지를
짧은 강연이지만 내가 나아가야할 방향에 대해 진지하게 고민할 수 있는 좋은 내용이었다.




 
반응형
반응형
잭 안드라카 십대 소년이 발명한 췌장암진단법
Jack Andraka : A promising test for pancreatic cancer ...from a teenager

 

Jack Andraka

Jack Andraka


십대 소년 잭 안드라카의 도전과 그 성과에 대한 이야기입니다.
내용은 직접 들으시는 것이 나을 것 같습니다. 위 사진에 적혀있는 내용입니다.

  잭 안드라카가 강연의 마지막에 인터넷에 대해서 이야기합니다. 저는 이 이야기가 가장 중요한 부분이라고 생각합니다. 제 주변에도 누군가는 인터넷 때문에 아이들을 망친다 어쩐다 말하는 사람들이 종종 있습니다. 하지만 잭 안드라카가 15세의 어린 나이에도 불구하고 어떤 호기심과 그 호기심을 실제로 실현할 수 있었던 것은 언제 어디서든 다가갈 수 있고 세상의 대부분의 지식 그리고 지혜와 연결된 인터넷 덕분이라고 생각합니다. 인터넷이 21세기의 안렉산드리아 도서관 역할을 해내고 있다는 것은 누구도 부정할 수 없습니다. 만약 인터넷이 없었다면 그는 몇 살 때 이 일을 해내게 됐을지, 아니면 중도에 포기했을지도, 아니면 평생 해내지 못 했을지도 모를 일입니다.  이렇게 인터넷은 우리를 수퍼맨으로 만들 수도 있습니다. 


  그리고 이 소년의 태도에 대해서도 놀라지 않을 수 없습니다. 먼저 8000개가 넘는 단백질을 일일히 확인해 가며 자신이 목표로 하는 단백질을 찾아낸다는 것이 정말 대단합니다. 저라면 그렇게하지 못 했을 것 같습니다. 또 그가 처음 이 췌장암을 더 정확하고 빠르게, 저렴하게 진단할 수 있는 방법을 찾아야겠다고 생각한 그 마음이 저를 감동시킵니다. 저는 요즘

  저는 요즘 계속해서 세상을 바꿀만한 일을 해내는 사람들의 마음이 모두에 대한 연민과 배려에서 일어난다고 느끼고 있습니다.
  자질이 중요한 만큰 환경도 중요하고 환경이 중요한 만큼 자질도 중요하다고 느낍니다. 이 굉장한 소년의 강연 한 번 보시죠!

 

반응형
반응형
글쓰기 버튼을 찾지 못할 만큼 블로그에 글을 쓴지 오래 지났습니다.
이번 주 부터 TED 보는 습관을 들여보기 위해
형편없는 감상문을 써보려합니다. 오늘의  강연은 

MargaretGouldStewart

Margaret Gould Stewart


Margaret Gould Stewart
How giant websites design for you (and a billion others, too)

Facebook의 UX master인 그녀는 이 강연에서 
인류를 위한 디자인에 대해 이야기 합니다.

우리는 주변에서 다양한 종류의 디자인을 접하면서 대부분 그 디자인이 가지는 외형적인 아름다움 또는 새로운 기능에 대해서 감탄합니다.
하지만 그녀는 디자인이 어디를 향해야 하는지에 대해서 말해줍니다.
"누가 이것을 사용할 것인가?" 하는 것이죠.

엄청나게 거대한 웹사이트인 페이스북의 정말 사소한 부분이라 보이는 "좋아요"버튼의 디자인 하나를 바꾸기 위해서도
약280시간의 노력이 필요했다고 합니다. 이런 사소한 부분을 바꾸는데 노력이 필요한 이유가 바로 디자인의 이유겠지요.

회사에 다니다 보면 기술이 좋아 그런지 뚝딱뚝딱 무언가 아주 잘 만들어 내는 경우가 많습니다.
그렇게 출시한 제품들은 고객이 사용하면서 정말 신기하게도 매우 사소한 부분에서 문제를 많이 일으킵니다.
고객의 입장에서는 아주 치명적으로 느껴지는 부분들이죠.
아마 기한을 따지는 기업 문화 때문이지도 모릅니다. 이 때문에 "졸작"이라는 것이 탄생하고 지원팀은 죽어나는 경우도 생깁니다.

저도 요즘 간단한 모바일용 웹어플리케이션을 만들면서 겪는 어려움이 저사양의 스마트폰이나 IPhone에서 구현되지 않는 HTML과 JQuery 구문들 때문에 골머리가 아픈 것인데, 새로운 기능을 사용해 보는 것도 좋지만 다시 본질로 돌아가서 누가 이것을 사용하며 그 사용자들은 어떤 환경에서 제가 만드는 웹어플리케이션을 사용하게 되는지 생각해보고 보완해야겠습니다. 

우리도 명확한 목적을 가진 디자인을 향해 간다면 그 결과가 더 인간지향적으로 나타날 것이라는 생각이 듭니다.
그녀가 예로 든
- "좋아요"버튼의 디자인
- 사진 도용에 대한 대처법의 디자인
- YouTube의 동영상 평가 방법에 대한 디자인
- 저가형 스마트폰을 디자인 하는 이유

이 모든 것은 인간의 마음을 이해하려는 노력과 홍익인간의 마음이 있어야만 할 수 있는 일이라고 생각합니다. 단 하나의 문화만을 위한 것도 아니고. 특정 계층을 위한 것도 아닌 인류 모두를 위한 디자인을 목표로 하기에 실천 가능한 것 입니다.

예전에 회사에서 플래시와 이미지로 도배된 홈페이지를 운영하고 있길레 담당부서에 영문 홈페이지는 텍스트 베이스로 바꾸는 것이 좋지 않냐는 제안을 한 적이 있습니다. 지금은 리뉴얼되어 모든 페이지가 플래시 없이 텍스트로 제공이 되어 한결 가벼운 모습이 되었습니다. 물론 해당부서에서 미리 계획을 하고 있었겠지만 제 나름 뿌듯한 일이었습니다.

거대한 일을 하는 사람들이 왜 그 일을 할 수 있게 되는지 한 번 더 느끼게 되는 강연입니다.
그 마음이 모두를 향한 것이기 때문이라 생각합니다. 
사용자를 또는 인류를 배려하는 마음에서부터 혁신은 시작되는 것이겠지요.

꼭 한번 보세요 아래 영상 입니다.
 

반응형
반응형

  요즘 TED에 이런 뉘앙스의 강연들이 종종 올라오는군요. 그리고 저는 계속 반복해서 질문하게됩니다.

  기술만으로 의료문제를 해결할 수 있는가?

  우리는 학교에서 무엇을 배웠을까요? 그리고 직장에서는 또 뭘 배우고 있을까요? 뭔소린지..^^

  농구를 하다보면 상대에 따라 다른 전술을 써야할 때가 있습니다. 물론 여기서도 개인의 기본기는 필수 적이죠 (기술) 상대가 신장이 좋은 팀? 아니면 스피드가 좋은 팀? 야투가 좋은 팀? 골밑이 좋은 팀? (상황) 그리고 상황에 따라 나오는 해답인 전술 만큼 중요한게 있습니다. 상황을 극복하겠다는 분위기(동기).

  기술, 전술이 있어도 분위기가 아니면 힘이 안나죠^^

  요즘 직장인 1년차가 되다보니 이런저런 생각들이 많습니다. 선배님들도 모두 겪으셨겠지요? ^^
오늘도 스스로 성숙해질려고 노력 중입니다. 농약 먹고 클 순 없으니깐요ㅋㅋ.
벌레 먹더라도 오늘도 쓸데없는 고민을 해봅니다.
함께 보시죠~

제이슨 폰틴 (Jason Pontin): 기술이 거대 문제를 해결할 수 있는가?
Jason Pontin: Can technology solve our big problems?

반응형
반응형


요즘 방황하다가 문득 TED를 열었는데
Sonia Shah라는 사람이 말라리아에 대해 이야기 하는게 제일 위해 올라와 있네요.
이미 치료법도 예방법도 알고 있지만 말라리아를 없애지 못하는 3가지 이유라..
의공학도로서 깊은 고민에 빠지게 되는 내용입니다.
언젠가 외과가 발전할 수 있었던 결정적인 요니 4가지에 대해 배웠는데 지금 3가지 밖에 기억이 나질 않네요.
수혈, 마취....... 하나는 머드라..... ㅠ
아무튼 나머지는 지극히 의학적인 요인이었지만
단 한가지 정말 결정적인 외과 발전의 요인은 '교통' 이었습니다.
중증의 외상 환자를 care할 수 있는 곳 까지 옮길 수 없다면 그 어떤 준비도 무용지물이 되는 것이죠.
그리고 대부분의 약은 t.i.d , b.i.d 로 처방이 되는데.... 하루 세 번  8시간 마다... 또는 하루 두 번 12시간 마다
이런 시간에 대한 관념을 가지고 있지 않은 사람들이라면 정확한 투약이 불가능하죠.
약이 있어도 시,분 단위의 시간에 대한 인지가 필요 없는 문화에서는 효과를 보기 힘들 것입니다.
내용 중에 전기에 대한 이야기도 심각하게 고민되네요.. 최근 전자적인 컨셉을 가진 투약 알람 등의 개념이 많이 나오던데 이것도 전기가 없는 지역의 사람들에게는 무용지물이겟네요..


아.. 어렵다. 의료의 혜택도 결국엔 부익부 빈익빈일까요?
다시 한 번 '기술' 보다 '환경과 문화'가 중요함을 느끼게 됩니다.





 

반응형
반응형


5천년만에 블로그에 글을 씁니다.^^ 반가워라.
자바(java)로 윈도우 어플리케이션을 만들고 있는데요.
자동완성 기능을 만들어 보려고 도전!!
JComboBox는 아래와 같이 생긴 녀석이죠.


아래와 같이 JComboBox에 Key Listener를 추가하니 이런..키보드를 아무리 눌러도 아무런 반응을 안 해주시네요..

combo1 = new JComboBox(model)
combo1.addKeyListener(new KeyAdapter() {
   @Override
   public void KeyTyped(KeyEvent ke) {
combo1.showPopup();
}



알고 보니.. JComboBox는 기본적으로 사용자 입력이 Item의 선택으로 이뤄지는 cmponent니깐
KeyEvent 가 먹지 않는 것이 이치에 맞는 것이더군요.


우리가 JComboBox의 editable 을 true로 설정하면 JComboBox라는 component에 editor라는 component가 덧 씌워지는 방식인가 봅니다.

그래서 찾아보니 아래 처럼 editor component에 KeyListener를 추가해줘야 하더군요^^
combo1 = new JComboBox(model)
combo1.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
   @Override
   public void KeyTyped(KeyEvent ke) {
   combo1.showPopup();
}


제가 원했던데로 키보드 입력이 있으면 popup메뉴가 열리는 이벤트가 발생하는 군요^^


(출처 : http://castever.wordpress.com/2008/12/09/keylistener-in-jcombobox/)

하..전문 프로그래머가 아닌 필요에 의한 개발을 하는 '엔지니어'로서 Google에게 감사합니다.


반응형
반응형



쿠엔 누엔 : 색이 보이는 수술

 

제가 일하고 있는 곳은
Real-time PCR을 이용해서 pathogene을 검사하는
전과정에 대한 솔루션을 만드는 곳입니다.
Real-time PCR에는 신호의 검출을 위해 형광 물질을 사용합니다.

사실 형광에 대해서 잘 이해하지 못하는 사람들이 많습니다.
매우매우 간단히 설명하면
형광은 x라는 파장의 빛(에너지)을 받으면 y라는 파장의 빛(에너지)을 내보내는 것입니다.
더 쉽게 말하자면 노란색을 보면 화가나서 빨간색이 되버리는 사람과 비슷하게 생각하면 됩니다.

이런 형광이 체외 진단뿐만 아니라
외과 수술에서도 쓰일 수 있군요.



책에는 각각의 장기들을 구분된 색으로 칠하지만 실제는 그렇지 않다는것.
실제 수술 뿐만 아니라 교육적인 목적으로도 사용할 수 있을 것 같네요.


Quyen Nguyen: Color-coded surgery
반응형
반응형




오랜만에 TED를 보다가
4학년 1학기 보건의료정보시간에
잠깐 언급됐었던 이야기가 나와서
글을 써봅니다.
자세한 이야기는 한 번 들어보시죠.
사실 이 이야기를 듣고나서
 
'개인의 사생활 보호가 더 중요해!'라고 말씀하시는 분도 있을 것 같습니다.
하지만 저는 문화가 바뀌고 있다고 생각합니다.
전.. 매우 두리뭉실 넘어가고 있군요. 제 생각 조차도 말로 표현하기 힘든 수준이네요.. ^^
아직 내공이 쌓일려면 한참 남은거 같습니다.

실제로 개인의 건강에 대한 정보를 공유하기 위한 커뮤니티가 많이 있습니다.
그런 커뮤니티를 통해 질병에 대한 정보를 공유하면서
치료에 한발 한발 다가가는 경우도 있지요.

다음엔 시간을 내서 그런 커뮤니티에 대해서 한번 알아봐야겠습니다^^

의학데이터를 공유해봅시다 - 존 윌뱅크스
Let's pool our medical data - John Wilbanks



반응형
반응형








유전 정보의 저장

 

■ A ,G, T, C

지구상에 존재하는 알려진 모든 생명체의 유전 정보는
A, G, T, C로 표기되는 염기(base)의 배열로 DNA에 저장됩니다.
단 네가지 분자로 다양한 특징을 가진 엄청난 종류의 '생명'을 만들어 냈다고 생각하면 정말 대단 한것 같습니다.
사람도 switch on, off 를 통해 엄청난 일을 하긴 하지만 아직 '자연' 또는 '신'의 영역(?)까진 무리인 듯 합니다^^.

각각 다음과 같이 분류됩니다.
 퓨린(purine) 계  피리미딘(pyrimidine)계
 A : 아데닌(Adenine)  G : 구아닌(Guanine)  T : 티민(Thymine)  C : 시토신(Cytosine)
 
 
 
 


■ 코드, 트리플렛코드

DNA를 구성하는 염기의 배열
코드(code)라 부르고
단백질을 구성할 하나의 아미노산은 염기 3개가 한 조로 이뤄진 트리플렛 코드(triplet code)에 의해 결정됩니다.

DNA 이중 나선(double helix)은 각각의 가닥(strand)이 A-T, G-C의 쌍(pair)으로 상보적결합해 있습니다.

RNA 에는 티민(T) 대신 우라실(U : Uracil)이 존재합니다. 전사(transcription)과정에서 DNA의 A(adenine)에 대해 상보적으로 결합하죠. 


코돈

mRNA(messenger RNA)에서 한개의 아미노산을 지정하는 염기 3개의 배열을 코돈(codon) 이라고 부르며 총 64가지가 있습니다.


■ 안티코돈

또 mRNA 코돈과 상보적으로 결합하는 tRNA의 염기 서열을 안티코돈(anticodon) 이라고 합니다.
아래 왼쪽 그림에서 빨간색이 안티코돈이죠. mRNA로 전해진 정보가 아미노산으로 번역(translation)되는 과정에서 tRNA(transfer RNA)가 지정된 아미노산을 가져오죠.

 
 



■ 코돈과 안티코돈이 가지는 의미?

위의 코돈 표를 보시면 서로 다른 코돈이 같은 아미노산을 지정한다는 사실을 눈치 채셨을 겁니다.
그 것이 가지는 의미는 DNA의 정보가 잘못 되거나 전사과정의 오류로 어떤 하나의 염기가 바뀐다해도 아미노산을 합성하는데는 문제가 없는 경우가 생긴다는 것입니다.
예를 들어 발린(val)은 경우 앞의 두 코드 'GU' 만 맞으면 뒤에 뭐가 오더라도 발린으로 지정된다는 것입니다. don't care 인 것이죠.
위의 오른쪽 tRNA 그림을 보시면 안티코돈에 'I'라고 되어있죠?
이노신(Inosine)이라는 놈인데 이 놈덕에 하나의 tRNA가 두 종류 이상의 코돈과 결합 할 수 있습니다.

우리가 학교에서 배웠던 아미노산이 21개이기 때문에 코돈이 4의 3승 만큼 필요하다는 의미 보다는, 자연이 생명이 태어나고 살아가는데 오류를 최소화 하기 위한 장치를 마련해 놓았다는 것이라 생각하면 생명의 기적에 대해 한번 더 깊은 감동을 받을 수 있지 않을까요? 

코돈(codon)과 tRNA의 설계(전 신을 안 믿지만 만약에 누군가 설계했다면...)는 정말 경이롭습니다 ㅋㅋ

정리해 보면 염기들의 배열은 코드, 배열 중 아미노산을 지정할 정보인 염기 3개의 조합은 트리플렛코드, 트리플렛코드와 상보적으로 결합하는 mRNA의 코돈, 코돈과 상보적인 안티코돈이 되겠습니다. 그리고 트리플레코드와 안티 코돈은 같을 수도 다를 수도 있겠지요.(don't care가 있기 대문에 ^^)

이전에 썼던 '유전 정보 전달의 중심설(Central dogma)' 에서 소개했던 과정에서 나오는 유전 정보를 가진 녀석들을 제가 아는 만큼 소개했습니다. 더 중요한 이야기가 있다면 공유 부탁드려요^^

반응형
반응형


임상화학(Clinical chemistry)은 진단 및 치료 그리고 그 예후의 판단에 아주 중요한 역할을 합니다.
대부분의 체외진단(IVD:In Vitro Diagnosis)에 화학과 광학이 접목되어 있습니다.
이런 검사들은 진단검사의학과 또는 병리과 등에서 진행되지요.

제가 아는 한은 몇몇 경우를 제외 하면 병원 검사실에는 어떤 샘플 또는 샘플과 반응하는 물질의 화학적 성질을 이용해서 광학적으로 검출 하는 방법에 대부분인것 같네요.

그럼 이런 체외 진단을 위해서 사람 몸에서 어떤 것들을 검체로 사용할까요??
간략히 하면 인체의 거의 모든 부분에서 다양한 형태의 검체(Specimen)를 채취한다고 할 수 있습니다.

대표적인 것 부터 나열해 보겠습니다.

■ 혈액(Blood)
  혈액은 가장 대표적인 Specimen 입니다. 혈액학, 임상 생화학, 면역학, 독성학 등등 거의 모든 검사에서 사용합니다.
  간단하게는 혈구검사, 혈당검사 등이 있습니다.
  혈액 속의 세포 구성이나, 단백질 구성, 전해질 구성 정보를 통해 진단에 도움을 줍니다.
  또 현미경 검사를 통해 혈액내 미생물 감염(예: 말리리아 ) 등을 진단하기도 합니다.
  혈액(Whole blood)은 채취 후 혈장(Plasma)과 혈청(Serum)으로 나누어 사용하는 경우도 있습니다.
 
 

 


■ 오줌(Urine)
  혈액이 신장에서 걸러진 후의 부산물로  이루어져 있기 때문에 혈액과 함께 가장 많이 쓰이는 검체 입니다.
  색과 냄새, 구성 성분 등의 정보로 몸의 상태를 진단 하는데 도움을 줍니다.
 
 


■ 척수액(Cerebrospinal fluid)
  대표적인 예로 뇌염, 척수염이 있겠네요. 척수액 속의 감염은 심각한 결과를 초래합니다. 척수액 속의 단백질, 항체 등의 구성 여부를 통해 감염을 진단할 수 있습니다.



■ 대변(Stool)
  음식물의 소화과정이 끝난 후의 산물인 대변을 통해 장내 미생물이나 기생충 등의 진단을 할 수 있고, 색이나 형상을 통해 감염이나 출혈 등을 진단하기도 합니다. 그림과 같은 collector를 사용합니다.




그 외에도
■ 감염된 조직(Infected tissue)
■ 위액(Gastric juice)

■ 관절낭액(Synovial fluid)


등이 있습니다.
다시 한 번 말하자면 사실상 몸의 모든 부분이 검체가 될 수 있습니다. 사실 제가 공부를 많이한 것이 아니라 구체적으로 기술하기는 어렵네요.

사실 회사에서 일하면서 느낀 것이
주변에 생명공학과 출신인 분들이 대다수라서 그런지 임상에서 일어나는 일에 대해서 자세히 알고 있는 경우가 드물더군요.
제가 일하는 곳에서 하는
분자진단(Molecular Diagnosis)에서는 주로 Blood과 Tissue를 검체로 사용합니다.
즉, Pathogene 검출을 위해서 피를 뽑거나 면봉(swab)같은 것을 이용해서 병원체가 감염되는 부위 조직의 세포들을 채취합니다.

이런 검체 채취는 아주 중요한 과정으로
검체 채취하는 방법이나 채취하는 사람의 숙련도, 처리과정 등이 검사 결과에 영향을 미칠 수 있습니다.

최종적으로 이런 진단에서 검채와 관련한 의공학도들의 역할이라고 한다면
이런 검체의 채취 과정부터 처리과정까지 숙련도의 차이와 상관 없이 누가해도 같은 결과를 얻을 수 있는 검체 채취 방법을 개발하여 human error를 줄이는 것이라고 생각합니다.



반응형
반응형
The Inner Life of the Cell

세포 안에서는 어떤 일들이 일어날까요??
점점 글 쓰기가 어려워 Youtube에서 또 자료를 퍼왔습니다.
핑계겠지만 직장인이 된 후 글을 정리해가면서 쓰기가 무척 어렵네요ㅠㅠ

아마도 이정도 영상이면 책 한권을 8분짜리 애니메이션으로 압축한 정도라고 생각합니다.
세포가 세포사이를 움직이는 모습
세포 내에서 유전자 발현의 산물인 단백질이 이동하는 모습
그냥 둥둥 떠다니는 것이 아니군요^^
그리고 세포간에 물질이 이동하는 모습 등등
세포 소기관들도 잘 묘사되어있습니다^^

감상하시죠~
3학년 임상의공학 시간에 이 영상을 봤던 기억이 나네요^^

반응형
반응형
세포 분열과 세포주기

세포의 분열과 세포주기에 대한 영상입니다.
세포는 다양한 모양과 기능을 하고 있습니다. 세포가 바로 나 자신이라고 볼 수 있을까요?
세포는 영원히 살지 못합니다.
하지만 참 다행이도 세포는 세포 분열을 통해 재생산됩니다.

갑자기 학교에서 선배님께서 던진 물음이 생각나네요.
개체가 죽으면 세포도 죽은 것인가?
세포가 죽으면 개체도 죽은 것인가?
사람이 죽어도 손톱은 자라고, 매일매일 몸속의 세포는 죽어나가지만 사람은 살아 있습니다.
참 신기하지요.

반응형

'의공학 BME > 분자생물학' 카테고리의 다른 글

유전 정보의 저장  (0) 2012.12.25
The Inner Life of the Cell  (0) 2012.11.17
세포의 구조와 기능 동영상  (0) 2012.11.11
세포의 구조와 기능  (1) 2012.11.11
DNA가 유전 물질이라는 실험 증거  (2) 2012.11.04
반응형
세포의 구조와 기능

세포의 구조와 기능에 대한 제 설명이 부족한 것 같아
Youtube에서 자료를 하나 퍼왔습다.
영어지만 천천히 보고 들어봅시다.^^
저의 딱딱한 설명 보다는 훨~씬 나은 것 같네요.


반응형
반응형


세포의 구조와 기능

모든 생물체는 세포로 이루어져 있습니다.
세포는 생물체의 구조적, 기능적 기본 단위 입니다.
분자생물학에 접근하기 위한 조금 큰 부분이라고 생각하시면 편할 것 같습니다.
A,G,T,C의 서열로 이루어진 유전자가 발현되는 과정은 이 세포 속에서 이루어 지며,
그렇게 발현된 유전자가 기능을 하게 되는 것은 각 소기관의 기능을 통해 단백질이 합성되고 운반되어 세포내에서 작용하거나 또는 세포외로 분비되어 작용하는 것이지요.

저는 세포가 어떤 스위치를 켜고 끌 수 있는 물질들을 만들어내서
원하는 시간, 원하는 위치에서 그 스위치를 작동 시키는 물질이 작용할 수 있도록 하는 일이 벌어지는 곳이라는 생각이 듭니다.
그래서 생물체의 기능적 기본 단위 이겠지요??


(그림 출처 : http://www.dvbiology.org/biologyweb/cells/bcells1.htm)


(그림 출처 : http://www.dvbiology.org/biologyweb/cells/bcells1.htm)

 

아래는 세포 소기관의 기능입니다.
각각의 기관의 역할을 통해 세포의 생활사가 진행되고 세포 상호간의 정보 전달과 그에 따른 반응이 일어납니다.

핵(Nucleus)
세포 활동의 중심으로 세포의 증식과 유전에 관여

핵막(Nuclear membrane) : 2중막으로 핵공이 있어 세포질과 핵 사이의 물질 출입

염색사(Chromonema) :  DNA와 단백질로 구성되어 있으며, 보통 때에는 실 모양으로 퍼져 있다가 세포가 분열할 때에는 일정한 크기와 모양을 가진 염색체를 형성

인(nucleolus) : 막성 구조물이 아니며 RNA와 단백질로 구성되어 있고 리보솜 합성에 관여하고 간기에만 관찰됨

 

 미토콘드리아(Mitochondria)

외막과 내막의 2중막으로 되어 있으며, 내막이 여러겹으로 겹쳐져 있는 주름진 구조로 된 크리스타를 이룸

호흡 효소가 존재하여 영양소에 들어 있는 화학 에너지를 세포가 이용할 수 있는 ATP 에너지로 전환하며, DNA가 있어 스스로 증식 가능

 

 세포막(Cell membrane)

구성 성분 : 단백질과 인지질로 구성

유동 모자이크 모델 : 인지질 2중층에 단백질이 곳곳에 모자이크 모양으로 파묻혀 있거나 관통하고 있는 구조이며 세포막을 통한 물질의 수송이나 세포 융합 과정을 설명하는데 적합

기능 : 선택적 투과성이 있어 물질의 출입을 조절


 
소포체(Endoplasmic Recticulum)
전자 현미경으로만 관찰되며 소포체의 막의 일부는 핵막과 연결되어 있어 세포내의 물질을 수송하는 통로 역할을 한다.

조면 소포체(Rough ER) :  리보솜이 붙어 있으며 리보솜에서 합성한 단백질을 세포의 다른 부위로 운반하거나 골지체로 보낸다.

활면 소포체(Smooth ER) : 콜레스테롤과 같은 지질의 합성과 수송에 관여한다.

 

 리보솜(Ribosome)

단백질과 RNA로 구성되어 있으며 핵에서 전달되는 유전 정보에 따라 단백질을 합성

소포체에 부착되어 있거나 세포질에 흩어져 있음

 

 골지체(Golgi apparatus)

소포체에서 운반되어 온 물질을 막으로 싸서(vasicle) 과립의 형태로 세포 밖으로 분비

분비 작용이 활발한 세포에 특히 발달

 

 리소좀(Lysosome)

골지체로부터 만들어지며 백혈구에 많이 있음

가수 분해 효소가 있어 세포 내 소화 또는 늙거나 손상된 세포를 분해

 

 중심립(Centriole)

주로 동물 세포에서 관찰되며, 핵 근처에 한 쌍이 서로 직각으로 위치

세포 분열시 양극으로 이동하여 성상체를 형성하고 여기서 방추사가 발달하며,

섬모나 편모의 분화에 관여


아래는 식물세포에서만 관찰되는 세포소기관입니다.
 

 엽록체(Chloroplast)

식물세포에만 있으며 2중막으로 구성
틸라코이드가 겹쳐진 그라나와 기질인 스트로마로 구성
그라나에서는 광합성 색소에 의해 빛에너지가 화학 에너지로 저장되고, 스트로마에서는 광합성 효소에 의해 CO2를 고정하여 포도당을 합성하며 DNA가 있어 스스로 증식 가능.

 세포벽(Cell wall)

식물 세포 에서만 볼 수 있으며 세포의 형태 유지와 식물체를 지탱하는데 중요한 역할

용매과 용질을 모두 통과시키는 전투과성

 액포(vacuole)

주로 식물세포에서 관찰되며, , 무기 염류, 유기산, 안토시아닌 색소, 노폐물 등이 녹아 있는 세포액을 포함

반응형
반응형

과학자들은 DNA가 유전 물질이라는 것을 어떻게 알게 되었을까요?
1940년에 초까지도 과학자들은 유전물질이 무엇인지 잘 몰랐습니다. 단백질 같은 복잡한 물질이 유전 물질일거라고 추측했기 때문에 4종류의 염기 (A,G,T,C)로만 이루어진 DNA가 유전 물질일 것이라고는 생각하지 못했죠.

DNA가 유전 물질이라는 것을 알게 해주는 몇 가지 실험을 소개 해드립니다.
사실 고등학교 교과서에 다 나오는 것이지만 다시 한번 기억을 떠올려보죠^^

■ 그리피스의 실험 (Fred Griffith's experiment)
   1928년 그리피스는 비병원성균인 R(Rough)형 균과 병원성균인 S(Smooth)형 균을 이용한 실험을 했습니다.
   실험 중 쥐에 살아있는 R형 균과 가열 살균한 S형 균을 함께 주사했을 때, 쥐가 죽는 것을 보고 S형 균의 어떤 물질이 R형균의 형질을 S형 균으로 전환 시켰다고 생각했습니다.
   그리스피는 이 실험을 통해서 형질전환 현상(Transformation)을 보여 줍니다.
 

그리피스의 실험그리피스의 실험

 

(그림 출처 : ko.wikipedia.org)

■ 에이버리 실험 
  1944년 에이버리(O. T. Avery), 맥리오드(C. McLeod), 맥카티(M. McCarty)는는 열 처리한 S형 균의 세포 추출물을 여러 분해 효소로 처리한 후 R형 균과 함께 쥐에 주사했더니 DNA 분해 효소로 처리한 쥐만 살아남은 것을 보고 DNA가 유전 물질임을 증명했습니다.

 

 

(그림 출처 : http://www.visionlearning.com/library/module_viewer.php?mid=149)

■ 허시-체이스 실험 (Hershey-Chase experiment)
  1952년 허시(Alfred Day Hershey)와 그 제자 체이스(Martha Chase)는 DNA와 단백질 중 어느 것이 유전 물질인지를 가리기 위해 실험을 했습니다.
  이 실험은 단백질에는 황(S)은 있지만 인(P)은 없고, DNA는 인(P)은 있지만 황(S)이 없다는 사실에서 시작했습니다.
  방사선을 내는 '35S'와 '32P'를 사용하여 단백질과 DNA를 구분합니다.
  각 실험 군의 박테리오파지에 한 쪽에는 '35S'를 다른 한쪽에는 '32P'를 표지하여 대장균에 감여 시킵니다.
  이때 박테리오파지가 대장균에 자신의 유전 물질을 넣기에는 충분하지만 대장균을 깨고 나오는기에는 짧은 시간에 원심 분리하여 대장균과 대장균에 붙은 물질을 분리합니다. 결과 대장균 내에서는 '32P'가 검출 되었고 이 것을 통해 유전 물질이 DNA라는 것이 증명 됬습니다. 

 

(그림 출처 : http://en.wikipedia.org/wiki/Hershey%E2%80%93Chase_experiment)

위와 같은 실험들로 DNA가 유전 물질임이 밝혀 졌습니다.
A,G,C,T 단 네 가지 분자로 이루어진 DNA가 복잡하게 움직이고 사고까지 하는 생명체의 정보를 담고 있는 것이 기적같지 않나요??
우리가 항상 접하는 컴퓨터도 매우 복잡한 화면을 표현하는데는 스위치의 켜짐과 꺼짐의 단 두가지 상태의 조합으로 이루어 집니다.
어떤 복잡한 것을 표현하기 위해서 반드시 복잡한 언어가 필요한 것은 아닐지도 모르겠네요.


반응형
반응형

  분자생물학(Molecular biology)은 이제 생명과 관련된 대부분의 분야에서 땔레야  땔 수 없는 분야가 된 것 같습니다.
분자생물학의 발달로 pathogene이나 oncogene에 대한 연구들이 이루어지고 있습니다.
그 결과 체외로부터 병원체의 침입에 의한 질병이나 생활습관이나 환경에 의한 체내에 내재된 질병의 발현에 대한 치료법과 예방법의 개선이 되어가고 있습니다.

  미국의 경우는 한 사람의 유전자를 분석해서 그 사람이 잠재적으로 발병할 수 있는 질병에 대한 정보를 제공하기도 합니다.
이것을 더 깊게 보면 그 사람의 생활 습관을 컨설트 해줄 수 있는 서비스라고 해야할까요?
물론 걸리지도 않을 병에 걸린 것 처럼 생각하는 부작용도 크겠지만요. 이런 문제들은 교육을 통해 해결 될 수 있을 것이라 생각합니다.

그리고 저는 real-time PCR을 통해 pathogene을 검출하는 시약을 만드는 회사에서 일을 하고 있습니다. 분자생물학 덕분에 생길 수 있었던 회사입니다.

  부전공으로 의생명공학을 하면서 참 많은 것을 배웠는데 저도 이제 조금씩 잊어가네요.
더이상 잊지 않기 위해서 중심설(Central dogma) 부터 시작합니다.!

  중심설을 말 그대로 '설'입니다. 누군가 더 획기적인 이론을 제안한다면 바뀔 수도 있겠지요.
하지만 아직까지는 이 중심설이 크게 흔들릴 기미는 보이지 않습니다.
아래 그림과 같은 경로로 유전 정보가 전달되는 것입니다.

  유전 정보는 DNA->RNA->단백질의 순서로 전달됩니다. 즉, DNA를 주형으로 mRNA를 합성하고 이 mRNA의 정보로 단백질이 만들어져서 눈에 보이거나 또는 눈에 띄지 않는 형질을 발현 하게 됩니다.

  또 세포분열 때 자기복제를 통해 유전 정보가 전달 됩니다.

이런 유전 정보를 이루고 있는 것은 단지 4개의 분자 (A, G, T, C)에 불과 합니다. 컴퓨터가 정보 정달을 위해 문자 두 개(0과 1)를 사용한다면 생명체는 문자 네 개를 사용한다 정도로 비유할 수 있겠습니다.

  역전사는 특이한 경우로 예를 들면 감기 바이러스가 체내에 침입했을 때 자신이 가진 RNA를 주형으로 DNA를 만들어내고 그 DNA를 단백질로 발현 시켜 우리를 괴롭힙니다.

  사실 이번 포스트만 봐서는 잘 감이 안 오실 겁니다. 왜냐하면 이것은 가장 높은 봉우리에서 '분자생물학'이라는 숲을 바라본 것이기 때문입니다. 저 위의 단순한 그림 속에 엄청난 것들이 숨어 있습니다. 틈틈히 포스트하도록 하겠습니다!
반응형
반응형

Eclipse에서 javadoc 생성을 하려는데
아래와 같은 에러가 났습니다.

javadoc unmappable character for encoding MS949

코드의 주석에 한글(UTF-8로 인코딩된)을 써서 그런 것 같아 구글링 해봤더니 역시나 그 문제 였네요.

해결 방법은 아래 창이 나타났을 때
VM options

-encoding UTF-8

을 적어주면 해결 됩니다.
그러면 한글이 포함된 JavaDoc을 생성할 수 있습니다.


 

반응형
반응형

항체의 구조


  항체의 기본 구조는 위 그림과 같습니다.
  혈액 속에 가장 많이 존재하고, 비교적 단순한 구조인 IgG급 항체의 구조 입니다.
  Y자 형에 항체와 결합하는 부위가 있고 나머지 잘 모르는 부분들이 있네요.

  IgG급 항체를 환원제로 처리하면 항체의 cystein 간 disulfide bond(이황화결합)이 끊어집니다. 이것을 전기영동(electrophoresis)하면 두 가지 크기의 단백질이 나타납니다. 이 중 하나가 그림에서 안 쪽에 Y 자 모양으로 보이는 heavy chain 이고 나머지 하나가 바깥쪽 연녹색의 light chain 입니다.

  IgG 항체 한 분자는 heavy chain과 light chain 각각 두개씩으로 구성되어 있습니다.



  그림을 천천히 보면서 읽어주세요^^
  IgG 항체는 단백질 분해 효소인 papain으로 절단해도 항원에 대해 반응 합니다. 그 이유는 두 개의 항원 결합 부위(antigen binding fragment) Fab항원과 결합하지 않는 Fc (crystalizable fragment)로 나뉘기 때문입니다.
  즉, Fab는 항원과 결합하고 Fc는 항원과 결합하지 않는 것입니다. Fc 는 모아 놓으면 결정을 형성하는데 이것으로 IgG 급 항체의 항원 특이성이 달라도(항원 결합 부위의 구조) Fc 지역을 구성하는 아미노산 서열이 서로 같음을 알 수 있습니다.
  
  IgG 항체를 pepsin으로 잘랐을 때는 두 개의 항원 결합 부위가 한 조각에 존재하는 F(ab')2가 얻어집니다. 이것 역시 항원과 결합하는 능력이 있습니다.
 
  위와 같은 것들은  IgG급 항체들의 항원 결합과 상관 없는 부분의  아미노산 배열이 서로 매우 유사함을 보여줍니다.

  또 그림과 같이 한 분자의 IgG 항체에는 항원이 결합 할 수 있는 두 개의 독립적인 부분이 있어서 하나의 항체가 두분자의 항원과 동시에 결합 할 수 있습니다.

  그림 처럼 heavy chain과 light chain이 쌍을 이루어 항원 결합 부위는 다른 부분과는 다른 독립적인 구조를 형성합니다. 한 분자의 항체에 있는 각각의 heavy chain과 light chain은 나머지 하나와 아미노산 배열이 완전히 같아서 결론적으로 하나의 항체에 두 개의 똑같은 항원 결합 부위가 존재하게 됩니다.

  다른 class의 항체들은 아마노산 배열이 IgG 항체와 다르긴 하지만 그 기본 구조는 유사합니다.
오늘은 여기 까지입니다. 점점 어렵네요^^ 고등학교때까지 항체는 그냥 Y 자로만 알았는데^^

반응형
반응형

 


  항체(antibody)는 항원(antigen)과 결합하는 단백질입니다.

  이 항체는 항원의 작용을 방해하거나 불능화 시키는 중화(neutralization)와 항원이 제거되도록하는 반응을 유도하는 작용기능(effector function) 등 여러가지 기능을 합니다.



  항체는 체액성 면역 반응에서 혈청과 체액에 녹아있는 immunoglobulin glycoprotein 입니다. 서로 다른 항체는 항원특이성은 다르지만 물리화적적으로 아주 유사합니다.
  또, 항체는 체액 뿐만 아니라 B cell의 표면에서 B cell의 항원수용체로(surface immunoglobulin) 존재합니다. 혈액의 항체는 이 B cell 표면의 immunoglobulin이 밖으로 분비된 것입니다.


 - primary antibody repertorie
  위에서도 말했 듯이 항체의 구조는 유사하지만 각각 항체의 항원특이성은 매우 다양합니다.

 - secondary antibody repertorie
  특정한 항원과 다시 반응하게 되면 항체의 항원특이성은 특정한 항원에 대해 반응성이 높아집니다.

  인간을 포함한 포유류에서는 5가지 그룹(class)의 항체가 존재합니다. 이 각각 그룹을 항체의 class 또는 isotype 이라고 합니다.
  서로 다른 급의 항체는 항체의 모양 및 기능에 따라 구분됩니다.  이 구분은항원특이성과는 무관합니다.

 

 

반응형
반응형


면역원성(immunogenicity)은 항원 자체의 성질과도 관련 있지만, 항원 외적인 요소에 의해서도 영향을 받습니다.

■ 항원 자체의 성질

 - 항원 이질성 (foreignness)
 - 분자량 (molecular size)
 - 화학조성과 복잡성 (chemical composition and complexity)
 - 항원제시세포와의 결합성(antigen presentation)

 등의 영향을 받습니다.
 

■ 항원 외적인 요소

 - 숙주의 유전적 구성
  : 예를 들어 B형 간염 예방 접종을 받고 어떤 사람은 항체가 생기는 반면 다른 어떤 사람은 항체가 생기지 않는 것을 볼 수 있습니다.  이는 항원을 받아 들인 숙주의 일부 유전자가 서로 다르거나 그 유전자의 발현이 다르기 때문입니다.
    이런 차이는 주로 주조직적복합체 (MHC: Major Histocompatibility Complex) 유전자가 다르기 때문에 (allotype) 나타나는 것으로 알려져 있있습니다.


 - 항원의 양과 투여경로
  : 너무 많은 양의 항원을 투여하거나 너무적은 양을 투여하면 면역 반응이 일어나지 않고 오히려 내성(tolerance)상태가 될 수 있습니다.
    일반적으로 경구투여(입을 통해 먹음(PO))보다는 비경구투여(근육주사(IM), 정맥주사(IV)등등) 가 면역 반응을 잘 유도합니다.
    항원의 반복적인 투여로 항체 생산을 돕기도 합니다.
 
 


 - 에져번트(adjuvant)의 사용여부
  : adjuvant는 숙주 내에서 항원을 더 오래 존재하도록 하거나 다른 면역 세포들을 자극하여 면역반응을 돕는 물질을 말합니다. 이런 물질들을 사용함으로써 면역원성을 높일 수 있습니다.




■ 좋은 면역원

 - 이질성이 크고 (숙주에 존재하지 않는 다른 생명체의 분자, 진화적으로 멀어서 구조나 아미노산 배열이 다른 물질)
 - 분자량이 충분히 크며
 - 화학적 조성이 복잡하여 그 구조가 복잡할 수록 (저분자<고분자<단백질<세포)

좋은 면역원이 됩니다.



참고로 B cell은 단백질, 탄수화물, 지방, 핵산 등 어떤 것이라고 항원으로 작용하지만 T cell은 오로지 단백질 항원에만 반응합니다.
대부분의 면역반응에서  T cell의 역할이 중요하므로 면역반응으르 잘 유도하는데는 단백질 항원이 유리합니다.

반응형
반응형



  항원(antigen)은 항체(antibody)와 반응하지만 생명체에서 항상 항체의 생산을 유도하지는 않습니다. 다시 말하면 어떤 항원은 그 자체로 항체 생산을 잘 유도 하지만, 어떤 항원은 어떤 조건이 맞아야만 항체를 생산합니다. 이런 반응은 항체 뿐만 아니라 T cell의 반응에도 마찬가지 입니다.

  항원과 구분하여  체내에 들어와서 체액성 면역반응과 세포 매개성 면역 반응을 유도하는 물질을 면역원(immunogen)이라고 합니다. 좀 더 자세히 말하면 면역원은 체내에 들어와서 B cell을 Plasma cell로 활성화 시켜 항체를 생산하게 하거나 T cell을 helper T cell이나 cytotoxic T cell (CTL)로 활성화 시키는 등의 면역 반응을 유도하는 물질입니다.

  면역원은 항원이라고 할 수 있지만 모든 항원이 면역원인 것은 아닙니다.

  즉, 항원-항체가 반응(결합)하는 여부와 항체를 잘 생산하느냐의 여부는 별개의 문제라는 것 입니다.

 
■ 합텐(hapten)과 캐리어(carrier protein)

 
 - 합텐(hapten)
  : 5000달톤 이하의 작은 분자는 항체와 결합을 할 수 있지만 그 자체로 항체의 생산을 유도하기는 어렵다. 즉 이런 작은 분자들은 항원이지만 면역원이 아닌 경우에 해당한다. (아래와 같은 작은 분자들.)


 - 캐리어(carrier protein)
  : hapten 같은 작은 분자가 다른 큰 분자의 단백질과 결합했을 때 hapten에 대한 항체 생산을 유도한다.

hapten+carrier=immunogen


  다시 설명하면 hapten만으로는 면역반응을 일으킬 수 없지만 다른 단백질과 결합시켜 면역반응을 유도하는 면역원으로서 기능을 할 수 있다는 것입니다.



  항원의 면역원성은 이 hapten이라는 물질에 대한 항체반응을 연구하는 과정에서 알려졌습니다.
  1920년대 K. Landsteiner 라는 사람의 연구에서 DNP(dinitropehnol)을 hapten 항원으로 이용하여, DNP만 실험 동물에 주사한 경우 hapten에 대한 항체가 만들어 지지 않는 것을 확인 하였습니다. 반면 DNP hapten을 BSA(bovine serum albumin: 소혈청알부민)에 공유결합 시킨 후 주사 한 경우에는 hapten이 면역원 역할을 하는 것을 발견하게 됩니다. 이후 hapten과 결합하여 면역반응을 유도한 단백질을 carrier 라고 부르게 되었다고 합니다.




■ hapten에 대한 항체 생산에서 B cell과 T cell의 상호작용

  hapten이 붙어있는 단백질이 체내에 들어와서 B cell의 항체 단백질과 결합하면, B cell이 endocytosis(내포작용)를 하여 hapten과 carrier protein을 분해해서 T cell에 제시하게 됩니다. 이를 인지한 T cell은 B cell이 항체를 만들 수 있도록 유도합니다. 이런 과정을 거치는 이유는 B cell의 MHC(Major Histocompatibility Complex : 사람의 경우 HLA(Human Leucocyte Antigen))가 peptide와만 결합하기 때문에 hapten 같은 분자만으로는 항원제시 과정이 일어날 수 없는 것입니다.


반응형
반응형



자바로 만든 사칙연산 계산기 입니다.
인턴 출근하고 첫 번째 과제..
인터넷에서 가져온 녀석에 키보드 이벤트가 없어서 이벤트 추가해주고
키보드에 특수기호들 이름을 몰라서 걍 테스트로 System.out.print(블라블라);해서
콘솔에 나오는 숫자 그대로 넣어줬습니다..(부끄..어쨌든 잘 되네요..ㅎ;;)

기본적인 원리!!
입력한 숫자를 기억하고, 어떤 연산을 시켰는지 기억하면서 계산을 해나갑니다. 그리고 마지막 숫자가 들어 온 후 '='을 누르면 결과가 Text창에 뜨는 겁니다.

우선 GUI는 swing으로 덕지덕지 만들었습니다.
버튼들에 이벤트가 발생하면 무언가 일이 진행되게 합니다. 각각의 경우에 맞는 Listener와 Listener가 발견한 이벤트에 대해 할일을 만들어 주는 것이죠. 이벤트가 발생한 녀석이 어느 녀석이냐에따라 다른 일을 합니다. 이 땐 switch-case문을 사용했습니다.
에휴 설명이 허접해지네요ㅠㅠ
주석을 참고하세요^^ 설명을 위해서 주석을 엄청나게 써놨습니다... ㅎㅎ
아.. 프로그래밍 잘하고 싶다 ㅠ

그리고 인터넷에서 긁어온 소스의 닫기버튼에 대한 구현이 아래 처럼 되어 있어서 닫기 버튼을 눌러도 프로세스가 살아있더라구요..
엄청 띄웠더니 컴퓨터가 버벅 거려서 깜짝 놀랐습니다요..

addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e){
System.exit(0);
}
});

그래서 이러게 바꿔줬더니 잘 꺼지는 군요..

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});


코드는 아래와 같습니다. 아... 넘 길다 ㅠㅠ 첨부도 할게요...
딱 사칙연산만 하면 좀더 간단했을텐데.. 그래도 윈도우 계산기 켰을때 있는 녀석들은 다 있네요.^^;

 


package cal;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener, KeyListener{
 final int MAX_INPUT_LENGTH = 20; //최대한 입력 가능한 길이를 제한하고
 
 //각 모드별로 index를 부여
 final int INPUT_MODE = 0;
 final int RESULT_MODE = 1;
 final int ERROR_MODE = 2;
 int displayMode;
 
 boolean clearOnNextDigit;  //화면에 표시될 숫자를 지울지 말지 결정하는 녀석
 
 double lastNumber;   //마지막에 기억될 수
 String lastOperator;  // 마지막에 누른 연산자를 기억.
 
 private JLabel output;    //숫자가 표시될 공간
 private JButton buttons[];   //각 버튼을 배열로 생성할 것임.
 private JPanel masterPanel, btnPanel, ctrPanel; //버튼과 레이블을 배치할 공간
 
 //GUI를 생성해보자.
 public Calculator(){
  
  setBackground(Color.gray);   //프레임의 배경은 회색
  
  masterPanel = new JPanel();
  
  output = new JLabel("0", JLabel.RIGHT); // 레이블의 초기 값은 0
  output.setBackground(Color.WHITE);
  output.setOpaque(true);
  
  buttons = new JButton[23];
  
  btnPanel = new JPanel();
  
  //숫자 버튼 만듦0에서9까지.
  for (int i=0 ; i<=9 ; i++){
   buttons[i] = new JButton(String.valueOf(i));   
  }
  
  //연산 버튼 만듦.
  buttons[10] = new JButton("±");
  buttons[11] = new JButton(".");
  buttons[12] = new JButton("=");
  buttons[13] = new JButton("/");
  buttons[14] = new JButton("*");
  buttons[15] = new JButton("-");
  buttons[16] = new JButton("+");
  buttons[17] = new JButton("√");
  buttons[18] = new JButton("1/x");
  buttons[19] = new JButton("%");
  
  //컨트롤 버튼 만듦.
  buttons[20] = new JButton("←");
  buttons[21] = new JButton("CE");
  buttons[22] = new JButton("C");
  
  //각 버튼의 색을 다르게
  for(int i=0 ; i<buttons.length ; i++){
   if(i<10){
    buttons[i].setForeground(Color.black); //숫자 버튼들
   }else if(i>=10 && i<21){
    buttons[i].setForeground(Color.blue); //연산자 버튼들
   }else{
    buttons[i].setForeground(Color.red); //컨트롤 버튼들.
   }
  }
  
  //패널에 숫자버튼 및 연산자 버튼 배치
  btnPanel.setLayout(new GridLayout(4,5,2,2));
  
  for(int i=7; i<=9 ; i++){
   btnPanel.add(buttons[i]);
  }
  
  btnPanel.add(buttons[13]); // /
  btnPanel.add(buttons[17]); // √
  
  for(int i=4; i<=6 ; i++){
   btnPanel.add(buttons[i]);
  }
  
  btnPanel.add(buttons[14]); // *
  btnPanel.add(buttons[18]); // 1/x
  
  for(int i=1; i<=3 ; i++){
   btnPanel.add(buttons[i]);
  }
  
  btnPanel.add(buttons[15]); // -
  btnPanel.add(buttons[19]); // %
  
  btnPanel.add(buttons[0]); // 0
  btnPanel.add(buttons[10]); // ±
  btnPanel.add(buttons[11]); // .
  btnPanel.add(buttons[16]); // +
  btnPanel.add(buttons[12]); // =
  
  //컨트롤 패널에 컨트롤 버튼을 배치
  ctrPanel = new JPanel();
  ctrPanel.setLayout(new GridLayout(1,2,2,2));
  
  
  ctrPanel.add(buttons[20]);
  ctrPanel.add(buttons[21]);
  ctrPanel.add(buttons[22]);
  
  
  // 각 컴포넌트를 프레임에 추가
  masterPanel.setLayout(new BorderLayout());
  masterPanel.add(ctrPanel, BorderLayout.NORTH);
  masterPanel.add(btnPanel, BorderLayout.SOUTH);
  
  
  getContentPane().add(output, BorderLayout.NORTH);
  getContentPane().add(masterPanel,BorderLayout.SOUTH);
  requestFocus();
  
  //버튼 ActionListener, Keylistener 활성! 이놈들을 추가해야 버튼에 뭔일이 발생하는지 봅니다.
  for(int i=0 ; i<buttons.length ; i++){
   buttons[i].addActionListener(this);
   buttons[i].addKeyListener(this);
  }
    
  clearAll(); //모든 값을 초기화!!
  
  addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e){
     System.exit(0);
    }
   }
  );  
 }
 /*생성자 끝~~~~*/
 
 //마우스 입력에 대한 동작
 @Override
 public void actionPerformed(ActionEvent e){
  
  double result = 0;
  
  for(int i=0 ; i<buttons.length ; i++){
   if(e.getSource()==buttons[i]){
    if(i<10){
     addToDisplay(i);
     break;
    }else{
     switch(i){
      case 10: // ±
       processSingChange();
       break;
      case 11: // .
       addPoint();
       break;
      case 12: // =
       processEquals();
       break;
      case 13: // /
       processOperator("/");
       break;
      case 14: // *
       processOperator("*");
       break;
      case 15: // -
       processOperator("-");
       break;
      case 16: // +
       processOperator("+");
       break;
      case 17: // √
       if (displayMode != ERROR_MODE)
       {
          try
        {
         if (getDisplayString().indexOf("-") == 0)
             displayError("Invalid input for function!");
         result = Math.sqrt(getNumberInDisplay());
         displayResult(result);
        }
        catch(Exception ex)
        {
         displayError("Invalid input for function!");
         displayMode = ERROR_MODE;
        }
       }
       break;
      case 18: // 1/x
       if (displayMode != ERROR_MODE){
        try
        {
         if (getNumberInDisplay() == 0)
          displayError("영으로 나눌 수 없습니다.");
  
         result = 1 / getNumberInDisplay();
         displayResult(result);
        }
        
        catch(Exception ex) {
         displayError("영으로 나눌 수 없습니다.");
         displayMode = ERROR_MODE;
        }
       }
       break;
      case 19: // %
       if (displayMode != ERROR_MODE){
        try {
         result = getNumberInDisplay() / 100;
         displayResult(result);
        }
  
        catch(Exception ex) {
         displayError("Invalid input for function!");
         displayMode = ERROR_MODE;
        }
       }
       break;
      case 20: // ←
       backspace();
       break;
      case 21: //CE
       setDisplayString("0");
       clearOnNextDigit = true;
       displayMode = INPUT_MODE;
       break;
      case 22: //C
       clearAll();
       break;       
     }
    } 
   }
  }
 }
 
 
 //키보드 입력에 대한 동작
 public void keyPressed(KeyEvent e){
  int keycode = e.getKeyChar();
  //System.out.println(e.getKeyCode()+ "  "+ keycode ); 요걸로 특수기호 녀석들 코드를 알아냈습니다... ^^;;부끄
  switch(keycode){
   case KeyEvent.VK_0:
    addToDisplay(0);
    break;
   case KeyEvent.VK_1:
    addToDisplay(1);
    break;
   case KeyEvent.VK_2:
    addToDisplay(2);
    break;
   case KeyEvent.VK_3:
    addToDisplay(3);
    break;
   case KeyEvent.VK_4:
    addToDisplay(4);
    break;
   case KeyEvent.VK_5:
    addToDisplay(5);
    break;
   case KeyEvent.VK_6:
    addToDisplay(6);
    break;
   case KeyEvent.VK_7:
    addToDisplay(7);
    break;
   case KeyEvent.VK_8:
    addToDisplay(8);
    break;
   case KeyEvent.VK_9:
    addToDisplay(9);
    break;
   case 46: // .
    addPoint();    
    break;
   case 10: // =
    processEquals();
    break;
   case 47: // /
    processOperator("/");
    break;
   case 42: // *
    processOperator("*");
    break;
   case 43: // +
    processOperator("+");
    break;
   case 45: // -
    processOperator("-");
    break;
   case 8: //backspace
    backspace();
    break;
   case 27: //ESC
    clearAll();
    break;    
  }
 }
 private void clearAll() {
  setDisplayString("0");
  lastOperator = "0";
  lastNumber = 0;
  displayMode = INPUT_MODE;
  clearOnNextDigit = true;
 }
 
 private void backspace(){
  if (displayMode != ERROR_MODE){
   setDisplayString(getDisplayString().substring(0,
       getDisplayString().length() - 1));
   
   if (getDisplayString().length() < 1)
    setDisplayString("0");
  }
 }
 private void processOperator(String string) {
  if (displayMode != ERROR_MODE){
   double numberInDisplay = getNumberInDisplay();
   if (!lastOperator.equals("0")){
    try {
     double result = processLastOperator();
     displayResult(result);
     lastNumber = result;
    }catch(Exception e){}
   
   }else{
    lastNumber = numberInDisplay;
   }
   
   clearOnNextDigit = true;
   lastOperator = string;
  }
 }

 private double processLastOperator() throws Exception{
  double result = 0;
  double numberInDisplay = getNumberInDisplay();
  if (lastOperator.equals("/")){
   if (numberInDisplay == 0)
    throw (new Exception());
   result = lastNumber / numberInDisplay;
  }
   
  if (lastOperator.equals("*")){
   result = lastNumber * numberInDisplay;
  }
  if (lastOperator.equals("-")){
   result = lastNumber - numberInDisplay;
  }
  if (lastOperator.equals("+")){
   result = lastNumber + numberInDisplay;
  }
  
  return result;
 }
 private void processEquals() {
  double result = 0;
  if (displayMode != ERROR_MODE){
   try{
    result = processLastOperator();
    displayResult(result);
   }catch (Exception e){
    displayError("영으로 나눌 수 없습니다.");
   }
   lastOperator = "0";
  }
 }
 private void addPoint() {
  displayMode = INPUT_MODE;
  if (clearOnNextDigit)
   setDisplayString("");
  String inputString = getDisplayString();
 
  // 이미 점이 찍혀 있으면 안 찍음.
  if (inputString.indexOf(".") < 0)
   setDisplayString(new String(inputString + "."));
 }
 private void processSingChange() {
  if (displayMode == INPUT_MODE){
   String input = getDisplayString();
   if (input.length() > 0 && !input.equals("0")){
    if (input.indexOf("-") == 0)
     setDisplayString(input.substring(1));
    else
     setDisplayString("-" + input);
   }
  }else if (displayMode == RESULT_MODE){
   double numberInDisplay = getNumberInDisplay();
  
   if (numberInDisplay != 0)
    displayResult(-numberInDisplay);
  }
 }
 private void displayResult(double result) {
  setDisplayString(Double.toString(result));
  lastNumber = result;
  displayMode = RESULT_MODE;
  clearOnNextDigit = true;
 }
 private void displayError(String error) {
  setDisplayString(error);
  lastNumber = 0;
  displayMode = ERROR_MODE;
  clearOnNextDigit = true;
 }
 private double getNumberInDisplay() {
  String input = output.getText();
  return Double.parseDouble(input);
 }
 private void addToDisplay(int i) {
  if (clearOnNextDigit)
   setDisplayString("");
  
  String inputString = getDisplayString();
  
  if(inputString.indexOf("0") == 0){
   inputString = inputString.substring(1);
  }
  if(( !inputString.equals("0") || i>0 ) && inputString.length() < MAX_INPUT_LENGTH){
   setDisplayString(inputString + i);
  }
  
  displayMode = INPUT_MODE;
  clearOnNextDigit = false;
 }

 private void setDisplayString(String string) {
  output.setText(string);
 }

 private String getDisplayString() {
  return output.getText();
 }
 
 public static void main(String args[]){
  Calculator cal = new Calculator();
  cal.setTitle("Calculator");
  cal.setSize(300,300);
  cal.pack();
  cal.setVisible(true);
  cal.setResizable(false);  
 }
 @Override
 public void keyReleased(KeyEvent arg0) {}
 @Override
 public void keyTyped(KeyEvent arg0) {}
}

반응형
반응형





지금 인턴하고 있는 회사 첫 출근에 과장님께 과제로 받은 것이
자신있는 언어로 사칙연산이 가능한 계산기를 만들고 키보드와 연동하라는 것이었습니다. 
그나마 익숙한 자바로 사칙연산하는 계산기를 만들며 생각난 것이
파이썬으로 하면 정말 간단한 솔루션이 나올것 같은 예감이 들었습니다.
역시나 구글링을 하니 제 예감이 적중했더군요.
50줄도 안되는 계산기입니다...

파이썬에는 eval()이라는 내장 함수가 있습니다.
이 eval() 함수는 인자로 받은 텍스트 데이터를 파이썬 인터프리터가 번역할 수 있는 파이썬 코드로 변환합니다.
GUI는 tkinter 모듈을 이용하면 간단히 만들 수 있군요.

예를 들어 result =eval("1+2*3/4") 이라고 하면 인자에 들어간  텍스트를 파이썬 코드로 변환하여
result에는 1+2*3/4 의 연산 결과인 2.25가 들어가게 되는 것이죠.

정말 획기적이지 않나요??
텍스트 창 안의 내용을 그대로 계산하는 초간단 계산기 였습니다.!!
키보드와 바로 연동되는 것은 아니지만
텍스트 창 안에 수식을 입력하면 바로 계산되어 나왔습니다.

역시 파이썬이 강력한 이유는 유용한 내장함수와 다양한 모듈들 이겠지요!!

코드 출처 : http://lexlove.egloos.com/10763317
#calculator.py
#-*-coding=utf-8-*-
#GUI를 만들어주는 tkinter 모듈을 임포트!
from tkinter import *

#이벤트 처리함수
def enter(btn):
    if btn == 'C':
        ent.delete(0, END)
    elif btn == '=':
        #eval()함수는 텍스트로된 데이터를 바로 파이썬 코드로 변환합니다.대박..
        #그래서 ent라는 곳에 입력된 수식을 바로 계산해 냅니다.
        ans = eval(ent.get())
        ent.delete(0, END)
        ent.insert(0, ans)
    else:
        #C와 =을 제외한 버튼은 그대로 ent에 추가.
        ent.insert(END, btn)

def quit():
    root.destroy()
    root.quit()
#창만들기
root=Tk()
root.title('계산기')

#숫자 입력란 만들기
ent=Entry(root)
ent.insert(0, ' ')
ent.pack(pady=5)

#숫자 버튼 만들기
buttons = ['7410', '852=', '963+', 'C/*-']
for col in buttons:
    frm=Frame(root)
    frm.pack(side=LEFT)
    for row in col :
        btn=Button(frm, text=row, command=(lambda char=row: enter(char)))
        btn.pack(fill=X, padx=5, pady=5)

#프로그램 실행
root.mainloop()
반응형
반응형

Tomcat symbol

<

Apache httpd symbol



  예전에 포스팅했던 글에서 제가 웹서버의 성능을 향상 시키기 위해 아파치(Apache, httpd)톰캣(Tomcat)을 연동한다고 했었습니다. 그런데 열심히 항해를 하다가 그것이 불필요한 일이라는 것을 알아버렸네요.

출처를 먼저 밝히겠습니다.
Tomcat expert라는 커뮤니티입니다.

http://www.tomcatexpert.com/blog/2010/03/24/myth-or-truth-one-should-always-use-apache-httpd-front-apache-tomcat-improve-perform

내용을 제 나름대로 해석하고 요약해봤습니다.
정말 제 나름이니 정확한 내용을 보실분은 출처를 꼭 한번 따라가 보시길^^;;


Myth or truth : 사람들은 항상 성능을 향상시키기 위해 아파치 Tomcat 앞에 아파치 httpd 를 사용해야합니까?

간단히 말하면 그 것은 Myth이다. 좀 더 이야기하면 Tomcat 3 이전에는 상황에 따라 어느 정도 진실이었다. 하지만 요즘 사용하는 Tomcat (5.5.x 이후)은 순전히 성능상의 이유만으로 httpd (아파치) 를 사용할 필요가 없다. Tomcat은 현재 low-level I/O를 위해서 httpd와 같은 기본 라이브러리를 사용하여 httpd와 비슷한 기능을 수행할 수 있는 native/APR(Apache Portable Runtime) connector를 지원한다. Tomcat으로 정적인 컨텐츠를 제공할 경우 httpd에 비해 약간 부하가 더 있지만 그 차이는 눈에 띄지 않을 정도다.

종종 벤치마크에서 예상외로 httpd보다 Tomcat이 좋을 성능을 발휘했다. 이는 Tomcat은 기본적으로 메모리에 작은 정적 파일을 캐시하고 httpd는 기본적으로 메모리에 파일을 캐시하지 않기 때문이다.

최상을 성능을 달성하기 위한 설정은 다양하다. 이는 여러가지 요인에 크게 의존한다.

그외에 복 수의 Tomcat 인스턴스에 로드밸런싱을 위해 Apache를 사용한다. (로드밸런싱을 위한 유일한 옵션은 아니지만)

요약하면 Tomcat과 httpd를 합께 사용하면 좋은 이유들이 있지만 정적 페이지의 성능을 위한 이유는 그 중 하나가 아니다.


  원문에는 벤치마크에 대한 내용과 이런저런 connector 들에 대한 이야기가 나와 있습니다. 저는 그렇게까지 전문적인 내용은 필요가 없으므로 제가 이해할 만한 내용만 적어봤습니다.

  때로는 그저 그냥 당연하다고 생각한 것이 사실은 전혀 당연한게 아닐 수도 있군요.

반응형

+ Recent posts