Table of Contents
Welcome to GenoGlobe.com!
Welcome to Haeyoung JEONG's official website, GenoGlobe.com! My secondary domain (GenoGlobe.kr) will be forwarded to this website.
I am a molecular biologist and genome scientist working for Korea Research Institute of Bioscience and Biotechnology. GenoGlobe means Genome + Globe, which implies my desire to learn from genomes and lives on earth (or other planets, such as Mars?). You can read more about my professional research profile from ORCiD or Google Scholar.
Please visit my blog if you want to send me a message through contact form (only shown from PC browsers) or use this form directly: Send Feedback
엄격한 기준으로 구분하였을 때 학술 논문이 아닌 것으로서 외부 매체에 기고했던 글 목록은 여기를 참고하십시오. 주로 미생물 유전체를 다루는 생명정보학과 관련하여 제가 작성한 글은 별도의 위키 사이트에 있습니다. 블로그에는 업무 및 취미와 관련한 잡다한 글이 있습니다. 블로그에는 저에게 이메일을 보낼 수 있는 양식이 있으니 참고하십시오. 단, PC 버전의 웹브라우저에서만 보이는 것 같습니다. 또는 다음을 클릭하세요: Send Feedback
이곳은 원래 저의 취미와 관련한 글을 체계적으로 작성하기 위해 만든 DokuWiki 기반의 웹사이트였다가 2023년 9월 7일 GenoGlobe.com의 공식 웹사이트 역할을 겸하게 되면서 다소 복합적인 성격을 갖게 되었습니다. 위키 기반이지만 첫 페이지는 블로그 형식(아래의 '새 소식')이라서 더욱 그렇습니다. '새 소식'은 자료를 모아서 분석하고 오래 생각하여 쓰는 글이 아닙니다. 저에게 이곳은 트위터나 페이스북과 같은 것으로, 예전에 사용하던 Google+를 대신하여 가벼운 생각을 기록하는 곳에 해당합니다. ChatGPT에게 키워드를 제시하고 자동으로 쓴 글도 포함되어 있으며, 이러한 글은 마지막 부분에 자동 작성된 것임을 밝혀 놓았습니다.
새 소식
AI가 모든 걸 집어삼킬 거라는 호들갑에 대처하는 법
이 글은 원래 <참여연대>에서 발간하는 침여사회 9-10호(통권 326호)에 실렸던 '어쪈'의 AI 윤리 레터이다. 실린 글 전체를 읽어 보기를 권한다. 2024년 KAIST 졸업식의 '입틀막' 사건의 당사자였던 AI 연구자 신민기 씨의 인터뷰 불경한 이야기는 없다도 흥미롭다.
모든 신기술은 하이프를 수반한다. 대부분의 기술이 이미 개발 초기 단계에 주목도 측면에서 정점을 찍은 후 오히려 성숙해지는 과정에서 환멸기를 거치며 관심이 덜해진다는 경험을 바탕으로 만들어진 가트너의 하이프 사이클이라는 시각화 도구가 있을 정도다. (중략) 하지만 자동화를 통해 달성하고자 하는 더 높은 효율성과 생산성이라는 가치가 과연 다른 사회적 가치들을 희생하면서까지 추구해야 할 정도로 중요한 것인가? 수많은 AI 서비스가 내가 당장 하기 귀찮은 일을 대신해주겠다고 유혹하지만, 대체되는 것은 그뿐만이 아니다. 숙련이나 돌봄, 책무성 등 일에 담긴 다양한 사회적 가치가 전부 뭉뚱그려져 비용 항목으로 취급되고 효율이라는 단어 뒤로 사라진다.
다음은 챗GPT를 이용하여 오늘 소개한 글에 대해여 자동생성한 요지이다.
AI 과장광풍과 균형 있는 시선
과장된 담론
- 최근 인공지능에 대한 관심이 급속히 확산
- 언론과 기업은 '초지능', '모든 문제 해결' 등 과도한 표현 사용
- 오픈AI 샘 올트먼, xAI 일론 머스크 등 유명 인사들이 담론 주도
AI의 실제 모습
- 이미 검색, 번역, 추천 시스템 등에서 오래 전부터 활용
- 기술적 본질은 다른 도구와 다르지 않은 목적 지향적 시스템
- 초월적 존재가 아니라 특정한 용도를 가진 도구임
필요한 관점
- AI는 기술 그 자체보다 사회적 맥락 속에서 이해해야 함
- 설계 의도, 데이터 편향, 권력 관계, 사회 구조 등을 고려해야 함
- 과도한 기대나 공포 대신 균형 잡힌 시각이 필요
결론
- AI를 둘러싼 과장된 광풍은 비판적으로 해석해야 함
- 지속 가능한 활용을 위해 사회적 합의와 책임 있는 접근이 요구됨
데이터 주권이 강조되는 때에 국경 너머로 데이터를 자유롭게 주고받으려면
보안뉴스 2023년 6월 21일
데이터 주권이 강조되는 때에 국경 너머로 데이터를 자유롭게 주고받으려면
글 : 제시카 굴릭(Jessica Gulick), US Cyber Games Commissioner
What is the '-' Key on the Keyboard? (키보드의 '-'는 무엇인가?)
일반적인 키보드의 '-' 키(숫자 0 옆, Shift 없이 입력하는 것)는 하이픈(hyphen, -) 으로 정의된다.
하이픈(Hyphen, -)
- 기본: 단어 연결 (예:
data-driven) 이나 줄바꿈 표시 - 키보드에서 입력되는 기본 기호
- ASCII 코드 45 (U+002D)
마이너스(Minus sign, −)
- 수학적 기호 전용
- 하이픈보다 약간 길고 위치가 다름
- 유니코드 U+2212 (−)
- 수식이나 논문에서는 이 기호 사용이 권장됨
엔 대시(En dash, –)
- 하이픈보다 길다
- 범위 표현: 예)
2020–2025 - 유니코드 U+2013 (–)
엠 대시(Em dash, —)
- 가장 긴 대시
- 문장에서 강한 구분, 삽입에 사용
- 유니코드 U+2014 (—)
정리
- 키보드에서 바로 입력되는
-는 하이픈(-) - 마이너스(−), 엔 대시(–), 엠 대시(—) 는 별도의 유니코드 문자
- 일반 키보드로 직접 입력 불가 → 특수문자 입력이나 자동 교정 기능을 통해 사용해야 함
저자 및 이용 안내
이 문서는 정해영의 아이디어와 지시에 따라 AI 도구(ChatGPT)의 도움을 받아 작성되었습니다.
본 문서는 Creative Commons CC0 1.0 Universal Public Domain Dedication에 따라 누구나 자유롭게 복제, 수정, 배포, 활용할 수 있으며, 출처 표시도 필요하지 않습니다. 다만, 내용의 정확성은 보장되지 않았으며, 정해영은 본 문서의 내용에 대해 어떠한 법적 책임도 지지 않습니다.
Authorship and Usage Notice
This document was written with the assistance of an AI tool (ChatGPT), based on the ideas and direction provided by Haeyoung Jeong.
It is released under the Creative Commons CC0 1.0 Universal Public Domain Dedication. Anyone may freely copy, modify, distribute, and use the content, with no requirement for attribution. However, the accuracy of the content is not guaranteed, and Haeyoung Jeong assumes no legal responsibility for its use.
공무원 수 증가의 법칙
공무원 수 증가의 법칙. 한겨레 2025년 9월 8일
파킨슨의 법칙: 공무원의 숫자는 업무량의 증가와 직접적인 관계 없이 정부와 공무원의 심리적 요인에 의해서 계속하여 증가한다.
서로에게 더 많은 일을 만들어주기 때문에 모두 바쁘게 일하는 것처럼 보이고, 오히려 ㄱ씨는 예전보다 더욱 바쁘게 일하게 된다.
Pointers and Memory Efficiency (포인터와 메모리 절약)
1. 포인터란?
- 메모리 주소를 저장하는 변수
- 예시:
int a = 10; int* p = &a; // p는 a의 주소를 저장
- `p` 자체에는 주소가 들어있음
- `*p`를 하면 그 주소가 가리키는 값(예: 10)을 읽거나 수정할 수 있음
2. 배열과 포인터의 관계
- 배열 이름은 배열 첫 원소의 주소와 같음
- 예시:
char str[] = "Piano"; char* p = str; // p == &str[0]
- 차이점:
- `str`은 상수 주소 (다른 곳을 가리킬 수 없음)
- `p`는 다른 문자열을 가리킬 수 있음
3. 문자열 저장 방식 비교
(1) 2차원 배열 (비효율적)
char names[3][12] = {"Piano", "Guitar", "Violin"};
- 모든 문자열이 고정 크기(12바이트)를 차지
- 남는 공간은 낭비
- 전체가 SRAM에 저장됨 → 아두이노에서 메모리 부족 위험
(2) 포인터 배열 (효율적)
const char* names[3] = {"Piano", "Guitar", "Violin"};
- RAM에는 문자열 주소(포인터)만 저장 (2바이트씩)
- 실제 문자열은 플래시 메모리에 저장됨
- 훨씬 효율적
4. 다차원 배열 vs 포인터 배열
- 다차원 배열: 데이터가 메모리에 연속적으로 배치됨
- 포인터 배열: 주소 목록만 있고, 실제 데이터는 흩어져 있음
- 포인터 배열은 유연하지만 관리가 까다로울 수 있음
5. PROGMEM과의 관계
- Arduino(AVR)에서는 문자열 리터럴이 플래시에 저장됨
- `const char*`만으로도 대부분 플래시에 저장됨
- 확실히 플래시에만 보관하려면 `PROGMEM` 사용:
const char string_0[] PROGMEM = "Piano"; const char* const names[] PROGMEM = { string_0 };
- 꺼낼 때는 `pgm_read_word()` 필요 → 코드가 복잡해짐
6. 잘못 쓸 때의 문제
- 포인터가 잘못된 주소를 가리키면 → 세그멘테이션 오류 / 오동작
- `const char*` 문자열은 읽기 전용
- `strcpy()` 같은 함수로 덮어쓰면 에러 발생
7. Arduino에서의 결론
- 문자열은 포인터 배열(`const char*`)로 관리하는 것이 가장 효율적
- GM 악기명: `const char* gmNames[128]`
- 드럼킷 이름: `const char* drumKitNames[]`
- 필요시 `struct`로 확장 (MSB, LSB, PC 함께 관리 가능)
8. 실제 예시: gm_gs_names.h (배열 버전)
// GM 악기 이름 (128개) const char* gmNames[128] = { "AcouPiano1", "AcouPiano2", "ElecGrand", "HonkyTonk", "ElecPiano1", "ElecPiano2", "Harpsi", "Clavi", // ... (중략) ... "Gunshot" }; // 드럼킷 이름 (9개, CleanWave32 기준) const char* drumKitNames[] = { "Standard", "Room", "Power", "Electronic", "TR-808", "Jazz", "Brush", "Orchestra", "SFX" }; // LCD 표시 예시 void renderLCD(uint8_t channel, uint8_t pc) { char line2[17]; if (channel == 10) { snprintf(line2, sizeof(line2), "D:%-10s", drumKitNames[pc]); } else { snprintf(line2, sizeof(line2), "%-12s %03d", gmNames[pc], pc); } lcd.setCursor(0, 1); lcd.print(line2); }
9. 확장 예시: 드럼킷 구조체 버전
드럼킷은 이름뿐 아니라 MSB/LSB/Program Change 번호도 필요할 수 있음. 이 경우 구조체를 정의해서 더 체계적으로 관리 가능.
// 드럼킷 정보 구조체 struct DrumKit { const char* name; uint8_t msb; uint8_t lsb; uint8_t pc; }; // 드럼킷 배열 (CleanWave32 기준) const DrumKit drumKits[] = { {"Standard", 121, 0, 0}, {"Room", 121, 0, 1}, {"Power", 121, 0, 2}, {"Electronic", 121, 0, 3}, {"TR-808", 121, 0, 4}, {"Jazz", 121, 0, 5}, {"Brush", 121, 0, 6}, {"Orchestra", 121, 0, 7}, {"SFX", 121, 0, 8} }; // 드럼킷 선택 함수 void selectDrumKit(uint8_t index) { midiSendControlChange(0, drumKits[index].msb, 10); // CC#0 = MSB midiSendControlChange(32, drumKits[index].lsb, 10); // CC#32 = LSB midiSendProgramChange(drumKits[index].pc, 10); // PC lcd.setCursor(0,1); lcd.print(drumKits[index].name); }
요약: 포인터 배열을 쓰면 문자열 이름을 플래시에 두고 RAM은 주소만 저장하기 때문에 메모리를 크게 절약할 수 있다. 드럼킷은 단순히 이름만 관리할 수도 있지만, MSB/LSB/PC까지 구조체에 넣어 관리하면 MIDI 제어가 훨씬 깔끔해진다.
저자 및 이용 안내
이 문서는 정해영의 아이디어와 지시에 따라 AI 도구(ChatGPT)의 도움을 받아 작성되었습니다.
본 문서는 Creative Commons CC0 1.0 Universal Public Domain Dedication에 따라 누구나 자유롭게 복제, 수정, 배포, 활용할 수 있으며, 출처 표시도 필요하지 않습니다. 다만, 내용의 정확성은 보장되지 않았으며, 정해영은 본 문서의 내용에 대해 어떠한 법적 책임도 지지 않습니다.
Authorship and Usage Notice
This document was written with the assistance of an AI tool (ChatGPT), based on the ideas and direction provided by Haeyoung Jeong.
It is released under the Creative Commons CC0 1.0 Universal Public Domain Dedication. Anyone may freely copy, modify, distribute, and use the content, with no requirement for attribution. However, the accuracy of the content is not guaranteed, and Haeyoung Jeong assumes no legal responsibility for its use.
