- 20100428_DM365_Boot_cfg_reg . . . . 1 match
= 일정 =
- 20100513_new_camtron_hw_package . . . . 1 match
= 일정 =
- 20100727_ipnc_hardware_comfirm . . . . 2 matches
2010년 7월 27일 Camtron에서 제작한 IPNC 하드웨어 검증 작업
= 일정 =
- 20100802_ipnc_osd . . . . 2 matches
= 일정 =
V4L2_PIX_FMT_UYVY포멧 일때, 아직 검증 되지 않았음.
- 20100803_ipnc_system_configuration . . . . 5 matches
/nand/wtt_config 드렉토리의 유무로 설정 파일을 복사 하던 것을
파일 단위로 복사 하도록 설정을 변경
= 일정 =
파일 시스템의
/etc/init.d/rcS 파일의 내용을 수정함.
- 20100816_samsung_filesystem . . . . 4 matches
삼성 NVR에서 사용할 파일시스템 작업
= 컴파일 하기 =
미리 준비한 파일 시스템 gz 파일을 마운트한 nand 영역에 풀어 넣는다.
- 20101105_hdcctv_image_data_path . . . . 3 matches
|| [:work2010_list ★업무일지 리스트]||
= 일정 =
2010/11/10 ~2010/11/16 (5일)
- 20101105_ipnc . . . . 3 matches
|| [:work2010_list ★업무일지 리스트]||
= 일정 =
/root/opt/wtt/www/app_ver.php 파일 수정
- 20101117_spd400_filesystem_yaffs2 . . . . 11 matches
|| [:work2010_list ★업무일지 리스트]||
삼성 SPD400 에서 사용하는 JFFS2 파일 시스템을 YAFFS로 교체 하기 위한 작업
= 일정 =
일자 : 11월 17일(수) ~ 11월 26일(금)
2007년 6월 19일 작성 된 글
* yaffs 파일 시스템을 커널 소스에 추가 해서 컴파일 성공
* yaffs 파일 시스템 fusing
[:filesystem_yaffs_jffs2 yaffs 파일 시스템 커널에 추가 하기]
- 20101203_spd400_filesystem_install_guide . . . . 4 matches
삼성 SPD400 프로젝트 관련해서 NAND 파티션을 나누고 YAFFS2 파일 시스템을 포팅하는 일에 대해서 기술한다.
파일 시스템을 올리는 일은 KERNEL 이미지를 올리는 것과는 조금 다릅니다.
- 2010_08_20_SAMSUNG_PLATFORM . . . . 1 match
= 일정 =
- 20110824_fftw . . . . 2 matches
|| [:work2011_list ★업무일지 리스트]||
= 일정 =
- 20111223_private_linux_server . . . . 1 match
== 기존 파일 백업하기 ==
- 20120213_jhkim_impulsec_review . . . . 2 matches
오상훈 박사의 부탁으로 종환이가 임펄스 씨에서 만든 단진자 운동 방정식을 PICO 보드에 올려 테스트 하는 일.
사용한 bit 파일 : pico_jhkim.bit
- 20120402_fpga_fft . . . . 1 match
= 작업 일지 =
- 52hour . . . . 33 matches
하루 근로시간을 8시간으로 하고, __주 5일 근무하는 것으로 해서__ 주 40시간 근무를 기준으로 정함.
고용노동부의 행정해석을 통해 휴일도(근로일에서 제외하는 것으로 해석) 근무하는 것으로 해서 토요일, 일요일도 근무가 가능하기 때문에 16시간이 추가 되어 사실상 최장 허용 근로시간이 68시간이됨.
환노위는 토.일을 포함한 주 7일을 모두 '근로일'로 정의하는 법문을 명시해 주 근로시간의 허용치를 52시간으로 정함.
* 300인 이상 기업은 2018년 7월 1일부터 시행
* 50~299인 기업은 2020년 1월 1일부터 시행
* 5~49인인 기업은 2021년 7월 1일부터 시행
* 30인 미만 기업에 대해선 2022년 12월 31일까지 특별연장근로 8시가을 추가 허용함.
휴일근무수당의 지급 기준은 현행을 유지함.
고용부의 행정해석에 따라 8시간 이하의 휴일근로에 대해서는 150% 수당 지급,
8시간 이상의 휴일근로에 대해서는 200% 수당 지급하고 있음.
''근로자가 1주일 중 근무일에 40시간을 근무한 뒤 휴일에 근로(8시간 이내)했다면 휴일근로수당 50%만 가산하면 된다는 게 행정해석의 핵심 내용이다. 국회는 이런 행정해석을 근로기준법에 명시해 지급의 ‘법적 근거’를 제공하기로 했다.''
''노동계는 근로기준법상 주당 법정 근로시간이 40시간인 점을 들어 근무일에 40시간을 근무한 뒤 휴일에 근로하면 휴일수당(50%)과 연장근로수당(50%)을 합쳐 200%의 중복할증 수당을 지급해야 한다고 주장했는데 이는 받아들여지지 않았다.''
''이런 법 개정은 그간 법원의 판결과 배치된다. 앞서 법원은 ‘휴일근무수당을 150%만 지급하도록 한 행정해석이 위법하다’며 성남시를 상대로 소송을 제기한 성남시 환경미화원들에 대해 1심과 2심에서 승소 판결을 해 휴일ㆍ연장수당을 각각 50%씩 중복가산해 통상임금의 200%를 지급하라고 판시했다.''
{{{[출처: 중앙일보] [주 52시간 근로시대] 68→52시간, 휴일근무수당 150%, 공휴일 유급휴가···근로기준법 대폭 손질}}}
5인 이상 사업장은 일소정근로시간 이상 근무하게 되면, 통상시급의 1.5배를 연장근로한 시간만큼 지급해주시면 됩니다.
1. 휴일근무수당
5인 이상 사업장은 근로제공 의무가 아닌 휴일에 근무하게 되면, 통상시급의 1.5배를 휴일근로한 시간만큼 지급해주시면 됩니다.
5인 미만 사업장은 통상시급의 1배를 휴일근로한 시간만큼 지급해주시면 됩니다.
- AliasPageNames . . . . 2 matches
# config.php 파일에 다음과 같은 설정을 넣어주시면 별명 기능이 활성화됩니다.
# 또한, 별명으로 가리킨 페이지가 단 하나의 페이지일 경우에 연결이 바로되기를 원하시면
- AttachmentMacro . . . . 10 matches
올리고 싶은 파일 이름 혹은 이미 첨부된 파일 이름을 {{{attachment:파일이름.확장자}}}라고 써준다.
파일이 이미 올려 있을 경우에는 그 파일을 받을 수 있는 링크가 자동으로 걸리게 되고, 파일이 아직 업로드되지 않았다면 파일을 업로드 할 수 있는 링크가 생성된다.
== 그림 파일에 대한 고급 옵션 ==
=== 올린 파일의 크기 및 위치 조정 ===
모니위키 1.1.3부터 제대로 지원하게 된 WikiWyg GUI를 사용하면 좀 더 쉽게 파일을 업로드 하실 수 있습니다.
- AuxCAM . . . . 5 matches
[:auxcam_job 작업 일지]
Advanced LIGO, Virgo와 같은 중력파 검출기로 부터 수집되는 데이터의 품질을 높이는 것은 중력파 천체 관측의 성능에 매우 중요한 일이다.
지상에 설치된 중력파 검출기는 매우 민감한 장치로 우주에서 오는 중력파를 검출하는 것은 물론 지구환경과 검출기 기기 내에서 발생하는 다양한 노이즈에도 민감하게 반응한다. 때문에 검출기에 들어오는 노이즈를 제거하거나 노이즈를 발생 시키는 노이즈원을 사전에 해결할 수 있도록 원인을 분석하는 일이 중요하다.
이와 같은 일들을 하기 위한 여러가지 연구가 진행 중이다. 검출기 주변에 각종 센서를 설치하여 모니터링을 하고 이 데이터를 [:auxMVC Auxiliary channel data]라고 하고 이를 근거로 노이즈를 분류하는 연구를 진행하였다.[* Rahul Biswas et al. '''Application of machine learning algorithms to the study of noise artifacts in gravitational-wave data''', Phys. Rev. D, 2013, https://arxiv.org/abs/1303.6984] 최근에는 이러한 연구에 기반해서 노이즈원까지도 분석하려는 시도가 있었다.[* Marco et al. '''Finding the origin of noise transients in LIGO data with machine learning''', https://arxiv.org/pdf/1812.05225.pdf]
2015년 9월 14일 아침, 최초의 중력파를 LIGO 검출기가 검출했다. 그 이후로 다양한 질량의 블랙홀 병합과 중성자 별 병합 이벤트에 대한 중력파 검출을 했고 지금도 검출중이다. 지상에 설치된 Advanced LIGO의 Sensitivity [* A. Buikema et al. '''Sensitivity and Performance of the Advanced LIGO Detectors in the Third Observing Run''', Phys. Rev. D 102, 2020]는 현재 아래 그림과 같다.
- BSN_Driver . . . . 2 matches
= 드라이버 파일 위치 및 구조 =
추가 된 파일은
- Bias_Variance_Tradeoff . . . . 11 matches
Bias, 즉 선입관이 크면, (좋게 말해서) 줏대가 있고 (나쁘게 말해서) 고집이 세기 때문에 새로운 경험을 해도 거기에 크게 휘둘리지 않는다. 평소 믿음과 다른 결과가 관찰되더라도 한두 번 갖고는 콧방귀도 안 뀌며 생각의 일관성을 중시한다. (High Bias, Low Variance) 반대로 선입관이 작으면, (좋게 말하면) 사고가 유연하고 (나쁘게 말하면) 귀가 얇기 때문에 개별 경험이나 관찰 결과에 크게 의존한다. 새로운 사실이 발견되면 최대한 그걸 받아들이려고 하는 것이다. 그래서 어떤 경험을 했느냐에 따라서 최종 형태가 왔다갔다한다. (High Variance, Low Bias)
일란성 쌍둥이가 경제적 능력과 가풍이 크게 다른 두 집안에 입양되었다고 하자. 20년 후 그들은 서로 얼마나 달라져 있을까? 유전적으로 타고난 Bias가 높다면 환경의 차이에도 불구하고 교육으로 학습된 개인차는 상대적으로 작을 것이며, Variance가 크다면 둘은 정말 완전히 다른 사람이 되어 있을 것이다.
기계학습이 다루는 중요한 문제 중 하나는, 귀납적인 알고리즘을 이용해서 데이터를 잘 분류하는 모형을 찾는 것이다. 그런데 이런저런 제약이 많아서 데이터 전체를 살펴볼 수는 없고, 일부만 샘플링해서 학습해야 한다. 모형마다 표현할 수 있는 능력이 다르기 때문에 문제의 복잡도에 따라서 적당한 모형을 고르는 것이 중요하다. 닭 잡는 데 소 잡는 칼을 쓰는 것도, 바늘 들고 소 잡겠다고 설치는 것도 모두 현명한 일이 아니므로. 위키피디아에서 가져온 오른쪽 그림에서 녹색 곡선이 소잡는 칼인데, 과욕이 불러온 참사를 목격할 수 있다. 반대로, 만약 이런 데이터를 곡선이 아닌 직선으로 분류하려고 하면 어떤 일이 생길지를 생각해보자. 그게 바로 바늘이다. 검은선처럼 적당한 도구를 찾아야 한다.
세상일이 복잡다단한데도 자기만의 잣대로 너무 단순하게 해석해버리는 사람을 우리는 순진(naive)하다고 한다. 그런 사람이 내놓는 결론은 정확도가 낮아서 신뢰하기 힘들다. 반면에, 자기 경험에 지나치게 생각이 맞춰진(overfitting) 사람의 의견은 그 경험과 조금만 상황이 달라져도 신뢰하기 어렵다. 일부 샘플을 과신해서 그 하나하나에 다 맞추려다 보니 보편성을 잃어버리는 것이다. 그렇다고 다시 변화에 보수적인 태도를 취하면 유연성을 잃어버린다. 경험에서 배우는 게 적고 스스로의 능력에 한계를 지우게 된다. 그 결과, 순진해진다.
이렇게 하나를 추구하면 다른 하나를 희생해야 하기 때문에 Bias와 Variance는 서로 트레이드오프(tradeoff) 관계에 있다고 한다. 결국 답은 이 둘의 합이 최소가 되도록 모델링을 잘 해야 한다는 것인데, 통계학에는 이 Bias와 Variance의 합을 일컫는 용어가 이미 있다. 바로 위험(risk)이다.2 Bias, Variance, Risk 이런 개념들을 창안한 학자들이 이름 지을 때는 경험을 통해서 일상용어 중 적당한 것을 가져다 붙인 것이겠지만, 뒤늦게 공부하는 후학으로서는 거꾸로 이런 학술용어의 의미를 일상에서 곱씹어 보게 된다.
MSE를 계산을 전개해보면 결국은 Variance와 bias를 최소화하는 일이 된다. 둘의 관계는 trade-off로 bias를 낮아지면 variance가 높아지고, variance가 낮아지면 bias가 높아지게 된다.
- Blog/UserPreferences . . . . 1 match
= 1월 1일 =
- BlogChanges . . . . 1 match
어려워요, 한국어나 일본어로 설명 해놓은 곳 없나요? -L-
- CamtronPackage . . . . 1 match
= 필요한 파일 =
- Camtron_complie . . . . 4 matches
#title 캠트로 패키지 컴파일 하기
캠트론 패키지를 받아서 컴파일 하는 과정에 대한 설명
= 컴파일 하기 =
*make installaew를 하게 되면 .a 파일들이 IPNC쪽으로 복사 됨.
- CategoryCategory . . . . 1 match
OriginalWiki와 일관적으로 만드려면 모든 분류는 "Category"로 시작하도록 지정해야 합니다. 물론 다른 방식으로 이름을 붙여도 문제되지 않습니다.
- DNN_index . . . . 1 match
Geoffery Hinton 교수(캐나다 대학) - DeepMind 설립자, 구글이 회사를 인수하면서 구글에서 일함. 머신러닝의 부흥을 이끈 장본인
- DSC_Depthwise_separable_Convolution . . . . 7 matches
일반적인 Convolution 연산에 대해서 생각해 보자.[* https://zzsza.github.io/data/2018/02/23/introduction-convolution/] 위 그림과 같이 \(D_F, D_F, M\) 차원의 입력을 N개의 커널로 합성곱(Convolutional operator)을 수행하게 되면 \(D_G \times D_G \times N\) 크기의 결과를 얻을 수 있다. 이 결과를 얻기 위해서 사용한 weight의 갯수를 생각해 보면 \(D_K \times D_K \times M \times N\)개가 된다.
이 것을 Depth-wise separable convolution과 Pointwise convolution을 이용하면 동일한 모양의 결과를 얻는 가벼운 모델을 사용할 수 있다.
여기서 중요한 것은 동일한 모양의 결과를 만들어 낸다는 것이지 내용상 같은 결과를 얻을 수 있다는 것을 의미 하지 않는다.
먼저 Depth-wise separable convolution의 연산을 보면, 합성곱 연산을 모든 입력에 대해서 수행하는 것이 아니라 채널별로 합성곱을 수행하는 것이다. Depth에 대해서 독립된 결과를 얻을 수 있고 결과로는 \(D_G \times D_G \times M\) 크기의 결과 얻는다. 입력과 동일한 채널수를 유지한다. 이 결과를 얻기 위해서 사용한 weight의 갯수는 \(D_K \times D_K \times 1 \times M\)이다.
Depth-wise separable convolution 결과에 \(1 \times 1\) 필터 합성곱 연산을 수행해서 원하는 채널만큼 새로운 채널을 생성할 수 있다. 결과적으로 일반적인 합성곱 연산을 수행했을 경우과 동일한 모양의 결과를 얻었다. 이 때 사용한 필터의 갯수는 \(1 \times 1 \times N \)이 된다. Depth-wise separable convolution에 사용한 필터 갯수 \(D_K \times D_K \times 1 \times M\)를 더하면 총 \(D_K \times D_K \times 1 \times M + N\)개의 필터로 \(D_K \times D_K \times M \times N\) 개의 필터를 사용한 합성곱 연산과 동일한 모양을 만들었다.
- DTW_dynamic_time_wrapping . . . . 5 matches
* '''경졔조건(Boundary condition)''': 입력 패턴과 참조 패턴의 시작점과 끝점을 일치시킨 후 모든 패턴을 비교해야 한다.
* '''이동 크기 조건(step size condition)''': 입력 패턴과 참조 패턴 비교 시 격자상의 비교를 위한 이동 크기는 일정하게 하여 모든 격자의 패턴을 비교해야 한다.
밑의 그림은 최단 경로를 찾아가게 되는 과정을 잘 보여주고 있다. 이 그림에서는 맨 아래의 시작점으로부터 시작하여 오른쪽, 위쪽, 대각선으로 가장 작은 수를 향하여 전진하게 된다. 그때 제일 낮은 값을 향해 가고 제일 끝 종착지에서 지나온 값들을 더한 값중 가장 작은 경로가 제일 이상적인 경로다.
- DrawMacro . . . . 2 matches
윈도우즈의 경우는 다음의 파일을 받아서 직접 압축을 풀어준다. {{{applets/TWikiDrawPlugin/}}}twikidraw.jar 및 *gif 파일이 있게끔 해야 한다.
- DueDateMacro . . . . 5 matches
일단 위를 보면 (어째선지 미리보기에선 글씨가 깨져보이는군요 ...) 오늘(12월1일)과 내일이 똑같이 0일 남았다고 되어있습니다. 제 위키에서는 이틀 다 '오늘입니다' 라고 표시되던데.. 버그인듯 하군요 ^_^;; - stania
DueDateMacro 의 날짜가 MM/DD/YY 로 나오고 있는데요, YY-MM-DD 나 YY년 MM월 DD일 로 나오게 할려면 어떻게 하면 되는지요 ^^
- EmbeddedLinux시작하기 . . . . 40 matches
* 파일 시스템
리눅스 커널은 전체 메모리를 일반적으로 4KB 크기인 페이지 단위로 나우어 관리한다. 커널은 모든 페이지를 접근할 수 있지만, 실제로는 그 일부만 사용하고 나머지는 응용 프로그램에서 사용하게 된다.
* '''사용자 쓰레드''': 쓰레드는 하나의 사용자 프로세스로 매핑된 또 다른 실행 개체이다. 사용자 공간의 쓰레드는 동일한 텍스트, 데이터, 힙 영역을 공유한다. 또한 열려 있는 파일 목록, 시그널 처리 함수 등의 자원은 공유되지만 스택 영역은 별도로 존재한다.
=== 파일 시스템 ===
리눅스에서는 다양한 종류의 파일 시스템들이 VFS(Virtual File System)라는 계층을 통해 관리 된다. VFS는 시스템상의 다양한 장치들에 저장된 데이터를 일관적인 형식으로 바라볼 수 있도록 해 준다.
리눅스가 동작하는 모든 장치는, 그것이 임베디드 시스템이든 서버 머신이든 간에 최소한 하나 이상의 파일 시스템이 필요하다.
이것은 특별히 파일 시스템을 필요로 하지 않는 실시간 운영체제와 구분되는 특징이다.
모든 리눅스 시스템은 루트 파일 시스템과 함께, 임베디드 시스템을 위한 플래시나 ROM기반의 늑수 파일 시스템을 지원한다. 또한 호스트상의 파일 시스템을 임베디드 시스템 Target에 마운트 할 수 있는 NFS(Network File System)와 임베디드 시스템에서 유용하게 사용되는 메모리 기반의 파일 시스템에 대한 지원도 포함 된다.
* 임의적인 접근이 가능한 장치들을 지원하는 블록 장치(Block device). 블록 장치는 파일 시스템을 구현하는 기본이 된다.
* '''프로그램''': 파일 시스템상에 존재하는 응용 프로그램으로, 메모리상에 로드되어 실행된다. 가상 메모리 기능으로 전체 프로그램 이미지가 메모리상에 로드 되는 것이 아니라 현제 실행 중인 부분의 페이지만 로드 된다.
=== 사용자 공간에서 실행되는 파일 ===
임베디드 시스템에서 가장 일반적으로 쓰이는 바이너리 실행 파일의 형식은
* '''Boot Loader''' : 일반적으로 이 단계에서는 하드웨어 초기화와 테스트를 수행한 후 커널 이미지를 메모리에 로드하고 제어를 커널로 넘기는 일을 한다.
* '''커널 초기화''': 이 단계에서는 플랫폼에 종속적인 초기화 과장이 이루어지고, 커널 서브시스템 시작, 멀티태스킹 시작, 루트 파일 시스템 마운트 과정을 거쳐 사용자 공간으로 점프한다.
* '''사용자 공간 초기화''' : 일반적으로 이 단계에서는 여러 서비스들을 실행시키고, ''네트워크 초기화 과정''을 거쳐 로그인 프롬프트를 보여준다.
커널 진입점을 알아보기 위해서는 링커 스크립트를 확인해 보아야 한다. 이 함수는 일반적으로 '''arch/<아키텍처 이름>/kernel/head.S'''파일 내에 존재하며 다름과 같은 일을 한다.
* 최초로 C루틴이 호출될 때 사용할 스택 영역을 설정한다. 최초로 실행 될 C루틴은 init/main.c 내에 있는 start_kernel()함수 이다. 이 함수는 idle 프로세스 내에서 종료될 때까지 수많은 일들을 수행한다. 이 함수에서 아래에서 설명할 플랫폼 초기화 함수를 호출한다.
부트로더가 램 디스크 영역을 설정해 두었다면 이후에 해당 영역을 루트 파일 시스템으로 마운트할 수 있도록 인식해 둔다.
모든 플랫폼에서 udelay()함수가 동일하게 동작하는 것을 보장하게 한다.
대부분의 서브 시스템 초기화 과정은 start_kernel()함수 내에서 이루어진다. 이 함수의 끝부분에 init 프로세스를 생성한다.(이 프로세스는 드라이버 초기화, initcall 호출, 루트 파일 시스템 마운트 등의 작업을 수행하고 사용자 공간으로 점프한다.) 현재 프로세스는 ID 0번인 idle 프로세스가 된다.
- English_letter . . . . 1 match
편지는 한국편지던, 일본편지던, 중국편지든 항상 화두를 잘 던져야 하죠? 내가 이 편지를 왜 쓰게 되었는지, 어떤 의사를 전달하려고 하는지를 상대방에게 잘 전달할 수 있어야 합니다.
- FPGA_PSA_Implementation . . . . 2 matches
'''int file_load(char* filename, double* data, int* size)''' - 파일로 부터 double형 데이터를 얻어오는 함수 파일에서 문자를 읽어 double형 데이터를 취한다.
- Finite_Elements_Method . . . . 2 matches
어쨌든, 유한 요소법은 사실 순수수학에서 해석학과 편미분방정식 이론이 정립되면서 발전되었다고 볼 수 있겠다. 즉, 원래 편미분 방정식을 그대로 푸는 것이 아니라, Weak Formulation이라는 과정을 거쳐 편미분 방정식을 적분형태로 표현하게 되는데, 이 때 Test Function Space나 여러 Hilbert 공간 등 적당히 조건이 통제된 우리 입맛에 맞는 함수 공간을 선택하게 된다. 이 떄 이런 함수 공간은 일반적으로 차원이 무한대이므로 이는 Simulation하는 데 적당하지 않다.
또한 FEM은 기존에 해석학에서 많이 알려진 부등식을 사용하거나, Green Function을 사용하여 실제 해의 오차를 기본적으로 쉽게 측정할 수 있게 해 준다. 이를 선험적 측정(A priori estimate)라고 하는데, 일단 기본적으로 오차가 이정도 이내에는 있다는 것이 이야기 해 준다. 즉, 실제 해를 구하지도 않고, 단지 수학적인 공식만 쭉 나열하다보면 이러한 측정을 쉽게 얻을 수 있다. 물론 이는 나중에 좀 더 해에 관한 고민을 하고 나면 경험적 측정(A posteriori estimate)를 통해 더욱 더 엄밀한 측정을 할 수 있게 된다.
- Fortran95_Tutorial . . . . 46 matches
Fortran은 각 버전 별로 조금의 차이가 있는데 그 차이는 명확하도 컴파일 자제가 되지 않기 때문에 호완성이 떨어짐.
= Hello wolrd 예제 컴파일 하기 =
컴파일 방법은 다음과 같다.
앞의 두개는 실행 가능한 파일이고 마지막 ''.o'' 파일은 Object 파일이다.
원래는 컴파일러와 링커로 구분 되지만 gfortran은 두개를 다 포함하고 있다.
Object 파일을 여러개 묶어서 하나의 실행 파일을 만들 수 있는데 그때를 위함 과정이라고 보면 된다.
이때 주의해야 할 점은 모든 Object 파일을 다 합쳤을때 '''program''' 키워드는 한번은 존재해야 한다는 것이다.
중복해서 있다거나 하나도 없으면 실행 파일을 만들 수 없다.
가장 일반적인 if문의 형태는
수행 순서는 위에서 아래 방향이다. 조건식은 하나가 참일때 까지 순서대로 그 값을 구한다. 그 후 그와 관련된 code를 수행하고 endif 이후의 다음 문장으로 뛰어 넘는다
do loop의 일반적인 형태는 다음과 같다.
while 과 until loop도 do-enddo 구조로 구성할 수 있으나 conditional exit 문을 더하여야 한다. 일반적인 경우에는
== 일차원 배열 (One-dimensional arrays) ==
가장 간단한 배열은 일차원 배열로 해당 원소를 memory에 일차원 순서에 따라 연속적으로 저장되어 있는 것이다. 예를 들어
이차원 배열도 그 범위를 임의로 정의할 수 있다. 일반적 syntax는 다음과 같다.
Fortran 함수는 수학의 함수와 매우 비슷하다. 둘 다 일단의 입력 변수 (parameters)를 받아들여 어떤 형태의 값을 준다. 앞에서 사용자 정의 user defined 부프로그램에 대하여 살펴보았다. Fortran 77 역시 내장 built-in 함수가 있다.
보통 함수는 형태 type가 있다. 위에서 언급한 대부분의 내장 함수는 일반적generic이다. 따라서 위 예에서 pi와 x 는 real이거나 double precision이다. compiler는 형태를 조사하여 알맞는 (real 또는 double precision) cos을 사용할 것이다. 불행하게도, Fortran은 다양한 polymorphic 기능의 언어가 아니라 일반적으로는 사용자가 조심하여 변수와 함수의 형태를 맞추어야 한다!
요약하면 Fortran 77 함수의 일반적 syntax는 다음과 같다.
Fortran의 function은 일반적인 함수와 마찬가지로 오직 한가지 결과만을 갖고 돌아오는 것이 원칙이다. 때때로는 두 개나 그 이상의 변수 (때때로는 결과 변수 없이)값을 갖고 돌아 오게하고 싶을 때가 있다. 이런 경우에는 서브루틴 subroutine 구조를 사용하여야 한다. syntax는 다음과 같다.
format 형식 F (또는 D, E)는 일반적으로 Fw.d가 되는데 여기서 w는 숫자를 적을 전체 칸을 나타내는 정수 상수이고 d는 유효 숫자를 나타내는 정수 상수이다.
- FortuneMacro . . . . 1 match
Fortune 매크로는 fortune파일의 인덱스를 직접 읽어들여 사용하므로 FortuneCookies를 읽어들이는 RandomQuoteMacro보다 매우 빠릅니다. :)
- FrontPage . . . . 1 match
⚠️ 내가 직접 쫓아갈 수도 있습니다. (농담일 수도 있고 아닐 수도 있고...)
- GAN_iclr_2017 . . . . 3 matches
논문의 초록을 읽어보면 GAN 으로 트레이닝된 Generator 로 Latent vector에서 이미지를 생성하는 것까지는 되지만 역으로 이미지를 Latent vector(Latent space)로 mapping하는 것은 일반적으로 잘 안 된다고 소개하고 있습니다. 하지만 자신들의 방법으로는 이것을 완벽하게 해결할 수 있다고 합니다. 어떻게 하면 될지 천천히 살펴 봅시다.
이 논문에서 일반적인 GAN에 대해서 아래와 같이 소개하고 있네요
또한 generator 를 이용해서 이미지를 역으로 latent vectors로 mapping 하는 일은 어렵다고 하네요.
- GAN_review . . . . 3 matches
GAN (Generative Adversarial Network) [* Generative Adversarial Networks (http://arxiv.org/abs/1406.2661)] 라는게 이쪽에서 가장 유명한 방식인데, 위조지폐범과 경찰의 대결 같은 방식으로 네트워크를 학습합니다. 경찰은 계속 새로운 위조지폐를 잘 판별할 수 있어야 하고, 위조지폐범은 계속 경찰을 더 잘 속일 수 있는 위조지폐를 만들어야 합니다. 이렇게 경찰과 위조지폐범을 동시에 학습시키면 최후에는 인생의 진리에 따라 악이 승리하고 완벽한 위조지폐가 만들어지게 되죠.
이걸 개선한 모델 중 이미지 피라미드와 Laplacian 필터를 적용한 LAPGAN [* Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks (http://arxiv.org/abs/1506.05751)]이 있고요, 이번에 나온 DCGAN [* Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks (http://arxiv.org/abs/1511.06434)]이란게 있습니다 (이건 아직 안 읽음). 첨부한 이미지가 DCGAN 논문에 있는 이미지인데 침실 이미지를 상당히 디테일하게 만들어내네요.
모델 구성은 간단하다 G 네트워크와 D 네트워크의 사이즈는 동일하게 400개의 Weight를 갖게 구성했고 Latent Vector의 사이즈를 100으로 잡았다.
- Gradient_Descent . . . . 4 matches
와 같이 정의 됩니다. 즉, 그레디언트(gradient)는 위 식과 같이 각 변수로의 일차 편미분 값으로 구성되는 벡터입니다. 그리고 이 벡터는 '''f의 값이 가장 가파르게 증가하는 방향'''을 나타냅니다. 또한 벡터의 크기는 그 증가의 가파른 정도(기울기)를 나타냅니다.
== 일변수 스칼라 함수의 극대, 극소 구하기 ==
다변수 스칼라 함수(scalar-valued function of multiple variables)의 경우에는 gradient(그레디언트)를 이용하여 최대 증가 방향을 찾았지만 일변수 함수의 경우에는 통상적인 일차 미분값 f'(x)을 이용하면 될 것입니다. 예를 들어, \(f(x) = x^2 + 3x + 1\)가 극소가 되는 점 및 극소값을 구하고 싶다면 식을 다음과 같이 세울 수 있습니다
- Gradient_Jacobian_Hessian_Laplacian . . . . 18 matches
즉, gradient는 위 식과 같이 각 변수로의 일차 편미분 값으로 구성되는 벡터입니다. 그리고 이 벡터는 f의 값이 가장 가파르게 증가하는 방향으로 나타냅니다. 또한 벡터의 크기는 그 증가의 가파른 정도(기울기)를 나타냅니다.
즉, Jacobian(야코비언)은 어떤 다변수 벡터함수(vector-valued function of multiple variables)에 대한 일차 미분(first derivative)으로 볼 수 있습니다.
☞ 앞서 나온 gradient(그레디언트)나 Jacobian(야코비언)이나 모두 함수에 대한 일차 미분(first derivative)을 나타낸다는 점에서는 동일합니다. 다만, 그레디언트는 다변수 스칼라 함수(scalar-valued function of multiple variables)에 대한 일차 미분인 반면 Jacobian(야코비언)은 다변수 벡터 함수(vector-valued function of multiple variables)에 대한 일차미분입니다. 즉, 그레디언트는 통상적인 일변수 함수의 일차미분을 다변수 함수로 확장한 것이고, Jacobian(야코비언)은 이를 다시 다변수 벡터함수로 확장한 것입니다.
Jacobian(야코비언)이나 그레디언트나 모두 함수에 대한 일차미분이기 때문에 미분이 가지고 있는 의미나 성질은 모두 동일하게 적용됩니다. 즉, 어떤 함수의 지역적인 변화특성을 파악할 때, 지역적인 함수의 변화를 선형근사할 때 또는 함수의 극대(극소)를 찾을 때 활용될 수 있습니다.
앞서 설명한 gradient(그레디언트), Jacobian(야코비언)이 모두 함수에 대한 일차미분(first derivative)를 나타내는 반면 Hessian은 함수의 이차미분(second derivative)를 나타낸다는 점에서 차이가 있습니다.
또한 Hessian은 critical point의 종류를 판별하는데 활용될 수 있습니다. 어떤 함수의 일차미분이 0이 되는 되는 점을 critical point (또는 stationary point)라 부르는데 함수의 극점(극대, 극소), saddle point 등이 여기에 해당됩니다 (쉽게 생각하면, 고교수학 미분에서 f'(x) = 0이 되는 지점).
어떤 (다변수) 함수를 최적화시키기 위해 극점(극대, 극소)을 찾기 위해서는 먼저 그 함수의 일차미분인 gradient(그레디언트)가 0이 되는 지점(critical point)을 찾습니다. 그런데, 이렇게 찾은 critical point가 극대점인지 극소점인지, 아니면 saddle point(말안장처럼 방향에 따라서 극대, 극소가 바뀌는 점)인지 구분하기 위해서는 이차미분값을 조사해야 하는데 이 때 바로 Hessian을 사용할 수 있습니다.
☞ Laplacian은 +,- 값을 갖기 때문에 0 ~ 255 사이로 스케일을 맞추어 이미지로 표시하면 <그림 3>의 가운데 그림처럼 보여집니다.
Gradient는 영상의 밝기 변화가 급격할수록 큰 값을 가집니다. 하지만 Laplacian은 영상의 밝기변화의 변화가 심할수록 큰 값을 가집니다. 즉, 아무리 밝기 변화가 크더라도 그 변화속도가 일정하다면 Laplacian은 0에 가까운 값을 갖습니다.
이미지 관점에서 보면 이미지 내의 두 영역의 경계(edge)에서는 급격한 밝기 변화가 일어나기 때문에 |gradient|나 Laplacian 모두 큰 값을 나타냅니다. 하지만 동일한 영역 내부에서 점진적인 밝기 변화가 일어날 때는 그 밝기변화 정도에 따라서 |gradient|는 큰 값을 가질 수 있지만 Laplacian은 작은 값을 나타내는 차이가 있습니다.
- HDCCTV50HZ . . . . 1 match
출력 영상의 frame refresh rate가 24, 25, 30, 50, 60Hz 일때 74.25 MHz의 Sample clock rate를 갖는다.
- HDCCTV_2M_SONY . . . . 1 match
작업해야 할 파일은 2개 이다.
- HDCCTV_BE_ycc8 . . . . 2 matches
= 일정 =
OSD 설정은 SD와 동일하게 수행하도록 수정
- HDCCTV_NTSC . . . . 2 matches
그런데, 순자주사와 비월주사에서는 같은 주사선수일 때, 동화상의 해상도에 차이가 발생한다.
따라서 '''1화면당 동일한 주사선을 사용할 경우 순차주사 쪽이 더 선명하다.'''
- HDCCTV_package . . . . 8 matches
1. 패키지를 svn에서 얻어 와서 컴파일을 하면 각 project에 lib 파일이 생성 되고 자동으로 lib 폴더에 .lib 파일들이 복사 된다.
1. /bin 폴더에 RS485_appro.exe 파일 삭제
1. smartcctv/src 폴더에 ips 투닝 파일 삭제
* tuning_appro.txt or tuning_ktnc.txt 파일 삭제 (업체에 따라서)
* cctvapp2.c 파일에서 #include "tuning_appro.txt" 부분 설정 (업체에 따라서)
1. 컴파일 하면서 생성된 build/ 폴더 삭제
- HelpForBeginners . . . . 1 match
위키위키웹는 여러 사람이 공동작업을 할 수 있는 하이퍼텍스트 환경을 말하며, 보다 쉽고 직관적인 정보의 수정에 초첨이 맞춰져 있습니다. 이곳 위키는 전체 위키위키웹의 일부분이며 각각의 개별 위키를 인터위키라고 말합니다.
- HelpOnEditing . . . . 1 match
* [HelpOnSmileys] - :) 와 같은 스마일리 넣기
- HelpOnHeadlines . . . . 1 match
/!\ {{{= 레벨 1 =}}} 제목은 <h1>으로 랜더링되지만 다른 위키위키 마크업과 통일성을 위해 '''두개'''의 "==" 부터 제목줄을 사용하시는 것을 권장합니다. MediaWiki에서도 비슷한 이유로 ``레벨1`` 제목 사용을 제한적 허용하고 있는데, 그 이유는 <h1>은 ''페이지의 제목''에 할당하고 있기 때문이라고 합니다.
- HelpOnInstallation . . . . 9 matches
`rcs`가 설치되었는지 확인한다. {{{/usr/bin/rlog /usr/bin/ci /usr/bin/co}}}등등의 실행파일이 있어야 한다. {{{/usr/bin/merge}}}도 필요하다.
압축을 풀면 moniwiki라는 디렉토리 밑에 화일들이 있는 것을 볼 수 있다.
업그레이드를 편리하게 하려면, 플러그인을 새로 추가할 경우는 원 파일을 고치는 것보다는 새롭게 플러그인을 만들어 준다. 이렇게 하면 tar파일을 덮어쓰는 것만으로 간단히 업그레이드 할 수 있다.
특별한 경우가 아니라면, 덮어쓰는 것만으로 업그레이드 할 수 있다. 원 파일을 수정하였을 경우라면 덮어쓰는 것을 선택적으로 해주어야 할 것이다.
root사용자라면 tar를 이용해서 간단히 백업할 수 있겠고, 호스팅을 하는 일반 사용자의 경우라면 backup restore를 액션을 이용할 수 있다.
* backup : {{{?action=backup}}}해 보라. 백업은 data 디렉토리의 user와 text를 및 기타 몇몇 설정을 보존한다. pds/ 디렉토리를 보존하지는 않는다. 백업된 파일은 pds/ (혹은 $upload_dir로 정의된 위치) 하위에 저장된다.
* restore : {{{?action=restore}}}한다. 백업된 tar 파일 목록이 나오고 tar 파일을 선택하면 관리 비번을 물어본다.
- HelpOnInstallation/MultipleUser . . . . 7 matches
이렇게 하면 [모니위키] 설치에 필요한 파일이 public_html 하위에 일부는 복사되고 일부는 설치 디렉토리에 남게됩니다.
이 경우 대부분의 php파일이 설치되지 않은채로 각 사용자가 사용하게 되기 때문에, 모니위키의 php취약점이 발견되었을 경우 관리자가 설치된 [모니위키]만을 업데이트하는 것으로 문제점을 해결할 수 있게 됩니다. 물론 일부 카피된 파일 및 php 이외에 웹상에 직접 노출되는 지역 파일은 사용자가 직접 업데이트해야 하겠지요.
- HelpOnInstallation/SetGid . . . . 6 matches
보안상의 이유로 웹서버는 php 스크립트를 `nobody, www, apache` 혹은 `httpd`같은 특별히 제한된 계정으로 실행하게 됩니다. 이러한 이유로 [모니위키] 스크립트가 생성하게 되는 여러 파일 혹은 디렉토리는 이러한 특별한 계정의 소유가 되며 진짜 사용자가 소유하지 못하게 되는 일이 발생하고 어떤 경우는 이렇게 만들어진 파일을 읽을수도 지울 수도 없게 됩니다.
이러한 것을 방지하기 위해서 [모니위키]가 특별한 파일을 생성하게 되는 몇몇 디렉토리에 대하여 그룹 아이디로 퍼미션을 가지게 할 수 있습니다. 이렇게 Setgid를 사용하도록 그룹 퍼미션을 주게되면 wiki.php에 의해 새롭게 만들어지는 모든 파일은 진짜 사용자의 그룹아이디와 같게 되며, 그룹 아이디가 가지는 퍼미션을 진짜 사용자도 누릴 수 있게되어 읽거나 고치거나 지울 수 있게 됩니다.
Setgid 퍼미션을 작동시키려면 간단히 "`chmod 2777 ''dir''` 명령을 내리면 되는데, 모니위키가 여러 파일들을 만들게되는 디렉토리에 대해 이 명령을 내려주면 됩니다. 모니위키를 최초 설치하는 과정에서 setgid를 사용하려면 우선 모니위키 최상위 디렉토리를 먼저 `chmod 2777`을 해 줍니다. 아마 wiki.php가 들어있는 디렉토리가 될것입니다.
- HelpOnInstalling . . . . 1 match
귀찮아서 INSTALL파일에 여기를 향하는 링크를 달랑 넣었습니다. :p
- HelpOnLinking . . . . 1 match
만약 URL의 끝 부분이 이미지의 확장자일 경우는 ("{{{.gif}}}", "{{{.jpg}}}" or "{{{.png}}}") 그림이 그 위치에 삽입되게 됩니다.
- HelpOnProcessors . . . . 2 matches
다음과 같이 코드 블럭 영역 최 상단에 {{{#!}}}로 시작하는 프로세서 이름을 써 넣으면, 예를 들어 {{{#!python}}}이라고 하면 그 코드블럭 영역은 {{{plugin/processor/python.php}}}에 정의된 processor_python()이라는 모니위키의 플러그인에 의해 처리되게 됩니다. {{{#!python}}}은 유닉스의 스크립트 해석기를 지정하는 이른바 ''bang path'' 지정자 형식과 같으며, 유닉스에서 사용하는 목적과 동일한 컨셉트로 작동됩니다. (즉, 스크립트의 최 상단에 지정된 스크립트 지정자에 의해 스크립트의 파일 나머지 부분이 해석되어 집니다.)
- HelpOnRules . . . . 1 match
/!\ 가로줄의 굵기는 문서의 통일성을 해칠 수 있으므로 옵션으로 제공합니다. config.php에 {{{$hr_type='fancy';}}}라고 하면 가로선의 굵기가 지원됩니다.
- HelpOnUpdating . . . . 5 matches
upgrade.sh가 하는 일은, 위키 엔진(*.php)을 업데이트하고, 기존의 위키엔진을 사용자가 변경하거나 해서 사용하고 있던 *.php는 없는지 검사하고 사용자가 변경한 *.php파일이 있다면 백업해줍니다.
wiki.php, wikilib.php는 가장 중요한 위키엔진입니다. 이것과 함께 wikismiley.php lib/*.php plugin/*.php 등등의 파일을 새것으로 교체합니다.
다음은 css/*.css imgs/* theme/* 등등의 파일을 업데이트합니다. 기존에 사용자가 변경한 파일이 있다면 반드시 백업하시기 바랍니다.
- HelpOnUserPreferences . . . . 5 matches
* '''[[GetText(Email)]]''': 자주 쓸 이메일 주소. 이메일 주소를 넣어주면 원하는 위키페이지에 대하여 그 변경점을 구독신청하거나 취소하실 수 있습니다. 비밀번호를 잊으셨을 경우에도 이 이메일 주소를 사용해 새로운 비밀번호를 등록하실 수 있습니다.
* 이메일 주소는 반드시 고유해야 하며, ACL 설정에 따라서는 이메일 주소를 반드시 필요로 하는 경우도 있습니다.
- I2C . . . . 10 matches
* address가 일치한 장치는 acknowledge 신호 구간에서 데이터를 low로 유지해 응답을 보낸다.
(클럭은 일정한 duty 사이클을 유지할 필요는 없다.)
* 클락이 Low일때 값을 변화 시키고
* 클락이 HIGH일때는 값을 유지 시켜야 함.
* 일반 데이터 전송에서는 클럭이 low일 때만 데이터의 상태를 바꿀 수 있다.
* 데이터의 변경은 SCL이 LOW일때 이루워 지고
* SCL이 HIGH일때 읽어간다.
* START는 SCL이 HIGH, SDA가 HIGH -> LOW 일때이다.
* STOP는 SCL이 HIGH, SDA가 LOW -> HIGH 일때이다.
- IPNC . . . . 4 matches
1. [:Camtron_complie Camtron 패키지 컴파일 하기]
1. [:IPNC_filesystem Nand 파일 시스템 올리기]
1. [:IPNC_flash_utils UBL 컴파일 하기]
== [:IPNC%EC%97%85%EB%AC%B4 업무 일지] ==
- IPNC_DHCP . . . . 2 matches
= NFS가 아닌 파일 시스템에서 IP동적 할당 받기 =
NFS가 아닌 파일 시스템에서는 DHCP가 잘 동작하지 않는 문제가 있다.
- IPNC_EVM3 . . . . 3 matches
= 일정 =
3월 10일 ~
1. 커널 feature에 따른 컴파일 설정 변경
- IPNC_filesystem . . . . 2 matches
#title IPNC NAND에 파일 시스템 올리기
== YAFFS 파일 시스템 부팅 ==
- IPNC_flash_utils . . . . 2 matches
flash-utils 소스를 얻어 오고 컴파일 하기 위한 문서.
= 컴파일 하기 =
- Inception_GoogLeNet . . . . 9 matches
MLP를 이용할때의 장점은 Filter를 사용할 때보다 '''Non-linear한 Activation function을 더 많이 추가할 수 있어서 Non-linear한 성절로 인해 더 좋은 Feature를 추출'''할 수 있다는 점이다. 또한, __1x1 Convoltution을 통해서 Feature map 개수를 줄임으로써 '''Parameter의 수를 줄일 수''' 있다.__
보통 Convolution Neural Network에서는 Convolution 연산을 통해서 Feature map의 Width(W)와 Height(H)의 크기는 줄이고 Channel(C)는 늘리는 형태를 취한다. (이미지는 압축하고 다양한 특성을 추출한다고 생각할 수 있다.) 이 때, 1x1 Convolution 연산을 선행하여 계산하려는 C의 갯수를 줄일 수 있다. 1x1 Convolution 연산은 Channel 단위로 Fully Connected 연산을 수행하여 차원을 압축하는 효과를 얻을 수 있고 다음 연산에 적용되는 Channel을 줄여 결과적으로 학습해야할 Parameter의 수를 줄일 수 있다.
우리는 많은 실험과 딥러닝 경험을 통해서 일반적으로 네트워크가 깊어져서 Non-linear한 결합을 많이 수행할수록 네트워크의 성능이 좋아짐을 알았다. 하지만 깊은 네트워크로 인해 생기는 문제점도 있다. 오버피팅의 위험, Vanishing gradient의 위험뿐만 아니라 연산량 또한 증가한다. 이러한 문제를 해결하기 위해 Dropout을 사용하는 네트워크처럼 sparse하게 연결되는 구조는 갖는 네트워크를 만든다. '''네트워크의 성능을 위해서는 sparse한 네트워크가 좋고 컴퓨터의 계산 효율면에서는 dense한 네트워크 구조가 좋다''' 이 둘 사이의 타협을 위해 ''Inception module''이 등장했다.
* Max-Pooling의 경우 W, H의 크기는 줄일 수 있지만 C는 줄일 수 없어서 풀링 연산 뒤에 1x1 Conv를 붙여서 출력 C의 크기를 조절했다.
기존에 해상도 (Resolution, Grid size)를 줄이는 방법은 Convolution 시 Stride를 1보다 큰 값으로 두거나 Pooling을 사용하는 것이었다. 그렇다면 다음 두 가지 방법 중 어떤 방법이 더 효과적인 방법일까?
기존의 방법은 아직 연산량이 많은데 어떻게 하면 더 효과적으로 연산량을 줄일 수 있을까? Google이 제안한 구조는 다음 그림과 같다.
Inception v3은 Inception v2를 만들고 나서, 여러 가지를 수정해보다가 결과가 좋은 요소를 합친 모델이다. 그래서 Inception v2와 동일한 구조를 갖는다.
- InterMap . . . . 1 match
# 아래 인터위키 Uploads:는 노스모크 모인모인식 파일 연결을 지원하기 위함입니다.
- IsbnMap . . . . 2 matches
/!\ 일종의 InterWiki Map인 것이죠.
모니위키 1.1.3에서는 이와 관련된 버그가 고쳐졌고, 알라딘 같은 경우는 확장자가 jpg/gif인 경우를 자동으로 검출합니다. 이 경우 php.ini에 {{{'allow_url_fopen=1}}}같은 식으로 설정이 되어있어야 합니다. 또, config.php에 {{{$isbn_img_download=1;}}} 와 같이 옵션을 넣으면 이미지를 다운로드할 수도 있게 하여, 일부 referer를 검사하여 이미지를 보이지 않게 하는 사이트에서도 활용하기쉽게 하였습니다. -- WkPark [[DateTime(2009-01-13T07:14:27)]]
- Kernel컴파일하기 . . . . 12 matches
#title Linux Kernel 컴파일 하기
리눅스 커널을 컴파일하는 과정에 대해서 알아본다.
2. 다운로드 받은 파일의 압축을 푼다.
= 커널 컴파일 하기 =
커널의 컴파일 옵션을 설정하는 방법은 make menuconfig 이외에 make config, make xconfig가 있지만 지금 사용할 방법은 make menuconfig이다.
== make menuconfig을 사용한 커널 컴파일 옵션 설정하기 ==
== 커널 컴파일 하기 ==
커널 컴파일은 커널 버전에 따라서 다르다. 커널 2.4에서 2.6으로 넘어오면서 컴파일이 간단해졌다.
실제 컴파일 해본 결과 버전별로 Makefile이 변경이 되서 조금씩 달랐다.
주위) 컴파일 옵션을 잘 못 설정하면 컴파일이 안 되거나 부팅이 안 될 수 있음
- LAPACK . . . . 2 matches
lapack은 cmake 형식으로 배포 되기 때문에 컴파일을 하기 위해서는 gfortran와 cmake가 필요하다.
= 예제 컴파일 하기 =
- LMA_Levenberg_Marquardt . . . . 15 matches
만일 관측값의 신뢰도(중요도)가 서로 다를 경우에는 각각의 오차 제곱에 가중치 \(w_i\)를 곱해서 최소화시키는 방법을 사용하는데 이러한 문제를 가중최소자승(weighted least squares, WLS)문제라 부른다 (통계 쪽에서는 보통 \(w_i = 1/\sigma_i^2\)로 잡음. 단, \(\sigma_i^2\)은 \(y_i\)의 분산).
만일 f(x,p)가 p에 대해 선형인 경우에는 f(x,p)를 아래와 같이 p에 대한 일차 결합 형태로 표현할 수 있다.
'''음함수 최소자승법''' 만일 모델이 양함수(explicit function) 형태가 아니라 f(x,p) = 0와 같은 음함수(implicit function) 형태일 경우에는 최소자승 문제의 형태 및 풀이방법이 조금 달라진다. 이 경우 \(r_i = f(x_i,p)\)이며, f(x,p)가 p에 대해 선형이면 최소자승문제를 \(\sum r_i^2 = ∥Ap∥^2 \)와 같이 표현할 수 있다. 그리고, \(\sum r_i^2 = ∥Ap∥^2 \)를 최소화시키는 p는 A의 SVD(singular value decomposition)을 \(A = \sum V^T \)라 할 때 최소 특이값(singular value)에 대응하는 V의 열벡터가 된다. 자세한 내용은 선형연립방정식 풀이 글 참조.
☞ 여기서 다변수 함수라는 말을 어렵게 생각할 필요는 없으며 예를 들어 사람의 외적인 아름다움이 키와 팔의 길이, 다리의 길이로 결정된다고 했을 때, '아름다움 = f(키,팔길이,다리길이)'와 같이 함수값이 여러 요인에 의해 결정된다는 의미이다. 키, 팔다리 길이와 아름다움의 관계를 실제 구하는 것은 어렵겠지만 만일 그 관계가 예를 들어 'f(키,팔길이,다리길이) = 키^3 - 팔길이^2 + 다리길이^2'라 한다면 f의 그레디언트는 ∇f = (3*키^2, -2*팔길이, 2*다리길이)가 된다. 따라서 어떤 사람 A의 키, 팔길이, 다리길이가 키 = 1, 팔길이 = 0.5, 다리길이 = 0.7과 같다면 A 위치에서의 그레디언트 값은 (3, -1, 1.4)이므로 현 시점에서 이 사람이 가장 아름다워지는 방향은 3:1:1.4의 비율로 키는 증가하고 팔길이는 감소, 다리길이는 증가하는 방향이다.
만일 함수의 최대값을 찾고 싶을 경우에는 \(X_{k+1} = X_k + \lambda_k \nabla E(X_k)\) 형태의 gradient ascent 방법을 사용한다.
만일 뉴턴법을 함수 E(x)의 최소(최대)값을 찾는 최적화(optimization) 문제에 적용할 경우에는 다음과 같이 E'(x) = 0의 해를 찾는 문제로 식을 변형하여 적용할 수 있다.
위 식을 이용하면 뉴턴법을 비선형 최소자승 문제에 직접 적용하는 것도 가능은 하다. 하지만 E(p) = ∑ri(p)2가 두 번 미분가능해야 하며 E(p)의 2차 미분까지 계산해야 하는 부담이 존재한다. 따라서 비선형 최소자승 문제의 경우에는 뉴턴법 대신에 일차 미분만으로 해의 계산이 가능한 가우스-뉴턴법이 사용된다.
가우스-뉴턴법은 일종의 뉴턴법의 변형된 형태로서 비선형 최소자승 문제에 대한 대표적인 최적화 방법 중 하나이다. 앞서 뉴턴법을 최적화 문제에 적용할 경우에는 2차 미분이 필요하지만 가우스-뉴턴법을 이용하면 1차 미분만으로 해를 찾을 수 있다.
위식을 잘 보면 뉴턴법의 식 \(x_{k+1} = x_k - \frac{E(x_k)}{E'(x_k)}, k \geq 0\)을 다변수 벡터함수의 경우로 일반화시킨 형태임을 알 수 있다.
'''가우스-뉴턴법의 원리''' 가우스-뉴턴법의 핵심 원리는 비선형 함수를 지역적으로 선형함수로 근사하여 해를 구하는데 있다. 오차벡터 \(r(p) = \left [ r_1(p) \cdots r_n(p) \right ]^T\)를 테일러 전개를 이용하여 \(p_k\) 근처에서 선형함수로 근사하면 \(r(p) ~ r(p_k) + J_r(p_k)(p - p_k)\)가 된다(2차 이상의 항은 무시). 그런데, 선형근사된 오차에 대해 오차 제곱합 \(||r(p_k)+J_r(p_k)(p-p_k)||^2\)을 최소화시키는 p를 구해보면 식 \(p_{k+1} = p_k - pinv(j_r)r(p_k)\)가 나옴을 알 수 있다. 즉, 가우스-뉴턴법은 현재의 파라미터 추정값\(p_k\) 근처에서 에러함수를 선형근사하여 최소자승 해\(p_k+1\)를 구하고, 구해진 해 근처에서 다시 에러 함수를 선형근사하여 최소자승 해를 구하는 방식으로 점진적으로 해를 찾아간다.
Levenberg-Marquardt 방법은 기존의 Levenberg의 방법을 1963년에 Marquardt가 좀더 개선시킨 방법을 일컫는다. 원래의 Levenberg 방법은 μ가 큰 경우에 step size가 1/μ인 gradient descent 방법과 유사해짐은 앞서 설명한 바 있다. 하지만 이 경우 수렴 속도가 느린 문제점이 있다. Marquardt는 이러한 문제를 보완하기 위해 항등행렬 I 대신에 \(diag(J_r^TJ_r)\)[[footnote(diag(A)는 A의 대각원소는 유지하고 나머지 원소들의 값을 0으로 만든 대각행렬을 나타냄)]] 더해주는 방식을 제안하였다. \((J_r^TJ_r)\)은 원래 헤시안(Hessian)에 대한 근사행렬의 의미를 갖기 때문에 \(J_r^TJ_r\)의 대각 원소들은 각 파라미터 성분(pi)에 대한 곡률(curvature)를 나타낸다. 즉, Levenberg-Marquardt 방법은 가우스-뉴턴법의 singular 문제를 피하면서도 μ가 큰 경우에도 곡률(curvature)을 반영하여 효과적으로 해를 찾을 수 있도록 한 방법이다.
☞ Levenberg-Marquardt 방법에서 damping factor는 우리말의 '마중물'과 비슷한 의미가 아닐까 추측해 봅니다. 요즘은 보기 힘들지만 수도가 없던 예전에는 지하수 물을 끌어올리기 위해 펌프질(작두질?)을 했었는데 이 때 펌프에 미리 붓는 한 바가지의 물이 마중물입니다. 차이가 있다면 마중물은 한 번만 주면 되지만 damping은 지속적으로 해 줘야 한다는 점이 차이일 것 같네요. 어쨌든, Levenberg-Marquardt 방법은 가우스-뉴턴법의 damped version으로서 다른 말로 damped least-squares (DLS) 방법이라고도 불립니다.
만일 목적함수가 \(E(p) = \sum w_i*r_i(p)^2\) 형태인 경우 즉, 가중최소자승(weighted least squares) 문제의 경우에는 업데이트 식이 다음과 같다.
- LVC_2016_Fall_Glasgow . . . . 3 matches
여기는 현지 시간으로 8월 30일 화요일 2시
9월의 글래스고 날씨는 우리나라 늦가을 정도의 날씨로 쌀쌀한 편으로 밤낮의 일교차는 그리 크지 않다. 하지만 전반적으로 비에 대한 기후변화가 커서 따뜻한 옷을 준비해서 다녀야한다.
- LaTex_guide . . . . 4 matches
* O : options. 여기서 create symlinks to standard directories를 선택할 수 있다. 이것을 선택하면 texbin 폴더를 만들고 이것을 PATH에 포함하는 과정을 생략할 수 있다. 시스템 관리자라면 이 옵션을 선택할 수 있다. (다만 이것을 선택한 후에 패키지 관리자가 설치해주는 texlive와 충돌을 일으킬 가능성이 없는 것은 아니다.) 이후의 설명은 이 옵션을 선택하지 않은 경우를 전제로 한다.
저장소 (repository)의 파일목록보기는 다음과 같이..
한가지 ko.tex 패키지를 설치해야 여기에 있는 fpgafft latex 소스파일의 컴파일이 가능합니다.
- LaTex_syntax . . . . 2 matches
2. Tex에서는 보통 eps파일의 확장자를 가진 그림을 흔히 삽입하곤 하는데 아래 문구를 넣는다.
fig_pmat.eps 파일을 넣는다.
- Linux_device_DMA . . . . 7 matches
디바이스 드라이버가 DMA를 사용하기 위해서는 가장 먼저 DMA 채널에 대한 소유권을 등록해야 한다. 이 소유권 등록은 디바이스 파일이 열렸을 때 호출되는 open() 함수에서 처리 한다.
반대로 디바이스 파일이 닫혀서 더 이상 DMA 채널을 사용하지 않는다면 채널 소유권을 반환해야 한며, release() 함수에서 처리한다. 소유권의 등록과 반환은 다음 함수를 이용해 처리한다.
* device_id : DMA 채널을 소유한 것을 proc 파일 시스템에 표시하기 위해 사용하는 문자열.
== 디바이스 파일이 열렸을 때의 DMA 처리 ==
디바이스 파일이 열렸다면 다음과 같은 처리를 수행한다.
이와 같은 처리를 위해 디바이스 파일을 열었을 때 호출 되는 open()함수의 형식은 다음과 같다.
== 디바이스 파일이 닫혔을 때의 DMA 처리 ==
- Linux_device_Dynamic_DMA_mapping . . . . 1 match
DMA 영역을 돌릴때는 위와 같이 한다. dev, size 는 할당 받을 때와 동일하게 입력한다.
- Linux_device_module_basic . . . . 1 match
예제를 컴파일 하기 위한 '''Makefile'''
- Linux_environment_PATH . . . . 3 matches
각 사용자는 자기 홈폴터 아래 .bash_profile이라는 파일을 생성해서 환경 변수를 선언해서 사용 할 수 있다.
오늘 여기서 다룰 내용은 PATH 변수에 경로를 추가하는 일이다.
사용자 계정에 .bash_profile 이라는 파일이 있는지 확인하자 없다면 하나 만들도록 한다.
- Linux_general_prompt_config . . . . 1 match
[0m : 모든 색과 스타일 초기화
- Linux_gtk_intro . . . . 1 match
Dependency 검사를 통해서 필요한 파일을 잘 설치해주는 Ubunte는 친절하게도 GTK+관련 패키지까지 몽땅 같이 설치해준다.
- Linux_iconv파일의언어설정변경Iconv설명 . . . . 8 matches
conv 로 데이터파일의 언어설정을 바꿀수 있습니다.
확인이 필요하겠죠..(확인하기가 제일 어려움..ㅜㅜ)
사용법: iconv[<옵션>...] [<파일>...]
주어진 파일의 인코딩을 한 인코딩에서 또 다른 인코딩으로 변환함.
-o, --output=FILE 출력 파일
iconv 로 다수의 파일을 인코딩 변경 하는 스크립트는 http://mindpower.kr/22 <- 여기에서^^
root로 로그인하면 윈도우에서 쓰던 EUC-KR 포매팅된 한글네임 디렉토리가 ????로만 보여서 로케일을 변경시키고자 한다.
iconv -c -f cp949 -t utf-8 자막파일
- Linux_kernel_source . . . . 2 matches
- /usr/src 디렉토리 안에 커널소스 파일이 들어있다.
- 커널 컴파일 하기
- Linux_kernel_system_call시스템콜이란 . . . . 1 match
* 사용자 모드 : 일반 응용 프로그램이 동작하는 모드로 커널 모드와는 달리 비특권 레벨(nonprivileged level)이기 때문에 하드웨어나 시스템 자원을 직접 이용할 수 없고 시스템 콜을 이용해 접근해야 한다.
- Linux_pci_driver_example . . . . 9 matches
드라이버를 module형태로 작성해 올렸을 때 사용자가 사용할 수 있는 파일 형태로 보여주기 위한 명령이 있다.
= Module 컴파일을 위한 Makefile =
||KERNERLDIR = /lib/modules/... ||모듈을 컴파일 하면서 참조할 커널 소스의 위치를 알려주는 곳입니다. ||
||CFLAGS = -D__KERNEL__... ||컴파일 옵션으로 컴파일러 관련 자료를 참조하세요 ||
이 경우, 대개 syslog.conf 파일에 보면 kern.log 나 messages.log 파일에 저장되는 것을
이 경우 syslog.conf 파일에서 아래 부분은 주석 해제한 뒤 syslog를 재시작 합니다.
기타 dmesg 명령과 /proc/kmsg 같은 파일을 열람하면 커널 메시지를 볼 수가 있습니다.
- Linux_system_grub . . . . 2 matches
리눅스를 부팅할때 커널을 고를 수 있다. 이때 내가 사용하고 싶은 커널이 구버전일 때
이 파일을 보면 부팅하면서 보여지는 순서대로 커널 정보들이 들어 있다. 가장 앞에 있는 것이 '0'번이고 차례대로 아래쪽으로 붙어 있다.
- Linux_system_syslog.conf . . . . 3 matches
설정 파일의 이름은 rssylog.conf 이면 사용법은 비슷한 것 같다.
결국은 /var/log/kern.log 파일을 살펴 보았다.
= /etc/syslog.conf 파일 수정 =
- Linux_ulimit_commandUlimit명령어 . . . . 22 matches
이 글은 http://wiki.kldp.org/KoreanDoc/Ulimit-KLDP (문태준님 작성, 2000년 2월 24일(목))을 토대로 필자가 나름 내용을 추가하여 작성하는 글이다.
* 이 글은 실제로 제가 대형서버를 운영하고 있는 상황에서 나온 글은 절대 아니며, 그냥 여기저기서 주워들은 이야기들과 자료들을 토대로 해서 작성한 것입니다. 동시접속이 몇백명에서 몇천명되는 서비스를 하려면 단순하게 커널 컴파일 한번 하고 끝나는 것이 아니라 여러가지 조정을 해주어야 할 것이 많습니다. 또한 하드웨어와 OS 제한이 있으므로 로드밸런싱(부하분산), 트래픽 분산 등을 하는 스위칭 장비, 클러스터링 시스템 구성이 필요할 수 있습니다. 그만큼 설계를 잘해야합니다. 여기에 언급한 것은 단지 쉽게 할 수 있는 맛보기 정도이지요. 이로 인해서 생기는 손해에 대해서는 본인이 절대 책임을 지지 않습니다. 또한 내용 중 틀린 부분도 많이 있을 것입니다.
대규모 서비스를 준비하는 경우 운영체제의 제한사항을 먼저 확인해야 한다. 동시에 열수 있는 총파일 수, 한 프로세스가 열수 있는 파일 수 등등.
예를 들어 대형 웹서버를 아파치로 서비스하는 경우를 생각해보자. 아파치는 기본적으로 프로세스 방식으로 서비스를 처리한다. 이건 사용자의 요구가 올때마다 하나의 프로세스를 띄우므로 만약 동시에 10명의 사용자가 접속을 하면 10개의 프로세스가 떠야한다는 것이다. 최근의 아파치 서버는 MaxClients 150 이라고 설정되어 있다. 이건 동시에 150 개의 프로세스를 띄울 수 있으며 결국 동시에 150명을 받아 들일 수 있다는 것이다(실제로 이정도만 하더라도 절대로 작은 규모는 아니다). 그런데 만약 nobody가 만들어낼 수 있는 최대 프로세스 개수가 그 이하라면? 당연히 문제가 생길 것이다. 물론 최근 레드햇 6.0 이상 버전은 그 이상으로 맞추어져 있어서 문제가 생기지는 않겠지만.
문제는 프로세스가 많이 뜨면 프로세스뿐만 아니라 열 수 있는 파일 수에서도 문제가 된다.
-c 최대 코어 파일 사이즈
-f shell에 의해 만들어질 수 있는 파일의 최대 크기
-n 오픈 파일의 최대 수
core file size -> 코어파일의 최대크기
file size (blocks, -f) unlimited -> 쉘에서 생성되는 파일의 최대 크기
open files (-n) 1024 -> 한 프로세스에서 열 수 있는 open file descriptor의 최대 숫자(열수 있는 최대 파일 수)
max user processes (-u) unlimited -> 단일 유저가 사용가능한 프로세스의 최대 갯수
1. 소스파일을 수정한 후, 커널 재컴파일을 하는 방법.
3. /etc/security/limits.conf 파일을 수정하는 방법
/etc/rc.local 파일을 이용하여 명령어를 설정하던가 아니면 다음에 나오는 limits.conf 파일을 이용하도록 한다.
3. 사용자에 따른 자원 한도 설정 파일
제일 아래 ‘oracle’ 과 같이 따로 설정된 부분과 같이 변경하면 된다. 이렇게 설정할 경우, 매 부팅시 자동 적용되어 별도로 적용하지 않아도 된다. 또한, 각각의 유저마다 다른 설정을 적용할 수 있으므로 보안 및 관리에도 용이하다.
# 마지막으로 프로세스에서 열어놓은 파일을 확인하는 방법에 대해 알아보자.
lsof는 ‘List Open File’의 약자로 해당 System에서 구동되고 있는 프로세스들에 의해서 열려진 파일들을 확인 할 수
- Linux_vim_hexcode . . . . 1 match
(1) 현재 파일을 헥사 모드로 전환 명령:
- Linux_vimrc . . . . 7 matches
vim을 사용하다 보면 나만의 특별한 설정이 필요할 때가 있다. 그 설정은 .vimrc 파일을 통해서 가능하다.
.vimrc 파일을 홈드렉토리에 생성하면 된다.
들여쓰기 설정 : 앞줄과 동일하게, C 문법에 맞게 들여쓰기, C 문법에 맞게 들여쓰기에 사용자에 따른 설정을 할 수 있다.
set autowrite " 다른 파일로 넘어갈 때 자동 저장
set autoread " 작업 중인 파일 외부에서 변경됬을 경우 자동으로 불러옴
set showmatch " 일치하는 괄호 하이라이팅
" 파일 인코딩을 한국어로
- List_license라이센스리스트 . . . . 9 matches
권고사항 - 다운받으신후 폴더에 압축을 푼 후 설치 하시기 바랍니다.(zip파일 더블클릭 후 설치시 오류나는 경우가 있습니다.)
이메일 : 모든 e-mail 가능
이메일 : 모든 e-mail 가능. (등록과는 무관합니다.)
아래에 hosts 파일 수정
위 파일은 윈도우7 서비스팩 1 ,64비트 버젼이상 에서만 작동합니다.
설치시 그냥 아이디 만들기 눌러서 그냥 아이디 아무거나 만드세요. 메일주소같은거 아무거나 해도 상관 없네요.
Crack 폴더안에 있는 DLL 파일을 덮어 씌우세요.
파일 위치는 "C:\Program Files\Adobe\Adobe Photoshop CC 2014\Photoshop.exe" 입니다.
포토샵 CC 실행하는데 아무런 영향이 없는 파일입니다.
- MCMC_index . . . . 10 matches
\(x\)라는 관측 데이터가 관측 되었을 때의 모델 Parameter가 \(\theta\)일 확률을 위와 같이 표현할 수 있다.
\(\theta_1, \theta_2, \theta_3, \cdot, \theta_n\)이 표본 공간 \(S\)의 파티션일 때,
위에서 단일 모델의 경우의 베이지안 모델을 봤다면 이 번엔 각 모델에 가설 \(\def \hypo {\mathcal H} \hypo \)를 포함해서 생각해보자.[* https://link.aps.org/doi/10.1103/PhysRevD.91.042003]
가설\(\hypo\)에서 관측값 \(x\)가 발견되었을 때 Parameter 가 \(\theta\)일 확률을 구하면 아래와 같이 표현할 수 있다.
베이지안은 일반적으로 현상을 표현하는 '''latent variable'''을 가정한다.[* (29 Oct 2014). <http://enginius.tistory.com/514>]
- X는 기쁨, 슬픔, 노여움, 등이고, Y는 웃음, 울음, 짜증 등 일 것이다.
이것의 의미하는 것은 어떤 의도가 주어졌을 때 현상이 일어날 확률이다.
그렇다면 유방암진단을 받은 이 여성이 실제 암에 걸렸을 확률은 얼만일까?
사전확률이란 유방암 진단을 받기 전에 일반적으로 유방암에 걸릴 확률이다. 즉 1.4%이다.
:임의의 \(q(x|\theta)\)를 설정한다. 그리고 이는 우리가 sample할 수 있어야 한다. 일반적으로 다음과 같이 설정한다.
- MIB . . . . 1 match
1. MIB를 정의 하기 위한 일반적인 구조
- MMPC_CCPV&IPNC . . . . 6 matches
1. [:Camtron_complie Camtron 패키지 컴파일 하기]
1. [:IPNC_filesystem Nand 파일 시스템 올리기]
1. [:IPNC_flash_utils UBL 컴파일 하기]
== [:IPNC%EC%97%85%EB%AC%B4 업무 일지] ==
1. [:20100816_samsung_filesystem 삼성 파일 시스템 작업]
1. [:Kernel%EC%BB%B4%ED%8C%8C%EC%9D%BC%ED%95%98%EA%B8%B0 Kernel 컴파일하기]
- MPI . . . . 1 match
아래는 HPC 클러스터링 구성 중 lam-mpi 설치및 사용 부분입니다. (2007년 10월 28일 )
- Mame . . . . 12 matches
흔히 Retro Game이라고 해서 고전 게임 오락실 아케이드 게임 등으로 표현되는 게임들을 PC에서 돌릴 수 있도록 해주는 에뮬레이터가 있다. 에뮬레이터는 https://www.mamedev.org/release.html에서 받을 수 있는데 현재 버전 0.220 까지 릴리즈 되었다. (2020년 4월 6일) 이 링크에는 Windows Os만 나와 있는데 Linux와 Mac OS에도 Mame가 동작하는 것으로 알고 있다. 하지만 이 글에서는 Windows 10을 기준으로 테스트를 진행할 것이므로 Windows Os에 대해서만 다루겠다.
설치라고 할것도 없다. 그냥 위 링크에서 mame0220b_64bit.ext를 받아서 클릭하면 압축 파일을 추는데 그때 압축 파일을 푸는 경로에 파일이 복사되고 별도의 추가적인 설치과정 없이 실행 가능하다.
게임롬은 저작권 문제로 구하기 쉽지 않지만 인터넷에 잘 찾아보면 찾을 수 있다. 힘들지게 게임롬 파일을 찾았다면 mame 폴더 아래 roms라는 폴더를 만들고 넣어주면 된다. 게임롬 파일은 주로 zip파일 형태로 압축되어 있다. 압축된 상태로 넣어주면 된다.
= CHB 파일 =
chb파일은 게임 구동 데이터 외에 비디오나 배경음 오디오트랙등을 저정한 bin/cue 계열의 이미지를 하나의 파일로 관리 하기 위해서 사용되었다. 오디오트랙이나 비디오 트랙을 압축할 수도 있고 복구 할 수도 있다.[* <https://gall.dcinside.com/mgallery/board/view/?id=emugame&no=935>]
보통은 만들어진 chb파일을 인터넷에서 구해서 사용하게 되는데 사용하다보면 mame 버전이 업데이트 되면서 구동이 안 되느데 아래와 같이 최신 버전의 mame에 포함된 chdman.exe 파일을 이용해서 변환해주면 된다.
- MoniWiki/UserPreferences . . . . 2 matches
* 작성일: 2019년 11월 18일
- MoniWikiACL . . . . 12 matches
* 일부 POST액션은 관리자 비밀번호로 제한을 걸어둘 수 있는 액션은 protect 가능한 액션입니다. protect 액션은 ''제한된 allow''이며, 일부 POST액션만 지원합니다. 예) do_post_savepage()는 post 액션이며, 일반 do_goto()같은 액션과는 달리 관리자 비밀번호로 액션을 제한을 할 수 있습니다.
=== 간단한 적용의 일부 ===
// 모든 페이지(*)를 일반 가입 사용자에게(@User) 허락(*)
# <?php exit()?> // 파일은 php이지만 형식은 php가 아닌 일반 텍스트다.
// 모든 페이지(*)를 일반 가입 사용자에게(@User) 허락(*)
// MoniWiki 페이지를 @ALL 모든 사용자에게 edit,upload,diff등의 일부 액션을 거부
/!\ {{{deny *}}} + {{{allow read}}}는 아파치의 {{{Order allow,deny}}}와 같다. 즉, explicit하게 지정된 allow에 대해 먼저 검사하여 액션이 read일때만 허락하고 나머지 액션은 deny.
앞절의 설명은 priority가 같은 경우에 대한 일반적인 설명이었다. 그룹의 priority를 두었을 때는 어떻게 적용될까?
* 일반 등록 사용자(@User)는 edit,savepage 허락.
- MoniWikiOptions . . . . 2 matches
* 지정할 수 있는 값으로는 moni,moni2 등이 있다. 디렉토리를 추가하고 파일이름을 똑같게 하면 아이콘을 바꿀 수 있다.
* 스마일리 사용을 켜거나 끈다.
- MoniWikiTutorial . . . . 6 matches
* 사용자 ID: 영문으로 사용자 ID를 만들 경우 보통 소문자 구성된 사용자 ID를 만드는 것이 일반적이지만, 위키위키에서는 FooBar같은 낙타식 사용자 ID를 종종 사용합니다. 한글로 만드셔도 됩니다.
* 이메일주소: 시스템이 이메일을 지원하는 경우에는 자신의 이메일을 등록합니다. 페이지를 구독하거나 비밀번호를 잃어버렸을 때 필요합니다.
== 일곱째고개: 리스트와 테이블 ==
* ` PageList` - 인수로 사용되는 패턴과 일치하는 페이지 목록을 보여줍니다.
- NAS_implement . . . . 2 matches
- 가장 먼저 시도했던 녀석입니다. 저의 경우 구형 32비트 넷북이라 일반적으로 사용되는 이미지로는 설치조차 불가했고. 어렵게 구한 32비트 구형 시스템용 이미지로도 설치가 안됐습니다.
오류를 뱉어내기 일수였던 다른 녀석들과 달리 OMV 는 전 설치과정이 매끄럽게 진행
- Nyquist-Shannon . . . . 1 match
\(x(t) = 2\sin(29\pi t + \frac{\pi}{4}) +3\cos(30\pi t + \frac{\pi}{6})\)로 표현되는 연속시간 신호를 샘플링하여 이산시간 신호를 구하려고 할 때, 에일리어싱이 발생하지 않도록하는 샘플링 주파수의 최솟값을 구하라.
- Occlusion_Sensitivity . . . . 1 match
Zeiler의 Visualizing and Understanding Convolutional Networks 논문[* ''Zeiler, Matthew D.'', '''Visualizing and Understanding Convolutional Networks''', ECCV 2014][* https://link.springer.com/chapter/10.1007/978-3-319-10590-1_53?utm_source=getftr&utm_medium=getftr&utm_campaign=getftr_pilot]에서 Convolutional Networks의 학습 메카리즘과 내부를 분석하는 과정에서 사용한 방법으로 학습이 끝난 Convolutional Networks의 입력의 일부를 가림으로 prediction 성능이 저하되는 정도를 측정하여 입력의 어느 부분이 prediction에 기여하는지를 측정하는데 사용하였다. [* https://ferguson.tistory.com/5]
- OekakiMacro . . . . 3 matches
{{{[[OeKaki(파일이름)]]}}}을 쓰면 "OeKaki_파일이름.png"가 만들어진다.
(!) 짧막한 코멘트를 달게끔 해도 괜찮을 것이다. Comment 플러그인을 만들고, Blog의 코멘트와 Vote매크로를 응용해서 페이지 임의의 부분에 좀 더 쉽게 코멘트를 덧붙일 수 있게 한다.
- PlayMacro . . . . 1 match
MediaWiki와 일관성있게 하기 위해서 {{{[[Media()]]}}}문법도 쓸 수 있도록 하였다.
- Random_stochastic . . . . 4 matches
* 표본공간[* 사건이 일어나는 가상의 공간, 주사위를 던진다거나 하는 랜덤한 사건이 일어나는 공간을 말함.]의 모든 값들은 특정 확률로 변수 X가 취할 수 있고, 그 확률의 합은 1이다.
* a와 b가 상수일 때, $Var(aX + b) = a^2Var(X)$
* 변수 X와 Y가 독립일 때, $Var(X + Y) = Var(X) + Var(Y)$
- Rosenblatt . . . . 2 matches
1957 년 Frank Rosenblatt 이 Cornell Aeronautical Lab에서 개발했다. 그것은 한개이상의 층 (layer) 을 가진 인공 신경세포 (Neuron) 으로 구성된다. 입력은 일련의 가중치를 통해 출력으로 직접 전달되며, 그것은 가장 간단한 종류의 피드포워드 (Feedforward) network 으로 고려될 수 있다. 각 노드에서 가중치와 입력을 곱한 것을 합하고, 그 값이 threshold (보통 0) 보다 크면 뉴런은 실행 (fire) 하고 값 1 을 취하고 그렇지 않으면 값 -1 을 취한다.
1957년 미국의 Frank Rosenblatt 에 의해 발명된 퍼셉트론은 처음 소개되었을 때 상당한 센세이션을 불러일으켰다. 퍼셉트론은 비교적 정확히 기술된, 계산에 의한 최초의 신경망 모델이었으며 여러 분야에 걸쳐 커다란 영향을 끼쳤다. 로젠블릿은 원래 심리학자였으며 퍼셉트론은 그러한 심리학적인 요구에 부응하는 것이었다. 또한 퍼셉트론이 잠재적으로 복잡한 적응행위를 할 수 있는 학습 (Learning) 머신이라는 점은 엔지니어들에게는 매우 매력적인 것이었다 ............ 그가 기술한 퍼셉트론 모델은 매우 복잡했다. 퍼셉트론, 그리고 그것과 유사한 모델들은 분석하기가 매우 어려웠으나 학습 머신으로서의 능력과 제한점에 대한 통찰력을 제공해 주었다. 퍼셉트론 이후의 연구 개발은 대부분 엔지니어와 물리학자들에 의해 진행되었다 .......... 그러나 그의 중요한 논문[ "Principles of Neurodynamics: Perceptrons and the Theory of Brain Mechanisms", by Frank Rosenblatt, 1962. ]은 읽기가 매우 어려웠다. 퍼셉트론에 대한 분석 또한 쉽지 않았다. 여러 가지 옵션과 변수와 학습 규칙들이 제대로 정리되지 않은 채 소개되어 이해에 상당한 혼란을 주었다 .......... 로젠블럿의 퍼셉트론 이후 신경망이 무엇이든지 할 수 있는 듯이 보였던 시절이 있었다. 수백개의 알고리즘이 제시되었고, 학습 머신에 대한 관심과 열기가 대단하였다. 그러나 1969년에 출판된 Minsky 와 Papert 에 의한 'Perceptrons' 란 저서가 출간되고부터 신경망 연구에 대한 열기는 급격히 냉각되었다. 퍼셉트론즈는 퍼셉트론 모델에 대해 철저한 분석을 하였으며 또한 퍼셉트론 모델의 한계성에 대해서도 논리 정연하게 파해쳤다 ....... 퍼셉트론즈는 주어진 데이터의 선형 분리 문제도 해결할 수 없다는 등의 퍼셉트론 모델의 제한점에 관하여 예리하게 분석하였다. 특히 단층 퍼셉트론은 선형 분리의 단순한 예인 XOR 문제도 해결할 수 없었다. 민스키와 파퍼트는 퍼셉트론 모델들의 계산적인 제한점들에 관한 연구를 수학과 계산 이론에 입각하여 증명하였다 ......... 그러나 이 퍼셉트론 모델은 나중에 역전파 (Back-propagation) 모델과 같은 다층 퍼셉트론 모델의 기반이 되어 문자인식을 비롯한 여러 분야에 폭넓게 응용되었으며 신경망 연구의 새로운 장을 열게 된 결정적인 계기가 되었기에 이 퍼셉트론의 기여는 매우 크다고 할 수 있다. ...... (김대수 1992)
- SIMD . . . . 9 matches
'''SIMD''' 는 ''Single Instruction Multiple Data'' 의 약자입니다. 풀어서 번역하자면 "단일 명령어로 복수의 데이터를 처리하는" 정도의 의미를 가지고 있습니다.
위와 같은 형태에서, x, y, z, a , Θ 는 일단 변수 취급해야 하므로 레지스터에 저장을 한다고 쳐도 총 곱하고 더하는 연산에 삼각함수 연산까지 합치면 그냥 x86 명령어를 사용한다면 꽤나 길어지게 됩니다.
일단 뒤에서 설명할 몇 가지 예시들을 보면 이해할 수 있으니 넘어가겠습니다.
이것은 미리 규정된 작업이기 때문에 일반 명령어를 파이프라이닝하는 것과 약간 성격이 다릅니다.
흔히 일반 명령어의 이어짐에서 항상 발생할 가능성이 많기 마련인 명령어 의존성이 내부적으로 없단 얘기입니다.
그리고 원래 같은 일을 하는 일반 명령어 집합의 전체 실행 사이클보다 적은 사이클에 실행할 수 있는것은 큰 장점입니다.
비교적 호환성이 떨어진다는 것이나, 보통 프로그래머가 직접 코딩하기엔 무리일 수
일단 필자는 Visual Studio 를 사용하고 있고, 예전엔 항상 인라인 어셈블리를 사용했지만 요즘에는 [[Intrinsic]] 을 사용하고 있습니다.
- SVN . . . . 10 matches
저장소 conf폴더 안에 있는 파일을 이용해서 권한 설정을 해줘야 한다.
auth-access : 로그인 사용자의 권한입니다. 권한명령어는 동일합니다.
password-db = passwd : 패스워드 설정파일의 파일명입니다. 기본으로 passwd로 되어 있고 conf폴더안에 있습니다.
{{{{color: rgb(255, 1, 1); font-size: 13px;} 보안을 위해서는 passwd 파일과 authz 파일을 설정해 줘야 한다. }}}
1. commit 내용을 메일로 보내기 위해서는 sendmail이 필요함.
commit-email.pl에 sendmail, svnlook 파일의 패스를 확인해서 설정해 줘야 한다.
svn으로 관리할 파일이나 디렉토리를 추가 할때 사용한다.
svn에서 파일이나 디렉토리를 삭제 할때 사용한다.
- TM_Upsampler_complete . . . . 2 matches
Sincfuction을 이용한 오디오 업셈플 작업은 이미 완료 되었고[[footnote( [:upsampling_implementaion Upsampler 구현 일지] )]] [[footnote( [:TM_upsampling_implementaion OpenCL을 이용한 멀티 배율 Upsmapler] )]] 이를 최적화한 부분에 대해서 기술해 보려고 한다.
아래 그림은 sincfuction을 그래프로 그려본 것이다. 아래 그림에서 보는 것과 같이 sincfuction는 동일하고 어느 점에서 값을 취하냐에 따른 테이블의 차이만 있을 뿐이다.
- TM_Upsampler_lib . . . . 2 matches
= Header 파일 및 컴파일 정보 =
- TM_opencl_tutorial . . . . 3 matches
* ''hello.cl'' 디바이스에서 돌아갈 OpenCL C 파일
* ''hello.c'' HOST 프로그램 제어용 CPU에서 실행될 파일.
'''kernel_baseline.cl''' - 기본이 되는 opencl 커널 파일
- TM_upsampling_implementaion . . . . 6 matches
앞에 두가지는 플렛폼에 따른 구분으로 .amd는 GPU를 타겟으로 하며 오디오 셈플을 resample하고 X2 ~ X128 배에 해당하는 결과를 테스트 파일 형태로 만들어 줌.
.altera는 altera FPGA 플렛폼을 사용하게 설계 되어 있으며 kernel.cl 파일을 컴파일해서 '''kernel.aocx''' 생성해야만 사용 가능.
Data 폴더에 있는 sampler 텍스트 파일들을 각각 X2 ~ X128배로 resample 하여 합친 결과와 각각의 resample 결과를 텍스트 파일로 저장하도록 설계 되어 있음.
[:upsampling_implementaion Upsampler 구현 일지]
- Taylor_polynomials . . . . 31 matches
#title 테일러 급수(Taylor Polynomials and Series)
= 테일러 급수(Taylor series)의 이해 =
[[HTML(<div class="imgCaption" align="center">그림 1. \(exp(x)\)의 테일러 급수 전개(출처: wikipedia.org)</div>)]]
테일러[* Brook Taylor (1685–1731) described this series in 1715 in the paper Methodus incrementorum directa et inversa. Special cases of the result, and likely the result itself, had been previously known to Isaac Newton, James Gregory, and others.] 급수(Taylor series) 또는 테일러 전개(Taylor expansion)는 어떤 미지의 함수 \(f(x)\)를 아래 식과 같이 근사 다항함수로 표현하는 것을 말합니다.
테일러 급수는 모든 \(x\)에 대해서 근사를 한 것이 아님을 '''주의'''해야 한다. \(x = x_0\) 근처에서만 성립한다. 구하고자 하는 \(x\)의 값이 \(x_0\)에서 멀어지면 멀어질수록 오차가 발생하게 된다.
테일러 급수는 결국 \(x = x_0\) 에서 \(f(x)\)와 동일한 미분계수를 갖는 어떤 다항함수로 \(P(x)\)로 근사시키는 것이다.
= 테일러 정리 (Taylor's theorem) =
\(P_n(x)\)는 n차 테일러 다항식이라고 하고, \(x_0\)에 대한 함수 입니다. \(R_n(x)\)는 실함수(나머지 항)으로 ''truncation error''라고도 합니다.
"테일러 정리는 위 식을 만족 시키는 실함수가 존재한다." 입니다.
[:Multiplicative_function 곱합수]의 일반적인 부정적분은 아래와 같다. [* https://namu.wiki/w/%EB%B6%80%EB%B6%84%EC%A0%81%EB%B6%84 나무위키에 곱함수의 부정적분으로 정리 되어 있음.]
이렇게 전개를 계속하게 되면 테일러 급수를 얻을 수 있고 마지막에 없어지지 않는 잉여항이 있음을 알 수 있다.
라그랑주의 잉여항이 중요한 이유는 '''테일러 급수의 오차'''를 표현하기 때문이다. 적분형 평균값의 정리를 이용하면 이 최대 오차를 예측할 수 있다.
[http://ghebook.blogspot.kr/2010/07/mean-value-theorem-for-integration.html 적분형 평균값의 정리]는 어떤 함수의 적분값(\(\int_a^bf(t)dt\))과 함수값(\(f(t)(b-a)\))이 동일한 어떤 점(\(t=c\))이 반드시 존재한다는 것이다.
= 테일러 급수의 활용 / 필요한 이유 =
테일러 급수가 필요한 이유는 쉽게 말하면 우리가 잘 모르거나 복잡한 함수를 다루기 쉽고 이해하기 쉬운 다항함수로 대체시키기 위함입니다. 또한 어떤 함수를 테일러 급수로 표현하면 그 함수의 특성을 분석하기가 좀더 용이해지기 때문입니다. 그럼 그 구체적 활용예들을 하나씩 살펴보도록 하겠습니다.
부정적분을 계산하기 힘든 함수의 경우에 아래와 같이 테일러 급수를 활용하면 정적분의 계산값을 근사적으로 구할 수 있습니다.
위 식에서 \(\sin(x2)\)의 테일러 급수는 \(\sin(t)\)의 \(t = 0\)에서의 테일러 전개에 \(t = x2\)을 대입하여 얻어진 식이며, 적분 구간이 \(\bigl[0, 1\bigr]\)이기 때문에 \(x = 0\)에서의(즉, \(a = 0\)) 테일러 급수를 사용해도 근사오차가 크지 않습니다.
테일러 급수를 활용하면 함수(특히 삼각함수, 지수함수, 로그함수와 같은 초월함수)의 점근적 특성을 손쉽게 파악할 수 있습니다. 예를 들어, 아래와 같이 \(x = 0\) 근처에서 \(\sin x \sim x\) 임을 테일러 급수를 이용하면 쉽게 알 수 있습니다.
테일러 급수의 가장 일반적인 활용예로 볼 수 있습니다. 즉, 어떤 복잡한 또는 잘 모르는 함수가 있을 때, 이 함수를 저차의(1~3차) 다항함수로 근사하여 사용함으로써 문제 또는 모델을 단순화시키는데 테일러 급수가 활용될 수 있습니다. 구체적인 예를 들기는 어렵지만 테일러 급수는 논문 등에서 어떤 이론이나 주장에 대한 논리적 근거를 단순화하여 설명할 때 유용하게 사용되는 기법 중의 하나입니다. 한 활용예로 가우스-뉴턴(Gauss-Newton) 방법을 증명하는데 테일러 급수가 활용됩니다. 이에 대한 내용은 뉴턴법/뉴턴-랩슨법의 이해와 활용(Newton's method)을 참조하기 바랍니다.
[http://darkpgmr.tistory.com/59 다크 프로그래머 테일러 급수 정리]
- TechTemplate . . . . 2 matches
* 작성일: 2019년 11월 18일
- TechTemplate$ . . . . 2 matches
* 작성일: 2019년 11월 18일
- UML . . . . 2 matches
* 일반화(generalization) - 여러 클래스가 가진 공통적인 특성을 추출하여 공통적인 클래스를 일반화 하는 관계
- UploadFileMacro . . . . 25 matches
모니위키는 파일 업로드를 위한 3가지의 업로드 폼을 매크로로 지원하고 있다.
{{{[[UploadFile]]}}}: 이것은 자바스크립트를 전혀 쓰지 않는다. 그 대신에 간단한 여러개의 파일을 올릴 수 있는 방법을 제공한다.
{{{[[UploadForm]]}}} 혹은 {{{[[UploadFile(js)]]}}}: 이 매크로는 여러개의 파일을 올릴 수 있는 폼을 자바스크립트를 사용하여 만들어준다.
{{{[[SWFUpload]]}}} 혹은 {{{[[UploadFile(swf)]]}}}: 이 매크로는 모니위키 1.1.3CVS부터 지원하며 다중 파일 업로드를 지원한다. (Flash 10 지원)
모니위키의 {{{[[UploadFile]]}}} 매크로는 업로드 된 파일을 {{{$upload_dir}}}로 정의된 디렉토리에 각 페이지별 디렉토리를 생성시키고, 그 디렉토리에 업로드된 파일을 저장한다.
업로드가 성공하면 업로드된 파일을 다음과 같은 문법으로 연결할 수 있다.
예를 들어, {{{MyPage}}}에 들어가서 {{{MyPage?action=UploadFile}}}을 하거나, MyPage에서 {{{[[UploadFile]]}}} 매크로를 사용하여 파일을 업로드를 하면 $upload_dir='pds';라고 되어있는 경우에 {{{pds/MyPage/}}}가 새롭게 만들어지고 거기에 올린 파일이 저장된다.
config.php의 $pds_allowed라는 변수를 조정하면 업로드가능한 파일을 제한을 걸 수 있다. $pds_allowed의 기본값은 다음과 같을 것이다.
== 안전하지 않은 파일 확장자 점검 ==
아파치 mod_mime의 문제점으로 인해서 안전하지 않은 파일 이름을 점검합니다.
예를 들어 아파치의 mod_mime이 hwp 확장자를 인식하지 못하는데, {{{my.php.hwp}}}와 같은 파일이름을 업로드할 경우, 아파치의 mod_mime모듈은 my.php.hwp를 hwp가 아닌 php파일로 인식하게 됩니다.
$pds_protected를 설정해 놓으면 {{{my.php.hwp}}} 파일 이름이 my.php.txt.hwp로 이름이 바뀌면서 파일이 업로드 됩니다.
$upload_masters=array('Foobar','Babo'); 여기에 등록된 모든 사용자는 파일 확장자와 무관하게 모든 종류의 파일을 업로드 할 수 있습니다.
이 값을 1로 설정하였을 경우, 업로드 할 때의 정보를 이용해서 파일 타입을 판별합니다.
모니위키에서는 모든 업로드 된 파일이 {{{$upload_dir='pds'}}} 하위 디렉토리에 보존된다. 즉 {{{pds/*/}}}에 1단계 하위 디렉토리들이 생성된다. (2단계 이상은 지원하지 않습니다.)
그러나 노스모크 모인모인에서는 {{{pds/*}}} 하위 디렉토리로 모든 파일이 저장된다. 노스모크 모인모인과 호환을 보장하기 위해서 UploadFile액션은 특별히 {{{UploadFile}}}이라는 페이지에서 파일을 업로드하면 {{{pds/UploadFile}}}라는 디렉토리가 만들어지지 않고 pds 아래로 바로 업로드 되게끔 하였다.
pds 바로 밑으로 저장된 pds/* 파일을 연결하려면 {{{attachment:/foobar.png}}} 문법을 쓴다. 즉, "/"를 맨 앞에 붙여준다.
=== 공백이 들어있는 파일 이름 ===
공백이 들어있는 파일을 링크를 걸 경우는 {{{attachment:"hello world.png"}}}와 같이 링크를 걸어 준다.
- UploadedFiles . . . . 6 matches
{{{UploadedFiles}}}플러그인은 이미 업로드 된 파일 목록을 보여주는 플러그인이다.
{{{[[UploadedFiles]]}}} : 현재 페이지에 첨부된 파일 목록을 보여준다. pds/현제페이지이름/* 하위의 모든 파일 목록을 보여주게 된다.
{{{[[UploadedFiles(페이지이름)]]}}} : 지정된 페이지에 첨부된 파일 목록을 보여준다.
/!\ UploadedFiles 플러그인은 액션과 매크로를 동시에 지원하므로, 주소창에 {{{?action=uploadedfiles}}}를 덭붙여 주면 그 페이지에 첨부된 파일을 보여줍니다.
모니위키는 업로드된 파일의 검색(이름 및 내용)을 지원하지 않습니다.
- Variational_inference . . . . 7 matches
뉴럴넷 관점에서 VAE는 encoder, decoder 그리고 loss function으로 구성되어 있다. 뉴럴넷을 설명하는 일반적인 네트워크 모델을 네트워크 구조와 이를 학습하기 위한 loss function을 어떻게 정의하느냐로 이루워져 있다.
decoder는 입력으로 z를 출력으로 데이터 확률분포의 파라미터 값을 내어준다. Decoder는 \(p_{\phi}(x|z)\)로 표현 된다. 예로 손으로 쓴 숫자를 판독하는 일이라고 하면 784개의 픽셀이 흑백이고 각각의 픽셀이 0, 1로 이루워져있다면 Bernoulli distribution으로 표현할 수 있다. 즉 출력값으로는 각 픽셀에 해당하는 Bernoulli distribution 확률분포의 파라미터들이 된다. 낮은 차원에서 높은 차원으로 가기 때문에 정보의 손실이 발생한다. 얼마나 손실이 발생하는가? reconstrunction log-likelihood \(\log p_{\phi}(x|z)\)를 사용하여 측정한다.
이제 이 모델에서의 inference에 대해 생각해 볼 수 있다. 목표는 관찰된 데이터로부터 숨겨진 변수를 잘 추론(infer)하는 것이다. 곧, posterior \(p(z|x)\)를 계산하는 것과 일치한다. bayers에 따르면:
Jensen’s inequality 에 의해, Kullback-Leibler divergence 는 항상 0 보다 크거나 같다. 이는 곧 Kullback-Leibler divergence 를 최소화하는 것이 ELBO 를 최대화하는 것과 동치임을 말한다. 요약하자면 Evidence Lower Bound (ELBO) 가 posterior inference 근사를 가능하게 한다. 우리는 더이상 Kullback-Leibler divergence 를 최소화하기 위해 시간을 쓸 필요가 없다. 대신, 우리는 ELBO 를 최대화하므로써 계산 가능한 동치의 일을 수행한다.
VAE 에선 오직 local latent variable 만이 존재한다 (서로 다른 두 datapoint 가 latent z 를 공유하지 않는다). 따라서 우리는 ELBO 를 단일 datapoint 단위의 합으로 계산한다. 이를 통해 우리는 \(\lambda\) 에 대해 stochastic gradient descent 를 사용할 수 있다. VAE 에서 단일 datapoint 에 대한 ELBO 는 다음과 같다.
베이지안 딥러닝 하는 사람들이 무슨 일을 하는지에 대한 전반적인 내용.[* <http://whansunkim.ml/w2/wiki.php/cross_entropy> ELBO에 대한 설명]
- Xavier_He_initialzation . . . . 1 match
초기값을 랜덤하지 않은 특정 값으로 설정한다면 트레이닝이 되지 않을 수 있다. 간단한 예로 모든 웨이트를 '0'으로 초기화 한다고 생각해 보자 모든 입력값에 대해서 0의 결과값을 주게 된다. 모든 네트워크의 레이어와 중간 로드의 값이 0으로 일치하기 때문에 다름이 생기지 않고 네트워크는 학습이 되지 않는다.
- advaced_VAEs . . . . 2 matches
* 작성일: 2019년 11월 18일
- altera_opencl_init . . . . 1 match
'''Altera OpenCL 컴파일 옵션'''
- ann_exam . . . . 4 matches
동일 조건에서 반복 횟수만 변경함. maximal_iterations": 100
동일 조건에서 반복 횟수만 변경함. maximal_iterations": 500
동일 조건에서 반복 횟수만 변경함. maximal_iterations": 1000
동일 조건에서 반복 횟수만 변경함. maximal_iterations": 2000
- ann_rnn . . . . 1 match
* Recursive Neural networks는 Recurrent Neural Networks의 일반화된 버전이다.
- application_list . . . . 1 match
로컬에 있는 파일을 찾아주는 프로그램
- arXiv_1911 . . . . 39 matches
현재 Advanced LIGO 및 Virgo 감지기에서 글리치를 식별하고 특성화하는 데 사용되는 기본 파이프라인은 Omicron[7]입니다([4, 5] 참조). Omicron은 초과 전력 이벤트에 대해 단일 검출기에서 GW 변형 데이터를 검색하여 글리치를 식별합니다.
GW 데이터 스트림 외에도 각 감지기는 보조 데이터의 수십만 "채널"을 기록하며, 각 채널은 감지기 구성 요소 또는 물리적 환경의 일부 측면을 측정합니다. 이러한 채널은 글리치를 진단하는 데 유용할 수 있는 감지기 상태에 대한 중요한 정보를 제공하지만 모든 것을 모니터링하는 것은 어려운 작업입니다.
잠재적인 글리치를 식별하고 플래그를 지정할 때 해당 이벤트가 모델링되지 않은 GW 이벤트가 아니라 실제로 도구에서 발생한 글리치인지 확인하는 것이 중요합니다. GW 데이터 스트림이 아닌 LIGO의 보조 채널만 고려함으로써, 우리가 플래그를 지정하는 글리치가 실제로 중력 이벤트가 아니라는 것을 더 확신할 수 있습니다. 보조 채널은 일반적으로 GW에 민감하지 않기 때문입니다[8, 9]. 보조 채널로 글리치를 연구할 때의 또 다른 이점은 특정 채널과의 상관 관계가 감지기 문제의 원인을 식별하는 데 도움이 될 수 있다는 것입니다.
LIGO 보조 채널을 기반으로 주어진 시간에 글리치가 발생하는지 여부를 감지하는 문제를 이전 연구[13, 15]에서와 같이 간단한 2가지 분류 문제로 제시하고 잘 이해되고 효율적이며 일반적으로 적용 유망한 결과와 함께 이 문제에 대해 기계 학습 방법을 사용했습니다.
각 LIGO 검출기에는 약 250,000개의 보조 채널이 있습니다. 이러한 채널 중 상당수는 일정하거나 항상 일관된 패턴으로 변경되며(예: 시간 추적 또는 CPU 주기 계산) 무시해도 됩니다. 처리해야 하는 데이터의 양을 줄이기 위해 분석에서 글리치에 대한 정보가 없는 이러한 채널을 제거합니다.
보조 채널 시계열 데이터는 사용자 지정 형식[30]으로 인코딩되고 각 채널에 대해 64초의 연속 데이터를 포함하는 파일에 저장됩니다. 이러한 파일을 "원시 프레임 파일"이라고 합니다. 정보가 없는 채널을 식별하기 위해 각 분석의 교육 기간에서 몇 개의 원시 프레임 파일을 선택하고 해당 프레임에서 채널을 비교합니다. 선택한 각 프레임의 각 채널에 대해 해당 프레임의 다음 값에서 채널의 첫 번째 원시 값을 빼고 결과 시계열을 선택한 다른 각 프레임의 해당 시계열과 비교합니다. 모두 동일하면 나머지 분석 동안 채널이 무시됩니다. 이 절차 후에 추가 분석을 위해 약 40,000개의 채널이 남습니다.
일부 보조 채널은 GW 스트레인 채널과 직접 연결되거나 GW 신호에 의해 다른 방식으로 오염됩니다. 이러한 채널 중 다수는 내부 LIGO "채널 안전성" 연구에서 확인되었습니다[8, 9]. 알려진 모든 채널을 제거했습니다. 또한 사전 교육 및 전문가와의 논의를 거쳐 균주에 의해 오염되었을 수 있지만 안전성 연구에서 고려되지 않은 추가 채널을 제거했습니다.
우리는 Omicron[7] 이벤트 트리거 생성기를 사용하여 모델 교육 및 테스트를 위한 글리치 시간을 식별합니다. (일단 훈련되면 우리 모델은 Omicron 및 스트레인 데이터와 완전히 독립적입니다. 아래 설명된 대로 보조 채널에서 계산된 매개변수만 고려합니다.) Omicron은 대기 시간이 짧은 스트레인 데이터를 분석하여 초과 전력 이벤트를 찾고 이러한 글리치의 매개변수를 보고합니다. 시작 시간, 피크 시간 및 지속 시간을 포함합니다.
각 기능은 글리치 근처 또는 글리치가 없는 채널 동작의 특정 속성을 캡처할 목적으로 선택되었습니다. 1a의 기능은 t0 직전, 도중 및 직후 채널 원시 값의 평균 및 표준 편차를 캡처하기 위해 선택되었습니다. 1b에 있는 것들은 t0 근처에서 발생하는 단계 변화를 식별하기 위해 선택되었습니다. 1c에 있는 것들은 t0 근처에서 발생하는 짧고 일시적인 변화를 식별하기 위해 선택되었습니다.
대부분의 기계 학습 기술은 각 기능이 거의 동일한 규모에 있다고 가정합니다. 그렇지 않으면 원시 값의 크기가 큰 피처가 다른 피처를 지배합니다. 표준 정규화 절차는 원시 값을 표준 점수로 바꾸는 것입니다(즉, 훈련 평균에서 떨어진 표준 편차의 수는 원시 값이 떨어짐). 따라서 각 기능은 훈련 세트에 대해 0의 평균과 단위 표준 편차를 갖습니다[31, 32]. 고려 중인 각 분석에 대해 훈련 세트에 대한 평균과 표준 편차를 계산합니다. 그런 다음 훈련, 검증 및 테스트 세트의 모든 지점에 대해 평균을 빼고 훈련 세트에 있는 해당 기능의 표준 편차로 나눕니다.
우리는 ER14 기간 동안 LIGO Livingston Observatory(LLO)의 데이터를 사용하여 두 매개변수의 범위에 걸쳐 그리드 검색을 수행하고 별도의 기간에서 추출한 보류 검증 데이터 세트에서 결과를 평가했습니다(그림 3 참조). 우리가 결과를 보고하는 훈련 세트와 테스트 세트와 별도의 검증 데이터 세트를 사용하면 훈련 또는 테스트 데이터에 과적합하지 않고 보이지 않는 데이터로 잘 일반화되는 하이퍼파라미터를 선택할 수 있습니다[31, 32].
우리는 2019년 3월 6일(GPS 시간 1,235,870,000에서 1,235,900,000) 잠긴 세그먼트 동안 30,000초에서 가져온 데이터 세트에서 α 및 λ 값 그리드를 통해 모델을 훈련했습니다. 훈련 데이터 세트를 생성하기 위해 우리는 7,500개의 글리치 프리 시점(섹션 IIB에 설명된 대로)과 해당 기간 동안 30,141개의 오미크론 글리치 중 7,500개를 무작위로 샘플링했습니다. 이 서브샘플링은 데이터세트가 사용 가능한 메모리에 맞도록 수행되었습니다. 두 데이터 세트 모두 64초 원시 프레임 파일의 시작 또는 끝 부분에 너무 가까운 샘플도 무시했습니다. 섹션에 설명된 대로 예비 데이터 축소 후. II A, 고려된 채널 수는 38,235개였습니다. 그런 다음 Sec. II B. 그런 다음 이 훈련 세트의 각 α,λ 쌍에 대해 독립적으로 탄력적 순 로지스틱 회귀 모델을 훈련했습니다. 교육은 Scikit-learn 패키지를 사용하여 수행되었습니다[35].
α 및 λ 초매개변수를 변경하면 훈련 중 정규화에 의해 모델의 계수 w_j가 0으로 구동되는 강도를 효과적으로 조정합니다. 이러한 매개변수의 많은 쌍으로 훈련한 후 0이 아닌 계수의 수와 검증 데이터에 대한 모델의 예측 정확도 사이의 관계를 평가할 수 있습니다. 0이 아닌 계수가 너무 많은 모델은 정확한 예측을 하기에 충분한 기능을 고려할 수 없는 반면, 0이 아닌 계수가 너무 많은 모델은 훈련 데이터에 과적합되어 데이터를 분리하기 위해 잘 일반화되지 않을 것이라고 예상할 수 있습니다. 그림 4는 이것이 우리 데이터의 경우임을 보여줍니다.
ER14 테스트 분석을 위해 Sec. 에이. 따라서 훈련 데이터 세트는 거기에 설명된 것과 동일합니다. 이 데이터 세트를 생성하기 위해 GPS 시간 1,235,870,000에서 1,235,900,000 사이의 기간 동안 7,500개의 글리치 없는 시점(섹션 IIB에 설명된 대로)과 30,141개의 오미크론 글리치 중 7,500개를 샘플링했습니다. 섹션에 설명된 대로 예비 데이터 축소 후. II A에서 고려한 채널의 수는 38,235개이므로 훈련 및 테스트 데이터 세트에는 382,350개의 기능이 있습니다.
테스트 데이터는 GPS 시간 1,235,910,000과 1,235,919,616 사이의 9,616초에서 가져옵니다. 우리는 무작위로 선택된 2,500개의 글리치 프리 포인트와 해당 기간 동안 6,479개의 오미크론 글리치 중 2,500개를 샘플링했습니다. 훈련과 마찬가지로 64초 원시 프레임 파일의 시작 또는 끝 부분에 너무 가까운 샘플도 무시했습니다. 분류기는 이 테스트 데이터 세트에서 83.8%의 정확도를 달성했으며, 진양성 비율은 73.0%, 진음성 비율은 94.6%입니다.
테스트 기간 동안 분류기의 정확도, 참양성률, 참음성률은 그림 7에 나와 있다. 이 결과는 성능이 시간이 지남에 따라 상대적으로 일정하지만 검출기 상태의 일시적인 변화에 영향을 받을 수 있음을 나타냅니다. 훈련 중에는 보이지 않았다.
O3 분석을 위해 2019년 4월 10일(GPS x 1,238,900,000에서 1,238,910,000) 동안 10,000초에서 가져온 훈련 데이터 세트에 대해 새로운 분류기를 훈련했습니다. 그림 5와 같은 결과가 좋은 성능을 위해서는 10,000초의 훈련 데이터가 충분하다는 것을 나타내기 때문에 이 분석을 위해 훈련 기간에 더 적은 시간을 사용했습니다. ER14 훈련 데이터 세트와 유사하게, 우리는 무작위로 선택된 2,500개의 글리치 프리 시점과 해당 기간 동안 8,098개의 오미크론 글리치 중 2,500개를 샘플링했으며 64초 원시 데이터의 시작 또는 끝에 너무 가까운 샘플은 무시했습니다. 프레임 파일. 섹션에 설명된 대로 예비 데이터 축소 후. II A에서 고려되는 채널의 수는 38,327이므로 훈련 및 테스트 데이터 세트에는 383,270개의 기능이 있습니다.
테스트 데이터는 GPS 시간 1,238,910,000에서 1,238,940,000 사이의 30,000초에서 가져옵니다. 우리는 무작위로 선택된 7,500개의 글리치 프리 포인트와 해당 기간 동안 24,243개의 오미크론 글리치 중 7,500개를 샘플링했으며 64초 원시 프레임 파일의 시작 또는 끝에 너무 가까운 샘플은 무시했습니다. 분류기는 이 테스트 데이터 세트에서 79.9%의 정확도를 달성했으며, 진양성 비율은 62.1%, 진음성 비율은 97.7%입니다.
테스트 기간 동안의 정확도, 진양성 비율 및 진음성 비율은 그림 9에 나와 있습니다. ER14와 마찬가지로 이 결과는 성능이 시간이 지남에 따라 상대적으로 일정하지만 진음성 비율과 진음성 비율이 눈에 띄게 감소함을 나타냅니다. 테스트 기간이 시작된 직후에 정확도가 감소하여 데이터 또는 검출기 상태의 일부 비정상성을 나타냅니다. 특히 모델이 약 3시간 분량의 데이터로 훈련되었기 때문에 이것은 놀라운 일이 아닙니다. 이 방법은 학습 데이터가 줄어들고 학습 이후 시간이 더 많이 경과하면 이러한 문제에 점점 더 취약해질 수 있다는 점을 고려해야 합니다.
탐지로 분류되지 않기 때문에 전통적인 GW 검색 방법으로 손실된 소위 하위 임계값 이벤트를 복구하는 것을 목표로 하는 사용 사례 시나리오에서 실제 신호의 상당한 거짓 해제 비율을 갖는 것은 허용되지만 글리치 제거율이 높은 것이 바람직합니다. 우리는 일반적으로 개별 검출기에서 ~65%의 글리치 거부율(즉, 35% 위음성 비율)이 높은 SNR의 경우에 대해 0.3%의 위양성을 대가로 가정할 수 있음을 발견했습니다(예: 높은 SNR 참조). 그림 6의 O3 곡선). 제안된 방법은 개별 탐지기의 데이터를 독립적으로 고려하므로 이러한 임계값을 사용하면 세 사이트 모두에서 일치하는 위음성 확률이 5% 미만이고 하나 이상의 사이트에서 위양성 확률이 ~1%입니다. 따라서 삼중 검출기 일치 글리치의 ~95% 감소는 실제 GW 신호를 놓칠 가능성(즉, ~O(1%))에 해당합니다(즉, 글리치 제거의 위양성 비율이 작음).
- artificial_neural_networks . . . . 10 matches
= 일반화된 델타 방법 =
가 되고, 이것은 '''일반화된 델타 방법(Generalized delta procedure)'''이라고 알려진 다음과 같은 가중치 변경 규직을 만든다.
Widrow-hoff 규칙과 일반화된 델타 방법의 차이
1. Widrow-hoff 규칙에서는 원하는 출력 d가 1또는 -1인 반면, 일반화된 델타 방법에서는 1 또는 0이다.
1. Widrow-hoff 규칙에서는 실제 출력 f가 내적 s와 같지만 일반회된 델타 규칙에서는 시그모이드 함수의 출력이다.
1. 일반화된 델타 방법에서는 시그모이드 함수 때문에 덧붙여진 항 f(1-f)가 존재한다. 시그모이드 함수[[footnote(시그모이드 함수는 어떤 퍼지 초평면(N차원 공간을 두개의 영역으로 나누는 평면)을 구현한 것으로 생각 할 수 있다.)]]에서 f(1-f)는 0부터 1까지 변한다.
다층 피드 포워드 신경망에서도 시그모이드 함수를 임계 함수로 설정하면 '''일반화된 델타 방법'''의 확장으로 생각 할 수 있다.
\(\frac{\partial \varepsilon}{\partial W} = -2(d-f)\frac{\partial f}{\partial s}X\) 이 공식을 다층을 갖는 시그모이드 함수로 일반화 하면
일반화된 델타 방법에서 사용한 \(\frac{\partial \varepsilon}{\partial W} = -2(d-f)\frac{\partial f}{\partial s}X\)를 역으로 쓰면
이 연습문제에는 오류가 있다. \(f_2^{(1)} = 0.500\)는 시그모이드 함수 입력값이 0일때의 값이다. 예제에서 시그모이드 입력은 1이다. 오류를 수정하기 위해서는 0.5의 계산값을 수정하던지 X3의 가중치 -1을 -2을 수정하는 것이 맞다.
- association_rule . . . . 8 matches
위 식에서 N은 전체 경우의 수, \(N(X \cup Y)\)은 X, Y가 동시에 일어난 경우의 수를 의미한다. 예를 들어, 차와 라떼를 주문한 고객이 머핀을 주문할 support 값을 구한다고 하면, 아래 식과 같이 차, 라떼, 머핀을 동시에 구매한 경우의 수를 전체 경우의 수로 나눠준다.
위 식을 보면 차, 라떼, 머핀의 순서를 바꿔도 동일한 결과를 얻는 것을 알 수 있다. 즉, 머핀을 주문한 고객이 차와 라떼를 주문할 경우도 동일한 support 값을 얻는다. support 값이 높으면 높을수록 더 의미가 있다고 볼 수 있다.
Lift값은 1보다 큰 값일 때 positively correlation, 1일 때 independent, 1 미만일 때 negatively correlation이라고 여긴다.
신뢰도의 값을 얼마나 신뢰할 수 있는가를 지지해주는 것이라고 볼 수 있다.(우연히 일어난 일이 아님을 알 수 있다.)
- atrix_custom_rom . . . . 23 matches
''이 telstra롬을 밀기위해선 또 RSDLite[[footnote(telstra롬은 확장자 .sbf 파일이고 RSDLite는 확장자가 sbf란 파일을 구동시키기위한 프로그램이죠.)]]란애가 필요합니다.''
설치는 일반적인 윈도우 프로그램 설치와 동일하고 설치가 끝났다면 프로그램을 실행합니다.
{{{{color: rgb(255, 1, 1); font-size: 13px; font-weight: bold;} 아트릭스를 컴퓨터와 연결하는 것은 일반적인 연결과 조금 다르다. }}}
해당 파일은 호주의 통신사인 텔스트라에서 출시된 아트릭스 [https://dl.dropbox.com/s/pm1hjbw3hk7yg0n/OLYEM_U4_1.4.2_SIGNED_USAOLYEMTELSTRA_P029_A020_M005_HWolympus_1g_1FF.7z?dl=1 순정롬] 파일입니다.
파일을 받아서 압축을 풀면 .sbf 파일이 생긴다. 경로를 지정하고 '''Start''' 버튼을 클릭하면 알아서 롭업이 시작 된다.
이유는 부트로더 언락파일도 sbf니까요
두번째 파일을 받아서 압축을 풀면 '''intl-fix-try1.sbf'''이 나온다.
위의 sbf파일 경로 지정법과 똑같이 해주시면 됩니다.(아트릭스 rsd모드 진입 필수![텔스트라로 밀을시 부팅이 완료되어 있으므로 수동으로 종료])
fastboot를 받아서 압축을 풀면 cmd창에서 실행 할 수 있는 파일이 보인다.
진저 통합과 CM7은 비슷한 면이 되게 많지만 FLAVOR은 현저하게 다릅니다. ?? (무슨 뜻일까?)
zip파일 형식의 롬을 아트릭스에 올리기 위한 프로그램 설치 '''리커버리'''
다운 받은 .img 파일을 올리기 위해서는 fastboot를 사용한다.
fastboot flash recovery [img 파일 경로]
~~역시, 요즘 롬들은 라디오롬[[footnote(무슨 뜻일까?..)]]를 따로 깔지않아도 되지만~~
롬을 올리기 위해서는 2, 3개의 파일이 필요하다.
위에 파일을 받아서 외부 SD카드에 넣어 둡니다. 그리고 휴대폰을 껐다가 다시 켠다. (이 때도 역시 전원 버튼과 볼륨 다운 버튼을 동시에..)
[https://play.google.com/store/apps/details?id=com.rhmsoft.fm&feature=related_apps#?t=W251bGwsMSwxLDEwOSwiY29tLnJobXNvZnQuZm0iXQ.. 파일 관리자 ]
제일 많은 경우가
A4.모든사람이 겪는 일입니다. 아무 문제 없습니다.
- attribute_ex . . . . 5 matches
컴파일러에게 좀더 자세한 정보를 제공하기 위해서 사용하는 {{{__attribute__}}}의 사용 예를 찾아보고 설명하도록 하겠다.
기존 C코드에 있는 inline은 잘 사용하면 굉장히 편리한 기능이다. inline으로 선언된 함수의 경우 컴파일 단계에서 코드가 확장이 되서 함수 호출에 의한 자원 손실을 회피할 수가 있다. 함수 호출에 의한 자원 손실의 문제는 잘 알고 있을 것이라고 생각한다. 그리고 컴파일에 따라서 사용자가 inline을 선언하지 않아도 간단한 함수에 대해선 자동적으로 inline이 적용이 되서 컴파일시 코드 확장이 되는 경우가 있다. 하지만 간혹 프로그램에 따라서 코드가 확장이 되지 않고 함수 호출에 의한 프로그램이 진행이 되야 하는 경우가 있다. 그 때 사용할 수 있는 코드가 있다.
C에서 구조체를 선언한 경우 메모리는 워드 단위로 할당이 되게 된다. 즉 4byte가 1word라고 가정을 한 경우(64bit의 경우 1word는 8byte일 수 있다. sizeof(int)가 1word의 값이다.)
- autoencoder . . . . 10 matches
* 작성일: 2019년 10월 23일
기본적인 구조는 Neural network구조 이며, 다른점이라면 입력과 출력이 동일하다는 것이다. (반듯이 동일할 필요는 없지만, 목표값(\(y\))이 없기 때문에 변형된 출력값을 사용한다.)
반대로, 그림을 vector에 활당하는 일에 대해서 생각해 보자. 앞선 예와 같이 "[1,0,0,0]은 고양이 그림이고 [0,1,0,0]은 강아지 그림이다." 처럼 몇장이 안되는 그림이라면 사람이 일일이 할당할 수 있을 것이다. 하지만 할당해야할 그림이 아주 많아서 사람이 일일이 할당할 수 없다면? 누군가는 해야겠죠?
차원축소 알고리즘으로 가장 많이 사용되는 알고리즘은 PCA일 것이다. PCA는 데이터를 다른 공간으로 투영하는 선형변환을 학습하는 방법이다. PCA는 데이터의 분산(Variance)을 최대한 보존하면서 서로 직교하는 새로운 축을 찾아, 고차원 공간의 표본들을 선형 연관성이 없는 저차원 공간으로 변환하는 기법으로 아래 그림과 같이 2차원 공간에 있는 데이터를 하나의 주성분으로 선형변환된다. [* ratsgo. (24 Apr 2017). <https://ratsgo.github.io/machine%20learning/2017/04/24/PCA/>.]
- auxMVC . . . . 3 matches
라이고 초기, 아직 중력파를 관측하기 전, 레이저 간섭계를 만들고(Since 2001.) 6번의 과학관측을 시도 했다. 이 관측과정 동안 중력파는 검출 되지 않았지만 많은 데이터를 축적했고 이 것들을 활용해서 중력파 검출기 특성(Detector Characterization) 연구를 진행했다. 이와 같은 연구중 하나로 중력파 검출기 주변에 설치된 다양한 센서(Auxiliary channel)로 부터 수집된 방대한 데이터를 활용해서 중력파 검출기에 직접적으로 영향을 주는 센서와 그렇지 않은 센서(safe channel)를 분류하고 그런 센서들 중 특정 조건이나 환경에서 중력파 검출기에 영향을 주는 경우를 확인하고 센서 데이터로 부터 중력파 검출기의 신호가 잡음임을 판별하는 일을 다양한 머신러닝 알고리즘으로 수행하였다.[* Rahul Biswas et al. '''Application of machine learning algorithms to the study of noise artifacts in gravitational-wave data''', Phys. Rev. D, 2013, https://arxiv.org/abs/1303.6984]
'''일시적인 잡음''': 지진, 음향, 자기장 장애, 전력 과도 현상, 산란광, 빔을 가로 지르는 먼지, 간섭계의 불안정성, 기기와 환경의 비선형적 복합적인 잡음.
* 찾은 신호가 글리치가 아니고 중력파임을 증명하기 위한 방법으로 여러 검출기에서 동일하게 관측 되었는지를 이용해서 확인한다. 지금까지 가장 효과적인 방법임.
- auxcam_job . . . . 7 matches
#title AuxCAM 작업 일지
titanv 서버 /home/wskim/work/auxcam/data 폴더에 기본적인 데이터 셋 저장, KISTI ldg-ui에 오상훈 박사님이 /data/ligo/scratch/sanghoon/AuxCAM/dataset 폴더에 작업해 놓은 파일을 복사해서 사용
gwpy, lalsuite를 설치하여야 gwf 파일을 읽어볼 수 있다.
172.21.2.57(일명 titanv) work/auxcam/ 폴더에 AuxCAM Data Read.ipynb 파일에서 작업을 수행하고 있음.
Livingston, Hanford 두 곳의 '''safe channel list'''를 갖고 .gwf 파일을 읽어들임.
767개의 채널을 모두 사용하기에는 메모리 사용량이 너무 크기 때문에 reduced channel list를 사용하고 그 중에서 데이터가 없거나 변화가 없이 일정한 값이 출력되는 채널을 제거하였다.
- auxcam_paper . . . . 2 matches
알베르트 아인슈타인은 1916년 일반 상대성 이론에 기초하여 중력파를 예측했습니다. 약 100년 후인 2015년 9월 14일, 우리는 블랙홀 이진 병합인 첫 번째 중력파를 관찰했습니다.[1] 레이저 간섭계 중력파 관측소(LIGO)는 첫 번째 관측부터 마지막 관측까지 총 67번의 중력파를 관측했다(O3b).
- auxcam_script . . . . 20 matches
안녕하세요 국가수리과학연구소에서 일하고 있는 김환선입니다.
저보다 더 잘 아시는 분들도 계시겠지만 간단하게 중력파 검출 원리에 대해서 알아보겠습니다. 본 영상에서 보시는 것과 같이 빛이 가로 세로로 일정 거리를 지나 합쳐 졌을 때 보강 간섭과 상쇄 간섭 발생하게 됩니다. 이러한 간섭 현상이 발생하기 위한 조건으로 광원은 일정한 위상을 갖고 단일 파장을 가져야 하는데 이미 라이고 검출기는 모든 조건을 충족하고 있습니다.
다가오는 04부터는 일본의 KAGRA 검출기가 관측가동을 하려고 준비하고 있습니다.
지금 보시는 신호는 2015년 9월 14일에 관측한 중력파 신호입니다. 블랙홀 쌍성의 출동에서 발생한 중력파 신호입니다.
관측 가동중 검출기에 검출된 중력파가 아닌 신호들을 많이 모으다 보니 형태적으로 비슷한 모양을 갖는 노이즈들이 발생한다는 것을 알게 되었습니다. 원인은 모르지만 형태적으로 분류가 가능하니 나중에 유용하게 쓰일 수 있도록 형태적 분류라도 해보자는 목적으로 Glitch에 이름을 붙이고 분류하는 일을 했습니다. 프로젝트 명은 Gravity Spy 라고 Cityzen sience라는 형태로 진행 중입니다.
지금까지가 배경 설명이였습니다. 중력파 데이터 분석을 일을 진행하면서 가장 어려운 부분이 이 배경 설명 입니다. 실제 한 일에 비해서 설명해야 할 내용이 많고 복잡해서 항상 이 부분에서 시간을 제일 많이 사용하는 것 같습니다.
제가 진행한 일은 앞서 설명 드렸던 중력파 보조 채널중 290개의 safe chennel을 사용해서 6개의 글리치를 분류하는 일을 했습니다.
중력파 채널에 글리치가 발생한 시점과 일치하는 보조채널 데이터를 8초씩 취해서 INPUT DATA로 만들고 해당 글리치로 라벨링을 했습니다.
먼저 간단하게 각 시계열 데이터로 부터 특징 백터를 뽑아 내고 그 것들을 CLASSIFIER에 전달하면 되겠다고 생각했습니다. 최대한 시계열 데이터가 다른 채널과 혼합 되지 않는 방향을 생각했습니다. 이유는 각 채널간에는 상관성이 없고 우연히 데이터상의 상관성이 생겼다고 하면 채널의 순서에서 생기는 무의미한 상관성일 수 있겠다는 생각에서 컨볼류션 연산이 채널방향으로 넘어가지 않도록 했습니다.
그래서 2차원 컨볼류션을 수행하면서 커널의 모양은 1차원 커널을 사용해서 컨볼류션 연산에서 다른 채널과 혼합되지 않도록 했습니다. 마지막 컨볼류션에서는 필터의 계수를 이전 레이어의 데이터 사이즈와 동일하게 만들어서 fully connected network를 각 채널마다 수행한 것처럼 만들어서 특징 백터를 추출했습니다.
이 모델이 초기 모델로 보조 채널 데이터만을 이용해서 글리치 분류가 가능한지 가능성을 보기위한 시도였습니다. 이 모델을 통해서 보조 채널 데이터만으로 글리치 분류가 가능겠다는 가능성을 확인했습니다. 그리고 다 채널 시계열 데이터를 처리하는 딥러닝 모델을 찾아보았습니다. 찾아 보니 의료쪽에 뇌파를 처리하는 BCI(Brain Computer Interface)라는 분야에서 다 채널 시계열 데이터를 처리하는 일반적인 딥러닝 모델에 대한 연구가 활발히 진행되고 있는 것을 발견했습니다.
첫번째 2차원 컨볼루션의 커널 모양을 보시면 1차원 형태로 긴 모양을 하고 있는 것을 보실 수 있습니다. 첫번째 컨볼루션에서 time domain에서 frequency domain으로 변환이 된다고 해석하고 있습니다. 일종의 특정 주파수 성분을 추출하는 메치드 필터를 학습했다고 해석하고 있습니다. 때문에 필터의 길이를 원 신호의 sampling frequency의 절반으로 설정하면 2Hz 이상의 신호 성분을 추출할 수 있다고 논문에서 이야기 하고 있습니다.
이때 일반적인 컨볼루션에서의 커널 사이즈는 인풋 데이터의 채널 N x 3 x 3에 커널의 수 M을 곱하게 됩니다.
또 다른 방법으로 Depth-wise Separable Convolution이 있습니다. 여기서 약간 특이한 컨볼류션 오페이션이 수행되는데 각 채널마다 별도의 컨볼류션을 수행하게 됩니다. 이를 depth-wise convolution이라고 합니다. 이렇게 하면 원래 모양과 동일한 모양을 얻게 되고 여기서 다시 1x1 convolution으로 원하는 모양을 만들게 됩니다.
- bandwidth_test . . . . 5 matches
CPU 입장에서는 로컬 메모리로 인식 되기 때문에 Pinned Host memory를 접근할때 cache를 사용해서 접근하게 된다. 이 때문에 GPU는 '''CPU cache coherency protocol'''[[footnote(Pinned Host Memory는 호스트 메모리를 CPU와 GPU가 같이 사용하게 되는데 실제 사용할 때 CPU는 cache를 사용해서 호스트 메모리의 일부(''cache line'')를 복사해서 사용하게 된다. 이 때 GPU가 DMA를 통해서 메모리를 업데이트 하게 되면 CPU와 GPU가 사용하는 메모리의 값의 불일치가 이러나게 되는데 이것을 해결하기 위한 방법이 필요하게 된다. 보통의 경우 snoopy protocol, directory-based protocol 같은 하드웨어 CPU cache coherency protocol을 사용한다(MSI, MESI, MOESI... etc). 프로그래머가 접근할 수 있는 방법으로는 명시적 캐시 플러시(flush)나 invalidate 명령어를 사용한다.)]]을 사용해서 접근해야 한다.
APU의 경우엔 CPU와 GPU가 물리적으로 동일한 메모리를 Share 하기 때문에 둘 사이의 메모리 접근은 Zero Copy로 이루워진다.
CL_MEM_USE_HOST_PTR or CL_MEM_ALLOC_HOST_PTR로 선언된 메모로 오브젝트('''cl_mem''')의 경우는 clEnqueueMapBuffer 가 리턴해주는 포인터가 일정한 반면,
default memory 설정으로 선언된 메모리 오브젝트의 경우는 clEnqueueMapBuffer가 호출될 때마다 리턴되는 포인터가 일정하지 않다. 런타임에 의해서 그때 그때 변하기 때문이다.(런타임이 메모리를 활당 받아서 디바이스로부터 메모리복사 후 알려줌.)
- batch_normalization . . . . 3 matches
* 작성일: 2020년 3월 11일
* 수정된날짜: 2020년 3월 17일
- bayes_formula . . . . 8 matches
사건 \(A,~B\)가 일어날 확률과
사건 \(A\)가 일어난 상태에서 사건 \(B\)가 일어날 확률을 알고 있으면서
사건 \(B\)가 일어난 상태에서 사건 \(A\)가 일어날 확률을 계산하고 싶을 때 쓰입니다.
[조건부 확률의 활용] 양성반응일때 실제 병에 걸려있을 확률? - 계산편
[조건부 확률의 활용] 양성반응일때 실제 병에 걸려있을 확률? - 이해편
\(A_1,~A_2,~\cdots,~A_n\)이 표본 공간 \(S\)의 파티션일때
- bicycle . . . . 3 matches
GPX 파일에 고도 정보를 추가 해주는 사이트 http://www.gpsvisualizer.com/elevation
127 TPI, 245g(25c), 올라운드, 4000km 마일리지
127 TPI, 260g(25c), 올라운드, 5000km 마일리지
- big_file_copy . . . . 1 match
서버간 파일 복사에도 사용할 수 있다.
- blacklist . . . . 4 matches
= 조선일보 사장 방상훈 =
출생 : 1948년 2월 6일 (서울특별시)
소속 : 조선일보 (대표이사 사장)
가족 : 아버지 방일영, 아들 방정오, 동생 방용훈
- bldc_motor . . . . 1 match
모터라고 하면 가장 흔하게 생각할 수 있는 것이 DC모터 일꺼다. 장난감에 들어가는 모터로 + - 극에 전원만 연결하면 돌아가는..
- bucket_sort . . . . 1 match
break; // 빈값일시 다음 row 로 이동
- c_1_ans . . . . 9 matches
'''해석''' 많은 사람들이 이용하는 주요 도로를 따라 지어지는 새로운 지하철 노선의 공사는 늦어도 3월 19일에는 완공될 것이다.
‘새로운 지하철 노선의 공사는 늦어도 3월 19일에는 완공될 것이다’라는 의미가 되어야 하므로 빈칸 앞의 no later와 함께 쓰여 ‘늦어도 ~까지’의 의미를 완성하는 (A) than이 정답이다.
'''해석''' 스마트폰과 태블릿 기술의 이용이 가능해진 이후로, 사람들은 그들의 메시지와 이메일을 훨씬 더 자주 확인한다.
‘사람들은 그들의 메시지와 이메일을 훨씬 더 자주 확인한다’라는 문맥이 되어야 하므로 ‘자주, 흔히’라는 뜻의 부사 (D) frequently가 정답이다. 참고로 (A) anxiously는 ‘근심하여, 걱정스럽게’, (B) consequently는 ‘그 결과, 따라서’, 그리고 (C) obviously는 ‘명백히, 분명히’의 의미임을 알아둔다.
'''해석''' 일반식과 특별식이 기내에서 제공될 것이지만, 승객들은 적어도 1주일 전에 식사 주문서를 반드시 제출해야 한다.
'''해석''' regular 일반적인, 보통의 serve (음식 등을) 제공하다, 내다 in-flight 기내의, 비행중의 passenger 승객 submit 제출하다 in advance ~ 전에, 미리, 사전에
'''해석''' 많은 학생들이 경력관리에 대한 무료 세미나에 참석하기 위해서 도착했지만, 주최자들은 자리 부족 때문에 그들 중 일부를 돌려보내야만 했다.
guide 안내원, 안내인 artifact 공예품, 가공품 on display 전시된, 진열된 souvenir 기념품, 선물 on sale 할인 중인, 세일 중인
- caffe_installation . . . . 3 matches
Caffe는 대부분의 경우 GPU에서 사용하는 것으로 알고있다. Caffe 컴파일을 위해서 CPU용 BLAS는 그냥 설치하기 쉬운 ATLAS로 설치해두면 편하다.
이제 github에서 Caffe를 받아서 컴파일을 할 수 있다.
python에서 model을 불러와 visualization등을 하기 위해서는 pycaffe를 컴파일 해야한다.
- cluster_install_work . . . . 12 matches
gparted를 사용하면 쉽게 파티션을 나누고 특정 파티션으로 포멧이 가능하다. 여기서는 ext4 파일 시스템을 사용하는 두개의 파티션으로 구성하였다.
'''서버와 클라이언트 설치는 동일하고 사용하는 파일과 설정이 다음.'''
NIS가 사용할 도메인을 설정해준다. 서버와 클라이언트가 동일한 도메인을 사용한다.
/etc/hosts 파일에 사용할 네트워크 구성을 적어준다.
이 파일을 열어 보면
nis 설정파일에 서버 노드의 이름을 설정해준다.
2. 사용자 정보를 컴파일 한다.
nis는 사용자 정보는 컴파일해서 갖고 있는다.
사용자가 추가 되거나 변경 되었을 경우 새로이 컴파일해야 한다.
컴파일하면 도메인에 해당하는 드렉토리가 생성되고 관련 파일이 생성된다.
- cnu_digital_signal . . . . 2 matches
Sampling - 일정한 간격으로 샘플을 취함.
양자화(Quantization) - 크기의 정도를 일정하게 나누고 가장 가까운 크기로 원래 신호를 mapping하는 과정에서 실제 값과의 차이가 발생하게 된다.
- cnu_phd . . . . 1 match
컴퓨터공학과 일반대학원[* https://computer.cnu.ac.kr/computer/index.do] 데이터 및 소프투웨어공학
- config.php . . . . 2 matches
= 일반 설정 =
섹션 제목을 클릭하면 섹션이 접힙니다. 긴 문서일 경우 유용하게 사용할 수 있게 되었습니다.
- cpp_programming_boost_lib . . . . 1 match
RedHat 계열의 리눅스(CentOS)에서는 Boost Library가 개별적으로 지원되는 경우가 없다고 합니다. boost가 패키지 목록에 포함되어 있지 않다면, Windows에 설치 항목에 링크를 따라가 Unix용으로 tar 파일을 받으신 후 소스 설치하셔야 합니다.
- cprogramming_file_inout . . . . 45 matches
#title 파일 입출력
fopen() 함수는 ANSI-C 규정에 준수하는 라이브러리 함수로, 컴파일러에 의해 표준 라이브러리를 사용하여 동작하므로 어플리케이션 수준에서 동작합니다.
다시 말해보면, fopen() 함수는 ANSI-C 규정에 따르는 그 어떤 컴파일러에서라도 사용할 수 있습니다만, open() 함수는 POSIX.1 규정에 따르는 운영체제에서만 사용할 수 있습니다. 따라서 이 둘은 기종간 이식성과 호환성에서 차이가 있습니다. fopen() 함수가 좀 더 호환성이 좋다고 봐야겠죠. POSIX.1 표준을 따르지 않는 운영체제는 많이 있습니다만 ANSI-C 표준을 따르지 않는 C 컴파일러는 없으니까요.
// fopen() 함수로 파일 열기
exit(1); // 모든 파일 닫고, 프로그램 종료
fcloseall(); // 모든 파일 닫기
// 파일 입출력
// 파일 입출력에서는 open, read, write, close 함수가 기본이다.
첫 번째 인자는 읽어들일 파일경로로 파일을 여는데 사용한다.
두 번째 인자는 저장 할 파일경로로 파일을 저장하는데 사용한다.
프로그램은 파일의 내용을 읽어 새로운 파일에 읽는 내용을 복사하는 프로그램입니다.
기능: 파일을 연다.
pathname : 열고자 하는 파일이름
flas : 파일에 대한 제어방법
mode : 생성할 파일에 대한 접근권한
성공: 양의 정수(파일 식별자)
헤더파일
O_CREATE 해당파일이 없으면 파일을 생성한다.
O_EXCL 해당파일이 존재하면 오류를 발생시키고 파일을 열지않는다.
O_TRUNC 해당파일이 존재하면 파일의 길이를 0으로 만든다. 즉, 파일의 내용을 모두 지운다.
- cross_entropy . . . . 4 matches
* 낮은 확률로 발생하는 일에서 더 많은 정보를 얻을 수 있고 빈번하게 발생하는 일에 대해서는 적은 정보를 얻는다.
가능도는 주어진 표본(\(x\))에서 가장 가능한(likely) 모수를 추정하는 척도이다. 가능도(likelihood)를 확률과 비교해 보면, 확률은 모수(parameter)가 특정값(fixed value)으로 정의 되어 있을 때 확률을 계산한다. 반면 가능도는 표본을 통해서 모수를 찾는다. 예로 동전 던지기를 상상해 보자 우리는 일반적으로 동전의 앞면 또는 뒷면이 나올 확률을 1/2로 알고 있다. 그래서 동전을 3회 던져서 앞면이 3번 나올 확률을 1/8이라고 한다. 가능도에서는 이미 던져진 동전의 결과를 보고 동전의 확률이 1/2일 가능도는 얼마인지를 계산한다.
- cscope설정하기 . . . . 6 matches
cscope는 드렉토리에 있는 text에서 함수 정의, 함수 호출, 문자열, 파일 등을 쉽게 찾아주는 프로그램이다.
아래 메트로르 보면 알수 있듯이 c, cpp, cc, h 등의 파일 묶어서 index를 만든다.
아래 메크로를 실행하게 되면 '''cscope.files'''와 '''cscope.out''' 파일이 생성되고 그 이후 부터는 '''cscope 명령어'''만 실행하면 바로 볼 수 있다.
아래와 같이 찾은 문자열을 포함하고 있는 파일들을 찾아 준다.
메뉴와 파일의 이동은 Tab키를 사용하고
find 명령을 이용해서 recursive 하게 모든 파일에 적용 할 수 있다.
- cv_report1 . . . . 1 match
ordfilt2함수를 사용해서 일정 영역 안에서 가장 큰 값을 취하고 취해진 값이 설정한 threshold 이상인 경우의 좌표를 구함.
- cv_report2 . . . . 3 matches
사용한 영상과 일부 코드는 David lowe 교수의 Demo Software : SIFT keypoint Detector[* http://www.cs.ubc.ca/~lowe/keypoints/]를 참조했다.
sift로 추출한 디스크립터로부터 유사도를 측정하여 가장 가까운 점을 찾고 두번째로 가까운 점과의 유사도 차가 일정 수준 벗어나지 않으면 매칭이 느슨한 것으로 판단해서 제거하는 방법으로 정교한 매칭점을 찾았다. 이 과정을 통해서도 완벽한 메칭점을 찾기는 쉽지 않음을 확인 했다.
매칭된 location 정보, 몇 번 수행할지, 어느정도를 inliner로 받아 들일지, stop condition, transform method의 인자를 받아 들여서 최종 trasformation matrix를 output으로 낸다.
- cv_report3 . . . . 1 match
거리에 대한 weight는 모든 pixel에 동일하게 적용되기 때문에 한번만 계산해서 사용하면 된다. 색상에 대한 정보는 기준이 되는 pixel을 중심으로 윈도우를 설정하고 중심 pixel과 차이를 계산해서 weight를 주도록 했다.
- dailynote_24_11_2014 . . . . 1 match
* 하나의 물체에 위의 4가지 힘이 복합적으로 상호 작용하여 물체에 힘을 작용하여 속도 변화를 일으키게 된다.
- dailynote_25_11_2014 . . . . 10 matches
* ePub는 HTML과 CSS릐 일부분을 차용한 오픈된 파일포멧 표준이다.
2007년 부터 기존 전자책 표준을 승계하여 나온 표준이다. 기존의 전자책은 텍스트(txt)에 가까운 원시적인 형태를 갖고 있었고 이를 개선하기 위해서 HTML과 CSS를 도입하여 새롭게 만든 것이다. 표준화가 서양에서 부터 이루워졌기 때문에 2.0.1까지는 세로 쓰기 및 다국어 표시에 제한적이였다. 3.0 이후 버전 부터는 다국어 기능과 CSS3의 일부 기능을 체용하여 문제를 해결하고 있다.
파일의 크기는 TXT > epub > doc 정도이다.
= 일반적인 HTML/CSS와의 관계 =
똑같다. 웹에서 쓰는 HTML, CSS와 구문 및 사용방법이 완전히 똑같다. 애초에 HTML과 CSS를 별다른 변형 없이 필요한 기능만 그대로 가지고 왔기 때문이다. 이 때문에 웹 기반으로는 epub 뷰어를 만들기도 쉽다. 애초에 epub는 zip 파일 안에 HTML, CSS와 전자책에 쓰는 각종 이미지 및 미디어를 내장하고 있기 때문에, zip 파일만 풀어낸다면 웹 브라우저에 그냥 뿌리는 것이 가능하기 때문이다. 실제로 zip 파일을 풀어서 나온 html 파일을 웹 브라우저에서 열면 웹과 비슷한 화면이 뜨는 것을 볼 수 있다.
물론 그 반대는 어렵다. 애초에 HTML과 CSS에서 전자책에 필요한 기능만 가져온 것이 epub이기 때문이다. 일종의 하위 호환격.
- data_mining_weka2 . . . . 1 match
결과는 두 알고리즘 모두 동일한 결과를 보여주었다.
- debian_release_info . . . . 1 match
현재 데비안 stable 배포본은 코드명 squeeze, 6.0.7입니다. 2013년 2월 23일에 릴리스됐습니다.
- dft_fft_fourier_seriees_Transform . . . . 2 matches
시스템이 선형이고 시불변일 때 (LTI : linera time-invariant) 가장 유용한 신호의 표현 방법으로 복소 지수 신호의 집합\({e^{jwn}}\)에 기초하며 '''이산 신간 푸리에 변환'''(DTFT : Discrete-time Fourier Transform) 이라고 한다.
일반적으로 이산 시간 푸리에 변환은 \(w\)의 복소 함수이다. 이것을 직각좌표 형식으로 쓰면 아래와 같다.
- dm365_wdr_driver . . . . 1 match
= 수정 파일 리스트 =
- docker_influxdb . . . . 5 matches
docker-compose.yml파일을 다음 아래와 같이 작성해준다.
다음 아래와 같이 Docker Compose파일을 실행시켜 준다
혹시나 docker-compose.yml 파일을 다른 이름으로 작성했다면 다음 아래와 같이 실행시켜준다.
docker-compose -f {파일명}.yml up -d
실행된 InfluxDB를 접속하기 위해 이미지가 실행된 PC의 아이피와 compose파일에서 적어주었던 포트번호(8086)으로 접속해준다
- docker_mariadb . . . . 1 match
= 메일 서버 =
- docker_redis . . . . 2 matches
과거 램디스크와 같이 파일이나 데이터를 메모리에 올려서 사용하는 DB로 생각할 수 있음.
''/etc/systemd/system/redis.service'' 파일을 생성하고, redis docker container의 실행을 위한 서비스를 아래와 같이 정의했습니다.
- docker_ssh . . . . 3 matches
{{{#!folding Dockerfile 파일 작성
위 도커 파일을 빌드하기 위한 명령은 아래와 같다.
도커 컴포즈의 환경변수는 .env 파일에 설정한다.
- docker_tutorial . . . . 30 matches
도커(Docker)는 2013년에 등장한 새로운 컨테이너 기반 가상화 도구입니다. 도커는 계층화된 파일시스템(AUFS, BTRFS 등)을 사용해 가상화된 컨테이너의 변경사항을 모두 추적하고 관리합니다. 이를 통해서 컨테이너의 특정 상태를 항상 보존해두고, 필요할 때 언제 어디서나(단, Docker가 설치만 되어있다면) 이를 실행할 수 있도록 도와주는 도구입니다. 이 글은 Docker 입문자를 위한 튜토리얼로, 도커의 기본 개념들과 사용법에 대해서 소개합니다.[* http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/]
클라우드와 같이 잘 짜여지고, 잘 나뉘어진 거대한 시스템에서야 그렇다 치더라도 가상 머신은 여러모로 손실이 많은 수단 중 하나입니다. 가상 머신은 격리된 환경을 구축해준다는 데서 매력적이긴 하지만, 실제 배포용으로 쓰기에는 성능 면에서 매우 불리한 도구라고 할 수 있습니다. 당연한 이야기입니다만 일단 운영체제 위에서 또 다른 운영체제를 통째로 돌린다는 것 자체가 리소스를 비효율적으로 활용할 수밖에 없습니다.
어떻게 이런 일이 가능할까요? 원리적인 부분은 이미 좋은 문서들이 있습니다. 한국어로 된 좋은 자료로는 [http://wiki.nacyot.com/documents/deview Deview] 2013에서 김영찬 님이 발표하신 [http://deview.kr/2013/detail.nhn?topicSeq=45 이렇게 배포해야 할까? - Lightweight Linux Container Docker 를 활용하여 어플리케이션 배포하기] 세션과 xym 님이 쓴 [http://spoqa.github.io/2013/11/22/docker-the-cloud.html docker the cloud]를 추천합니다. 하지만 분명한 건 VMWare를 사용한다고 해서 가상화 기술에 빠삭해야하는 것이 아니듯이, Docker 역시 기본적으로는 툴이라는 사실을 이해해야합니다. 제 생각에 도커의 원리를 이해하는 것도 중요하지만, 막상 이 도구를 사용하는 동안엔 컨테이너와 이미지의 차이를 이해하는 게 더 중요하고, [http://wiki.nacyot.com/documents/dockerfile Dockerfile]을 만들어 자신만의 배포 프로세스를 저장하는 법을 익히는 게 더 중요합니다.
각 운영체제 별 Docker의 설치 방법은 공식 홈페이지에 잘 정리되어 있습니다. 제가 사용하는 Ubuntu의 경우에는 Docker에서 제공하는 스크립트 파일 하나를 통해서 원큐에 정말 쉽게 Docker를 설치할 수 있습니다. 가상 머신에서도 설치가 가능하니, 가능하다면 Ubuntu 환경을 사용하길 권장합니다. 네, 글을 쓰는 편의상.
설치만 끝났다면, 이제 끝이 보입니다. 대단해보이지만 정말 별 게 없습니다. 먼저 도커를 시작하면 이미지 개념을 이해할 필요가 있습니다. 처음에 보여드린 예제를 보면 centos 이미지를 다운로드 받고, 이 이미지에 shell을 실행시킵니다. 그런데 여기에 약간의 함정이 있습니다. Docker에서 실제로 실행되는 건 이미지가 아닙니다! 이미지는 추상적인 개념입니다. 실행되는 건 이미지를 기반으로 생성된 컨테이너입니다. 먼저 어떤 일이 일어나는지 확인해보도록 하겠습니다.
docker images 명령어는 현재 시스템에서 사용가능한 이미지 일람을 보여줍니다. 이미지가 어디서 오는지 궁금하게 느껴지실지도 모릅니다. 이미지는 크게 세 가지 방법을 통해서 추가할 수 있습니다.
하나는 처음 예제에서와 마찬가지로 docker pull <이미지 이름>을 통해서 가져오는 방법입니다. 바로 이 명령어를 사용하면 docker.io의 공식 저장소에서 이미지를 다운로드 받아옵니다. 쉘을 활용하는 개발자라면 이런 개념이 낯설지는 않을 것입니다. 리눅스에서 apt-get이나 yum 혹은 gem이나 pip, cpan, npm 같은 명령어를 사용해보셨다면 바로 이해하실 수 있을 겁니다. 이런 유틸리티를 사용해본 적이 없다고 하더라도 마찬가지 개념으로 docker 이미지 파일들을 관리하는 중앙 저장소가 있다고 이해하셔도 무방합니다. 독특한 점은 intsall이 아닌 pull 명령어를 사용한다는 점입니다. 이에 대해서는 개념적으로 VCS(버전 관리 시스템)을 알고 계신다면 추가적인 설명이 필요없겠습니다만, 어쨌거나 단순히 다운로드라고 이해하셔도 현재 단계에서는 무방합니다.
우분투 안에 우분투에 접속하는데 성공했습니다! 짝짝짝. 그런데 앞서 말씀드렸다싶이 이미지에 접속했다는 말에는 함정이 있습니다. 이 말은 마치 가상머신 ssh 프로토콜을 사용해 접근한 것과 같은 착각을 일으킵니다. 이제 새로운 명령어를 하나 배워보도록 하겠습니다. 앞서서 우리가 사용한 사용가능한 이미지들을 확인하는 명령어는 docker images입니다. 이번에 사용할 명령어는 현재 실행중인 컨테이너들을 출력하는 명령어 docker ps입니다. 별도의 쉘이나 터미널을 열고 docker ps 실행시켜보시기 바랍니다.
또한 위의 예제에서는 직접 명령어를 넘겨서 이미지를 컨테이너로 실행시켰습니다만, 보통 이미지들은 자신이 실행할 명령어들을 가지고 있습니다. 예를 들어 레디스, 마리아db, 루비 온 레일즈 어플리케이션을 담고 있는 이미지라면, 각각의 어플리케이션을 실행하는 스크립트를 실행하게되겠죠. 컨테이너는 독립된 환경에서 실행됩니다만, 컨테이너의 기본적인 역할은 이 미리 규정된 명령어를 실행하는 일입니다. 이 명령어가 종료되면 컨테이너도 종료 상태(Exit)에 들어갑니다. 이러한 죽은 컨테이너의 목록까지 확인하려면 docker ps -a 명령어를 사용하면 됩니다. 실제로 쉘을 종료하고 컨테이너 목록을 확인해보겠습니다.
네, 다시 한 번 이야기합니다. 이미지에는 접속한다는 개념이 없습니다. 실제로 실행되는 가상 머신은 항상 컨테이너입니다. 분명 저는 '명령어'를 실행시킨다고 했습니다만, 컨테이너란 격리된 환경에서 특정한 명령을 실행시켜주는 가상 머신과 같은 무언가입니다. 그렇다면 쉘을 실행시키지 않았을 때 이 가상 머신을 조작할 수 있는 방법이 있을까요? 원론적으로 불가능한 것은 아닙니다. 이 부분에 대해서 여기선 다루지 않습니다만, 직접 파일 시스템을 조작할 수도 있고, 리눅스 컨테이너를 조작해 특정 컨테이너에 대해 쉘을 실행시킬 수도 있습니다. 하지만 좀 더 정상적인 방법은 조작이 필요한 컨테이너에 ssh 서비스를 올려서 ssh 프로토콜로 접근하는 방법입니다. 실제 도커로 서비스를 운영하면 이런 부분이 절실할 날이 오겠지만, 일단은 그렇구나 하고 넘어가셔도 무방합니다.
당연히 이미지에는 아무런 변화도 생기지 않습니다. 아주 세속적인 예를 들어보면 윈도우 CD로 윈도우를 설치해서 사용한다고 해서 설치한 윈도우 CD에 어떤 변화가 생기지는 않는 것과 같은 이치입니다. 이미지는 어디까지나 고정된 이미지입니다. 도커에서 이미지는 불변(Immutable)하는 저장 매체입니다. 그런데 도커에서 이미지는 불변이지만 이 이미지 위에 무언가를 더해서 새로운 이미지를 만들어내는 일이 가능합니다. 좀 더 정확히 말하면 컨테이너는 변경가능(Mutabe)합니다. 특정한 이미지로부터 생성된 컨테이너에 어떤 변경사항을 더하고, 이 변경된 상태를 이미지로 만들어내는 것이 가능합니다.
우분투의 패키지 관리자인 apt-get을 통해서 버전 관리 시스템인 Git을 설치했습니다. 여기서 도커는 마치 자신이 VCS인양, 어떤 컨테이너와 이 컨테이너의 부모 이미지 간의 파일의 변경사항을 확인할 수 있는 명령어를 제공합니다. 마치 git diff 명령어로 프로젝트의 변경사항을 확인하듯이, docker diff 명령어로 부모 이미지와 여기서 파생된 컨테이너의 파일 시스템 간의 변경사항을 확인할 수 있습니다.
브라보! 이번에는 도커 이미지의 생명주기를 배웠습니다. 도커 이미지를 pull로 받아오고 commit 으로 파생된 이미지를 만들고 rmi 명령어로 삭제까지 해보았습니다. 컨테이너와 이미지의 생명주기만 이해하고 나면 도커의 80%는 이해한 거나 다름 없습니다. 도커를 통해서 하는 일은 거의 다 이 이미지와 컨테이너 개념으로 커버가 가능합니다. 이제 남은 일은 자신에게 필요한 이미지를 만들고 이 이미지를 통해서 컨테이너(가상 머신)를 실행하는 일입니다. 물론 이제 기본적인 개념들을 배웠으니 오픈된 중앙 저장소격에 해당하는 Docker Index에서 이미 만들어져있는 다양한 이미지들을 활용할 수도 있습니다.
멀리 돌아왔습니다. 앞서서 도커 이미지를 추가하는 방법은 크게 세 가지가 있다고 이야기했습니다. 먼저 pull을 사용하는 방법은 이미 앞에서 다룬 바 있습니다. 그리고 컨테이너의 변경사항으로부터 이미지를 만드는 법에 대해서도 소개했습니다. 이러한 방법들은 매우 좋기는 하지만, 어딘가 2% 부족합니다. 이를 보완해주는 Dockerfile이라고 불리는 도커 이미지 생성용 배치 파일이 있습니다.
Dockerfile은 특정한 이미지를 출발점으로 새로운 이미지 구성에 필요한 일련의 명령어들을 저장해놓는 파일입니다. 미리 만들어둔 docker-moniwiki라는 프로젝트를 통해서 간단히 Dockerfile을 설명하고, 실제로 모니위키 어플리케이션을 가진 이미지를 생성하고 컨테이너를 통해서 실행시켜보도록하겠습니다. 먼저 프로젝트를 clone 받습니다.
이 프로젝트에는 3개의 파일이 있습니다만, 실질적으로 Dockerfile 하나밖에 없다고 보셔도 무방합니다. 전체 파일 내용은 다음과 같습니다.
보시는 바와 같이 Dockerfile은 모니위키를 설치하는 일련의 과정과 서버를 실행하는 명령어로 구성되어 있습니다. 각각의 부분을 간략히 살펴보겠습니다.
이미지 아이디가 빌드 과정에서 출력되는 아이디와 같은 것을 알 수있습니다. 필요한 경우 중간 이미지에 접근하거나 직접 중간 이미지로부터 다른 이미지를 생성하는 것도 가능합니다. 정말 좋은 소식은 도커는 이러한 빌드 순서를 기억하고 각 이미지를 보존하기 때문에 같은 빌드 과정에 대해서는 캐시를 사용해 매우 빠르게 빌드가 가능하다는 점입니다. 실제로 Docker 파일을 만드는 과정에서는 많은 시행 착오를 겪게되는데, 중간에 빌드가 실패하더라도 성공했던 명령어까지는 거의 시간 소모 없이 빠르게 진행되도록 설계되어있습니다.
빌드 자체는 꽤나 번거로운 일입니다. 도커의 가상화가 굉장히 빠르다고 해도 어플리케이션 실행환경을 구축하는 일은 상당히 시간도 많이 걸립니다. 더욱이 빌드 자체는 완벽히 '재현 가능'하지 않습니다. 하지만 이렇게 Dockerfile을 통해서 배치화를 시켜두면 Dockerfile이라는 정말 작은 파일 하나로 어플리케이션 배포 환경을 구축할 수 있다는 장점이 있으며, 또한 쉽게 유연하게 사용할 수 있습니다. 아주 흥미로운 이야기를 하나 해드리자면 Docker 생태계에 있는 오픈소스 어플리케이션들은 아예 Dockerfile을 프로젝트에 포함하고 있습니다. 대표적으로 도커 모니터링 툴인 Shipyard가 있습니다. 여기서 제공하는 Dockerfile을 빌드해서 이미지를 만들고, 이 이미지로 컨테이너를 가동하면 바로 shipyard 어플리케이션을 사용할 수 있습니다. 전율이 느껴지시나요?
단순히 생산성을 넘어, 도커의 매력은 상상력을 자극한다는 점입니다. 특히나 서버 자동화가 화두인 요즘에 인프라스트럭쳐가 코드로 변해버리는 묘한 체험을 하게 해줍니다. 인프라스트럭쳐가 코드가 되면 뭔가 신기한 일들이 벌어집니다. 이런 상황에서 아직까지 낯설게 느껴질지도 모르는 개념이고 툴입니다만 직접 설치하고 이것저것 해보다보면 저처럼 분명 반하실 거라 생각합니다 :)
- dsp_report10 . . . . 1 match
\(|H_a(j\Omega)|^2=\frac{1}{1+64\Omega^6}\)일 때, 아날로그 필터의 시스템 함수 \(H_a(s)\)를 구하라.
- dsp_report7 . . . . 1 match
\(\text{ROC}_1 : 1 < |z| < \infty\) 이 경우 극점이 모두 \(\text{ROC}_1\)의 내부에 있음으로 표1.[* attachment:img.bmp?width=400px '''표''' 1. 일반적인 z-변환 쌍]을 참조하면 아래의 식을 얻을 수 있다.
- dsp_report8 . . . . 3 matches
DTFT, DFS 또는 역 DFS를 계산하지 않고 에일리어싱 공식을 이용함으로써 \(\tilde{x}_2(n)\)을 구할 수 있다.
그리하여 x(4)는 x(0)으로 에일리어싱되고, x(5)는 x(1)로 에일리어싱된다. 따라서
- earthquakeWithAI . . . . 4 matches
내용은 큰 지진이 발생후 수개월 동안 발생하는 여진에 관해서다. 주 지진에 의한 직접적인 피해도 있지만 더 걱정이 되는 것은 주 지진에 의해서 약화 된 구조물들이 여진에 의해서 무너 지면서 발생하는 피해다. 이 때문에 구조작업이나 피해복구에 상당한 어려움을 격고 있다. 과학자들은 여진의 크기와 시기를 예측하기 위한 많은 연구를 진행해왔다. 그럼에도 예측성능이 그리 좋지 않았는데 구글과 하버드 연구팀이 딥러닝을 적용해서 예측성능을 획기적으로 높일 수 있는 방법을 제안했다. 기존 “Coulomb failure stress change.”로 알려진 가장 유용한 모델보다 좋은 성능을 내는 것으로 보고 했다. 정확도를 0에서 1사이로 했는때 1은 완벽하게 예측한다고 하면 0.5는 랜덤한 예측을 의미한다. 기존 Coulomb모델은 0.583으로 랜덤 예측보다 약간 좋은 성능을 보이는 반면 새로운 AI 시스템은 0.849를 기록했다.[1]
{{{대만 IT 소식지 디지타임즈는 대만 국립 응용 연구소(National Applied Research Laboratories, NARLabs) 지진 공학 연구센터가 2017년 12월 28일에서 30일까지 대만에서 열린 'Future Tech 2017' 전시회에서 인공지능 기반 지진 조기경보 시스템을 선보였다고 보도했다.
이 연구소가 선보인 인공지능 기반 지진 조기경보 시스템은 인공지능 딥 러닝 기술을 사용, 축적된 지진 데이터를 바탕으로 지진 예측의 정확성을 높인 것이 특징이다. 지면에 설치된 센서를 통해 사람이 느낄 수 없고 매우 빠르게 전파되는 미세 지진(microseismic)의 P파(지진파의 일종)를 감지, 3초 이내에 지진 발생 지역과 진도 규모를 예측할 수 있다.
- embaded_nand_flash_memory . . . . 6 matches
- byte 혹은 word 단위로 읽고 쓸 수 있는 NOR flash에는 없는 개념이다. 즉 일기 쓰기가 byte단위로는 불가능하기 때문에 driver에서 이를 고려하여 주어야 한다.
1. Bad Block Marking : 특정 블록이 Bad block일 경우 한 Block 안의 첫 page 혹은 마지막 page의 OOB에 이를 표시함.
- BBT를 만들어 놓으면 특정 block의 bad 여부를 빨리 확인할 수 있지만, BAD block 데이터가 OOB의 데이터와 항상 sync.가 되도록 주의하여야 하며, BBT를 기록하려는 block이 BAD block일 경우 어떻게 처리해야 할 지 등도 고려하여야 함.
- NAND는 NOR와 달리 읽기 횟수에도 제한이 있다. NAND에서는 매번 특정 블럭을 읽을때마다 해당 정보를 저장하는 전하가 약해진다. (물론 정보를 잃은 block은 erase후 다시 사용가능하다) 따라서 읽기 전용 파일이라 하더라도 해당 정보를 너무 여러번 읽어 데이터가 지워지기 전에 다른 곳으로 옮겨서 저장하는것을 고려하여야 한다. 또한 전체 파일 시스템 내에 읽기 전용 블록이 고정되어 있을 경우, 쓰기 가능한 영역에 erase가 집중되어 해당 영역의 수명이 짧아지는 문제도 발생할 수 있다(NOR도 마찬가지). 따라서 NAND용 flash file system은 설계 시 읽기 전용 블록의 읽은 횟수를 count하여 데이터가 유실되기 전에 다른 블록으로 옮겨 줌으로써, 데이터의 유실을 막고 flash erase가 읽기 쓰기 영역에만 집중되는 것을 피하도록 설계되어야 한다.
- NAND flash를 부팅 장치로 사용하는 경우 부트로더와 OS 영역은 일반적으로 file system의 관리를 받지 못하는 영역으로, flash의 읽기 수명이 해당 제품의 예상 수명보다 짧을 경우에는 해당 영역을 주기적으로 지운 후 다시 기록하여 주거나, 부팅 실패시 backup 영역에서 부팅을 재시도하도록 하는 등의 대책을 세워야 한다. 이는 해당 시스템의 NAND controller와 부트로더의 구현에 따라 적절히 설계되어야 한다.
- energy_model_based_restrict_boltzmann_machines . . . . 4 matches
가 될 것이며, 에너지 모델에서 에너지의 최저점은 연관성이 제일 높은 배열이므로, 모든 공간에서 정의된 에너지함수에 대해서 (x)의 에너지는 다음과 같다.
다시 언급하자면, 어떠한 한 거시상태(T, V, N)에 대해서 수 많은 미시상태들이 존재하며 각각의 미시상태를 s라고 하고, 그 중 \(i\)번째의 미시상태를 \(s_i\)라고 했을 경우, 결국 우리가 알고 싶은 것은, 이 기체가 과연 어떤 미시상태로 있을까 하는 것이다. 이를 계산하기 위한 가상의 개념이 앙상블(ensemble)이다. 한 거시상태를 만족하는 무수히 많은 미시상태의 집합이라고 이해할 수 있는데, 이를 이용하여 확률을 계산 할 수 있다. 결국 한 거시상태 Macro(T, V, N)의 가능한 미시상태들 {s1, s2, ....}에 대해서, 미시상태의 에너지가 {1, 2, ....} 일 경우, 이 거시상태가 \(i\)번째 미시상태로 존재할 확률 \(p(s_i)\)는 다음과 같다.
어떠한 배열 v에 대해서 에너지 함수 E(v)가 있다고 가정해보자. 가능한 모든 배열의 집합 V = {v1, v2, ...}에 대한 에너지 \({E(v_1), E(v_2), ...}\) 가 에너지 함수에 의하여 계산이 가능하며, 이를 위에서 언급한 미시상태로써의 앙상블을 구상하였을때, 이 배열이 V의 i 번째 배열일 확률은 앙상블의 볼츠만 분포를 따른다고 볼 수 있다. (실제 물리학적 수치가 아니므로 편의를 위해서 β = 1 로 단순화 했을 경우)
개의 상태에 대해서 연산을 해야하며 이는 절대 쉬운 일이 아님을 직감할 수 있다. 하지만 여기에 BM에 대한 RBM의 장점이 있는데, 바로 BM에서 restriction을 추가함으로써 “contrastive divergence algorithm”
- error_zlib_h . . . . 1 match
컴파일시 zlib.h: No such file or directory 와 같은 에러 메세지가 낳을 경우 처리 방법에 대해서 기술 한다.
- etri_LLM . . . . 1 match
attachment:lecture.ipynb (일반 기계학습 이론)
- factorized_vae_and_annealed_vae . . . . 7 matches
* 작성일: 2019년 10월 7일
''Factorized Variational Autoencoders for Modeling Audience Reactions to Movies''(CVPR 2017) 일명 '''factorized variational autoencoders (FVAE)'''[* http://zpascal.net/cvpr2017/Deng_Factorized_Variational_Autoencoders_CVPR_2017_paper.pdf]논문을 리뷰한다.
텐서 인수 분해 (Tensor factorization) 방법은 Recommendation problem를 풀기 위한 단일 모델중 가장 좋은 알고리즘으로 알려져 있다.
먼저 데이터에 대해 살펴보자. 이 문제는 '''사용자'''와 '''상품'''이라는 두 가지 요소가 존재한다. 사용자 \(u\)가 상품 \(i\)를 얼마나 좋아할지를 나타내는 것이 rating \(r_{ui}\)라 하자. 이때, 이 rating은 Netflix처럼 1부터 5 사이의 숫자일수도 있고, 아마존이나 페이스북처럼 "좋아요"의 클릭일 수도 있다. 전자의 경우는 사용자가 얼마나 이 상품을 좋아하는지 '''명시적으로''' 나타냈기 때문에 explicit feedback이라 부르며, 후자의 경우는 사용자가 해당 상품을 좋아했는지 싫어했는지 표현을 직관적으로 하지 않으므로 implicit feedback이라고 한다. 지금 사용하는 실험 모형에서는 explicit feedback이고 noise가 없다고 가정하겠다. 대략 아래와 같은 방식으로 matrix를 표현하자. [* http://sanghyukchun.github.io/73/]
'''Matrix Completion''' 문제를 풀기위한 방법은 여러가지가 있을 수 있는데 단일 모델로 가장 우수한 성능을 보이는 것이 '''Matrix factorization'''이다.
- fastapi_project . . . . 8 matches
= 파일 전송 서버 =
# 파일 리스트 초기화
# 일 폴더 반복
# 파일 반복
# 파일 이름에서 날짜와 시간 추출
# 파일 날짜와 시간이 시작 날짜와 끝 날짜 사이에 있는지 확인
# 파일 경로 추가
# 클라이언트에게 전송 후 zip 파일 삭제
- fft_signal_processing . . . . 3 matches
엄밀히 말하면 FFT는 "Discrete Fourier Transformation"(DFT)[* https://sanghyu.tistory.com/23?category=1120070][[footnote( [:fpga_fast_fourier_transform DFT C언어 코드])]]구현을 위한 최적화된 알고리즘 입니다. 신호는 일정 시간 동안 샘플링되어 주파수 성분으로 나뉩니다. 이러한 구성 요소는 각각 고유한 진폭 및 위상을 갖는 개별 주파수에서 단일 정현파(사인파) 입니다. 이 변환은 다음 다이어그램에 설명되어 있습니다. 측정된 기간 동안 신호에는 3가지 별개의 주된 주파수가 포함 됩니다.
Spectrogram을 그리는 방법은 여러가지가 있을 수 있다. Wavelet을 이용한 방법도 있고 STFT를 이요한 방법도 있다. STFT의 magnitude를 db스케일로 변환해서 그리기도 한다. [* https://sanghyu.tistory.com/37]
- fftw_tutoral . . . . 2 matches
= 컴파일 =
컴파일 옵션은 다음과 같다.
- filesystem_yaffs_jffs2 . . . . 33 matches
리눅스에서 사용하는 파일 시스템에 대한 조사.
임베디드 환경에서 nand에 파일 시스템을 올리려고 할때 사용 가능한 jffs2 & yaffs에 대한 조사
임베디드 리눅스 장비에서 램디스크를 이용하여 푸트 파일 시스템을 구현 하였을 경우에는 보드 동작 중에 파일로 기록된 내용이 전원이 꺼짐과 동시에 소실된다. 기록된 내용을 연구 저장 하기 위해서는 일반적으로 플래시 메모리에 기록하여야 한다.
플래시 메모리를 리눅스의 루트 파일 시스템으로 사용하기 위해서는 MTD (Memory Technology Devide) 블록 디바이스 드라이버를 사용하여야 한다.
블럭형은 플래시를 파일 시스템에서 접근하게 한 것이다. 단연히 이 장치파일은 응용 프로그램에서 직접 접근하면 곤란하다. mount 명령을 통해서 접근 한다.
jffs2 파일 시스템 이미지를 만들기 위해서는 mkfs.jffs2 프로그램이 필요하다.
1. mtd-snapshot 파일이 필요
1. mkfs.jff2 실행 파일이 있음을 확인.
== jffs2 파일 시스템 이미지 생성 ==
NAND Flash에서 사용을 목적으로 만들어진 파일 시스템으로 YAFFS 파일 시스템의 업그레이드 버전이다.
== Yaffs2 파일 시스템 소스 구하기 ==
소스 파일은 YAFFS 프로젝트 그룹에서 구할 수 있다.
위 링크에서 받은 소스 util을 컴파일 해서 mkyaffs2image를 얻을 수 있다.
== Yaffs2 파일 시스템 소스 컴파일 하기 ==
git으로 얻어온 소스 파일을 보면 patch-ker.sh라는 패치 스크립트가 있다.
패치 스크립트를 실행하게 되면 자동으로 yaffs2 파일 시스템이 추가 되는데 사용 법은 다음과 같다.
c/l : 소스 파일을 카피할 것인지 링크를 만들 것인지 결정
s/m : 소스 파일의 버전을 결정한다. single or multi version
* Linux-2.6.32 버전에서 single 버전이 컴파일 되지 않음
* multi version 컴파일시 ''moduleconfig.h'' 파일이 없다는 에러 발생.
- flask . . . . 3 matches
궁극적으로는 연구소에서 진행하려고 하는 전직원 식사 이벤트를 진행하는 것에 대한 웹페이지를 어떻게 할까? 하는 생각에서 시작하게 되었는데 생각보다 일이 복잡하여 정리를 하면서 진행하겠다.
신청 페이지는 구글 폼을 사용할까 한다. 구글 폼에서 신청을 받고 신청 받은 양식을 csv 파일로 다운 받아 서버에 넣고 그걸 데이터 베이스에 저장하고 진행에 관련한 일련의 로그 역시 데이터 베이스로 저장할 계획이다. 데이터 베이스는 저장하고 관리해야 할 데이터의 크기나 양이 적을 것으로 예상 되어 sqllite3을 사용하려고 한다. 이와 관련해서는 [:python_chat_program 이전 쳇팅 프로그램 작성]에 관련 글이 있어서 참고 하려고 한다.
- food_beef_treatment . . . . 4 matches
한국에서 도축되는 쇠고기도 일주일에서 열흘간의 시간을 두고 소비자에게 전달 된다.
과거 냉장고가 없었던 시절에는 돼지고기나 쇠고기를 도살한 뒤 2~3일간 실온에 뒤었다 먹었다고 한다.
이런 이유로 일반 가정에서하기엔 힘이 든다.
- fpga_fft_structure . . . . 1 match
* 입력신호는 동일클럭에 메모리로 저장 됨.
- fpga_fifo_core_gen . . . . 1 match
읽기와 쓰기의 클럭을 설정할 수 있는데 읽기와 쓰기를 동일 클럭으로 묶어서 쓸 수도 있고 독립적으로 설정하여 사용 할 수도 있다.
- fpga_index . . . . 1 match
* [:fpga_ucf_ex UCF 파일 문법 설명]
- fpga_test_guide . . . . 5 matches
컴파일이 되면 '''app'''라는 실행 파일이 생성 되는데 소스는 ''app_xbmd.c'' 입니다.
fft_loader() 파일로 부터 계산할 값을 읽어 들이는 함수, size변수에 읽어 드린 파일의 사이즈를 반환합니다.
fft_out() 함수는 메모리에 있는 값을 파일로 출력하는 함수.
- fpga_tutorial . . . . 4 matches
위 두개의 모듈은 동일한 결과를 보여준다.
''둘의 차이는 무엇일까?''
'''reg에 값을 변경하는 일들은 always 구문 안에서만 이루워 진다. '''
일반적인 C 프로그램에서는 배열과 메모리를 특별히 구분하지 않지만 Verliog에서 메모리라는 것이 따로 존재한다.
- fpga_ucf_ex . . . . 4 matches
############################################## # "#" 도형은 주석문자 입니다. 이 예제 파일을 사용하려면, 필요한 규격을 찾아서, 행의 시작에 있는 주석#
# 표기 용 문자(#)를 지우시길 바랍니다. 만일 필요하다면 당신의 디자인에 맞게 행의 내용을 수정하십시오.
# 만일 여러분이 path(경로)의 timing을 무시할 수 있다면, Timing Ignore(TIG)을 사용하시오. 주의 사
# 만일 FF clock-enable이 multi-cycle path의 모든 flip-flop에 사용이 되면, clock enable
- git_client_user_guide . . . . 13 matches
''ssh-keygen -t rsa'' 라는 명령으로 본인이 사용하는 컴퓨터의 ssh 공개키를 생성해서 관리자[[footnote(관리자 메일 : iou78@nims.re.kr)]]에게 보내주고 공개키 등록을 요청해야 한다.
위 명령어를 수행해서 공개키를 생성하게 되면 '''id_rsa''', '''id_rsa.pub'''라는 파일이 생성이 되는데 id_rsa는 본인의 홈 드렉토리 아래 .ssh 폴터에 넣어두고 id_rsa.pub는 관리자에게 보내주면 됨.
* git 서버 접속을 위한 '''config''' 파일 생성
.ssh 드렉토리 아래 config라는 파일을 생성한다.
'''config 파일 내용'''
지금 git의 상태를 알려준다. 어느 브렌치에서 작업을 하고 있고 수정된 파일이 있는지등 현재 상태를 알려줌.
파일을 수정하고 수정한 파일을 로컬 저장소에 저장하기 위해서는 '''git add''' 명령으로 수정된 파일의 staged 상태로 변화 시켜야 한다.
'''git commit'''이라는 명령으로 staged 상태에 있는 파일들을 하나의 revision으로 저장하게 된다.
'''git add''' 명령으로 staged상태로 전이 되지 않은 파일들은 commit 명령에 적용 되지 않고 revision에 들어가지 못 한다.
'''git add'''명령으로 파일을 staged 상태로 만들었다. 하지만 그 파일을 다시 unstaged 상태로 돌리고 싶을때가 있을 것이다. 이럴때 사용할 수 있는 명령이다.
- google_tensorflow . . . . 3 matches
구글이 2015년 11월 11일 자신들의 머신러닝 라이브러리를 공개했다.
설치 방법은 바이너리를 받아서 바로 설치하는 방법과 소스코드를 받아서 직접 컴파일하는 방법이 있다.
여기에서 설명하고 있는 방법은 소스코드를 받아서 컴파일하는 방법에 대해서만 다룬다.
- google_tersorflow_installation . . . . 6 matches
구글이 2015년 11월 11일 자신들의 머신러닝 라이브러리를 공개했다.
설치 방법은 바이너리로 설치하는 방법과 소스를 받아서 직접 컴파일하는 방법이 있다. 본인은 후자인 소스를 받아서 컴파일하는 방법을 선택했다.
이렇게 컴파일을 하고 나면 output 디렉토리에 bazel 실행파일이 생성된걸 확인할 수 있다.
bazel실행 파일을 본인의 bin폴더에 복사하던지 환경변수 PATH에 bazel의 경로를 추가하도록 하자.
- grad_cam . . . . 14 matches
* 작성일: 2019년 9월 28일
* 수정된날자: 2020년 2월 13일
초기 인공신경망 및 딥러닝에서는 네트워크 모델을 블랙박스로 표현하며 해석불가능한 것으로 치부했다. 이때문에 Deterministic한 해석을 하는 사람들로 부터 공격을 받았다. 하지만 더 이상 네트워크 모델은 블랙박스가 아니다. 딥러닝의 역사가 길지 않은 것을 감안하면 비교적 오래 전부터 네트워크 모델과 그 모델의 결과 도출 과정을 설명하려는 연구(Zeiler, Fergus et al., 2013)[* M. D. Zeiler and R. Fergus, “''Visualizing and understanding convolutional networks''”, in European conference on computer vision. '''Springer''', 2014 <https://arxiv.org/abs/1311.2901>][* http://cs231n.github.io/convolutional-networks/]는 꾸준히 있어왔다. 여러 가지 시도중 CNN기반으로 Multi-Class Classification의 Prediction의 원인(근거)을 해석하는 방법으로 '''GAP(Global Average Pooling)'''[* ''Min Lin, Qiang Chen, Shuicheng Yan.'' '''"Network In Network"'''. 4 Mar 2014. <https://arxiv.org/pdf/1312.4400.pdf>]를 도입해서 Prediction에 기여를 한 feature map을 계산하는 연구인 CAM(Class Activation Mapping)[* ''Bolei Zhou et al.'' '''"Learning Deep Features for Discriminative Localization"'''. CVPR (2016) <http://cnnlocalization.csail.mit.edu/Zhou_Learning_Deep_Features_CVPR_2016_paper.pdf>]과 이로부터 파생되어 GAP구조를 제거하고 일반화한 '''Grad-CAM'''[* ''Ramprasaath R. Selvaraju ea al.'' '''"Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization"''', (ICCV), 2017, pp. 618-626 <http://openaccess.thecvf.com/content_ICCV_2017/papers/Selvaraju_Grad-CAM_Visual_Explanations_ICCV_2017_paper.pdf>][* <https://arxiv.org/pdf/1610.02391.pdf>]과 이를 더욱 발전시킨 '''Grad-CAM++'''[* ''Aditya Chattopadhyay'', ''Anirban Sarkar'', "'''Grad-CAM++: Improved Visual Explanations for Deep Convolutional Networks'''", <https://arxiv.org/pdf/1710.11063.pdf>]에 대해서 알아보고자 한다.
일반적인 CNN 구조에 대해서 생각해 보자. CNN은 입력으로 받은 데이터를 Convolution layer와 pooling layer를 반복하면서 feature map을 만들고 이렇게 추출된 feature map을 Flatten과정을 거쳐 FC(Fully Connected layer)로 넘기고 softmax를 통해 어느 클래스에 해당하는지 확률값을 얻어 내는 구조를 갖는다.
CAM 논문에서는 일반적인 CNN 구조의 Flatten 부분 부터 이후 과정을 GAP로 변경한다. GAP는 마지막 Convolution layer의 출력인 각 feature map의 평균값을 계산하여 하나의 벡터로 만들어준다. 아래 그림은 3x3 feature map이 3장 있을 경우이다.
* \(F_k=\sum_{x,y} f_k(x,y)\)이므로, \(S_c = \sum_kw_k^c\sum_{x,y} f_k(x,y)\)이 된다. \(F_k\)는 평균이라고 했기 때문에 전체 픽셀의 수로 나눠줘야 하지만 실제 구현에서 모든 경우 픽셀의 수는 동일하기 때문에 나누기는 생략 했다.
attachment:CAM.png?width=650px&align=center&title='''[[br]]이미지 출처''': ''Learning Deep Features for Discriminative Localization (일명 CAM 논문)''
이러한 단점을 보완하고 CAM을 일반화하여 CNN뿐만 아니라 다양한 네트워크 모델에 적용 가능한 Grad-CAM에 대해 알아보자.
위 그림을 CAM과 비교해 보면, Convolution layter를 통과해서 만들어진 feature map을 '''A'''로 표현했다 개별 feature map은 \(A^k\)로 표현 할 수 있다. 이는 CAM 구조와 동일하다. (CAM에서는 k번째 feature map \(A^k\) 를 \(f_k(x,y)\)로 표현했고 Prediction \(y^c\)는 \(S^c\)로 표현했다.)
feature map '''A'''를 목적에 맞는 다양한 네트워크 모델의 입력으로 사용했다. 이때 네트워크 모델을 GAP를 사용했다면 CAM과 동일한 네트워크를 갖는다.
식 (12)를 \(w_k^c\)에 대해서 정리하면 식(7)을 얻을 수 있고 이후 과정은 동일하다.
아래 그림에서 검은 영역이 객체 영역이라면 식 (10)에 식 (13)을 대입해서 계산하면 \(w_1^c = 15\), \(w_2^c = 4\), \(w_3^c = 2\)이 된다. 각 weight를 \(A^k\)에 곱해서 더하고 가장 큰 pixel이 1이 되도록 조정하면 아래 그림의 첫번째와 동일한 결과를 얻을 수 있다. 이 것이 Grad-CAM 방식의 Saliency map \(L^c\)이다. Grad-CAM++에서는 이를 보완하기 위해서 \(\alpha\)를 도입해서 weighted sum을으로 weight \(w_k^c\)를 구해서 두번째 결과 처럼 보정해준다.
* Grad-CAM은 CAM과 동일한 결과를 내어주며 GAP 없이 gradient를 통해서 weight를 계산하기 때문에 마지막 convolution layer뿐만 아니라 중간 레이어에서도 계산이 가능하다.
- gw_ml_review . . . . 1 match
이 논문에서는 Simulated NR Data에 Noise를 단계적으로 입혀 트레이닝 시키고 이것을 통해서 Heavy noise 속에 들어있는 중력파 시그널의 유무를 Classification하고 그 시그널의 Parameter를 Prediction하는 일을 진행하였다.
- hawkes_process . . . . 2 matches
포아송 프로세스의 기본 전제는 모든 구간에 대해서 \(\lambda\)가 고정이라고 가정한다. 이 가정에 의해서 서로 독립인 두 사건 A, B 구간의 발생 빈도 \(N(A) \sim \int_A \lambda(t)dt\) 와 \(N(B) \sim \int_B \lambda(t)dt\)가 동일한 포아송 분포를 따른다.
지금까지 일도량, 분포가 변량이 하나인 경우에 대해서 알았다면, 다변량에 대해서 알아보자.
- hdf5 . . . . 6 matches
= 파일 생성 및 읽고 쓰기 =
간단하게 파일을 생성하고 읽고 쓰는 방법에 대해서 기술한다.
기존에 파일이 있거나 신규로 생성하거나 경우에 따라서 파일을 오픈하는 옵션이 달라진다.
옵션에 따라서 파일의 생성, 읽고, 쓰기 기존에 있던 파일에 덮어 쓰기 및 추가 등을 할 수 있다.
- history_computer . . . . 6 matches
== 1673 - 라이프니츠(독일) ==
* 1초 5000회의 덧셈연산, 두 숫자를 3/1000초에 곱셈(마크-I 보다 300배 빠름) 내부기억장치가 없는 계산 순서를 지시하는 프로그램을 배선판에 일일이 배선하는 외부프로그램 방식을 채택하였기 때문에 배선판 교체 작업과 계산 명령을 사람이 직접해야 함.
* 컴퓨터가 급속도로 보급 되었고, 시분할 시스템이 실현되었으며 동일 기종간 호완성이 가능하게 되었으면 통신회선을 이용한 실시간 처리 방식 도임.
* 일관처리 방식(일정시간 동안 처리해야 할 업무를 모았다가 한꺼번에 처리하는 방식)이 실시간 처리 방식으로 변경 됨.
- homebrew . . . . 6 matches
로 사용할 컴파일러를 설정해서 라이브러리를 설치해야 컴파일러에서 라이브러리를 갖다가 쓸 수 있다.
'''/usr/local/bin 에 있는 컴파일러 리스트에 있는 명령어 기준으로 설정 가능하다.'''
컴파일러와 연동해서 라이브러리 설치하는 방법은 아래와 같다.
이렇게 하면 소스를 받아서 지정된 컴파일러로 재컴파일해서 설치 한다.
- hub_gardening . . . . 1 match
== 일지 ==
- iEEG_seizure . . . . 11 matches
EEG 데이터는 fif, edf 파일 포멧으로 저장되어 사용되는데 mne python library를 통해서 다양한 처리가 가능하다.
파일을 읽어서 AutoEncoder를 작성한 프로젝트를 통해서 필요한 부분만 알아보자.
== 파일 읽기와 정보 얻기 ==
edf 파일을 열기 위해서는 '''mne.io.read_raw_edf''' 가 필요하다. 나머지는 신호처리와 시스템에서 파일 정보를 얻어 오기 위해서 사용한다.
파일의 위치와 파일명을 알고 있다면 바로 파일만 읽으면 되겠지만 특정 폴더에 있는 파일을 모두 처리하기 위해서는 아래와 같이 파일 리스트를 작성하는 것이 편하다.
edf파일을 하나 읽었다면 어떤 내용을 담고 있는지 확인해보자.
- index_2010 . . . . 3 matches
= [:work2010_list 업무일지] =
[:Kernel%EC%BB%B4%ED%8C%8C%EC%9D%BC%ED%95%98%EA%B8%B0 Kernel 컴파일하기]
[:programming_sh_copy 쉘 프로그램 예제 조건에 따른 파일 생성] ||
- index_2012 . . . . 3 matches
= [:work2012_list 업무일지] =
== [:linux_command_find find grep 명령을 사용한 파일 찾기] ==
* [:programming_sh_copy 쉘 프로그램 예제 조건에 따른 파일 생성]
- index_2016 . . . . 2 matches
5. [:make_clock_skew_detected make 컴파일 오류 Clock skew detected 해결 방법]
||1. [:linux_iconv 파일의 언어설정 변경 iconv 설명]
- index_2023 . . . . 2 matches
[:pyinstaller Pyinstaller를 이용한 실행파일 만들기]
[:big_file_copy 대용량 파일을 복사하는 효과적인 방법]
- ipnc_factory_reset . . . . 1 match
소프트웨어로 GPIO입력을 받아서 카메라 설명 화일을 초기화 시키고, 리붓을 수행하는 기능을 구현한다.
- iptables_cross . . . . 3 matches
= 소스 다운로드 및 컴파일 =
confiuration을 수행 합니다.( arm-linux 로 컴파일 하기 위한 configuration 하기 )
Make를 이용하여 컴파일 하기
- iterative_solver . . . . 7 matches
설치 하기 위해서는 make.inc 파일을 수정해야 한다고 하는데 make.inc.xxxx 샘플을 수정해서 만들 수 있다.
사용할 BLAS 패키지에 따라서 make.inc 파일의 내용이 다름을 짐작할 수 있다.
acml, atlas, goto, macos, mkl-gcc, mkl-icc, mkl-ilp64, mkl-shared등 총 8가지 make.inc 파일이 있다.
여러 가지 make.inc.xxx 파일로 컴파일을 시도 해보았는데 실제로 성공한 make 파일은 make.inc.mkl-icc 였다.
1. mkdir build #임의의 장소에 폴더를 생성 컴파일을 수행할 장소가 된다.
- jobTemplate . . . . 1 match
= 1월 1일 =
- julia . . . . 2 matches
그런 다음 ''generate'' '''Project_name'''을 실행하게 되면 project가 생성되면서 Project.toml와 빈 소스 파일 하나가 생성된다.
* include는 C언어의 include와 유사하게 파일을 직접 로드한다. 동작은 import와 유사하다.
- jupyter_notebook . . . . 4 matches
== 패스워드 생성과 프로파일 ==
또 다른 방법으로 jupyter Notebook 서버에 프로파일을 생성하고 자신이 원하는 패스워드를 설정하는 방법이다.
~/.jupyter 드렉토리가 생성되고, 하위에 jupyter_notebook_config.py 파일이 생성된다.
생성된 파일에 아래 처럼 설정을 추가하면 토큰이 아니라 패스워드로 접속이 가능하며 jupyter 실행시 별도 옵션을 설정하지 않아도 사전에 설정한 옵션으로 실행 된다 .
- kolmogorv_arnold_network . . . . 7 matches
반면, KAN의 경우 '''Kolmogorov-Arnold representation theorem'''을 근간으로한 모델을 전개한다.(완벽하게 따르지 않음.) 무언간 거창한 정리와 모델로 보일 수 있지만 저자는 KAN이 ''nothing more than combinations of splines and MLP'', 즉 spline과 MLP의 결합에 불과하다는 말이다.
입력 데이터의 각 성분 \(x_{0,1}, x_{0,2}\)가 계산 그래프의 아래 첫번째 노드에 대응한다. 첫번째 엣지는 \(\phi_{q,1}, \phi_{q,2}\)에 대응하기 때문에 입력 \(x_{0,1}, x_{0,2}\)와 연결되는 것을 확인할 수 있다. 이후, 이들이 합해질 때는 식과 같이 q값이 동일한 함수값들끼리 더해지는 것을 확인할 수 있다. 이로부터 얻은 \(x_{1,1}, \cdots, x_{1,5}\) 5개의 성분을 갖는 '''hidden layer'''가 된다. 마지막으로 \(\sum_q\Phi_q\) 연산이 이뤄지기 위해 각각의 은익층 성분에 함수값들을 더하고 이것이 최종 output \(x_{2,1}\)이 된다. (임의의 함수 \(\phi, \Phi\)는 구분하지 않고 통일해서 \(\phi\)로 나타낸다.)
위에서 살펴본 KRT를 기반으로 한 KAN 구조를 일반적인 MLP 구조와 같이 확장해 보자.
위 Simple KAN식 (1)을 일반화된 위 식처럼 표현하면 아래 식 (2)와 같이 표현할 수 있다.
여기서 \(b(x)\)는 basis function이라고 부르며(spline basis와 다른 의미를 갖음), 일종의 '''residual connection'''[* https://channelai.tistory.com/2]역할을 수행한다. 다음과 같이 silu function(swish)[* https://medium.com/@akp83540/silu-sigmoid-linear-unit-activation-function-d9b6845f0c81]로 주어진다.
\(\omega\)는 activation function의 출력값의 스케일을 조절하기 위해 사용되는 factor이다.
- ksc2016 . . . . 2 matches
one_hot : 레이블을 하나의 스칼라 값을 사용하게 되면 각 레이블 사이의 거리차가 발생하게 된다. 이 거리는 실제 데이터의 거리라고 할 수 없기 때문에 거리를 균일하게 정의 하기 위해서
TensorBoard 사용하기 위해서 할일
- kullback-Leibler_vs_cross-entrypy . . . . 1 match
포장: ML이 출시될 때, 대안에 대한 개방성을 유지한다. 특히 여기에서 논의된 바와 같이, 하이퍼 파라미터 튜닝 방법, 최적화 도구, 학습 속도 체계 및 기타 일반적인 것들이다. 가장 잘 어울리는 방법을 찾고, 옵션의 본질을 파악하며, 강력한 정교한 표현이 당신을 익사시키지 않도록 하라.
- lasso_regression . . . . 3 matches
무슨 일이던 정확한 정의를 알고 시작하느냐 그렇지 않느냐에 차이가 크다. 회귀라는 말은 일상에서 사용하지 안는 말이기 때문에 정확한 의미가 전달 되지 않는다.
매장들의 크기와 판매량을 기록해 보았더니 정말로 선형 관계가 있었다고 하자. 이를 이용해서 얻어낸 일차 함수식을 얻어 낼 수 있을 것이고, 이렇게 얻어낸 함수식에 대입해서 어떠한 상점의 판매량을 예측할 수 있을 것이다. __이것이 바로 선형회귀이다.__[* https://zimkjh.github.io/ml/Lasso-Regression]
- latex_lyx_installation . . . . 5 matches
ko.TeX/Download에서 ko.TeX의 배포판을 내려 받는다. 컴파일 없이 바로 설치하고 싶은 사람은 util-bin 피일도 내려 받는다.
[http]다음 링크와 [http]ko.tex. v0.1.0 사용설명서의 20쪽에 있는 표를 참고하여, 실행 파일과 스크립트 파일, 폰트와 각종 파일들을 각각 맞는 폴더에 복사한다.
- layer_wise_relevance_propatation . . . . 7 matches
* 작성일: 2019년 11월 07일
테일러 급수(Taylor series) 또는 테일러 전개(Taylor expansion)는 어떤 미지의 함수 \(f(x)\)를 아래 식과 같이 근사 다항함수로 표현하는 것을 말합니다.
테일러 급수를 이용한 함수 근사화에서 시작점 \(x = a\)는 어느 위치여도 관계 없이 무한한 항을 다 더할 수 있다면 정확하게 그 함수를 근사할 수 있다. 다만 LRP에서는 식 (5)에서 보았듯이 \(f(a) = 0\)이라는 제약조건을 만족해야 한다. 이 조건을 만족 시키는 \(a\)는 무수히 많다.
위 그림은 식 (6) \(f(x) = \max \left ( 0, \sum_{i=1}^2 w_i x_i +b \right )\)의 입력과 출력을 그림으로 표현한 것이다. 입력 \(x_1, x_2\)는 우리가 입력한 것이니 알고 있고, 출력값 \(f(x_1,x_20\) = ReLU(x_1, x_2)\)는 뉴럴네트워크 모델에 의해 결정되는 값이다. 출력값은 흰색과 붉은색의 그라데이션으로 표현되었다. 흰색에 가까울 수록 '0'에 가깝고 붉은색으로 갈 수록 큰 값을 갖는다. 실선은 출력값이 '0'인 지점을 이은 것이고 점선은 등일한 값을 갖는 등고선이다.
딥뉴널 네트워크에서 Gradient는 일반적으로 noisy하기 때문에 이런 목적으로 사용하기엔 안정성이 떨어진다. 보다 robust한 방법이 필요하다.
- lecture_note_machine_learning . . . . 2 matches
Testing 시나리오에서 일반적으로 학생이 기말시험을 얼마나 잘 보았느냐로 그 학생이 수업을 얼마나 잘 이해하고 있는지를 평가할 수 있다. 이 평가를 조금 더 잘 하기 위해서는 시험문제의 수\(N\)가 많아야 한다.
일반화하면 Perceptron의 \(\vc\)는 d+1이다. (증명은 생략)
- lecture_note_machine_learning_exercise . . . . 2 matches
수학적으로 고차원 데이터를 내적하는 것과 내적한 결과를 고차원으로 보내는 것은 동일하다.
시그모이드 함수의 출력범위는 0 ~ 1 사이의 값을 갖는다. 0.5를 기준으로 두 그룹을 나눈다면, \(e^{-z} = 0\)일때 0.5의 값을 가짐으로 z가 0이 되는 점을 classification boundary로 값는다.
- lets_encrypt_ssl . . . . 2 matches
키 생성은 도메인과 이메일 정보등을 넣어서 만들어준다.
Let's Encrypt는 무료인 대신 90일 마다 갱신을 해줘야 한다. crontab으로 자동 갱신하자
- linux_Voyager_install . . . . 5 matches
http://get.adobe.com/flashplayer/ 에서 ''tat.gz for other Linux''를 선택해서 압축 파일을 받아서 직접
받은 파일을 압축 해제하면 libflashplayer.so 파일이 나오는데 이걸 '''/usr/lib/mozilla/plugins''' 폴더에 넣어주면 된다.
bin, cue 파일에서 음원을 추출해주는 프로그램으로 간단히 wav파일을 얻을 수 있어서 좋다.
- linux_apache2_init . . . . 8 matches
apache2.conf - 기본 설정 파일
conf-available - 사용가능한 추가 설정 파일들
conf-enabled - 현재 적용된 추가 설정 파일들
available 이라는 디렉토리들은 보통 사용가능한 설정 파일들을 저장하고 여기서 enabled 라는 디렉토리로 심볼릭 링크를 걸어서 사용하는 경우가 많습니다.
php5.conf 와 php5.load 라는 심볼릭 링크가 만들어져 있고 실제 파일들은 mods-available 에 있는 것을 볼 수 있습니다. 여기서 dir.conf 파일을 vi 등으로 열어서 index.php 가 index 파일에 추가되어 있는지 확인해 보도록 합니다.
/var/www/html 아래에 phpinfo.php 파일을 만들어서 php 설치를 확인해 봅니다.
- linux_apt_get . . . . 2 matches
패키지 삭제 : 설정파일은 지우지 않음
설정파일까지 모두 지움
- linux_compiler_assembler_process . . . . 334 matches
gcc는 예전에는 GNU C Compiler의 약자였으나 지금은 GNU Compiler Collection의 약자로 다양한(?) 언어의 컴파일러들의 집합체이다. gcc는 한마디로 GNU에서 개발된 ANSI C 표준을 따르는 C 언어 컴파일러라고 말할 수 있다. gcc는 ANSI C 표준에 따르기는 하지만 ANSI C 표준에는 없는 여러 가지 확장 기능이 있다. 또한 gcc는 통합개발환경(IDE)을 가지고 있지 않은 command line 컴파일러이다. 옛날 Turbo-C를 주로 사용해 보셨던 분들은 tcc.exe와 비슷하다고 생각하면 된다.
GCC 동작 과정을 통해서 컴파일러의 기본 동작을 이해한다.
컴퍼일 과정은 (전처리기-컴파일러-어셈블러-링커) 를 거친다.
전처리기(CPP) ---(전처리후 소스코드)---> 컴파일러(CC) ---(어셈코드)---> 어셈블러(AS) ---(오브젝트코드)---> 링커(LD) ---(실행코드)-->
'''전치리기'''(''C pre processor'') : 소스 파일의 주석 제거 및 define을 치환 하는 기능을 처리 합니다.
'''컴파일러''' (''C Compiler'') : 전처리기를 거친 소스 파일을 어셈 파일(ADD,MOD,SUB,CALL 등으로 작성되어 있는 파일)로 변환 합니다.
'''어셈블러''' (''Assembler'') : 어셈 파일을 오브젝트 코드 파일로 변환합니다.
'''링커''' (''Linker'' ) : 오브젝트 파일들을 묶어서 실행 코드 파일로 변환합니다. (운영체제의 Loader가 로딩할수있도록, 주소등을 적절히 계산해서 실행 파일을 만들어줍니다.)
오브젝트 코드 파일과 실행 코드 파일 이라는 두 바이너리 파일의 구분이 애매해서 차이를 찾아봤습니다.
소스코드를 컴파일해서 만들어진 오브젝트 코드는, 실행을 위한 코드들은 주소 정보는 확정되지 않은 채 기계어로 만들어집니다.
링크 과정을 거치면 실행 가능한 코드로서, EXE 파일이 만들어집니다.
그럼 EXE 파일이 주소를 가지고 있을까요? 네 가지고 있습니다. 하지만, 확정된 주소는 아닙니다.
EXE 파일을 실행시키기위해 OS가 메모리에 로드하는 과정에서 주소는 재배치가 됩니다. 즉, EXE 파일은 주소 재배치에 필요한 정보를 포함합니다.
EXE 파일의 배치 정보에는, 코드의 시작부분, 로드할 정보, 위치, 변수이름, 함수이름, 포인터의 주소 등 입니다. (오브젝트파일일때는 의미가 없는 정보들입니다.)
링커는 조립을 하면서, 오브젝트 파일들을 참고해서 함수,변수가 위치할 메모리 위치를 정하고 함수의 호출과 변수의 접근 등에 대해 적절한 주소값을 정해주고, 연결을 해줍니다.
== relocatable object 코드 파일 내용 ==
어 떤 정보가 object 파일 안에 들어있을까? 당연히 code와 data가 들어 있다. C 컴파일 과정에서 C 언어 함수 안에 있는 내용들이 assembly mnemonic 들로 바뀌었고 그것이 assemble되어 기계어(machine language)가 되었을 것이다. 그 부분이 code를 이룬다. C 언어 소스 코드에 있는 나머지는 전역 변수(external variable)와 정적 변수(static variable)들이 data를 이룰 것이다. 또한 문자열 상수를 비롯한 상수도 data에 들어 있다. 또한 프로그램 수행에 쓰이지는 않고 단순한 정보로서 들어 있는 data들도 있다. 예를 들어 -g 옵션을 주고 컴파일 하면 프로그램의 디버깅 정보(변수, 함수 이름, C 소스 파일이름, line number 등)가 data에 속한다고 볼 수 있다. 그런데 code와 data가 무질서하게 섞여 있는 것은 아니고 section이라고 불리우는 단위로 서로 구분되어 저장되어 있다. Code는 text section에 들어 있고, data는 성격에 따라 data section, bss section, rodata section 등에 나누어져 저장되어 있다.(text, data, bss, rodata 등의 section 이름은 그냥 관습적인 것이다.) 아무튼 section 이야기는 이 정도만 우선 알아두면 될 듯 싶다.
relocatable object code안에 code와 data가 들어 있다고 했는데, 아주 중요한 것을 빠뜨렸다. 이 이야기는 linking 과정을 이해하기 위해 꼭 필요한 부분이므로 반드시 읽어야 할 것이다. 우선 Symbol이 무엇인지 알 것이다. C 언어 컴파일 과정에서 identifier와 함께 설명했는데 잠시 다시 말씀하자면 Symbol은 함수와 변수 이름이다. 변수 중에 특히 관심두어야 할 것 들은 자동 변수(?,auto variable)들이 아닌 전역 변수(external variable)와 정적 변수(static variable)이다. 자동 변수는 함수의 stack frame에 존재하는 변수이기 때문에 현재 stack pointer(sp, 보통의 CPU의 register중에 하나)에 대한 offset으로 표현된다. 즉 현재 함수에서 자동 변수(auto variable)를 access(read/write)하고 싶으면 sp+상수의 어드레스를 access하면 된다. 하지만 전역 변수와 정적 변수는 그냥 32bit(32bit CPU기준) 어드레스를 읽어야 한다. stack pointer랑은 전혀 관계 없다. 아무튼 여기서 관심을 두는 Symbol은 함수, 전역 변수와 정적 변수의 이름이라고 할 수 있다.
이제 생각해 볼 것은 C 언어 소스 파일을 C preprocessing, C 언어 컴파일, assemble 과정을 거치면 완전한 기계어로 바꿀 수 있느냐 하는 점이다. 완전히 기계어로 바꿀 수 있을까? C 언어 소스 파일 하나로 이루어지는 프로그램이라면 완전히 기계어로 바꾸는 것이 가능하겠지만 일반적으로는 불가능 하다. 다음과 같은 예제를 살펴보자.
위 의 예제를 컴파일 한다고 생각해보자. test1.c에서 func1()의 내용을 기계어로 바꾸고 싶은데 func2()를 호출하는 시점에서는 별로 문제가 안된다. func2()는 같은 소스 코드 내에 존재하고 func2()를 호출하는 instruction과 func2()의 실제 위치(어드레스)의 차이를 계산해 낼 수 있으므로 상대 어드레스를 이용하는 함수 호출 instruction으로 완전히 기계어로 바꿀 수 있다. 그런데 문제는 func3()를 호출할 때는 func3()의 실제 위치(address)를 계산할 수 없다는 문제점이 있다. 당연히 동일한 파일에 존재하는 함수가 아니므로 그 함수가 존재하게 될 어드레스를 계산할 수 없다. 어드레스를 모르는데 함수 호출 instruction을 완전히 만들 수 있을까? 만들 수 없다. 당연히 전역 변수 mydata를 access하는 부분도 마찬가지로 mydata의 어드레스를 모르므로 완전히 instruction으로 바꿀 수 없다. 그럼 어떻게 해야 될까?
- linux_dasom_installation . . . . 1 match
이제 다솜 입력기가 10월9일에 나왔습니다.
- linux_environ_variable . . . . 1 match
* 이러한 변수들은 프로그램 내의 사용자 변수들과 구분하기 위해서 일반적으로 대문자로만 구성하는 관례가 있으며, 환경변수들은 사용자마다 개인설정에 따른 다른 값을 갖는다.
- linux_environment_module . . . . 3 matches
받은 파일의 압축을 풀면 소스를 얻을 수 있는데 소스를 컴파일 하기 전에 tcl이 설치 되어 있는지 확인해서 없다면 설치 해줘야 한다.
= 관리 파일 만들기 =
- linux_exfat_ubuntu . . . . 1 match
exfat 파일 시스템을 사용하는 대용량 USB를 마운트 하기위해선 exfat를 별도로 설치해줘야 한다.
- linux_fstab . . . . 35 matches
fstab은 이번 소개에서 배웠던 mount와 연관이 있습니다. 기존에 소개해드렸던 mount방법은 임시적이죠. 컴퓨터를 재부팅 하게되면 mount했던 설정들은 다시 초기화가 됩니다. fstab은 mount 설정을 영구적으로 할수있도록 존재하는 설정파일이에요.
'''1. FileSystem Device Name(파일시스템장치명)'''
파일시스템장치명은 곧 파티션들의 위치를 말합니다. 위에 fdisk -l를 처서 나온 부분을 보시면 /dev/sdb1~6까지의 파티션장치의 위치 즉, 주소를 나타내는것이 보일겁니다.
'''3. FileSystem Type(파일시스템 종류)'''
파티션 생성시 정해줬떤 파일시스템의 종류를 써주는 필드입니다. 저희는 ext3으로 파일시스템을 설정하였기때문에 ext3을써줘야 합니다. 일단 파일시스템은 무슨 종류들이 있는지 소개해드리도록 할께요.
ext2 -현재도 사용하며, 긴~파일시스템이름을 지원하는것이 특징입니다.
ext3 -저널링 파일시스템, ext2보다 파일시스템의 복수/보안기능을 크게향상되었고 현재 기본 파일시스템으로 쓰이고 있습니다.
ext4 -16TB까지만 지원하던 ext3과 달리 더큰 용량을 지원하며, 삭제된 파일 복구, 파일 시스템 점검속도가 훨~씬 빨라진 파일시스템입니다.
iso9660 -DVD/CD-ROM을 위한 표준 파일시스템으로 읽기만 가능합니다.
nfs -원격서버에서 파일시스템 마운트할때 사용하는 시스템(Network File System)
swap -스왑파일시스템, 스왑공간으로 사용되는 파일시스템에 사용합니다.
ufs -Unix system에서 표준 파일시스템으로 사용합니다.(Unix File System)
vfat -윈도우95/98등등 ntfs를 지원하기위한 파일시스템에 사용합니다.
msdos -MS-DOS파티션을 사용하기위한 파일시스템에 사용합니다.
ntfs -윈도우NT/2000의 nfts를 지원하기위한 파일시스템에 사용합니다.
hfs -MAC컴퓨터의 hfs를 지원하기위한 파일시스템에 사용합니다.
hpfs -hpfs를 지원하기위한 파일시스템에 사용합니다.
sysv -Unix system v를 지원하기위한 파일시스템에 사용합니다.
ramdisk -RAM을 지원하기위한 파일시스템에 사용합니다.
파일시스템에 맞게 사용되는 옵션들을 설정하는 필드입니다.
- linux_git_install_guide . . . . 4 matches
공식 사이트[[footnote(http://git-scm.com/)]]에서 소스를 받아서 컴파일해서 설치 한다.
등의 파일들이 생기는 것을 확인 할 수 있다.
git 서버의 git 계정 아래 미리 만들어 놓은 .ssh 폴더에 ''authorized_keys'' 파일을 생성하고 보내온 공개키를 추가 하면 됨.
- master라는 브랜치에 파일을 push함.
- linux_gitweb_install_guide . . . . 1 match
를 실행서서 gitweb 웹관련 파일을 갖고 오면 끝이 난다.
- linux_iconv . . . . 6 matches
conv 로 데이터파일의 언어설정을 바꿀수 있습니다.
확인이 필요하겠죠..(확인하기가 제일 어려움..ㅜㅜ)
사용법: iconv[<옵션>...] [<파일>...]
주어진 파일의 인코딩을 한 인코딩에서 또 다른 인코딩으로 변환함.
-o, --output=FILE 출력 파일
iconv 로 다수의 파일을 인코딩 변경 하는 스크립트는 http://mindpower.kr/22 <- 여기에서^^
- linux_ifconfig . . . . 4 matches
이런 경우 네트워크 설정을 하는 것은 난감한 일이다.
= 네트워크 설정 파일들을 이용하여 네트워크를 설정하는 방법 =
네트워크 설정 파일에는 여러가지의 파일이 있습니다.
- linux_index . . . . 4 matches
1. [:linux_locale 시스템에 설치된 로케일을 변경하는 방법]
1. [:filesystem_supercomputer 슈퍼 컴퓨터 파일 시스템]
1. [:iptables_cross ARM에서 Iptables Cross 컴파일 하기]
1. [:linux_compiler_assembler_process Gcc 컴파일러 설명]
- linux_init_setup . . . . 24 matches
sudo vi /etc/group 파일을 열어
/etc/sudoers 파일을 확인해서 자신이 추가한 user나 구룹이 추가 되어 있는지 확인해야 한다.
설치 후 tftp를 사용하기 위한 /etc/xinetd.d/tftp 파일 생성
(rw, no_all_squash) : NFS클라이언트가 NFS서버로 마운트를 할 경우에 동일사용자가 존재한다면 root를 제외한 일반사용자는 동일한사용자로 매핑이 됩니다.
(rw, all_squash) : NFS클라이언트가 NFS서버로 마운트를 하면 일반사용자도 nfsnobody 권한을 부여하게 됩니다.
NFS 설정 파일을 편집합니다. 원격에서 접속할 경우 방화벽 정책에 의하여 해당 연결이 되지 않을 경우가 있어, 해당 포트를 고정을 합니다.
(rw, no_all_squash) : NFS클라이언트가 NFS서버로 마운트를 할 경우에 동일사용자가 존재한다면 root를 제외한 일반사용자는 동일한사용자로 매핑이 됩니다.
(rw, all_squash) : NFS클라이언트가 NFS서버로 마운트를 하면 일반사용자도 nfsnobody 권한을 부여하게 됩니다.
nfs 서비스의 방화벽 설정을 위하여 방화벽 정책파일을 편집합니다.
smbfs 삼바파일 시스템은 더이상 사용되지 않는 듯하다. cifs로 대치됨.
Toolchain은 타겟 바이너리를 만들어 주는 컴파일러 이다.
Toolchain은 압축파일 형태로 되어 있어서 적당한 장소에 압축을 풀어서 사용하면 된다.
이렇게 압축을 풀었다면 아래와 같이 .bashrc 파일에 환경 변수를 추가해준다.
== 컴파일에 필요한 Tools ==
uImage를 생성하기 위해서는 mkimgae라는 바이너리 파일이 필요한다.
이 파일은 u-boot/tools를 컴파일 하면 생성 되는데
cramfs-1.1.tar.gz를 구해서 컴파일을 해서 얻은 mkcramfs를 /usr/bin에 복사해서 사용한다.
컴파일 과정에서 zlib.h 관련 에러가 발생 할 수 있는데
symbol을 생성할때 특정 파일만을 골라서 만들어 주는 유용한 스크립트
- linux_kernel . . . . 18 matches
#title 리눅스 커널 컴파일 하기
'''일반 응용 프로그램 개발과의 차이점'''!
1. 일반 응용 프로그램시에 우리는 C언어 라이브러리[[footnote(C언어 라이브러리는 libc를 말함.)]]를 사용하는데 커널 프로그래밍 환경에서는 libc 라이브러리를 사용할 수 없다.
물론 커널 코드 내에 libc 라이브러리를 포함 시킬 수도 있다. 그러나 libc를 포함 시킬 경우 커널 이미지 사이즈가 커지고 성능 저하가 일어난다.
= 커널 컴파일 하기 =
이 명령으로 옵션을 설정하게 되면 해당 디렉토리에 .config 라는 옵션 설정 저장 파일이 생성 된다.
이 파일을 재설정하려면 '''make oldconfig''' 명령을 수행하면 된다.
make mrproper를 수행하면 이 .config 파일이 지워진다.
기존 컴파일 시 생성된 오브젝트 파일과 같이 이전 컴파일시에 생성된 파일들을 삭제한다.
zImage나 bzImage는 gzip으로 압축 되어 있고[[footnote(압축이 안 된 커널 이미지는 arch/i386/boot/vmlinux 파일로 존재한다.)]] 그 차이는 압축된 이미지의 사이즈가 1MB 이하이냐 아니냐의 차이다. '''b'''는 ''big''을 의미한다.
make bzImage를 수행하면 arch/i386/boot 디렉토리에 bzImage 파일이 생성 된다. 이 파일을 /boot로 복사해서 사용한다. 복사할때는 고유한 이름을 갖도록 변경해서 복사한다.
컴파일된 모듈을 적절한 위치로 복사해 준다.
''/lib/modules/커널 버전'' 드렉토리에 컴파일된 모듈들이 복사 된다.
lilo.conf, grub.conf 파일을 수정해 줘야 한다.
- linux_kernel_asmlinkage . . . . 5 matches
일반적으로 C 함수는 어셈블리 코드에서 별 어려움없이 호출할 수 있지만
최적화 옵션을 켜고 컴파일하는 경우 인자를 레지스터를 통해 전달하도록
함수의 호출부와 구현부를 변경해 버릴 수 있다. (일반적인 최적화 방법)
위의 코드에서 <asm/linkage.h> 파일을 #include 하고 있는 것에 주의하자.
대부분의 아키텍처에서 이 파일은 asmlinkage를 정의하지 않지만
- linux_locale . . . . 14 matches
로케일을 변경할 수 있는 방법은 세 가지가 있습니다.먼저 로케일이 시스템에 설치
이 명령은 시스템에 설치된 모든 로케일을 출력합니다. 필요한 로케일이 설치되어
1) CDE 로그인 화면에서 로케일을 변경하려면
옵션(options)과 언어(languages)를 차례로 선택합니다. 언어(languages)에서 새 로케일
참고:사용자 환경에 다른 로케일이 설정되어 있는 경우 위의 시스템 설정은 무시됩니다.
2) 로케일을 일시적으로 설정하려면(쉘에 따라 다름)
3) 시스템 전체의 로케일을 변경하려면
옵션 없이 locale 명령을 실행하여 로케일이 변경되었는지 확인하십시오.
참고:사용하려는 로케일이 설치되어 있지 않은 경우 자세한 내용은
다음 문서는 이 사이트에서 제공하는 것으로 로케일 설치 지침 및 로케일에 대한 자세한
- linux_programming_EXPORT_SYMBOL . . . . 2 matches
리눅스 커널에서 사용되는 모듈은 응용 프로그램에서 소스 형태로 컴파일되어 사전에 포함되는 정적 라이브러리와 달리 수행중에 삽입될 수 있다.
이 심볼 테이블은 커널이 컴파일되면서 자동으로 생성된다.
- linux_smbfs_mount . . . . 1 match
-t : 파일 시스템 설정
- linux_ssh_keygen . . . . 5 matches
[[footnote( [:ssh_config SSH config 파일 설정])]]
이제 ~/.ssh/ 안에 한쌍의 키(id_rsa 와 id_rsa.pub)가 생성되어 있을것이다. .pub 확장자가 붙은 것은 공개키로 이 파일을 접속할 리모트 서버들의 ~/.ssh/ 에 authorized_keys 라는 이름으로 복사해준다.
이제 ssh 접속을 진행 해보면 계정암호가 아닌 인증키 암호를 물어볼 것이다. 만약 계정 암호를 물어본다면 원격 서버상의 ~/.ssh 디렉토리나 공개키 권한의 문제이므로, 일단 접속후 chmod 755 ~/.ssh 그리고 chmod 644 .ssh/authorized_keys 해준다.
키 파일을 다른 이름으로 저장했거나 서버마다 다른 키를 사용하려면 ssh에 -i 옵션을 사용해 키 파일을 직접 지정해 주면 된다.
- linux_system_guid . . . . 6 matches
NIS의 정식 명칭은 NIS version 2를 말한다. 그러나 NIS+와 구별짓기 위해 YP(Yellow Page) system이라는 이름이 많이 쓰인다. NIS는 Network Information System의 약자이다. 1980년대 중반, Sun Microsystem에서는 두가지 protocol을 내놓았는데, 바로 NFS(Network File System)와 NIS이다. 이들은 Network를 통해 여러 개의 Workstation들을 하나의 시스템을 사용하는 것처럼 작동시켜주는 핵심적인 방법이다. 즉, NFS는 사용자들의 home 드렉토리들이 어느 시스템에서나 동일하게 보여지도록 하며, NIS는 passwd나 group 등의 네트워크 정보 파일들을 하나의 서버에서 관리하도록 하여 나머지 시스템에서 서버에서 제공하는 새로운 정보를 받을 수 있도록 하는 것이다.
네트워크 상태가 불안정하면 data의 손실 및 클라이언트들의 오작동 등 여러가지 안좋은 편상들이 일어나게 된다. 보통 하나의 서브넷에 서버와 클라이언트들이 같이 물려 있으면 괜찮다.
=== NIS서버와 클라이언트의 공통으로 해주어야 할 일 ===
그렇기 때문에 /etc/hosts 파일에 각각의 서버 클라이언트의 호스트들을 등록해 두는 것이 사용이 원할하다.
위 방법은 일시적이다. 부팅시마다 설정하기 위해서는 /etc/sysconfig/network 에
- linux_ubunt_subversion . . . . 7 matches
위와 같은 명령하면 /home/svn에 저장소를 구성하는 파일들과 드렉토리가 생성 된다.
현제 디렉토리에 있는 모든 파일들을 저장소에 저장한다는 뜻이다.
우선 작업이 된 파일을 확인 하기 위해서 '''status'''라는 명령을 사용한다.
변경된 파일이나 추가/삭제된 파일을 보여주는데 이것은 아직 저장소에 적용된 것이 아니다.
또한, 변경된 파일의 내용을 비교해서 보고 싶을때가 있을 것이다.
'''verbose''' 옵션을 추가 하게 되면 comment와 변경된 파일의 정보까지 상세한 정보를 볼 수 있다.
- linux_ulimit_command . . . . 22 matches
이 글은 http://wiki.kldp.org/KoreanDoc/Ulimit-KLDP (문태준님 작성, 2000년 2월 24일(목))을 토대로 필자가 나름 내용을 추가하여 작성하는 글이다.
* 이 글은 실제로 제가 대형서버를 운영하고 있는 상황에서 나온 글은 절대 아니며, 그냥 여기저기서 주워들은 이야기들과 자료들을 토대로 해서 작성한 것입니다. 동시접속이 몇백명에서 몇천명되는 서비스를 하려면 단순하게 커널 컴파일 한번 하고 끝나는 것이 아니라 여러가지 조정을 해주어야 할 것이 많습니다. 또한 하드웨어와 OS 제한이 있으므로 로드밸런싱(부하분산), 트래픽 분산 등을 하는 스위칭 장비, 클러스터링 시스템 구성이 필요할 수 있습니다. 그만큼 설계를 잘해야합니다. 여기에 언급한 것은 단지 쉽게 할 수 있는 맛보기 정도이지요. 이로 인해서 생기는 손해에 대해서는 본인이 절대 책임을 지지 않습니다. 또한 내용 중 틀린 부분도 많이 있을 것입니다.
대규모 서비스를 준비하는 경우 운영체제의 제한사항을 먼저 확인해야 한다. 동시에 열수 있는 총파일 수, 한 프로세스가 열수 있는 파일 수 등등.
예를 들어 대형 웹서버를 아파치로 서비스하는 경우를 생각해보자. 아파치는 기본적으로 프로세스 방식으로 서비스를 처리한다. 이건 사용자의 요구가 올때마다 하나의 프로세스를 띄우므로 만약 동시에 10명의 사용자가 접속을 하면 10개의 프로세스가 떠야한다는 것이다. 최근의 아파치 서버는 MaxClients 150 이라고 설정되어 있다. 이건 동시에 150 개의 프로세스를 띄울 수 있으며 결국 동시에 150명을 받아 들일 수 있다는 것이다(실제로 이정도만 하더라도 절대로 작은 규모는 아니다). 그런데 만약 nobody가 만들어낼 수 있는 최대 프로세스 개수가 그 이하라면? 당연히 문제가 생길 것이다. 물론 최근 레드햇 6.0 이상 버전은 그 이상으로 맞추어져 있어서 문제가 생기지는 않겠지만.
문제는 프로세스가 많이 뜨면 프로세스뿐만 아니라 열 수 있는 파일 수에서도 문제가 된다.
-c 최대 코어 파일 사이즈
-f shell에 의해 만들어질 수 있는 파일의 최대 크기
-n 오픈 파일의 최대 수
core file size -> 코어파일의 최대크기
file size (blocks, -f) unlimited -> 쉘에서 생성되는 파일의 최대 크기
open files (-n) 1024 -> 한 프로세스에서 열 수 있는 open file descriptor의 최대 숫자(열수 있는 최대 파일 수)
max user processes (-u) unlimited -> 단일 유저가 사용가능한 프로세스의 최대 갯수
1. 소스파일을 수정한 후, 커널 재컴파일을 하는 방법.
3. /etc/security/limits.conf 파일을 수정하는 방법
/etc/rc.local 파일을 이용하여 명령어를 설정하던가 아니면 다음에 나오는 limits.conf 파일을 이용하도록 한다.
3. 사용자에 따른 자원 한도 설정 파일
제일 아래 ‘oracle’ 과 같이 따로 설정된 부분과 같이 변경하면 된다. 이렇게 설정할 경우, 매 부팅시 자동 적용되어 별도로 적용하지 않아도 된다. 또한, 각각의 유저마다 다른 설정을 적용할 수 있으므로 보안 및 관리에도 용이하다.
# 마지막으로 프로세스에서 열어놓은 파일을 확인하는 방법에 대해 알아보자.
lsof는 ‘List Open File’의 약자로 해당 System에서 구동되고 있는 프로세스들에 의해서 열려진 파일들을 확인 할 수
- linux_util_tar . . . . 2 matches
리눅스 환경에서 파일을 묶고 압축하기 위한 유틸 Tar의 사용법
엄밀히 말하면 Tar은 파일을 압축하는 것이 아니라 하나로 묶어주는 유틸이지만 gzip과 함께
- linux_wol . . . . 1 match
''' 1. 스크립트 파일을 작성한다. '''
- mAP . . . . 3 matches
딥러닝 객체 검출 알고리즘에서는 검출된 상자가 참일 가능성(확률)이 같이 출력됩니다. 확률이 몇 퍼센트 이상일 때 양성으로 판정할지의 기준선인 ‘임계값’을 몇으로 정하는지에 따라서 예측 결과가 참인지 거짓인지가 달라지기 때문에 정밀도와 재현율도 모두 달라지게 됩니다. 임계값을 바꿔가면서 실제로 참인 객체가 임계값 내에 포함될 때마다 정밀도와 재현율을 모두 측정하면 실제로 참인 객체 만큼의 정밀도, 재현율 쌍이 생기게 됩니다. 여기서 정밀도만을 골라 내어 평균을 낸 것이 평균 정밀도(AP; average precision)입니다.
객체 검출에서 출력되는 경계 박스는 참인지 거짓인지가 출력되지 않고 경계 박스의 위치만이 출력됩니다. 이 경계 박스를 실제로 참으로 볼지 거짓으로 볼지는 실체 위치(ground truth)와 검출된 객체 상자 간의 IoU 값이 일정 이상인지를 평가하여 이루어집니다.
- make_clock_skew_detected . . . . 3 matches
git을 사용해서 각기 다른 시스템에서 작업하고 commit을 반복하다 보니 컴파일하는 시스템과 소스의 시간이 달라서 이런 에러가 발생하는 것을 알게 되었다. 컴파일 하는 것에는 큰 문제는 아니지만 컴파일시 지저분하게 출력되는 것이 보기 싫어서 아래와 같이 해결 했다.
- math_Euler_number . . . . 6 matches
계란이 30개 들어가는 판이 있습니다. 계란이 가득 담긴 계란판이 10개가 있다면 계란은 몇 개 일까요?
곱하기는 동일한 덥샘이 몇개 있는지를 표기하는 것으로 간단히 표현 됩니다.
그러면 여기서 잠깐 동일한 곱셈이 덥셈처럼 많으면 어떻게 표현하면 좋을까요?
때문에 밑수가 동일한 지수의 곱은 지수끼리의 덧샘으로 표현됩니다. 단순의 밑이 같은 수의 곱셈의 수가 얼마큼 있는지를 세는 것이기 때문입니다.
로그는 지수의 밑보다는 지수 자체에 관심을 갖는다. 밑을 통일하고 지수 관점에서만 보면 복잡한 곱셈이 단순 덧셈으로 치환되기 때문이다.
미분을 하는 이유는 해당 곡선의 기울기(slope)를 알기 위해서이고 일차 함수인 \(y =ax +b\)에서 a에 해당하며 변화율을 이용하면 아래 식과 같이 정의한다.
- math_complex_analsys . . . . 15 matches
해석 함수의 원뜻은 해석학(analysis)으로 분석가능한 함수이다. 해석학이라는 학문은 '''무한'''(infinity)과 '''극한'''(limit)을 다루는 학문이므로 해석 함수는 우리가 생각하는 영역에서 극한이 존재하고 무한 급수(infinite series)로 표현가능해야 한다. 따라서 '''실해석 함수'''(real analytic function)라면 반드시 식 (2)의 '''테일러 급수'''(Taylor series)로 표현가능하고 수렴해야 한다.
'''복소 해석 함수'''(complex analytic function)는 특정한 복소 평면(complex plane)에서 테일러 급수와 같은 무한 급수가 존재해서 반드시 수렴한다.
여기서 가져야 하는 또 하나의 의문은 폐곡선의 내부와 외부를 어떻게 나누는가이다. 아주 일반적인 경우라면 '''조르당 곡선 정리'''(''Jordan curve theorem'')를 이용해 폐곡선의 내부와 외부를 정의할 수 있겠지만, 우리가 고민하는 것은 단순한 경우이므로 오른손 법칙만으로도 충분하다. 즉, 폐곡선이 휘어진 방향으로 엄지를 제외한 오른쪽 손가락을 위치시켰을 때 엄지가 위치한 부분이 폐곡선의 내부이다. 예를 들어, 오른손으로 돌려보면 [그림 1]의 폐곡선은 엄지가 구의 위쪽에 위치하므로 오른손 법칙에 의해 구의 위쪽이 폐곡선의 내부가 된다. 폐곡선이 휘지 않은 직선인 경우라면 폐곡선의 내부와 외부를 결정할 수 없다. 일반적으로 가면 더 어려워진다. 우리가 폐곡선의 내부와 외부를 판단하는 기준은 곡선이 휜 특성이다. 이 부분은 미분과 관련되기 때문에 미분할 수 없는 곡선(''예를 들면 프랙털 곡선(fractal curve)'')이라면 상황은 더 복잡해진다.
식 (10)은 어떤 미분 경로를 택하더라도 미분값은 고정이므로 '''코쉬-리만 방정식'''이 잘 성립한다. 물론 이런 방식으로 리만이 증명한 것은 아니다. 이것은 수학적으로는 부실하지만 코쉬-리만 방정식이 성립하는 것을 편하게 보일 수 있다. 실제 리만은 '''켤레 복소수'''(complex conjugate)를 이용해 식 (6)을 증명했다.
미분 경로 \(dz\)에 관계없이 복소 함수의 미분이 일정하기 위해서는 식 (12)의 세째줄이 0이 되어야 한다. 이 조건이 바로 식 (6)의 코쉬-리만 방정식이다.
식 (4)의 원형 경로 선적분이 0이 되는 결과를 이용하면 식 (1)의 코쉬 적분 정리를 더욱 직관적으로 증명할 수 있다. [그림 6]처럼 임의 경로({{{{color:rgb(255,0,0);}빨간색}}})를 원형 경로({{{{color:rgb(0,255,0);}녹색}}})의 무한합으로 완벽히 표현할 수 있기 때문에(∵ 유한한 원형 경로로 표현하면 [그림 2]처럼 내부에 구멍이 생기지만 그 구멍을 다시 원형 경로로 만들면 구멍 크기를 한없이 줄일 수 있으므로) 임의 경로의 선적분은 식 (1)처럼 0이 된다.
식 (18)은 테일러 급수와 비슷하지만 시작점이 0이 아닌 음의 무한대이다. 식 (18)과 같은 급수는 제안자 로랑(Pierre Alphonse Laurent)의 이름을 따서 '''로랑 급수'''(Laurent series)라고 한다.
여기서 계수 \(a_n\)과 \(f(z)\) 미분과의 관계는 '''테일러 급수''' 개념을 쓰면 쉽게 얻어진다.
여기서 반전 한가지. 식 (1)의 제안자는 분명히 大수학자 코쉬이다. 하지만 식 (1)의 최초 발견자는 가우스(Carl Friedrich Gauss)이다. 가우스 사후에 재발견된 그의 학술 일기[* ''C. F. Gauss and F. Klein, Gauss' wissenschaftliches Tagebuch: 1796 - 1814 (Gauss' Scientific Diary: 1796-1814), Teubner, 1903.''](19쪽, 146항목)에 식 (1)이 나온다. 코쉬 입장에서는 황당할 것이다. 이 아름다운 정리의 최초 발견자가 자기가 아니라니... 코쉬에게 위로의 말을 하자면, 가우스의 결벽증으로 인해 심한 정신적 피해를 본 수학자가 한둘이 아니라는 것이다. 사원수(四元數, quaternion)를 제안한 해밀턴(Sir William Rowan Hamilton)도 최초 발견자가 아니며 비유클리드 기하학(non-Euclidean geometry)의 제안자인 보이아이(János Bolyai)와 로바체프스키(Nikolai Ivanovich Lobachevsky)도 최초가 아니다. 모두 가우스가 먼저 한 일이다.
학술 일기는 아주 개인적인 일기이기 때문에 가우스가 공개적으로 발표하지 않았지만 그의 사후인 1897년에 재발견된 후 수학자 클라인(Felix Klein)이 주석을 붙여 1903년에 출판했다\(^{[3]}\). 가우스의 학술 일기에는 정수론(number theory), 무한 급수(infinite series), 복소 함수론(complex analysis), 사원수, 비유클리드 기하학 등과 같은 당시 수학 이론을 훨씬 뛰어넘는 다양한 내용들이 들어있다. 하지만 이 모든 것들이 라틴어로 함축되어 쓰여 있고 어떤 항목들은 암호처럼 기술되어 있기 때문에 가우스의 학술 일기에는 이해 못할 부분들이 아직까지도 많다.
- math_complex_number . . . . 2 matches
숙달이 되면 그리 어렵지는 않지만 식 (1)의 규칙으로 인해 초보자들은 복소수 계산을 제대로 하지 못하는 경우가 많다. 단지, 식 (1)과 같이 \(i\)와 \(i\)가 곱해지면 실수 -1로 바꾸면 된다. 이 규칙만 기억하면 복소수 계산은 실수 계산과 거의 동일하다.
복소수\((z=x+yi)\) 정의에 쓰이는 식 (1)의\(\sqrt{-1}\)을 단순 상수(常數, constant)라고 가정하면 실수와 동일하게 교환 법칙, 결합 법칙, 배분 법칙이 성립한다. 이때 실수와 차이나는 부분은 식 (1)이 성립한다는 가정이다.
- math_eigenvalue . . . . 2 matches
A가 n × n 행렬일때
1. ''A가 역행렬을 가지는 특이행렬일때만 0이 아닌 해를 갖게 된다.''
- math_index . . . . 1 match
= [:math_Euler_number 아음다운 숫자 오일러의 수] =
- math_liner_algebra . . . . 1 match
성공적인 설치를 하게 되면 mpi를 지원하는 컴파일러가 생긴다.
- math_log_history . . . . 2 matches
일과 십, 백, 천, 만 까지는 일상적으로 통용되는 수이지만, 억이라는 단위 부터는 10의 8제곱이 되고 조는 10의 12제곱이 된다. 조라는 단위는 국가 예산이나 대 기업에서나 사용되는 수이지만, 좀더 큰 규모의 예산이 되면 경이라는 10의 16제곱이 사용될 날도 멀지 않을 것 같다. 그러나 우주공간을 계산하는 천문학적인 수라면, 10의 20제곱인 해, 10의 24제곱인 자, 양이라는 10의 28제곱도 사용될 수 있을 것이다. 그리고 심오한 종교의 세계에 들어가면, 구라는 10의 32제곱, 간이라는 10의 36제곱, 정이라는 10의 40제곱이 사용되며, 특히 불교의 세계에서는 10의 44제곱인 재, 10의 48제곱인 극, 10의 52제곱인 항아사, 10의 56제곱인 아승기, 10의 60제곱인 나유타, 10의 64제곱인 불가사의, 10의 68제곱인 무량수를 사용한다.
- math_variational_formulation . . . . 2 matches
변분 정식화는 물체 거동을 수학적으로 표현하는 또 다른 표현식으로써 요구되는 미분 차수가 강형의 절반에 해당된다. 이 표현식은 미분 방정식에 가상 변위(virtual displacement)를 곱한 다음 물체 전 영역에 대해 적분(integration)을 취하고, 부분적분(integration by parts)을 통해 미분 차수를 절반으로 감소시켜 구하게 된다. 표현식에 포함되어 있는 가장 높은 미분차수가 강형의 절반 수준이라는 측면에서 변분 정식화를 약형(weak form)이라고 부르기도 한다. 변분정식화는 물리적인 측면에서 가상일의 원리(principle of virtual work)와 일맥 상통하며 이 원리에 대한 수학적 표현식에 해당된다.
- math_지수함수_삼각함수 . . . . 3 matches
''오일러의 수'' \(e\)는 수열 \( \left( 1+ \cfrac{1}{n}\right )^n\)의 극한이다.
\(t=i\phi\)일 때를 생각해보자.
이제 \(n \rightarrow \infty\)일 때, 극한값을 살펴보자.
- metamaterial . . . . 5 matches
4. 가공(Fabrication): 방향성이 있는 메타물질의 응용범위는 매우 넓지만, 등방성(isotropic)을 가지는 메타물질을 구현하는 것은 그 응용을 더욱 확장시켜줄 것이다. 따라서 3차원구조의 메타물질, 더블어서 파장이 작은 가시광 영역의 메타원자에 사용되는 수십 nm 크기의 구조체를 원하는 모양대로 가동하는 것은 현재의 나노공정 기술에 있어서도 쉽지 않은 일이다. 이를 위해서 대면적 공정기술과 더 높은 해상도의 구조물 가공기술이 개발되어야 한다. 이를 위해서 자가조립 방식의 조립기술이나 nano-imprint 방식의 기술들이 시도되고 있다.
앞에서 서술한 기술적 난제들을 극복한다면, 완벽한 메타물질의 구현이 가능할 것이다. 그러나 현 상태에서도 파장이 긴 파동, 음파, 마이크로파, THz파 등의 구조체가 쉽게 만들어질 수 있는 분야와 매질의 손실이 크게 중요하지 않은 흡수채, 차단재 및 파동집속 기술 등의 응용분야에서는 기술적인 실현이 어렵지 않게 빠른 시일 내에 응용기술들이 선 보일 것으로 전망한다.
메타물질의 응용분야가 폭넓고, 경우에 따라서 특수한 목적을 가지고 사용될 것이 예상되기 때문에, 산업화의 난제는 각개의 기술별로 상이할 것으로 판단된다. 대규모생산이 필요하지 않으며 원가나 수요에 민감하지 않은 특수한 응용 분야와, 구조체가 큰 메타물질의 경우는 (마이크로파 협대역 흡수체 등) 수년 이내에도 산업화가 가능할 것이나, 대량 생산과 나노구조 기술이 필요한 경우에는 (예를 들어 광대역 태양전지를 위한 완전흡수, 전도성 메타물질) 실험실 수준을 벗어난 대 면적, 저가가공기술의구현과, 사용가능한 원천 소재의공급, 대체재 (예로서 화석연료) 존재 여부 및 가격 등에 따라서 산업화 여부와 그 시기가 영향을 받으리라 생각된다. 파장이 긴 통신대역 안테나는 이미 2009년 Netgear, Rayspan, LG 등에 의해 일부 상용화되어 사용되고 있으며, 메타물질 안테나를 개발하는 Kymeta라는 회사는 빌 게이츠 등의 투자를 받기도 하였다[1]
굽힘진동은 다른 탄성 모드와는 전혀 다른 지배 방정식으로 표현되기에, 기존 탄성 메타물질에 적용되던 다양한 메타물질 과련 기법이 적용될 수 없는 분야이다. 기존의 탄성 모드는 메타물질의 밀도와 강성 두 종류 물성치로 파동 특성을 기술하지만, 굽힘진동은 밀도와 회전 관성(rotational inertia), 전단 강성과 회전 강성(rotataional stiffness)의 네 종류의 물성치로 파동 특성을 기술해야 한다. 따라서 굽힘 메타물질에서는 파동 특성을 네 종류의 물성치를 독립적으로 제어하는 것으로 조절이 가능하다. 굽힘 메타물질을 이용한 진동 차단 기술 중 가장 대표적인 예로, 최근 굽힘파의 특성을 이용하여 메타물질의 전단 강성과 회전 강성을 독립적으로 제어할 수 있다면 저주파에서 광대역 굽힘 진동을 차단하는 것이 가능하다고 밝혀졌다. 메타물질을 공학적으로 설계하여 굽힘 강성을 낮추고 동시에 전단 강성을 매우 높일 경우 매우 넓은 주파수 대역에서 저주파 진동이 차단 가능함을 이론적으로 발견한 것이다. 메타물질의 굽힘 강성과 전단 강성을 독립적으로 조절하기 위하여, 주로 기계적 링키지 메커니즘 분야에서 널리 사용되고 있던 힌지 연결구조가 공학적으로 도입되었다. 제안된 메타물질을 통해 차단 가능한 주파수 대역은 235Hz에서 4520Hz로, 이는 현재까지 구현된 그 어떠한 메타물질보다도 더 넓은 주파수 대역에서의 저주파 진동 차단 기술이다. 이 와 같이 굽힘 메타물질의 특성을 이용하여 보다 효율적인 진동 차단을 구현하고자 하는 다수의 연구가 진행되고 있으며, 이러한 연구들이 향후 진동 분야에서의 혁신을 가져올 수 있으리라 기대한다.( 오주환, 울산과학기술원, 기계항공 및 원자력공학부 조교수)
- modern_cpp . . . . 3 matches
= 균일 초기화 (Uniform initialization) =
위 4가지 방법은 모두 같은 결과를 나타낸다. 그 중 중괄호를 사용한 생성 방법을 균일 초기화(Uniform initialization)[* https://pppgod.tistory.com/27] 이라고 한다.
대입식에 오른쪽에 있는지 왼쪽에 있는지에 따라 R-Value, L-Value로 지칭하는데, 무조건 대입식에 오른쪽에 있다고 모두 R-Value라고 하지 않는다. L-Value도 대입식에 오른쪽에 올 수 있다. R-Value는 대입식에 왼쪽에 위치할 수 없다. R-Value는 temperary value로 일시적으로 사용되어지고 사라진다.
- mp3_unicade_change . . . . 6 matches
mp3 파일의 한글 입력 방법에 따라서 리눅스에서 한글이 깨져 보이는 현상이 있는데 이것을 해결해보자.
mp3 태그를 일일이 손으로 수정할수는 없는 일이다.
이것을 이용해서 하위 폴더에 있는 모든 음악 파일을 수정해 보자.
mutagen은 python 기반으로 python이 설치 되어 있는 모든 운영체제에서 사용할 수 있는 것으로 보인다. 고로 python이 설치 되어 있다면 mac에서도 동일하게 사용 가능하다. 설치는 아래와 같이 하면 된다.
- multi_GPU_pytorch . . . . 4 matches
위 방법으로 딥러닝을 여러 개의 GPU에서 계산하려면 동일 모델을 GPU에 복사하고 iteration마다 batch를 GPU 개수로 나눠서 forward 과정을 수행합니다. 이렇게 계산할 데이터를 나누는 과정을 'Scatter'라고 합니다. 이 과정은 Data Parallel이 수행해 줍니다.
이런 일련의 작업들을 단순히 아래 코드 한줄이면 된다.
nn.DataParallel()로 모델을 감싸면 학습을 할때 replicate → scatter → parallel_apply → gather 순서대로 학습 데이터를 쪼개고 합치는 일을 수행한다.
일반적으로 DataParallel을 사용한다면 아래와 같이 학습 코드를 구성할 수 있다.
- multiprocessing . . . . 7 matches
컴퓨터로 처리하는 작업은 크게 CPU-Bound Job과 I/O-Bound Job으로 나눌 수 있다. CPU-Bound Job은 일을 수행하는데 CPU 자원이 사용되는 일이고 I/O-Bound Job은 일출력이 주된 일이다. 이 두 가지 일을 적절히 배분하면 동시성을 통해서 전체적인 일의 수행을 효과적으로 할 수 있게 된다.
Threading library를 사용하면, CPU 활용에서 이점을 얻을 수 있는데 CPU 계산이 끝나고 I/O 작업을 수행해야 하는 순간 idle 상태가 되는데 이때 다른 쓰레드의 일을 수행할 수 있다. 이 때문에 CPU는 쉬지 않고 다른 작업을 수행한다.(CPU 100% 활용)
- neovim . . . . 3 matches
.vimrc 파일의 설정을 그대로 사용할 수 있다.
설치는 .config/nvim/autoload/ 아래에 plug.vim 파일을 복사해서 넣어주면 된다.
== 새로운 문서 파일을 만들었을 때 기본 형식이 입력되도록 하기 ==
- nextcloud_installation . . . . 1 match
'''/etc/php/7.3/fpm/pool.d''' 폴더에 '''nextcloud.conf''' 파일을 만들어 준다.
- nexus7_app_list . . . . 1 match
1. Astro : 파일 관리자
- nginx_php . . . . 4 matches
'''post_max_size''': php를 통해서 만들어지는 게시물의 최대 용량으로 첨부파일을 포함하는 것으로 upload_max_filesize 보다 큰 값을 준다.
'''upload_max_filesize''': php를 통해서 업로드 되는 파일의 최대 용량
'''max_file_uploads''': 한번에 업로드 할 수 있는 파일의 개수
'''max_execution_time''': php 스크립트가 실행되는 최대 시간을 의미하며, 용량이 큰 파일을 업로드할 경우를 대비해서 넉넉히 잡아준다.
- nims_cluster_install_guide . . . . 4 matches
AMD-APP-SDK-v2.8-lnx64.tgz 압축을 풀면 아래 파일들이 나온다.
네트워크를 통해서 파일을 받아와서 설치하는 방식으로 설치에 상당한 시간이 걸린다. (퇴근하기 전에 설치를 하는 것이 좋다. 너무 오래 걸림)
1. make mrproper 로 기본 작업을 한다. (한번이상 컴파일했다면 안해도된다.)
1. make modules 로 모듈을 컴파일한다.
- nims_rule . . . . 59 matches
제 13조 (시행일)소규는 소규에 명시된 경우를 제외하고는 제12조에 따라 공지된 날로부터 시행한다.
제 1조 (시행일)이 규정은 2012년 12월 31일부터 시행한다.
제 2조 (경과조치 )이 규정 시행일 이전에 시행된 사항은 이 규정에 의하여 시행한 것으로 본다.
제 1조 (시행일)이 규정은 2013년 7월 16일부터 시행한다.
제 2조 (경과조치 )이 규정 시행일 이전에 시행된 사항은 이 규정에 의하여 시행한 것으로 본다.
제 1조 (시행일)이 규정은 공지된 날로부터 시행한다.
제 2조 (경과조치 )이 규정 시행일 이전에 시행된 사항은 이 세칙에 의하여 시행한 것으로 본다.
제 1조 (시행일)이 규정은 공지된 날로부터 시행한다.
제 9 조 (감사인) 소장은 일상감사 업무의 효율성을 위해 기초과학연구원 감사와 협의하여 감사인을 임명할 수 있다.
① 소장은 연구소 업무수행의 효율성을 위하여 부서장 또는 연구책임자에게 그 권한의 일부를 위임할 수 있다.
제 1 조 (시행일) 이 규정은 공포한 날부터 시행한다.
제 2 조 (경과조치) 이 규정 시행일 이전에 시행된 사항은 이 규정에 의하여 시행한 것으로 본다.
제 1 조 (시행일) 이 규정은 공포한 날부터 시행한다.
제 2 조 (경과조치) 2016년 1월 1일부터 이 규정 시행일 이전까지 시행된 사항은 이 규정에 의하여 시행한 것으로 본다.
제 1 조 (시행일) 이 규정은 공포한 날부터 시행한다.
제 2 조 (다른 소규의 개정) 소규관리 규정, 보안정책심의위원회 규정, 안전보건관리위원회 규정, 여비규정, 복무규정, 대외활동 규정, 위탁교육 규정, 연구사업 관리규정, 비정규직 활용세칙, 영년직 연구원 임용세칙, 수탁연구사업 업무세칙, NIMS 방문교수 활용지침, 연수생 활용지침, 해외교육훈련비 지급지침, 위탁연구사업 관리지침, 통신시설의 배치 및 관리지침, NIMS 펠로우십 운영지침 일부를 다음과 같이 개정한다.
제 1 조 (시행일) 이 규정은 공포한 날부터 시행한다.
제 1 조 (시행일) 이 규정은 공포한 날부터 시행한다.
제 2 조 (다른 소규의 개정) 보안업무 취급규정, 안전보건 관리규정, 지식정보자원 관리규정, 비정규직 활용세칙, NIMS 펠로우십 운영지침 일부를 다음과 같이 개정한다.
제 2 조 (여비의 종류) 여비는 운임, 현지교통비(국외 여행시 일비), 숙박비, 식비, 이전비, 가족여비 및 준비금(국외파견시)으로 한다. (개정 2015.11.10.)
- nips2016 . . . . 2 matches
Big Data 시대 데이터는 넘쳐나고 가공할 시간적 여유는 없는 시대 누가 일일이 데이터를 정리해서 의미를 찾으려고 하겠는가? 그냥 모든 데이터를 기계에 넘겨주고 분석을 맡기고 싶지 않겠는가? 누구나 그런 생각을 해봤을 것이다. 그러한 방법을 Unsupervised Learning이라고 한다. 사람의 지도 없이 기계가 스스로 데이터를 기반으로 학습하는 방법. 하지만 기계가 스스로 하는 데는 정확도 측면에서 한계가 있다. 사람의 의도를 모르기 때문이다. 기계 스스로가 만들어 놓은 지식 위에 사람(Human)의 의지만 넣을 수 있다면 어떨까? Unsupervised Learning이 끝나면 Labeled 데이터를 이용해서 Supervised Learning을 한다. 이렇게 함으로써 사람의 의지를 기계에 전달할 수 있게 된다. 이 단계까지 진행되면 막대한 데이터를 사람의 의지대로 분석할 수 있게 된다. 마지막으로 기계가 사람을 넘어 설 수 있도록 Reinforcement Learning으로 마무리하게 된다. 게임의 규칙처럼 정해진 규칙에서 가장 높은 점수를 내도록 트레이닝 된 기계가 정확도를 높이는 것이다. 이것이 이번 학회의 화두이고 앞으로 딥러닝이 진행할 길인 것이다.
- notebook_lenovo_e145 . . . . 8 matches
받은 파일을 소스 컴파일하고 USB 랜카드를 연결하면 바로 사용할 수 있다.
우분투는 Unity를 사용하려면 꼭 단축키를 사용하게 되지만,민트에서는 그렇게 많은 단축키를 사용할 일은 없어요,
어떤경우에 프로그램이 멈추는 프리즈 상태일때 사용하게 됩니다.
지금 실행중인 프로그램들이 많거나 다른프로그램 실행중에 일일이 창을 찾아가기 번거롭죠?
복사한 파일이나,경로를 터미널에서 붙여 넣을때 사용합니다.
일반적인 복사는 Ctrl + C, 모두선택은 Ctrl + A, 붙여넣기는 Ctrl + V 입니다.
- notebook_msi_x200 . . . . 1 match
feh --bg-scale <이미지파일> &
- numerical_analysis_note . . . . 1 match
[:Taylor_polynomials 테일러 다항식(Taylor polynomials)]
- odroid_index . . . . 8 matches
이미지를 받으면 xz로 압축되어 있는데 ''unxz ubuntu-18.04.1-3.10-minimal-odroid-c1-20180802.img.xz''와 같이 압축을 풀어 줍니다. 압축이 풀리면 '''.img''' 파일이 생성됨.
exfat를 사용하기 위해서는 파일시스템을 설치해줘야 한다.
이제 부터 논리적인 파티션을 나누고 마운트할 파일시스템을 입히는 일을 해야 한다.
먼저 파티션을 나누는 일은 fdisk로 가능하다.
파티션을 나눴다고 바로 쓸수 있는 것은 아니다. 이 파티션을 사용할 파일 시스템으로 포멧팅을 해줘야 한다.
나는 리눅스 파일시스템인 ext4를 사용하려고 한다.
토펜트 파일을 받을 수 있도록 설정한다.
- omicron_installation . . . . 3 matches
>> make 최초 컴파일시 예러 발생 아래 파일을 제거하고 컴파일해야 한다.
- opencl_guide . . . . 15 matches
* 상수 메모리 : 전역 메모리의 일부, 커널이 실행 되는 동안 변하지 않고 상수로 유지 됨. 상수 메모리는 호스트에서 할당하고 초기화 한다.
태스크 병렬성 프로그래밍 모델에서는 다른 커널에서 사용하는 NDRange와는 상관없이 단일 작업 아이템으로 실행 되는 커널을 정의 한다.
|표 1. OpenCL 헤더파일의 저장 경로 |<tablewidth="500px">개발환경 || 기본 저장 경로 ||
|표 2. OpenCL 라이브러리 파일() 저장 경로 |<tablewidth="500px">개발환경 || 기본 저장 경로 || 비고 ||
AMD-APP-SDK-v2.8-lnx64.tgz 압축을 풀면 아래 파일들이 나온다.
'''컴파일 하기 '''
또한 일반적으로 주소 공간 수식자를 지정하지 않으면 ''private''를 저정한 것으로 생각한다.
OpenCL C 언어에는 헤더 파일을 호함하거나 라이브러리에 연겨시키지 않아도 사용할 수 있는 몇 가지 내장 함수가 있다.
// 조건이 참일 때 -1 값을 갖는 경우
int cmp = a < b; //참일때 cmp = 0xffffffff, 거짓일 때 cmp= 0x00000000
스크리치 패드 메모리의 장점으로는 원본 내용과의 일관성을 유지하기 위한 하드웨어 구조가 단순하다는 것이다.
말인 즉슨 동일 그룹에 속한 워크 아이템 끼리는 메모리 공간을 쉐어 하게 되고
||'''기능''' ||제일 먼저 호출 되는 함수로 사용 가능한 플랫폼을 얻어온다. ||
||CL_PLATFORM_PROFILE || char[] ||지원하는 프로파일의 종류 ||
- opencl_reqd_work_group_size . . . . 1 match
를 이용해서 kernel 컴파일러에게 work group size 정보를 미리 알려주게 되면 워크 그룹 사이즈에 맞게 최적화 된 커널 이미지를 얻을 수 있다.
- opencv_c_c++ . . . . 1 match
로컬 영역에서 대비 정보를 이용하여 표현하는 특징으로 지역적으로만 특징을 추출하기 때문에 전체적으로 조도 변화에 둔감하여 광원 변화에도 일정한 결과를 내어준다.
- osx_utility . . . . 4 matches
#title GCC 컴파일해서 설치하기
아래 소스를 컴파일하기 위해서는 컨맨드라인 명령어 셋을 설치해야 한다.
* '''컴파일 하기'''
LD_LIBRARY_PATH에 /user/local/gcc-5.3.0/lib를 넣어주어야 컴파일시 링크가 정상적으로 이루워진다.
- p_value . . . . 11 matches
'어떤 가설이 참일 때 하나의 결과를 관찰할 확률'은 '어떤 결과가 관찰되었을 때 하나의 가설이 참일 확률'과 다르다.
P값(녹색 부분)이란 ‘영가설이 참이라고 가정할 때, 관찰된(또는 그보다 더 극단적인) 결과가 일어날 확률’을 말한다.
미국 통계학회(ASA: American Statistical Association)는 3월 7일 발표한 성명서에서(참고 1), 다음과 같이 경고했다. "P값(P value)은 과학적 증거가 얼마나 강력한지를 판단하는 데 흔히 사용되는 척도다. 그런데 P값은 가설이 참이거나, 결과가 중요한지 여부를 결정할 수 없다. 따라서 P값을 오용(誤用)하면, 재현되지 않는 연구결과가 증가하는 데 기여하게 된다(참고 2)." ASA가 P값 사용에 관한 가이드라인을 발표하는 특단의 조치를 취한 것은 매우 이례적이다.
ASA는 이번 성명서에서, "연구자들이여, P값 하나만을 근거로 과학적 결론을 내리거나 정책을 결정하지 말라"고 권고했다. ASA의 권고는 다음과 같이 계속된다. "연구자들은 통계적으로 유의한 결과를 도출하는 데이터분석에만 치중하지 말고, 계산을 통해 이루어지는 모든 통계적 검증과 선택까지도 서술해야 한다. 그러지 않으면 연구결과가 탄탄하다는 착시를 일으킬 수 있다."
P값은 영가설(null hypothesis)을 검증하고 기각하는 데 흔히 사용되는데, 영가설은 일반적으로 '두 그룹 간에 차이가 없다'거나 '한 쌍의 특징 사이에 상관관계가 없다'고 진술한다. P값이 작으면 작을수록 관찰된 값이 우연히 일어났을 가능성이 낮으므로, 영가설이 참이라고 추정된다. 일반적으로 P값이 0.05보다 작으면, 하나의 발견이 통계적으로 유의함을 의미하는 것으로 받아들여진다.
그러나 ASA의 성명서에 의하면, 이상과 같은 관행이 꼭 올바른 것은 아니라고 한다(참고 3). P값이 0.05보다 작다(P < 0.05)는 것은 '주어진 가설이 참일 확률은 95%이다'라는 것을 의미하지 않는다. 그것이 의미하는 것은 다음과 같다: "영가설이 참이고 다른 모든 가정들이 타당하다면, 관찰된 결과 이상으로 극단적인 결과를 얻을 확률은 5%이다." 그리고 P값은 어떤 발견이 중요함을 의미하지도 않는다. 예컨대, 하나의 약물이 환자의 혈당수준에 확률적으로 유의한 효과를 미친다 하더라도, 치료효과가 없을 수 있다.
사실 P값에 대한 비판이 낯설지는 않다(참고 4). 2011년에는 P값을 동원해 통계적 유의성을 강조한 연구결과가 비판을 받았다. 연구의 내용은 '비틀즈 음악을 들으면 대학생들이 젊어진다'는 것이었다(참고 5). 더욱 논란이 된 것은 2015년, 한 다큐멘터리 영화제작자들이 (일부러 조잡하게 설계한) 임상시험결과를 이용하여 "초콜릿을 먹으면 체중감소에 도움이 된다"는 결론을 도출한 것이다. 물론, 이 논문은 나중에 기각되었지만 말이다(참고 6).
2. P-값은 '연구 가설이 참일 확률'이나, '데이터가 무작위적인 우연만으로 생성된 확률'의 척도가 아니다.
- parallel_processor_flynn . . . . 2 matches
단일 명령으로 복수의 연산기에 전달하더라도 각각의 연산기는 서로 다른 데이터를 가지고 연산하는 시스템
벡터 연산기라고 불리는 일부 슈퍼 컴퓨터가 대표적인 예이고, 마이크로 프로세서에도 SIMD가 탑재 되었다.
- parallel_programming_ex . . . . 2 matches
'''kernel_baseline.cl''' - 기본이 되는 opencl 커널 파일
컨테스트 스위칭의 오버헤드를 고려할때 하나의 Work Item에 많은 일을 할당하는 것이 유리하다.
- pci_interface_review . . . . 1 match
외부 가속기를 사용하면서 PCI에 대해서 모르고 사용한다는 것이 얼마나 허무한 일인지 알게 되었다.
- poisson_distribution . . . . 3 matches
이항 분포를 시간의 맥락으로 바꿔보자. 하루 동안 내 사이트에 방문한 사람이 한 명이 확률이 0.1이라고 하자. 28일, 즉 4주 동안 10명이 방문할 확률을 이항 분포의 맥락에서 생각하면, \(B(10;28,0.1)\)로 적을 수 있다. 그런데 이러한 모델링은 어딘가 어색하다.
문제 정의에서 이항 분포의 모델링은 하루 동안 사이트 방문객이 한 명일 확률(0.1)에 기대고 있다. 그런데 하루에 방문객이 2명 이상이면 어떻게 표현할 수 있을까?
이항 분포는 단위 시간당 사건이 한 번 일어날 확률에 기대고 있기 때문에, 앞서 언급한 것처럼 단위 사간을 최대한 잘게 쪼개면 어찌 어찌 될거 같다.
- poisson_process . . . . 2 matches
홈페이지의 방문자의 방문 빈도, 휴대전화의 메세지 수신 간격, 고속도로에서의 사고 등은 시간과 공간에 독립적으로 일어난다. 이러한 현상들은 연속 구간(보통 시간)에서의 발생하거나 또는 도착하는 사건들을 모델링하는데 '''푸아송 과정'''(Poisson process)을 사용한다.
임의의 시간 동안 \(\lambda\)의 비율로 사건이 발생한다고 생각해보자. 각 사건은 독립적으로 발생하며 일정 비율 만큼만 발생한다. 이러한 과정을 확률적으로 설명하는 모델을 점과정이라고 한다.
- ppsspp_install_guide . . . . 2 matches
이부분을 바로 설정해주도록 CMakeList.txt파일을 수정해야 한다.
와 같이 해주면 라이브러리 경로가 설정 되는데 그래도 원하는 경로로 설정이 안 되면 CMakeList.txt파일을 수정 하자.
- program_language_c . . . . 4 matches
= Hello world 예제 컴파일 하기 =
''' 컴파일 하기 ''
* 컴파일 시점에 사이즈가 정해진다. 스텍이라는 구조를 사용하기 때문이다.
연속된 메모리 공간을 할당 받는다 컴파일시점에 사이즈가 결정 된다.
- programming_atod . . . . 1 match
파일로 부터 받아 들이 문자열을 double형 배열에 저장하는 프로그램
- programming_cli_ex . . . . 1 match
Linux gcc를 이용해서 컴파일 한다.
- programming_clock_gettime . . . . 1 match
'''※ 컴파일 시에 동적 라이브러리 -lrt 를 추가해야 함'''
- programming_cpp_template . . . . 4 matches
탬플릿은 메크로와 비슷한 성격을 갖고 있는데 그것은 컴파일시에 자료형이 결정이 되고 구문이 치환이 된다는 것이다.
이것과 동일하게 됩니다.
각 자료형 마다 동일한 함수를 만들어 줘야 할까요?
인자로 들어오는 자료형이 무엇이냐에 따라서 자료형이 바뀌게 되기 때문입니다. (컴파일 타임에 적용 된다.)
- programming_f_function . . . . 22 matches
시스템 함수인 open(), read(), write(), 등의 함수들과 비슷한 일을 해주는 것들인데.. 뭔가가 다르다.
|| "r" ||읽기 전용. 파일이 반드시 있어야 합니다. ||
|| "w" ||쓰기 전용. 파일이 없으면 생성되고, 파일이 있다면 기존 내용은 지워집니다. ||
|| "a" ||내용 추가. 파일이 없으면 생성되고, 파일이 있다면 기존 내용 뒤에 추가됩니다. ||
|| "r+" ||읽기와 쓰기용으로 열기 파일이 없으면 생성되고, 파일이 있다면 기존 내용에 덮어 쓴다. ||
|| "w+" ||읽기와 쓰기용으로 열기 파일이 없으면 생성하고, 파일이 있다면 내용을 지우고 기록한다. ||
|| "a+" ||읽기와 쓰기용으로 열기 파일이 없으면 생성하고, 파일이 있다면 파일 끝에 내용을 추가한다. ||
2진 모드란? 프로그램상에서 파일로 데이터를 쓰거나 읽어 들이는 경우 아무런 데이터의 변화도 일으키지 않는 데이터 입·출력 모드를 의미한다.
반면, 텍스트 모드란? 프로그램상에서 파일로 데이터를 쓰거나 읽어들이는 경우에 데이터 변환이 일어나는 입·출력 모드를 의미한다.
'''참고''' : 텍스트 모드와 2진 모드의 차이는 논리적인 파일의 끝을 표현하는 방법의 차이도 있다. 더블어 유닉스 계열의 운영체제는 2진 모드와 텍스트 모드를 구분 짓지 않는다.
= 파일 입·출력 함수 =
파일의 끝에서 더 이상 읽을 것이 없을 경우 리턴하는 값을 확인해서 파일을 끝을 확인하는데 각각의 함수에 따라서 리턴하는 값이 다르다.
|| 함수 || 파일의 끝에서 리턴 되는 값 ||
- programming_index . . . . 1 match
* [:programming_sh_copy 조건에 따른 파일 생성(IF 조건문)]
- programming_library . . . . 56 matches
라이브러리란 특정한 코드(함수 혹은 클래스)를 포함하고 있는 컴파일된 파일이다. 이러한 라이브러리를 만드는 이유는 자주 사용되는 기능을 main 함수에서 분리시켜 놓음으로써, 프로그램을 유지, 디버깅을 쉽게하고 컴파일 시간을 좀 더 빠르게 할수 있기 때문이다.
만약 라이브러리를 만들지 않고 모든 함수를 main 에 집어 넣는다면, 수정할때 마다 main 코드를 수정해야 하고 다시 컴파일 해야 할것이다. 단연히 수정하기도 어렵고 컴파일에도 많은 시간이 걸린다.
반면 라이브러리화 해두면 우리는 해당 라이브러리만 다시 컴파일 시켜서 main 함수와 링크 시켜주면 된다. 시간도 아낄분더러 수정하기도 매우 쉽다.
가장 흔하게 쓰일 수 있는 "정적 라이브러리"와 "공유 라이브러리", "동적 라이브러리" 가 있다.
정적 라이브러리는 object file(.o로 끝나는)의 단순한 모음이다. 정적라이브러리는 보통 .a의 확장자를 가진다. 간단히 사용할 수 있다. 컴파일시 적재되므로 유연성이 떨어진다. 최근에는 정적라이브러리는 지양되고 있는 추세이다. 컴파일시 적재됨으로 아무래도 바이너리 크기가 약간 커지는 문제가 있다.
공유 라이브러리가 프로그램이 시작 될때 적재되는 반면 이것을 프로그램 시작 중 특정한 때에 적재되는 라이브러리이다. 플러그인 모듈등을 구현할때 적합하다. 설정 파일등에 읽어들인 라이브러리를 등록시키고 원하는 라이브러리를 실행 시키게 하는 등의 매우 유연하게 작동하는 프로그램을 만들고자 할때 유용하다.
예전에 libz 라는 라이브러리에 보안 문제가 생겨서 한창 시끄러웠던적이 있다. libz 라이브러리는 각종 서버프로그램에 매우 널리 사용되는 라이브러리였는데, 실제 문제가 되었던 이유는 많은 libz를 사용하는 프로그램들이 "정적 라이브러리" 형식으로 라이브러리를 사용했기 때문에, 버그픽스(bug fix)를 위해서는 문제가 되는libz를 사용하는 프로그램들을 다시 컴파일 시켜야 했기 때문이다. 한마리로 버그 픽스 자체가 어려웠던게 큰 문제였다. 도대체 이 프로그램이 libz를 사용하고 있는지 그렇지 않은지 알길이 없었을 뿐더러 그 많은 프로그램을 다시 컴파일 한단는 것이 힘들었다.
이 라이브러리를 만들기 위해서 mysum.h와 mysum.c 2개의 파일이 만들어질 것이다.
위의 프로그램을 컴파일 하기 위해서는 라이브러리의 위치와 어떤 라이브러리를 사용할 것인지를 컴파일러한테 알려줘야 한다.
'-L' 옵션은 라이브러리 파일의 위치를 알려주고,
정적라이브러리 상태로 컴파일한 프로그램의 경우 컴파일시에 라이브러리가 포함되므로 라이브러리를 함께 배포할 필요는 없다.
print_sum.c 가 컴파일되기 위해서 사용할 라이브러리 형태가 정적라이브러리에서 공유라이브러리로 바뀌였다고 해서 코드가 변경 되는 것은 아니다.
컴파일 방법 역시 동일하며, '''단지 라이브러리 제작 방법에 있어서만 차이가 있다.'''
우선 mysum.c를 -fPIC 옵션을 주어서 오브젝트 파일을 만들고, (-fpic 옵션을 줄수도 있는데 이경우 동작하지 않을 수 있으며 보다 작은 사이즈의 바이너리를 생성한다.)
'''-soname''' : 링커인 collect2에 전달 되는 옵션으로 공유라이브러리의 soname을 정하는 옵션, 실행시 참조할 파일 이름을 지정한다.
만들어진 라이브러리를 적당한 위치로 옮기고 ln을 이용해서 컴파일러에서 인식할 수 있는 이름으로 심볼릭 링크를 걸어준다.
[root@localhost test]# ln -s /usr/local/lib/libmysum.so.1.0.1 /usr/local/lib/libmysum.so # gcc 링크를 위한 파일
[root@localhost test]# ln -s /usr/local/lib/libmysum.so.1.0.1 /usr/local/lib/libmysum.so.1 # 동적 링크를 위한 파일
''컴파일시 참조하는 파일과 실행시 참조하는 파일이 다름을 알 수 있다.''[[footnote(유닉스·리눅스 프로그래밍 필수 유틸리티 3-4 ''라이브러리를 만들어보자'' 中)]]
컴파일 방법은 정적 라이브러리를 이용한 코드의 컴파일 방법과 동일하다.
- programming_mpi . . . . 3 matches
host 파일에는 mpi가 수행될 호스트들의 host name(ip) 정보가 들어가게 된다.
'''host 파일의 예'''
위 코드를 컴파일하고 실행하면 다음과 같은 결과를 얻을 수 있다.
- programming_open_flag . . . . 10 matches
시스템 함수 open()에서 파일 오픈 옵션.
이 옵션은 fcntl.h에 정의 되어 있기 때문에 헤더 파일을 추가 해줘야 한다.
* '''O_APPEND''' : 파일 오프셋을 파일의 끝으로 이동, 끝부분에 추가할 수 있게 해줌
* '''O_TRUNC''' : 파일을 쓰기 위해서, 열은 파일의 내용을 지워서 길이가 0이 되도록 만든다.
* '''O_CREAT''' : 명시된 파일이 존재하지 않으면 파일을 만든다.
혹시라도 있을지 모르는 파일 덮어 쓰기를 방지하고 싶다면 O_CTREAT | O_EXCL
조합을 사용할 것을 추천한다. 이경우에 파일이 존재하면 에러를 리턴한다.
- programming_openmp . . . . 12 matches
요즘 들어 멀티코어라는 말을 흔하게 듣게 되는데 컴퓨터뿐만 아니라 휴대폰 및 모발일 기기에도 듀얼 코어니 쿼드 코어니 하는 말을 한다. 모든 기기의 멀티코어 시대가 도래한 것이다. 싱글 코어로 계산량을 늘리는데 한계(?)에 부딪친 CPU 제조사들은 싱글 코어를 여러게 붙인 멀티코어 제품을 속속 내놓고 있다.
테이블에 앉은 사람들은 모두 배가 고픈 상태로 탐욕적으로 토크와 나이프를 쥐려다 보니 누구는 포크나 쥐었고 또 다른 누구는 나이프만 들게 되어 스테이크를 먹지 못하는 일이 생길 수 있다.
이런 경우를 피하기 위해서는 자신이 작업을 진행하기 위해서 필요한 모든 자원원 얻지 못해 작업을 수행하지 못 하는 상태에서는 확보한 자원을 반환하고 일정 시간 후에 자원 할당을 받을 수 있도록 해서 특정 자원을 잡고 있는 상태가 지속 되지 않게 해야 한다.
* 컴파일러 지시자 (Pragma Directive)
컴파일러별 컴파일 옵션 및 Default 값
|'''표 1'''. 컴파일러별 컴파일 옵션 및 Default 값 |<tablewidth="700px"> '''Compiler''' || '''Compiler Options''' || '''Default behavior for # of threads (OMP_NUM_THREADS not set)''' ||
버전에 따라서 적용되는 범위를 지정하여 사용할 수 있는데, 왜 이런 작업을 해야 하는지 의문이 들 수 있는데, 아무래도 컴파일러 마다 적용되는 OpenMP 버전이 다르고 또 버전별로 지원이 되는 사양이 다를 수 있기 때문이다. 특히 아래와 같은 for 문을 적용할 때 2.0 버전의 경우 정수형만을 적용을 받지만 3.0이상은 포인터도 적용이 가능하다.
== 컴파일러 지시자(Compiler Directives) ==
스래드 마다 별도의 캐쉬를 사용하기 때문에 비연속 메모리를 엑세스 하는 것보다 연속된 메모리를 엑세스 하는 것이 캐쉬 미스를 줄일 수 있어서 보다 좋은 성능을 기대 할 수 있다.
* task : 작은 작업 단위로 분할해서 스래드에 일을 할당하기 위해 쓰임. task는 비동기 명령으로 동기를 마추기 위해서는 taskwait를 사용함.
- python_c_c++ . . . . 27 matches
파이션을 사용자에게 여러가지 편의를 제공해주는 아주 좋은 인터프린터 프로그램 언어임에 틀림 없지만 사용하다 보면 성능 측면에서 부족함과 답답함을 느끼는 순간이 있다. 텍스트를 파싱하고 간단한 벡터와 메트릭을 연산할때는 좋은데 계산량이 많거나 처리해야 할 일이 많을 경우 C나 C++에 비해 상대적으로 느림을 알 수 있다. 이런 경우 계산 부분만 C나 C++로 할 수 없을까 하는 생각을 하게 된다. 지금 부터 알아보려고 하는 것은 이런 문제를 해결하기 위한 방법이다.
'''sudo apt-get install libboost-python-dev'''로 배포판에서 제공하는 바이러리 파일을 받아서 사용할 수 있다.
boostrap.sh을 실행하면 config를 생성해준다. config 파일에는 다양한 설정을 넣을 수 있는데 간단하게 header와 라이브러리 패스를 지정할 수 있고 연동될 파이썬을 넣을 수 있다. 절대 경로를 넣어서 특정 파이썬 버전을 연동할 수도 있고 그게 아니라면 현제 사용하는 파이썬을 연동하기 위해서 python만 넣어도 무방하다.
이렇게 하면 "project-config.jam"이 생성된다. 이를 이용해서 b2 명렁어로 컴파일을 진행한다. 컴파일이 끝나면 b2 install 이라고 하면 바이러리 복사가 진행된다.
* booststrap.sh을 사용해서 설정파일을 생성하면 project-config.jam 파일이 생성 되는데 생성된 파일을 열어서 실제 설정값이 잘 들어 갔는지 확인해봐야 한다. 설정값이 정상적이지 못하면 문제가 발생한다.
컴파일 과정에서 python의 헤더를 참조하게 되는데 컴파일러가 python 헤더를 못 찾는 경우 아래와 같은 방법으로 해결할 수 있다.
소스코드를 보면 두개의 헤더 파일을 포함하고 있는 것을 볼 수 있다.
'''boost/python.hpp''' 파일이 Boost Python 라이브러리의 헤더 파일이다.
두번째 ''stdexcept'' 파일은 예러를 던지기 위해서 사용하는 파일이다.
== 컴파일 하기 ==
컴파일은 아래와 같이 갖가지 옵션들을 넣어서 직접 컴파일 할 수 있다. (옵션이 너무 많다... ㅠ)
더 간단하고 편한 방법으로는 파이션에서 제공하는 distutils을 사용해서 setup.py 파일을 만들어 사용하는 방법이다.
이렇게 하면 컴파일이 되고 디폴트 파이션 경로에 hello.so 파일이 복사가 된다.
복사된 파일과 경로가 uninstall.txt에 저장 되기 때문에
컴파일러나 컴파일 옵션을 변경하기 위한 방법으로 아래와 같이 환경변수를 변경해서 넘기는 방법을 쓸 수 있다.
사용할 파일은 위에서 사용한 hello.cpp를 클래스로 확장 수정해서 사용해 보도록 하자.
컴파일은 위에서 사용했던 setup.py 을 그래도 사용해도 된다.
일반적인 자료형을 받아오는 것은 위의 예제에서 처럼 간단하다. 하지만 파이션에서는 리스트, 딕션어리, 듀플.. 등 파이션만의 자료형을 사용하는데 이것을 어떻게 C,C++에 넘기고 결과로 리턴할 수 있을까를 고민해 보자.
- python_chat_program . . . . 43 matches
2. 파일 전송
채팅 프로그램에 접속하기 위한 계정을 관리하기 위해 DB를 사용하고 분리된 채팅방에서 사용자간 파일을 교환할 수 있도록하고 채팅방별로 인가된 사용자만이 파일에 접급할 수 있도록 한다.
파이썬은 많은 기능을 라이브러리로 제공하고 있기 때문에 필요한 기능을 구현하기 위해 필요한 라이브러리가 있는지를 조사하는 것이 중요하다. 필요한 기능이 없다면 구현해야 한다. 하지만 그런 일은 흔치 않다. 파이썬에서 농담처럼 하는 말중에 어떻게 날 수 있냐는 질문에 "I just typed import antigravity."라는 말이 있다.[* "Python" <https://xkcd.com/353/>. (21 Nov 2017) ] 파이썬 라이브러리의 방대함을 빙자한 말이다. 필요한 기능이 있다면 라이브러리를 import 하면 된다.
시스템의 환경변수와 시스템 명령어를 사용하기 위한 라이브러리로 '''os'''와 '''sys'''를 사용할 수 있다. 시스템 시간을 갖고 오기 위해 '''time''' 라이브러리를 사용했다. 서버는 여러 클라이언트의 요구에 응답해야 하기 때문에 멀티 쓰레드로 동작하여야 한다. 클라이언트도 채팅을 하면서 파일 교환을 하려면 멀티 쓰레드가 필요한다. 이를 위해서 '''threading''' 라이브러리를 사용했다. DB는 mysql이나 오라클을 사용 할 수 있지만 간단하게 사용할 수 있는 sqlite를 사용했다. 파이썬에서는 '''sqlite3''' 라이브러리를 제공하고 있다.
SQLite는 별도의 DB 서버가 필요없이 DB 파일에 기초하여 데이타베이스 처리를 구현한 Embedded SQL DB 엔진이다. SQLite는 별도의 복잡한 서버 설치가 필요 없고, 쉽고 편리하게 사용할 수 있다는 점에서 널리 사용되고 있다. 오늘날 대부분의 Mac OS X 나 리눅스에서는 SQLite을 기본적으로 내장하고 있지만, 만약 시스템에 내장되어 있지 않는 경우는 http://www.sqlite.org 에서 다운받아 설치할 수 있다. SQLite는 기본적으로 SQLite DB 엔진과 "sqlite3" 라는 Command line tool 을 갖고 있다.[* Alex Lee. (2016-2017). "예제로 배우는 Python 프로그래밍 - SQLite 사용" <http://pythonstudy.xyz/python/article/204-SQLite-사용>. (21 Nov 2017)]
1. 사용자가 로그인 시도 시, 사용자가 입력한 암호의 해시값이 DB에 저장된 값과 동일한지 비교
1. 일치한다면 사용자 로그인 성공, 그렇지 않다면 잘못된 입력임을 알려줌.
룩업 테이블은 매우 빠르게 동일한 유형의 해시를 해킹하는데 매우 효과적인 방법이다. 일반적으로 비밀번호 사전에서 해쉬값들을 미리 추출해 놓고 비밀번호를 여기에서 검색 한다. 룩업 테이블의 장점은 초당 백개 정도의 비밀번호를 검색할 수 있고 해시 데이터가 수십억개가 넘더라도 사용할 수 있다.
역 룩업 테이블의 경우, 공격자는 추출한 사용자 정보를 가지고 동일한 암호를 사용자끼리 그룹핑을 한다. 공격자는 다양한 추측 암호를 입력하여 검색하고 해당 추측 암호와 일치하는 사용자 목록을 가지고 온다. 이 방법은 일반적으로 많은 사용자가 동일한 비밀번호를 사용하기 때문에 매우 효율적이다.
룩업 테이블과 레인보우 테이블은 암호가 해킹할 해시와 동일한 방법으로 해싱되어 있어야 해킹이 가능하다. 이 말은 동일 암호에 대해서 서로 다른 해시값을 갖는다면 룩업 테이블과 레인보우 테이블 방법으로는 해킹할 수 없다는 말이다. 암호를 해싱할때 임이의 문자열을 추가 해서 해싱을 하는 것이다. 이때 추가된 임의의 문자열을 소금값(Salt)라고 한다.
소금 값은 암호학적으로 안전한 난수 생성기에 의해 생성(Cryptographically Secure Pseudo-Random Number Generator, CSPRNG)되어야 한다. CSPRNG은 C언어의 rand() 함수처럼 일반 난수생성기와 매우 다르다. 이름을 통해 짐작하듯이 CSPRNG는 암호화를 사용하도록 설게되어 있고 이 것은 완벽히 예측 불가능 한것을 의미한다. 소금값은 예측가능한 것을 사용할수 없기 때문에 반드시 CSPRNG를 사용해야 된다.
소금값은 사용자와 암호 별로 유일한 값을 가져야 한다. 사용자 계정을 생성할때와 암호를 변경할때마다 새로운 임의의 랜덤 소금값을 사용해서 해싱 해야 된다. 소금값은 절때 재사용 하지 말아야 되고 길게 만들어야 되기 때문에 다양한 값을 생성할 수 있다. 소금값은 해시 함수의 출력 값 만큼 길게 만들고 사용자 계정 테이블에 같이 저장되도록 한다.
== 파일 전송 ==
파일 전송 기능은 채팅과 비슷하게 소켓을 통해서 통신을 하는 것이다. 차이라고 하면 주고 받는 내용이 파일의 일부라는 것이다.[* K. Hong "NETWORK PROGRAMMING - SERVER & CLIENT B : FILE TRANSFER" <http://www.bogotobogo.com/python/python_network_programming_server_client_file_transfer.php>. (21 Nov 2017)]
파일을 주고 받기 위해서는 서로 보내는 파일의 이름을 알려주어야 한다. 또한 인가된 사용자에게만 파일에 접근할 수 있어야 한다. 파일은 서버로 전송 되고 인가된 사용자는 서버에서 파일을 다운받을 수 있다. 그러기 위한 통신 프로토콜을 아래와 같이 정의 했다.
'''파일 업로드'''
1. 클라이언트가 서버에 업로드를 진행한다는 의사 전달. (업로드할 파일 이름 전송)
2. 서버는 파일을 받기 위한 소켓 port를 개방하고 port 번호를 클라이언트에 전달.
4. 연결된 port를 통해서 파일을 전송.
5. 파일과 소켓 접속을 종료함.
- python_generator . . . . 15 matches
앞서 Range 라는 클래스를 통해 이터레이터를 살펴보았습니다만, 이 코드에는 불편한 부분이 있습니다. 대부분의 작업은 __next__() 메쏘드를 통해 구현되는데, 매번 예전의 상태를 복구한 후, 작업을 수행하고, 다시 상태를 저장하는 작업을 반복하게 됩니다. Range 와 같은 간단한 작업에서야 문제될 것이 없지만, 알고리즘을 기술하는 자연스러운 방식에서 벗어나 있기 때문에, 작업이 복잡해질수록 점점 문제가 됩니다. 이런 스타일의 프로그래밍은 이벤트 주도형 프로그래밍(event-driven programming)에서 자주 등장하는데, 비동기 IO(Asynchronous IO) 나 GUI 프로그래밍을 해 보셨다면 이미 익숙할 겁니다.(지금 우리가 걷고 있는 길은 이 문제들에 대한 직접적인 해결책으로 이어집니다. 하지만 아직은 갈 길이 멉니다.)
파이썬은 함수 정의에 yield 키워드가 등장하면 그 함수 전체를 제너레이터로 인식하고, 특별한 VM 코드를 생성해냅니다. 함수의 코드를 재구성해서 같은 일을 하는 이터레이터를 만든 다음, 원래 함수는 그 이터레이터 인스턴스를 돌려주는 함수로 바꾼다고 보시면 됩니다.
* 제너레이터에서 return 문은 StopIteration 예외를 일으킵니다. 함수의 끝에 도달해도 마찬가지 입니다. 파이썬 3 에서는 return 문이 값을 포함할 수도 있지만, 오늘 다룰 범위를 벗어납니다.
제너레이터를 위해 파이썬이 만들어내는 이터레이터를 제너레이터-이터레이터(generator-iterator)라고 부르는데, 이터레이터는 프로토콜인 반면 제너레이터-이터레이터는 실제 구현이 제공되는 것이라, 일반적인 이터레이터에서 지정하지 않은 동작들이 구체적으로 정의되기도 합니다.
가령 예외의 경우, 이터레이터의 __next__() 가 StopIteration 또는 그 외의 예외를 일으킨 후에 이터레이터가 어떤 상태가 되는지는 정의되어있지 않습니다. 하지만 제너레이터의 경우는 항상 이렇게 됩니다.
* 일단 StopIteration 예외가 일어나면 그 이후에는 계속 StopIteration 예외를 일으킵니다.
* StopIteration 이외의 예외가 일어나면, 일단 caller 에게 예외가 전달됩니다. 하지만 그 이후로는 계속 StopIteration 예외를 일으킵니다.
재진입(Reentrancy) 문제도 이터레이터에서는 정의되어있지 않습니다. 가령 __next__() 메쏘드 내에서 직접적이던 간접적이던 next(self) 를 호출했을 때 어떤 일이 일어나야 할지 지정되어 있지 않다는 것입니다. 그러니 재귀적인 구현도 생각해볼 수 있습니다. 하지만 제너레이터에서는 재진입이 허락되지 않습니다.
이유는 앞에서 주의를 부탁한 실행 순서 때문입니다. 첫 번째 yield 표현식은 최초의 yield 가 일어난 후에 전달됩니다. 즉 send() 메쏘드는 yield 로 값을 전달한 후에, caller 가 next() 나 send() 를 호출해주기를 기다리고 있는 제너레이터에만 사용될 수 있습니다. 꼭 send() 를 사용해야 한다면 None 을 전달할 수 있습니다.
제너레이터에는 send() 외에도 throw() 와 close() 라는 메쏘드가 더 제공됩니다. 이 메쏘드들은 나중에 다룰 기회가 있을 겁니다만, 제너레이터에 이런 기능들이 들어간 목적이 무엇일까요? 그 것은 바로 다음에 다룰 코루틴(coroutine) 때문입니다.
- python_installation . . . . 3 matches
prefix는 Python설치 위치와 동일하게 하면 Python 아래 lib/python2.7/site-packages 아래로 설치 된다.
cp INSTALL/make.inc.grotran make.inc #blas와 lapack이 포트란으로 컴파일 된 라이브러리를 scipy가 원하기 때문에 포트란으로 컴파일해야 한다.
- python_iterator . . . . 3 matches
는 다음과 같은 while 루프와 동일한 결과를 줍니다.
두 개의 for 루프는 동일한 Range 인스턴스를 사용하고 있습니다. 반면에 RangeFactory 를 사용하는 경우는:
이 경우는 for 루프를 시작할 때마다 새로운 이터레이터(Range 인스턴스)가 만들어집니다. 때문에 매번 새로운 루프가 시작되는 것이지요. for 루프가 이터레이터를 재사용하는 것으로 보일 때는, 인스턴스가 이터레이터인지 이터레이터를 제공하는 객체인지를 확인하는 것이 중요할 수 있습니다.
- python_logging . . . . 9 matches
||WARNING ||예상치 못한 일이나 추후 발생 가능한 문제를 표시하기 위해 사용 ||
== 파일에 저장하기 ==
logging.basicConfig() 함수를 통해서 로그를 설정할 수 있다. 이 함수는 최초 1회만 적용되면 이후 호출되는 함수에 대해서는 무시된다. '''filename'''로 지정된 파일에 로그를 기록하면 파일이 존재하는 경우 내용을 덮어쓰지 않고 이여서 기록하도록 되어 있다. 덮어쓰도록 설정하고 싶다면 '''filemod="w"''' 옵션을 설정하면 된다.
||args ||직접 포맷할 필요는 없습니다. ||message 를 생성하기 위해 msg 에 병합되는 인자의 튜플. 또는 (인자가 하나뿐이고 딕셔너리일 때) 병합을 위해 값이 사용되는 딕셔너리. ||
||filename || %(filename)s ||pathname 의 파일명 부분. ||
||lineno || %(lineno)d ||로깅 호출이 일어난 소스 행 번호 (사용 가능한 경우). ||
||pathname || %(pathname)s ||로깅 호출이 일어난 소스 파일의 전체 경로명 (사용 가능한 경우). ||
- python_module_pyaudio . . . . 5 matches
Python으로 1분단위로 오디오를 녹음해서 mp3파일을 만드는 프로그램을 라즈베리파이에서 구동하려고 한다.[* https://whansunkim.top/wiki.php/raspberry_pi_pyAudio] 이 프로그램의 목적은 실험 장비의 이상 유무를 오디오로 모니터링하기 위함이다. 그 과정에 대해서 자세히 설명하고자 한다.
부팅시 필요한 작업을 systemd unit으로 등록하여 사용할 수 있으며 unit 파일 생성 방법은 아래와 같습니다.
파일의 위치는 '''/etc/systemd/system/pyaudio.service''' 입니다.
* 서비스 구성 파일을 수정했다면 서비스를 다시 시작한다.
# 베이스 디렉토리에서 년, 월, 일 폴더가 생성되고 최대 60 * 24 개의 mp3가 저장 된다.
- python_object_oriented . . . . 7 matches
* '''static method'''는 자동으로 넘어오는 인자 없이 클래스와 인스턴스에 종속되지 않은 일을 수행한다.(@staticmethod)
return '{}년 {}월 {}일생 {}입니다.'.format(self.year, self.month, self.day, self.sex)
# 월: 0, 화: 1, 수: 2, 목: 3, 금: 4, 토: 5, 일: 6
# 일요일 날짜 오브젝트 생성
== 리스트를 활용해서 파일 다루기 ==
파일을 다루기 위한 방법으로는 크게 3가지 방법이 있다고 하는데 여기서는 두가지 방법만을 다룬다.
- python_tip . . . . 16 matches
초보자의 실수는 파이썬의 잘못도 아니고, 초보자의 잘못도 아니다. 실수는 단순히 파이썬 언어를 잘못 이해한 결과일 뿐이다. 그렇지만, 언어의 특징을 잘못 이해(때로는 미묘한) 하는 것과 언어를 전반적으로 잘못 이해하는 것 그리고 그것으로 무엇을 할 수 있는지 (그리고 할 수 없는지)에는 차이가 있다. 함정수 글은 앞에 초점을 두었다; 이 글은 뒤의 문제를 다룬다.
다른 말로 하면, 이 글에서 실수란 코딩 실수나 비밀스런 언어의 함정이 아니라, 흔히 "잘못된 도구로 일을 하는" 경우를 이른다.
이는 곧 파이썬으로 이런 일들을 하는 것이 불가능하다는 뜻은 아니다; 그러나 이런 일을 하는 데 별로 알맞지 않을 것이다. 이를 처리하는 한가지 해결 방법은 C로 저-수준 코드를 작성하고, 파이썬에서 그 코드를 호출하는 것이다.
이는 거의 피할 수 없는 실수이다. 파스칼 같은 언어에서 왔고, 바로 파이썬을 시도한다면, 처음 작성한 코드는 아마도 파이썬 구문의 파스칼처럼 보일 것이다. 파이썬으로 파스칼 코드를 작성하려고 한다.
바이트코드 해킹으로 "예전 언어의(come from)" 서술문을 구현한다 (Intercal - 역주:언어의 일종)
이런 환경의 이런 작업에는 파이썬이 이상적인 언어가 아니라는 것은 명백하다. 그렇지만 나는 파이썬이 마음에 들었고 사용하고 싶었다. 그래서, 나는 둥근 구멍에 사각형 기둥을 박으려 시도했다. 파이썬은 내가 원하는 일을 해 줄 수 없었다 (오히려 그 때는 그게 "정상"이라고 간주했다. 심지어 "꼭 필요하다"고 느꼈다.) 그래서 실험을 했다. 예를 들어, ANSI 드라이버를 사용하여 텍스트 그래픽을 그렸다 (아주 느렸다). 결국, DJGPP로 컴파일해서 나만의 파이썬 버전을 만들었다 (어떤 독자는 Python-DX를 기억하실지 모르겠다; 예전 실행파일은 여전히 내려받을 수 있다). 저-수준 도스 호출, 인터럽트, 텍스트 그래픽, 등등을 위한 모듈을 추가했다.
다른 언어에서 왔다면, 종종 일을 하는데 어떤 방법이 "당연하다"라고 생각한다. 예를 들어 Java, C, Pascal, 등등에서는, 문자열을 복사하거나 변경하려면, 회돌이 하는 것이 완전히 정상이다. 더 자연스러운게 있을까? 또 수 많은 s1 = s1 + s2 서술문으로 문자열을 결합하는데도 익숙해 있을지도 모르겠다. 언어의 선택에 따라 이는 효과적이고 빠르다. 또는 독자적인 연결리스트나 이진 트리를 만드는데 익숙할 수도 있다.
놀랍게도: 이런 방식은 파이썬에서 반드시 잘 작동하다고 할 수 없다. 그렇다. 문자열을 회돌이 할 수 있고, 똑 같은 방식으로 결합할 수 있으며, 연결리스트를 만들 수 있다. 그리고 이런 방식을 일을 하는 것이 희귀한 일은 아니다. 특히 앞의 두 방식은 말이다. 그러나 이렇게 하기 전에, 더 좋은 방법은 없는지 알아보는 것이 좋다. 예를 들어:
독자적으로 연결 리스트를 만드는 일은 보통 불필요하다. 특별한 어떤 일을 할 생각이 아닌 한 말이다. 십중팔구는 파이썬의 내장 리스트 유형이면 원하는 일을 해줄 것이며 그 이상의 일을 해줄 수 있다. 또한 직접 만든 해결책보다 훨씬 더 빠를 가능성이 아주 높다.
- pytorch_exeample_mnist_grad_cam . . . . 3 matches
'''nn.Conv2d(Channel, Number of feature, filter size, padding, stride)''': RGB와 같이 중복된 이미지의 장수를 Channel이라고 하고, Channel과 같이 filtered image를 몇장을 생성할지를 Number of feature, filter size는 한 차원만 정해주면 모든 차원에 동일한 길이를 적용한 fileter가 만들어진다. padding=1 or padding=0 패딩을 하면 원본 사이즈를 유지할 수 있고 하지 않으면 필터 사이즈 만큰 (-1) 이미지가 줄어든다. stride는 filter 가 진행하는 step size에 해당한다.
loss를 구현해서 사용할 수 있지만 매번 같은 일을 하는 것도 귀찮은 일이다. 그냥 만들어진 것을 쓰자.
- pytorch_multiGPU . . . . 1 match
Pytorch를 활용해서 Multi GPU 환경에서 GPU를 100% 활용하기 위한 방법에 대한 자세한 시도[* 당근마켓 팀블러그, Mattew, (mar 28, 2019) <https://medium.com/daangn/pytorch-multi-gpu-%ED%95%99%EC%8A%B5-%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%95%98%EA%B8%B0-27270617936b>]가 있어서 2020년 2월 18일 기준 PyTorch version 1.4.0에서 어떻게 동작하는지 알아보자.
- pytorch_with_tensorboard . . . . 1 match
기본적인 사용법과 기능은 동일하다.
- qt_programming_index . . . . 21 matches
https://www.qt.io/download 에서 간단히 계정 정보를 입력하고 Downloads for open source users를 클릭하고 파일을 받아서 설치하면 된다.
* 'Qt Creator' - 'Preferences' - 'Build & Run' - 'Qt Versions' - 'Add' - 'Macintosh HD' - 'Command + Shift + . (숨김파일 보여주는 단축키)' - '/usr/local/Cellar/qt5/bin/qmake'
= QFile 파일 입출력 다루기 =
Qt에서 파일 입출력을 위한 클래스를 제공하는데 사용법은 간단하지만 다양한 기능을 제공한다.
파일을 열때 QIODevice flag를 통해서 다양한 옵션으로 열 수 있는데, QIODevice::Append 플래그를 설정하면 파일의 마지막부터 연결해서 쓰기가 진행된다.
== 파일 쓰기 ==
QString filename = "sample.txt"; // 파일 이름을 QString 클래스에 저장
file->setFileName(QApplication::applicationDirPath() + "/" + filename); //프로그램이 실행되는 위치와 파일명을 QFile 객체에 넘겨준다.
if (!file->open(QIODevice::WriteOnly)) //파일 오픈
// 파일의 존재 유무를 확인하고 처리
== 파일 읽기 ==
QString filename = "sample.txt"; // 파일 이름을 QString 클래스에 저장
file->setFileName(QApplication::applicationDirPath() + "/" + filename); //프로그램이 실행되는 위치와 파일명을 QFile 객체에 넘겨준다.
if (!file->open(QIODevice::ReadOnly)) //파일 오픈
// 파일의 존재 유무를 확인하고 처리
while(file->atEnd()) //파일의 읽을 위치가 끝인지 확인
str = file->readLine() //파일의 내용을 한 라인씩 읽음
QString Data; // 파일에 쓸 어떤 text 가 있다면...
== 파일 감지 ==
파일이 수정되는 것을 확인하고 처리하는 것을 SIGNAL, SLOT으로 처리했다.[* https://jdh5202.tistory.com/298]
- quadtree_paper_reading . . . . 4 matches
잎의 이웃을 찾기 위해 저자는 또 일부 공통 모서리 또는 경계 상자의 전체 가장자리가 인접 해 있다고합니다 공유하는 잎 증분 방법을 설명합니다.
저자 계층 접근 방식은 메모리에 트리의 최상위 수준을로드하고 재귀 적으로 증분 방식과 일부 추가 오버 헤드를 사용하여 잎을 처리 포함한다.
사실 우리의 구현보다 일반화 된 버전은 이미지 프로세싱 및 압축뿐만 아니라 컴퓨터 그래픽에 사용 쿼드 트리를 확장해야합니다
둘째, 정렬 중 하나에 볼륨 계층 구조를 경계의 문제를 줄일 선형 경계 볼륨 계층 구조 (LBVH)라고하는 새로운 알고리즘을 구현합니다.
- raspberry_pi_dht22 . . . . 4 matches
day = now.strftime("%d") # 현재 일
# 파일 생성 및 내용 저장
#define ZERO_POINT_VOLTAGE (0.324) //이산화 탄소가 400ppm일때의 전압값 (수정 X)
#define REACTION_VOLTGAE (0.020) //이산화 탄소가 1000ppm일때의 전압값(수정 X)
- raspberry_pi_ntp_server . . . . 2 matches
pps 신호선을 GPIO 24번에 연결하고 /boot/config.txt 파일에 GPIO24번이 pps로 사용할 것임을 알려줘야 합니다.
/etc/chrony/chrony.conf 파일을 수정해서 PPS를 시간의 소스로 사용하도록 수정해야 한다.
- raspberry_video_audio . . . . 4 matches
print(f"[INFO] 새 파일 저장: {output_filename}")
print(f"[INFO] 파일 저장 완료: {output_filename}")
print(f"[INFO] 새 파일 저장: {output_filename}")
print(f"[INFO] 파일 저장 완료: {output_filename}")
- raspberry_wireguard . . . . 6 matches
설정은 생각보다 조금 복잡할 수 있는데 간단하게 설정 파일을 생성해주는 사이트가 존재한다. [* https://upvpn.app/ko/wireguard-config-generator/]
설정 파일의 위치는 ''/etc/wireguard''에 위치하며 '''wg0.conf''' 파일을 수정해줘야 한다.
client에서 사용할 설정 파일은 macbook.conf
클라이언트도 서버와 같이 wireguard를 설치해서 수행한다. 설정 파일은 위에서 생성한 macbook.conf, nims.conf 파일을 wg0.conf로 /etc/wireguard에 저장해서 사용하면 된다.
- raspberrypi4 . . . . 8 matches
'''/etc/nginx/site-available/nextcloud.conf'''를 만들어 넣어주자. 두 가지 설정이 있다. 첫 번째 파일은 ssl 미적용, 두 번째 파일은 ssl을 적용한 파일이다.
= 망가진 파일 시스템 수리 =
설정 파일의 위치는 /etc/netplan/50-cloud-init.yaml 이고 설정 값은 아래를 참조해서 설정하면 된다.
/var/log/fail2ban.log 파일에서 로그를 확인해보면 침입으로 ban이 된것을 확인 할 수 있다.
라즈베리 파이의 부팅 설정 파일을 수정해서 간단하게 overclock을 수행할 수 있다.
/boot/config.txt 파일에서
- recurrent_neural_network . . . . 4 matches
하지만 모든 일이 그렇하듯 아무런 노력 없이 이루워지는 일은 없다. 지금 부터 이 Black Box 안쪽을 들여다 보려고 한다.
위 구조에서 보면 시간 흐름에 따라서 일정량(W) 만큼 메모리효과를 갖게 되는데 이 효과는 시간이 지남에 따라 급격하게 사라진다. 지난 과거의 값이 누적되는 과정에서 오래된 값의 영향력이 급격이 줄어들기 때문이다.
두가지 측면에서 볼 수 있다. 하나는 만들어진 문장의 점수를 매기는데 사용할 수 있다. 기계 번역 시스템에서 만들어진 문장들에 대해서 가장 높은 확률을 갖는 문장이 가장 자연스러운 문장이고 문법적으로도 가장 완벽한 문장일 수 있다는 것이다.
- resampler_renew . . . . 2 matches
기존 Upsampler에 필터를 적용하는 부분에서 문제가 있을 수 있다는 점과 Up/Down을 통합해서 하나의 패키지로 일반화 하기 위해 이번 작업을 시작한다.
입력 데이터 0 ~ 3은 guide 영역으로 실데이터가 아닌 필터 계산에 쓰이는 영역입니다. 실 데이터의 시작인 ''4''와 Sinc Finter의 중앙인 ''16''번 index를 일치 시키면 계산에 필요한 데이터와 필터의 쌍이 Zero 곱을 하는 것을 알 수 있습니다. 이런 경우를 제외하기 위해서 필터에서 ''0''를 제거하고 자기 자신을 계산하는 계산을 계산에서 제외하도록 필터를 설계하면 그래프의 아래에 있는 표와 같이 됩니다.
- rsync_cron_data_backup . . . . 11 matches
--delete 동기화시 소스 파일의 위치에 존재 하지 않는 파일을 삭제한다.
--exclude=patten 해당 패턴을 가진 파일이나 디렉토리를 동기화시 제외한다.
--include=patten 해당 패턴을 가진 파일이나 디렉토리를 동기화시 포함시킨다
rsync –[옵션] [보낼파일] [받을위치]
/etc/xinetd.d/rsync 설정 파일을 만들자.
rsync 설정파일은 /etc/rsyncd.conf 이다. 설정파일이 없는 경우 직접 만들어줘야 한다.
사용자에 대한 설정 파일은 아래와 같이 하면 된다. password는 plain/text이다.
1. 매주 토요일 1시 5분에 wskim의 홈 폴더를 home2에 백업
1. 매월 1일 2시 5분에 git 서버의 repository를 home2에 백업
- sc12 . . . . 3 matches
11월 11일 일요일 09:00 - 05:30 (현지 시간)
- slack_api_chatbot . . . . 5 matches
위 코드를 실행하면, 지정된 채널에 메시지가 보내집니다. 예를 들어, 채널 ID가 C12345678이고 봇 토큰이 xoxb-...일 경우, message로 입력한 내용이 그 채널에 전송됩니다.
파일 업로드: 메시지뿐만 아니라 파일도 업로드할 수 있습니다. 예를 들어, 이미지 파일을 채널에 보내고 싶다면 files_upload 메서드를 사용할 수 있습니다.
# 파일 업로드
- snucl_install_work . . . . 3 matches
설치 파일은 서울대 snucl 사이트[[footnote(http://aces.snu.ac.kr/Center_for_Manycore_Programming/SnuCL.html)]]에 정보를 남기면 메일[[footnote(http://aces.snu.ac.kr/download.php?p=snucl&ver=1.2b&email=o1185@naver.com)]]로 온다.
설치 가이드에 있는 것처럼 설치를 끝내고 apps/samples에 있는 예제를 컴파일 하게 되면 라이브러리 에러가 발생하는데
- ssh_config . . . . 2 matches
#title SSH config 파일 설정하기
이때 사용할 수 있는 방법이 자신의 홈 드렉토리 아래에 있는 .ssh 폴더에 config 파일을 추가 하는 것이다.
- stock_budget . . . . 1 match
2/5 일진머티리얼즈(A020150) 59,194원 (69 주) -> 76,300원 (전량 매도) :{{{{color: rgb(255, 1, 1); font-size: 16px; font-weight: bold;} +1,166,802원 }}}
- stock_study . . . . 6 matches
시총: 30,144억 (75,700원) 8월 7일 기준
시총: 7,278억 (68,500원) 8월 7일 기준
CNT 양극재에 적용하면 기존 카본블랙보다 1/5 사용으로 부피를 줄일 수 있고, 실리콘 음극재의 부피 팽창으로 구조적 안정성이 떨어지는 것을 막아 주기 위해 CNT 도전재 사용 기능, 상용화한 유일한 업체
전환사채(18억 규모, 발행가액 1,537원, 1,171,112주), 2020년 8월 5일 상장
* 반기보고서 (8월 14일)
- sublime . . . . 1 match
여러파일에서 찾기 win: ctrl+shift+f, mac: cmd+shift+f
- svm . . . . 1 match
일반적으로 직선을 \(ax +by + c = 0 \)로 표시하는데 이것을 두 벡터의 내적으로 표시하면 \( (a, b) \cdot (x, y) + c = 0 \)이 된다.
- svn_sunken . . . . 6 matches
svn 체크아웃을 받고 나면 일단 권한 설정을 해준다.( 이유는 모르겠지만, 최초에 소스를 올릴때, 윈도우 삼바로 통한 import로 인하여, 권한 설정이 틀어지는거 같다. )
armapp안에 root폴더가 생기는데( 루트파일시스템으로 사용함), 그것도 svn을 통한 권한설정 오류로 인하여
일단은 777권한을 주면 부팅이 된다.( 추후에 특정 파일이나 특정 쉘스크립트에서 로그인 유저명이나 로그인 권한 설정을 알게되면 해결될거 같다.)
= .bashrc 파일 수정 하기 =
커널에서 NFS로 파일시스템을 마운트 할 경우, 다음과 같은 메시지가 발생하여 부팅을 실패하는 경우가 많다.
- ternsorflow_with_tersorRT . . . . 2 matches
이 문서는 NVIDIA CUDA와 TensorRT를 사용할 수 있도록 소스 컴파일을 진행하는 과정에 대한 문서이다.
'''종속성은 setup.py 파일의 REQUIRED_PACKAGES 아래에 표시됩니다.'''
- test . . . . 6 matches
마우스오버나 현재 대상 순으로 우군일경우 저주해제 적군일경우 마법훔치기를 사용한다.
{{{{font-size:30px}2010년 1월 17일 만들어진 위키 ^^}}}
* 스마일이 있다.
스마일이 머냐면 이런거다.
* 파일도 올릴 수 있다.
- test2 . . . . 308 matches
gcc는 예전에는 GNU C Compiler의 약자였으나 지금은 GNU Compiler Collection의 약자로 다양한(?) 언어의 컴파일러들의 집합체이다. gcc는 한마디로 GNU에서 개발된 ANSI C 표준을 따르는 C 언어 컴파일러라고 말할 수 있다. gcc는 ANSI C 표준에 따르기는 하지만 ANSI C 표준에는 없는 여러 가지 확장 기능이 있다. 또한 gcc는 통합개발환경(IDE)을 가지고 있지 않은 command line 컴파일러이다. 옛날 Turbo-C를 주로 사용해 보셨던 분들은 tcc.exe와 비슷하다고 생각하면 된다.
현재 사용되고 있는 gcc의 버전을 나타내는 옵션이다. 특정 소프트웨어 패키지를 컴파일하기 위해 어느 버전 이상의 gcc를 쓰도록 권장하는 경우가 있는데 시스템에 깔려있는 gcc의 버전을 파악하려고 할때 사용한다.
이제 직접 프로그램 하나를 컴파일하면서 설명하도록 하겠다. 아래는 hello.c의 소스이다.
로 컴파일하면 실행파일 hello가 만들어진다.
(*) -o 파일이름 옵션
gcc의 수행 결과 파일의 이름을 지정하는 옵션이다. 위의 예제를 단순히
로 컴파일 하면 hello라고 하는 실행파일이 만들어 지는 것이 아니라 보통의 경우 a.out이라는 이름의 실행파일이 만들어진다.
-o hello 옵션을 줌으로써 결과물을 hello라는 이름의 파일로 만들어지게 하였다.
위의 컴파일 과정을 외부적으로 보기에는 단순히 hello.c파일이 실행파일 hello로 바뀌는 것만 보이지만 내부적으로는 다음과 같은 단계를 거쳐 컴파일이 수행된다.
(2) C 언어 컴파일
C Preprocessing은 C 언어 배울 때 배운 #include, #define, #ifdef 등 #으로 시작하는 여러 가지를 처리해 주는 과정이다. 그 다음 C 언어 컴파일은 C Preprocessing이 끝난 C 소스 코드를 assembly 소스코드로 변환하는 과정이다. Assemble은 그것을 다시 object 코드(기계어)로 변환하고 printf()함수가 포함되어 있는 라이브러리와 linking을 하여 실행파일이 되는 것이다.
위의 네 가지 과정을 모두 gcc라는 실행파일이 해 주는 것일까? 겉으로 보기에는 그렇게 보일지 모르지만 실제로는 gcc는 소위 말해 front-end라고 하여 껍데기에 지나지 않고 각각을 해 주는 다른 실행파일을 gcc가 부르면서 수행된다.
C Preprocessing을 전담하고 있는 실행파일은 cpp라고 하여 /usr/bin 디렉토리와 /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.95.12 디렉토리(당연히 gcc버전과 시스템에 따라 디렉토리 위치가 다르다. gcc -v로 확인하길 바란다.)에 존재한다. C 언어 컴파일은 cc1이라는 실행파일이 담당하는데 /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.95.12 디렉토리에 존재한다. Assemble과 linking은 각각 as와 ld라는 실행파일이 담당하고 /usr/bin 디렉토리에 존재하는 파일이다. (참고 : 시스템에 따라 /usr/bin이 아니라 /bin또는 /usr/local/bin 디렉토리에 존재할 수도 있다.)
gcc라는 실행파일이 하는 일을 정리해 보면 다음과 같다.
(1) 사용자에게 옵션과 소스 파일명들의 입력을 받는다.
(2) 소스 파일명의 확장자를 보고 어떤 단계를 처리해야 할지 결정한다.
(3) 사용자의 옵션을 각각의 단계를 맡고 있는 실행파일의 옵션으로 변경한다.
(4) 각각의 단계를 맡고 있는 실행파일을 호출(fork, exec)하여 단계를 수행하도록 한다.
== C preprocessing이 하는 일 ==
(3) 하는 일
- torchvision . . . . 1 match
널리 사용되는 데이터 셋, 아키텍쳐 모델 computer vision에서의 일반적인 이미지 변환으로 구성되어 있습니다.
- transmission_daemon . . . . 5 matches
설정 파일은 '''/etc/transmission-daemon/settings.json'''이며 데몬이 돌아가고 있을때는 편집이 안 되기 때문에 설정을 수정하기 전에 데몬을 중지 시켜야 한다.
* "watch-dir": "/home/pi/Torrent/magnet_box", //이 폴더에 .torrent 파일이 있으면 자동으로 다운로드 됨.
* "trash-original-torrent-files": true, // 토렌트 파일 자동으로 제거
이와 관련해서 transmission-deamon 폴더의 사용권한을 변경한다. 또한 다운로드 폴더 권한도 일치 시켜줘야 한다.
다음 파일의 User항목도 수정해준다.
- upsampling_implementaion . . . . 1 match
#title Upsampler 구현 일지
- upsampling_sinc . . . . 1 match
[:wave_file_header_format Wave 파일 포멧에 대한 설명]
- usb_driver . . . . 12 matches
Isochronous Transfer : 일정한 속도로 일정량의 data를 전송하기를 원하는 경우에 사용한다. 이러한 것으로 Stream이 있으며, reliable한 전송을 보장하지는 않습니다. 주로 Audio나 Video의 data를 전송하는 경우 유용합니다. 우리가 사용하는 웹캠도 이러한 종류의 Data Flow를 사용합니다.
Device descriptor : USB device에 대한 일반적인 정보를 제공합니다. 단지 하나의 descriptor만이 존재하며 그 USB device에 전역적으로 영향을 미칩니다.
Configuration descriptor : 특정의 device configuration에 대한 정보를 제공합니다. USB device는 하나나 그 이상의 configuration descriptor를 가질 수 있으며, 각각의 descriptor는 또한 하나나 그 이상의 interface를 가질 수 있습니다. 물론 각각의 interface들 역시 0이나 여러 개의 endpoint를 가질 수 있습니다. 이러한 endpoint들은 같은 interface의 다른 setting에 의해서 사용되지 않는다면, 단일의 configuration내에서 interface간에 공유될 수 없습니다. 하지만 이러한 제한이 없는 다른 configuration내의 interface에 의해서는 공유가 될 수 있습니다. configuration들은 control transfer에 의해서 배타적으로 activate될 수 있으며, global한 device setting을 변화시키기 위해서 사용될 수 있습니다.
- Linux 커널모듈은 일정한 구조를 가지고 개발 되어집니다. 이러한 구조를 통해서Insmod ,rmmod util로 모듈을 Load하고Release할수 있게 됩니다.그런 간단한 Linux module을 만들어 보도록하죠 .
여기까지 간단히 USB Driver의 구조에 대해서 알아 봤습니다. 그럼 이러한 모듈을 어떻게 컴파일 할것인지에 대해서 알아보죠
3.3 Kernel 2.4 와 2.6에서 컴파일 과 USB 개발의 차이
2.4와 2.6 은 컴파일 방법이 조금 다릅니다. 2.6 커널 부터는 module의 경우 makefile을 통해서만 컴파일이 되는것 같습니다.
2.4의 경우 command Linux 컴파일은 다음과 같습니다.
2.6의 경우는 컴파일 시에 반드시 makefile을 만들어 주어야만 가능한듯합니다.
다음과 같이 makefile을 만들어 컴파일 하면 잘동작합니다.
- variational_autoencoder . . . . 12 matches
* 작성일: 2019년 10월 28일
* 수정일: 2019년 11월 26일
뉴럴넷 관점에서 VAE는 '''encoder''', '''decoder''' 그리고 '''loss function'''으로 구성되어 있다. 뉴럴넷을 설명하는 일반적인 방법으로 __네트워크 모델__을 '''네트워크 구조'''와 이를 학습하기 위한 '''loss function'''을 어떻게 정의하느냐로 설명한다.
decoder는 입력으로 z를, 출력으로 데이터 확률분포의 파라미터 값('''가우시안 분포의 (\(\mu, \sigma\))''')을 내어준다. Decoder는 \(p_{\phi}(x|z)\)로 표현 된다. 예로 손으로 쓴 숫자를 판독하는 일이라고 하면 784개의 픽셀이 흑백이고 각각의 픽셀이 0, 1로 이루워져있다면 Bernoulli distribution으로 표현할 수 있다. 즉 출력값으로는 각 픽셀에 해당하는 Bernoulli distribution 확률분포의 파라미터들이 된다. 낮은 차원에서 높은 차원으로 가기 때문에 정보의 손실이 발생한다. 얼마나 손실이 발생하는가? reconstrunction log-likelihood \(\log p_{\phi}(x|z)\)를 사용하여 측정한다. (''z 입력으로 x 아웃이 나올 확률이 높았으면 한다. 즉, f(z)의 결과가 x이길 바라는 것으로 \(||x - f(z)||^2\)MSE로 계산 된다.'')
이제 이 모델에서의 inference에 대해 생각해 볼 수 있다. 목표는 관찰된 데이터로부터 숨겨진 변수를 잘 추론(infer)하는 것이다. 곧, posterior \(p(z|x)\)를 계산하는 것과 일치한다. bayers에 따르면:
Jensen’s inequality 에 의해, Kullback-Leibler divergence 는 항상 0 보다 크거나 같다. 이는 곧 Kullback-Leibler divergence 를 최소화하는 것이 ELBO 를 최대화하는 것과 동치임을 말한다. 요약하자면 Evidence Lower Bound (ELBO) 가 posterior inference 근사를 가능하게 한다. 우리는 더이상 Kullback-Leibler divergence 를 최소화하기 위해 시간을 쓸 필요가 없다. 대신, 우리는 ELBO 를 최대화하므로써 계산 가능한 동치의 일을 수행한다.
VAE 에선 오직 local latent variable 만이 존재한다 (서로 다른 두 datapoint 가 latent z 를 공유하지 않는다). 따라서 우리는 ELBO 를 단일 datapoint 단위의 합으로 계산한다. 이를 통해 우리는 \(\lambda\) 에 대해 stochastic gradient descent 를 사용할 수 있다. VAE 에서 단일 datapoint 에 대한 ELBO 는 다음과 같다.
* 낮은 확률로 발생하는 일에서 더 많은 정보를 얻을 수 있고 빈번하게 발생하는 일에 대해서는 적은 정보를 얻는다.
- vi_사용법 . . . . 1 match
* ts ''name'' : name 과 일치하는 태그 목록 출력
- visual_studio_code . . . . 9 matches
빌드 작업 실행은 <cmd + shift + B>로 실행 시킬 수 있는데 이 때 필요한 파일이 tasks.json 파일이다. 이것은 프로젝트별로 존재해야 하며 기본적인 템플릿을 제공하지만 기본적인 문법을 알아야 사용할 수 있다. 기본적인 문법은 아래와 같지만 추가적인 작업을 정의해서 사용할 수 있다.
* ''"problemMatcher:''' 속성에을 추가해서 컴파일 과정에서 나오는 에러를 볼 수 있도록 할 수 있다.
debug를 실행하기 위해서는 설정이 필요한데, launch.json 파일을 설정해줘야 한다.
설정에서 신경써야 할 부분은 컴파일 program과 preLanuchTack 정도로 보인다. debug를 실행할 바이너리 파일의 위치와 파일명이 일치하도록 설정해줘야 하고 컴파일 옵션에 -g 옵션이 들어간 task를 연결해줘야한다.
- wave_file_header_format . . . . 19 matches
#title Wave 파일 헤더 포멧
WAV 또는 WAVE는 웨이브폼 오디오 포맷(웨이브 오디오 포맷, Waveform audio file format)의 준말로 개인용 컴퓨터에서 오디오를 재생하는 마이크로소프트와 IBM 오디오 파일 포맷 표준이다. 덩어리째로 데이터를 저장하기 위한 RIFF 비트스트림 포맷 방식에서 변화한 것으로, 아미가에 쓰이는 IFFF와 매킨토시 컴퓨터에 쓰이는 AIFF 포맷에 매우 가깝다. 가공되지 않은 오디오를 위한 윈도 시스템에 쓰이는 기본 포맷이다. 윈도 상에서는 WAV가 비압축 형식만 있는 것이 아니고 여러 압축 코덱을 이용할 수 있다. 그러나 윈도 비스타부터는 기본 지원 포맷이 WMA으로 바뀌었다.
WAV는 비압축 오디오 포맷으로, 프로그램 구동음이나 일반 수준의 녹음용으로 사용되지만 전문 녹음용으로는 WAV가 아닌 다른 비압축 포맷이 더 많이 쓰이기도 한다. 참고로 일부 라디오 방송국에서는 MP2이라는 압축 오디오 포맷 대신 비압축 WAV 포맷을 사용하는 경우도 있다.
요약하자면, WAV 는 Waveform Audio File Format 의 약자입니다. 확장자가 .wav 이기 때문에 흔히들 wav 라고 부르는 것이지요. 내용에 나와 있듯이 wav 는 기본적으로 비압축 포맷입니다. 무슨말인가 하면, 소리나는 그대로 값들을 저장해둔 파일이라고 생각하시면 됩니다.
= Wave 파일 구조 (Header) =
- 이 부분에 'RIFF' 라는 문자가 ASCII 값으로 들어갑니다. wave 파일에 대한 고정값입니다.
- 파일 전체 사이즈에서, 위에 'Chunk ID' 와 자기자신인 'Chunk Size' 를 제외한 값이라고 보시면 됩니다.
- (전체 파일크기 - 8 byte) 라고 생각하시면 됩니다.
- Little Endian 값이니 파일 사이즈가 0x00000010 인 경우, 메모리 값으로는 10 00 00 00 으로 저장되어 있습니다.
- 파일 형식을 나타냅니다.
- wave 파일인 경우, 'WAVE' 라는 문자가 ASCII 값으로 들어갑니다. wave 파일에 대한 고정값입니다.
- 엄밀히 말하면, PCM 인 경우인데, 대부분 wave 파일은 PCM 입니다.
- 음성파일의 채널 수 입니다.
- 일단 위에 Sample Rate 가 441000 이고, mono 채널이라고 가정해 봅시다.
- 그렇다면 (Sample 1개가 차지하는 byte) 가 무엇일까요?
- 파일 전체크기에서 header 를 제외한 크기겠지요.
[:upsampling_sinc Wave 파일 Upsampling]
- wedding . . . . 2 matches
{{{{color: rgb(1, 1, 1); font-size: 16px; font-weight: bold;} 11월 24일 토요일 }}}
- weight_training . . . . 1 match
웨이트 또한 일정 시간동안 가벼운 스트레칭과 함께 약간의 유산소 운동을 해주시는게 좋아요.
- wiki_server_immigration . . . . 2 matches
1. 백업 된 wikixxxxxx.tar 파일을 /var/www(별도의 다른 폴더를 사용해도 상관 없음, 단 httpd.conf 파일의 수정이 필요함) 아래 압축을 풀어 설치 한다.
- wikibackup . . . . 1 match
whansun.iptime.org로 도메일 이사후 rasberry pi 4b 보드에 nextcloud와 웹서버 운영
- windows10_iis_installation . . . . 1 match
윈도우 10은 윈도우 8.1과 비교하면 많은 부분이 바꼈지만, IIS에 관련한 부분은 크게 바뀐 부분이 없는 것 같습니다. 맨 처음 윈도우10 테크니컬 프리뷰를 소개하면서 맨 처음 버전에서는 윈도우 8.1과 탑재된 같은 버전(8.0)의 IIS가 있었지만, Windows 10이 정식으로 배포되기 시작한 지금 Windows10에 탑재된 IIS 에는 버전 업(10.0)이 되어있었습니다. [* 웹서버는 운영체제 안에 기능으로 되어 있어서 별도의 설치 파일이 있는 것이 아니라 '''제어판 > 프로그램 > 프로그램 및 기능'''에서 Windows 기능 켜고/끄기 에서 기능을 활성화 시키는 것으로 설치가 된다.]
- windows_driver_development_env . . . . 11 matches
일반 애플리케이션 프로그램 개발을 시작하는 경우에는 자료도 많고 , 주변에 개발자들도 많아서 공부 방법이나 자료들을 쉽게 접할 수 있는데 , 디바이스 드라이버 분야는 개발자들이 많은 분야도 아니고 , 자료도 쉽게 찾을 수도 없다 보니 입문자들에게는 어디서부터 어떻게 시작해야 할지 막막해 한다 . 간혹, 디바이스 드라이버에 열정이 있으신 분들중에는 홀로 무수한 나날을 디버깅과 테스트를 통해 개발의 고수가 되는 경우도 있다.
하지만 , 일반 개발자들은 아직도 디바이스 드라이버 개발을 위해 어떻게 준비를 해야 할지 어려워하는게 현실이다. 그래서 이런 컬럼 에서는 필자가 그 동안 경험하고 느낀 것을 토대로 초보자들도 쉽게 접근할 수 있는 개발 방법들을 소개하려고 한다 .
우선 , 디바이스 드라이버 개발 방법의 내용을 언급하기 전에 여러분이 한 가지 알아두어야 할 사항이 있다 . 이전 1 부 컬럼 에서도 언급했듯이 디바이스 드라이버와 운영체제는 서로 밀접한 관계를 맺고 있다 . 그래서 이번 컬럼에서 다루는 윈도우 디바이스 드라이버 개발 방법이 다른 운영체제들에도 동일하게 적용되지 않을 수도 있다는 것을 참고해서 글의 내용을 이해했으면 한다 .
응용프로그램 , 웹 프로그래밍 , 게임 등의 프로그램들처럼 디바이스 드라이버도 소프트웨어의 한 종류로 볼 수 있다 . 그래서 일반적인 대학교의 컴퓨터 학과들에서 배우는 알고리즘 , 운영체제 , 프로그래밍 언어 , 자료구조 , 컴파일러 등등의 다양한 지식들을 기본적으로 알고 있는 것은 디바이스 드라이버를 공부하는데 하는데 많은 도움이 된다 .
운영체제 아키텍처 : 다른 프로그램들도 마찬가지겠지만 , 프로그램이 동작하는 기반이 되는 운영체제를 이해하지 않고서는 제대로 된 프로그램을 개발 할 수가 없다 . 그 중에서도 디바이스 드라이버는 운영체제의 커널에서 동작 하므로, 운영체제 구조 및 개념들 ( 메모리 관리 , 스케줄링 , I/O 요청의 흐름 , 동기화 등등 ) 을 제대로 이해해야 개발하는데 문제가 없게 있게 된다 . 하지만 , 윈도우는 리눅스와 같은 Open Source 운영체제가 아니고, 내부 구조가 블랙박스처럼 베일에 싸여 있다보니, O/S 내부 내용을 공부 하려해도 항상 정확한 자료들을 가지고 아니어서 이해하는데 많은 어려움이 있다. 그래서, 이런 경우엔 직접 디버깅을 통해 알아내야 하는데, 이런 부분은 윈도우 운영체제를 이해하는데 어렵게 하는 부분이 되고 있다.
WDM ( Windows Driver Model ) : 윈도우 디바이스 드라이버를 어떻게 만들어야 한다는 하나의 스펙이라고 볼 수 있다 . 하나의 드라이버 바이너리 파일을 가지고 다양한 윈도우 에서 사용 할 수 있는 드라이버를 만들기 위한 목적으로 만들어졌으며 , 현재 Windows 98/ME/2000/XP/2003/Vista 에서 사용할 수 있다 . 기본적인 개념은 NT Kernel Mode Driver 구조를 바탕으로 만들어 졌으며 , PnP, Power 관리 , WMI 등을 지원한다 .
프로그래밍을 배울 때 듣는 속담 중 하나가 “ 백문이 불여일견 , 백견이 불여일타 “ 라고 했다 . 그 만큼 실제 책으로 공부하고 눈으로 보는 것 보다는 직접 코딩을 하면서 프로그램을 작성하는 것이 백배 더 효과적이라고 한다 .
디바이스 드라이버도 이런 공부 방법대로 많이 만들어보는 것이 제일 중요하다고 생각한다 . 필자도 처음에는 디바이스 드라이버를 책으로만 볼 때는 무슨 내용들을 말고 있는지 , 어떻게 드라이버가 작동 되는지 이해가 잘 되지 않았지만 , 이것저것 개발을 하면서 조금씩 이해를 한 경험이 있다 .
• 지원할 운영체제 : 제일 먼저 어떤 운영체제를 지원 할지를 결정해야 한다 . 그래야 지원하는 운영체제에 따른 H/W 지원 유무및 드라이버 모델이 정해지고 , 경우에 따라서는 디바이스 드라이버를 운영체제에서 기본적으로 지원하고 있어서 디바이스 드라이버 개발을 별도로 하지 않아도 되는 경우들이 있다 . 그렇기 때문에 우선 지원할 운영체제를 무엇으로 할지 선택해야 한다 .
- work2010_list . . . . 14 matches
일자 : 11월 5일
일자 : 11월 10일(수) ~ 11월 16일(화)
== [:20101117_spd400_filesystem_yaffs2 삼성 SPD400 Yaffs 파일 시스템 사용하기] ==
일자 : 11월 17일(수) ~ 12월 2일(목)
1. Yaffs 파일 시스템 조사
3. Yaffs 파일 시스템 적용
== [:20101203_spd400_filesystem_install_guide 삼성 SPD400 NAND 파티션 과 파일 시스템 작업] ==
일자 : 12월 2일(금)
- work2012_09_list . . . . 2 matches
test.c 파일을 생성하고 double real image 형식의 txt 파일을 읽어 single로 출력 하도록
- work2013_07_list . . . . 3 matches
= [:upsampling_sinc Upsampling](7월 4일 ~) =
[:wave_file_header_format Wav 파일 분석]
= MCMC(7월 10일 ~) =
- work2013_08_list . . . . 1 match
= 업셈플 관련 일(계속) =
- work2013_10_list . . . . 10 matches
근데 ELF가 먼지 함수 테이블이 뭔지 나는 하나도 모르므로 일단 GG..........
일단 날짜 지났음 새로사삼! 하는 메세지박스가 나온다음에 좀 자세시 출력 한것을 보니 이름이 수상한 녀석 발견!!
Common7/libHncBL70.so 이 파일이 되겠습니다...
이거 찾으면 되나??? (아래는 /tmp/b 파일에서 HncGetTrialDays문자열만 단순히 찾은겁니다)
다시 디스어셈블한 dislib파일로 들어가서..
일단 push push 하는게 C에서 인자들 넣어주는 삘이 나긴하는데
그다음엔 이걸 정적라이브러리 파일로 만듭니당...
정적 라이브러리 만들면서 ar 명령어는 써봤지만 *.so 파일 만들기는 처음이라 저도 잘 몰라서
모르긴 저도 마찬가지.. 다른건 봐도 이해도 안가니깐 일단 빨간색으로 쳐진거만 보기로 했습니다.
(아까 바로 위에서 만든 te.c파일의 a함수의 정적라이브러리상의 위치)
- work2013_11_list . . . . 4 matches
= 11월 6일 =
= 11월 27일 =
= 11월 28일 =
= 11월 29일 =
- work2013_12_list . . . . 15 matches
= 12월 02일 =
= 12월 03일 =
1. 12월 9일 건강 검진
= 12월 05일 =
1. 12월 9일 건강 검진
= 12월 09일 =
1. 12월 16일 건강 검진
= 12월 11일 =
1. 12월 16일 건강 검진
= 12월 13일 =
1. --12월 16일 건강 검진--
= 12월 16일 =
1. --12월 16일 건강 검진--
= 12월 16일 =
1. --12월 16일 건강 검진--
- work2014_012_list . . . . 2 matches
= 12월 1일 =
= 12월 3일 =
- work2014_01_list . . . . 2 matches
= 1월 07일 =
= 1월 13일 =
- work2014_03_list . . . . 2 matches
= 3월 12일 =
= 3월 13일 =
- work2014_04_list . . . . 1 match
= 4월 15일 =
- work2014_06_list . . . . 1 match
= 6월 15일 =
- work2014_07_list . . . . 1 match
= 7월 2일 =
- work2014_08_list . . . . 1 match
= 8월 1일 =
- work2014_11_list . . . . 2 matches
= 11월 24일 =
= 11월 25일 =
- work2015_01_list . . . . 3 matches
= 1월 15일 =
= 1월 19일 =
= 1월 26일 =
- work2015_02_list . . . . 1 match
= 2월 3일 =
- work2015_03_list . . . . 2 matches
= 3월 2일 =
= 3월 23일 =
- work2015_08_list . . . . 3 matches
= 8월 17일 =
= 8월 24일 =
열역학이란 열과 일(에너지와 운동)의 관계를 설명하는 물리학이다. 다수의 입자를 다루기 때문에 대학 학부 수준만 되도 통계를 사용하며, 여기에 원자/양자 개념을 도입하면 통계역학이 되기 때문에 통계역학의 전신이라고도 할 수 있다.
- work2015_10_list . . . . 1 match
= 10월 29일 =
- work2015_11_list . . . . 1 match
= 11월 18일 =
- work2015_12_list . . . . 5 matches
= 12월 14일 =
= 12월 16일 =
* --목요일 5시에 미팅 약속--
* 1월 6일(수) 10시 30분 2차 미팅
= 12월 24일 =
- work2016_01_list . . . . 14 matches
= 12월 14일 =
= 12월 16일 =
* --목요일 5시에 미팅 약속--
* 1월 6일(수) 10시 30분 2차 미팅
= 12월 24일 =
= 1월 4일 =
= 1월 13일 =
* 가을 LVC Meeting, Glasgow Scotland at the Glasgow Hilton Hotel. (8월 29일 ~ 9일 1일)
= 1월 19일 =
* http://www.ligo.org/conferences/lv0316/ (3월 14일 ~ 3월 18일)
= 1월 27일 =
- work2016_02_list . . . . 6 matches
= 2월 2일 =
* 가을 LVC Meeting, Glasgow Scotland at the Glasgow Hilton Hotel. (8월 29일 ~ 9일 1일)
* http://www.ligo.org/conferences/lv0316/ (3월 14일 ~ 3월 18일)
- work2016_03_list . . . . 7 matches
= 3월 9일 =
* 가을 LVC Meeting, Glasgow Scotland at the Glasgow Hilton Hotel. (8월 29일 ~ 9일 1일)
* http://www.ligo.org/conferences/lv0316/ (3월 14일 ~ 3월 18일)
= 3월 23일 =
- work2016_04_list . . . . 2 matches
= 4월 26일 =
= 4월 27일 =
- work2016_05_list . . . . 1 match
= 5월 13일 =
- work2016_06_list . . . . 2 matches
= 6월 13일 =
= 6월 19일 =
- work2016_07_list . . . . 1 match
= 7월 14일 =
- work2016_08_list . . . . 1 match
== 8월 1일 ==
- work2020_01_list . . . . 18 matches
#title 2020년 1월달 업무일지
= 1월 6일 =
* 서버에 설치된 컴파일러(5.4.0) 버전보다 상위 버전 컴파일러를 소스로 설치[* <http://whansunkim.ml/w2/wiki.php/osx_utility> gcc 컴파일하기] (7.5.0), (9.2.0)
* boost-python[* <http://whansunkim.ml/w2/wiki.php/python_c_c++> boost-python 설치하기] 컴파일시 boost-numpy을 빌드하지 못하는 문제 발생(모든 컴파일러에서 비슷한 증상 보임)
* booststrap.sh을 사용해서 설정파일을 생성하면 ''project-config.jam'' 파일이 생성 되는데 생성된 파일을 열어서 실제 설정값이 잘 들어 갔는지 확인해봐야 한다. 설정값이 정상적이지 못하면 문제가 발생한다.
* numpy 버전이 업데이트 되면서 boost-numpy와 버전 호환이 일시적으로 안 좋은 것으로 파악됨. Singularity 환경 구축과 etagen 에 대응 코드 넣어둠.
= 1월 13일 =
* Grad-CAM 리뷰[* <http://whansunkim.ml/w2/wiki.php/grad_cam> Grad-CAM 리뷰] (5일)
* LRP 논문 리뷰 [* <http://whansunkim.ml/w2/wiki.php/layer_wise_relevance_propatation> Layer-wise relevance propagation] (5일)
* AMR 클래스 구조 설계 (3일)
= 1월 20일 =
= 1월 28일 =
* titan server에 Rainbow open source 컴파일
- work2020_02_list . . . . 6 matches
#title 2020년 2월달 업무일지
= 2월 3일 =
* titan server에 Rainbow open source 컴파일
= 2월 10일 =
= 2월 17일 =
= 2월 24일 =
- work2020_03_list . . . . 4 matches
#title 2020년 3월달 업무일지
= 3월 2일 =
* titan server에 Rainbow open source 컴파일
= 3월 23일 =
- work2020_04_list . . . . 9 matches
#title 2020년 4월달 업무일지
= 4월 20일 =
* whitening 에 대해서, 백그라운드에 해당하는 시그널의 psd를 계산해서 신호를 나눠주면 모든 주파수 영영의 크기를 동일하게 만들어준다.
* AMR C code 분석 (3일)
* 순차적으로 계산 흐름을 정리하고 function으로 분리(1일)
* 객체지향으로 프로그램 변환(2일)
* chb-MIT 데이터 시간에 따른 데이터 분류 (2일)
* 파일별로 시간 영역 추출하기
= 4월 6일 =
- work2020_05_list . . . . 13 matches
#title 2020년 5월달 업무일지
* AMR C code 분석 (8일)
* --순차적으로 계산 흐름을 정리하고 function으로 분리(1일)--
* --객체지향으로 프로그램 변환(2일)--
* --refinement function 구현(1일, 월)--
* --refinement에 대한 구조 반영 (2일, 화, 수)--
* --결과 확인과 debug (1일, 목)--, [:modern_cpp element 처리를 위한 메모리 복사 관리]
* -- element calss 다시 설계(1일)--
* chb-MIT 데이터 시간에 따른 데이터 분류 (2일)
* 파일별로 시간 영역 추출하기 --> 시간에 따른 데이터 분류보다 델타파를 이용한 실제 수면 구간 분리가 합당해 보여 프로젝트의 방향을 변경함.
= 4주차 주간 업무 일지 =
- 네트워크 문제로 업무 장애(지메일, 텔레그램, Youtue 등 막힘) ||- 주간업무보고 (13:30 ~ 15:00)
|| 목 ||- qC_1, qC_2와 element 객체의 qc 데이터 포인트 불일치 발견 ||- 뇌파 데이터 분석 회의 (13:00~15:00)
- work2020_06_list . . . . 16 matches
#title 2020년 6월달 업무일지
* 파일별로 시간 영역 추출하기 --> 시간에 따른 데이터 분류보다 델타파를 이용한 실제 수면 구간 분리가 합당해 보여 프로젝트의 방향을 변경함.
= 1주차 주간 업무 일지(6월 1일 ~ 6월 5일) =
= 2주차 주간 업무 일지(6월 8일 ~ 6월 12일) =
|| 수 ||- Refinement 경계에서 발생하는 문제 수정 및 README.me 파일 추가 ||- 월간보고 미팅(13:00 ~ ) ||
= 3주차 주간 업무 일지(6월 15일 ~ 6월 19일) =
= 4주차 주간 업무 일지(6월 22일 ~ 6월 26일) =
* encrypto 파일 암호화
- work2020_07_list . . . . 17 matches
#title 2020년 7월달 업무일지
* 파일별로 시간 영역 추출하기 --> 시간에 따른 데이터 분류보다 델타파를 이용한 실제 수면 구간 분리가 합당해 보여 프로젝트의 방향을 변경함.
= 1주차 주간 업무 일지(6월 29일 ~ 7월 3일) =
= 2주차 주간 업무 일지(7월 6일 ~ 7월 10일) =
= 3주차 주간 업무 일지(7월 13일 ~ 7월 17일) =
= 4주차 주간 업무 일지(7월 20일 ~ 7월 24일) =
= 5주차 주간 업무 일지(7월 27일 ~ 7월 31일) =
- work2020_08_list . . . . 13 matches
#title 2020년 8월달 업무일지
* 파일별로 시간 영역 추출하기 --> 시간에 따른 데이터 분류보다 델타파를 이용한 실제 수면 구간 분리가 합당해 보여 프로젝트의 방향을 변경함.
= 1주차 주간 업무 일지(8월 10일 ~ 8월 14일) =
= 2주차 주간 업무 일지(8월 18일 ~ 8월 21일) =
|| 월 ||<colspan=2>- 광복절 대체 휴일 ||
= 2주차 주간 업무 일지(8월 24일 ~ 8월 28일) =
|| 수 ||<colspan=2>- 회의 많은 날.... 기억이 없음. [[br]]- 황박사님 요청으로 MHP관련 일 진행 ||
- work2020_09_list . . . . 20 matches
#title 2020년 9월달 업무일지
* --전공시험 준비(9월 21일 ~ 25일) 일정 확인 필요--
* --gwf 파일 읽기 예제 작성(오상훈)--
= 1주차 주간 업무 일지(8월 31일 ~ 9월 4일) =
|| 월 ||- 802.1x 90일 계정말료로 네트워크 복구 잡업[[br]]- 주간보고 자료 정리 ||- 3층 서버 저장장치 추가 설치 작업 ||
= 2주차 주간 업무 일지(9월 7일 ~ 9월 11일) =
|| 월 ||- 노사협의회 일정 조율(금요일 11시 회의) ||- getphi를 이용한 네트워크 그리기 수행 ||
= 3주차 주간 업무 일지(9월 14일 ~ 9월 18일) =
= 4주차 주간 업무 일지(9월 21일 ~ 9월 25일) =
- work2020_10_list . . . . 21 matches
#title 2020년 10월달 업무일지
* --전공시험 준비(9월 21일 ~ 25일) 일정 확인 필요--
* --gwf 파일 읽기 예제 작성(오상훈)--
= 1주차 주간 업무 일지(9월 28일 ~ 10월 2일) =
= 2주차 주간 업무 일지(10월 5일 ~ 10월 8일) =
|| 수 ||- AMR make_subLevel() 마지막 고스트셀이 생성되지 않는 문제 debugging||- 기획회의 참석[[br]]- AMR 개발 회의[[br]]- 상집 회의 [[br]]- AMR 마지막 고스트셀이 상위 label의 고스트셀 영역일 경우 생성되지 않았던 문제 해결||
= 3주차 주간 업무 일지(10월 12일 ~ 10월 16일) =
= 4주차 주간 업무 일지(10월 19일 ~ 10월 23일) =
= 5주차 주간 업무 일지(10월 26일 ~ 10월 30일) =
- work2020_11_list . . . . 14 matches
#title 2020년 11월달 업무일지
* --전공시험 준비(9월 21일 ~ 25일) 일정 확인 필요--, 전공시험 합격
* --gwf 파일 읽기 예제 작성(오상훈)--
= 1주차 주간 업무 일지(11월 2일 ~ 11월 6일) =
= 3주차 주간 업무 일지(11월 16일 ~ 11월 20일) =
= 4주차 주간 업무 일지(11월 23일 ~ 11월 27일) =
- work2021_01_list . . . . 4 matches
#title 2020년 11월달 업무일지
= 3주차 주간 업무 일지(1월 25일 ~ 1월 29일) =
- work2021_07_list . . . . 4 matches
#title 2021년 7월달 업무일지
= 3주차 주간 업무 일지(7월 19일 ~ 7월 23일) =
- work2023_01_list . . . . 1 match
= 1월 1일 =
- work2025_03_list . . . . 2 matches
* 가족 일정 정리
= 3월 25일 =
- work_lighttpd_install . . . . 2 matches
== httpd.conf 파일 설정 ==
'''/etc/lighttpd/lighttpd.conf''' 파일에 웹서버 설정이 들어간다.
- work_multicast . . . . 4 matches
유니캐스트 전송 방식은 하나의 송신자가 다른 하나의 수신자로 데이터를 전송하는 방식으로 일반적인 인터넷 응용프로그램이 모두 유니캐스트 방식을 사용하고 있다. 브로드캐스트 전송방식은 하나의 송신자가 같은 서브네트웍 상의 모든 수신자에게 데이터를 전송하는 방식이다. 반면 '''멀티캐스트''' 전송방식은 하나 이상의 송신자들이 특정한 하나 이상의 수신자들에게 데이터를 전송하는 방식으로 인터넷 화상 회의 등의 응용에서 사용한다.
멀티캐스트 전송이 일반적인 유니캐스트 인터넷 응용 분야와 다른 점은 우선 그 전송 패킷에 있다. 일반적으로 TCP/IP 상의 인터넷 응용 프로그램은 데이터의 송신자가 이를 수신할 수신자의 인터넷 주소를 전송 패킷의 헤더에 표시해 패킷을 전송한다. 그러나 멀티캐스트 전송을 위해서는 헤더에 수신자의 주소 대신 수신자들이 참여하고 있는 그룹 주소를 표시하여 패킷을 전송한다.
그러나 현재 인터넷상의 라우터들이 대부분 유니캐스트만을 지원하기 때문에 멀티캐스트 패킷을 전송하기 위하여서는 멀티캐스트 라우터 사이에 터널링이라는 개념을 사용하여 캡슐화된 패킷을 전송한다. 즉 멀티캐스트 주소를 가진 데이터 패킷 헤더 앞에 멀티캐스트 라우터간에 설정된 터널의 양 끝단의 IP 주소를 덧붙여 라우팅을 함으로써 멀티캐스트를 지원하지 않는 일반 라우터들을 거칠 때 기존의 유니캐스트 패킷과 같은 방법으로 라우팅되어 최종적으로 터널의 종착지로 전송될 수 있게 하는 것이다.
- work_snmp_install . . . . 9 matches
설치하지 않고도 MIB를 추가할 수는 있겠지만 mib util를 사용해서 조금 편하게 MIB를 생성하고 추가 하기 위해서는 호스트에도 동일한 환경이 있는 것이 편하다.
.txt 파일들이 ASN1에 맞추어 작성된 MIB 들이다. 이것 들을 참조해서 새로은 mib를 추가해 보자
vs.c, vs.h 파일이 생성 된 것을 확인 할 수 있다.
생성된 파일을 수정해서
그리고 mib_module_inits.h 파일에 init_vs(); 를 추가해 준다.
snmpd.conf 파일을 잘 작성해야 snmp가 정상 동작한다.
# 패키지 인스톨시 따라오는 설정 파일에서 필요없는 부분은 지우고 중요한
# 내에서 유일하다 그러나 다른 에이전트가 같은 이름의 community를 가질 수는
# 비밀의 community를 지정하여 사용하는것이 일반적이다.
- ws_discovery . . . . 1 match
* Discoverable – 기본 모드로 일반적인 Target Service 처럼 동작합니다. 네트워크에 참여하거나 메타 데이터 변경 시 메시지를 보내며, Probe 와 Resolve 메시지를 Listen 하고, 그에 대한 응답을 보냅니다.
- wskim-자기소개 . . . . 15 matches
맞벌이를 하시는 부모님 때문에 유년시절을 시골 할아버지 댁에서 보냈습니다. 농사일을 하시는 조부모님은 바쁜 농사일에도 무척이나 절 귀여워 해주셨습니다. 집 앞 큰 나무에 그네도 만들어 주셨고 자연에서 얻을 수 있는 많은 것들을 알려 주셨습니다. 지금 생각해 보면 도시 아이들 보다 더 많은 것을 자연에서 얻으면서 풍족하게 유년시절을 보냈습니다. 시골 할아버지 댁에서 즐거운 유년시절을 보내고 초등학교를 입학하기 위해서 부모님이 계신 천안으로 오게 되었습니다. 저희 부모님은 자유방임의 교육철학으로 저에게 공부를 강요하시지 않으셨으며 제가 하고자 하는 것을 적극 지지해 주셨습니다. 우리 아들을 믿는다는 말씀과 김박사라는 호칭으로 모든 것을 대신 하셨던 것 같습니다. 김박사는 제가 어릴 적 저희 집에서 불리던 호칭입니다. 왜 그렇게 불려주셨는지는 모르지만 저희 집안에서는 저는 김박사였습니다.
저는 주워진 환경과 일을 즐기면서 하려고 합니다. 나로 하려금 주변이 즐거워 지고 개선 되는 것에 즐거움과 성취감을 느낍니다. 대학교 2학년을 마치고 호주로 워킹홀리데이 비자를 받아서 여행을 떠났습니다. 비행기표와 현금 70만원을 들고 떠난 여행이라서 여행이 풍족할 수 없었습니다. 그 때문에 흔희 말하는 관광이라기 보다는 일과 여행을 병행할수 밖에 없었습니다. 한식당에서 웨이터로도 일을 하고 공장에서 책도 만들어 보고 각종 농장에서 일도 해보면서 호주 반바퀴를 돌았습니다. 힘들고 고된 순간도 있었지만 많은 외국인 친구들을 만나고 대화 하고 일을 하면서 언제나 에너지 넘치는 한국 사람으로 불렸습니다.
대학을 진학하면서 어릴적부터 다니던 성당에서 교리 교사로 3년간 일을 하게 되었습니다. 교리 교사는 주말에 성당에서 아이들 미사 지도와 교리공부를 도와 주는 일을 하고 여름방학이 되면 아이들을 인솔해서 여름신앙 캠프를 떠나게 됩니다. 여름신앙 캠프는 2박3일에서 3박4일 일정으로 이루워 지게 되는데 초등부와 중고등부로 나뉘어 진행합니다. 모든 일정과 프로그램의 작성뿐만 아니라 아이들 인솔까지 모두 교사의 책임이기 때문에 많은 준비와 책임감이 필요한 일 입니다. 3년 동안 교리 교사로서 아이들 교리를 가르치고 캠프를 준비하면서 많은 인원을 인솔하고 프로그램을 진행할 수 있는 기술을 배울 수 있었습니다.
10년후의 나의 모습은 지금과 같은 엔지니어로 일을 하고 있을 것을 기대하고 그렇게 하려고 합니다. 나이에 무관하게 왕성한 연구활동을 할 수 있었으면 합니다. 도퇴되지 않고 시대를 리딩할 수 있는 룰을 만들어 가는 힘이 있는 사람으로 성정해 있기를 원합니다. 그러기 위해서 지금은 낮은 자세로 아래로 위로 많은 것을 배우고 수용하는 자세로 모든 업무에 임하겠습니다.
- wskim_app_list . . . . 1 match
= 윈도우 파일 서치 프로그램 =
- wskim_banghee_daily . . . . 1 match
진료 시간 : 토요일 10:00 ~ 16:00 (점심 시간 13:00 ~ 14:00)
- wskim_banghee_sick . . . . 8 matches
특히 평소보다 심한 생리통은 20대 여성에게 많이 생기는 '''자궁내막증의 전조증상'''일 수 있다. 생리와 관련된 증상에 따라 각각 어떤 질환을 의심할 수 있는지에 대해 알아보자.
한 통계에 따르면 우리나라 여성 중 75% 정도가 생리통을 겪으며, 그 가운데 20%가량은 일상생활이 힘들 정도의 심한 생리통을 앓고 있다고 한다. 여자이기에 어쩔 수 없는 숙명으로 받아들이고 그냥 넘기기엔 생리의 고통이 너무 크다. 생리통의 다양한 증상에 따른 치료법과 극복법을 알아보자
생리통은 아랫배가 묵직한 느낌이거나 약간의 통증을 동반한다. 심한 사람은 출산때와 유사한 통증을 겪고, 허리와 골반의 뻐근한 통증, 오심(신물이 올라오는 현상)과 구토, 실신을 하는 이들도 있다. 함기 힘든 정도의 생리통에 시달리고 있다면 진통제보다는 자궁 수축을 유발하는 물질의 생성을 억제하는 약물치료를 받는다. 생리시 2~3일 정도 '''비스테로이드성 소염 진통제'''를 복용하는 치료로 3~6개월 정도면 효과가 나타난다.
평소 생리통이 없다가 갑자기 생긴 생리통, 혹은 참기 어려운 통증이 계속 된다면 자궁 질환에 의한 ''속발성 생리통''일 수 있다. 이 경우에는 원인 치료가 필요하다. 일반적으로 성인이 된 이후 한번도 빠짐 없이 생리통을 겪고 그때마다 심한 통증에 시달린다면 '''자국내막증'''을, 생리통이 있으면서 과다월경이 반복되면 자궁근종을 의심해본다. 생리통이 심하다면 진통제로 매달 그냥 넘기기보다는 한 번쯤 산부인과 검진을 받아 본다. 특히 자국내막증과 같은 질환을 방치하면 불임으로 이어질 수 있으니 특별한 관심이 필요하다.
1차 접종 대전 둔산 병원에서 12월 10일
2차 접종 1월 10일 이후
3차 접종 3월 10일 이후
- wskim_house . . . . 1 match
수영장의 벽 일부를 유리벽으로 처리해서 색다른 즐거움을 주고 있다.
- wskim_lig_insurance . . . . 1 match
1. 구비서류를 이메일로 받아서 작성
- wskim_recipe_soy_sauce . . . . 2 matches
맛간장 만드는일은 정말 쉽답니다.
한번 만들때 귀찮치만 일단 만들면, 두고두고 잘먹는 맛간장을
- wskim_recipe_꼬리찜 . . . . 1 match
나중에 국물이 없을때까지 졸일꺼기 때문에
- wskim_경력 . . . . 1 match
* Linux kernel 컴파일
- wskim_국화차 . . . . 2 matches
일반적으로 백국화는 간에 주로 작용하는데 간기상승을 억제하며 눈을 밝게 하는 작용이 있어 간기상승으로 인한 어지럼증
성질이 제일 강하여 열을 내리고 독을 풀어주는 작용이 있어 부스럼,종기등에 사용됩니다.
- wskim_그남자작곡그여자작사 . . . . 1 match
아궤스 암 호핑 유일 비데어 포 미 인 디엔
- wskim_살다보면만나지는인연 . . . . 1 match
서로에게 할 일이 아닌 것 같고
- wskim_여행정보_출장_미국_시에틀_sc11 . . . . 1 match
= 일정 =
- wskim_여행정보_태국 . . . . 2 matches
방콕에서 BTS 일일권(120바트)을 끊을지 그냥 다닐지 애매할 때 한 번 보세요 : )
- 김환선 . . . . 32 matches
맞벌이하시는 부모님 때문에 유년시절을 시골 할아버지 댁에서 보냈습니다. 농사일하시는 조부모님께서는 바쁜 농사일 중에도 무척이나 절 귀여워 해주셨습니다. 집 앞 큰 나무에 그네도 만들어 주셨고 자연에서 얻을 수 있는 많은 것들을 알려 주셨습니다. 지금 생각해 보면 도시 아이들보다 더 많은 것을 자연에서 얻으며 풍족한 유년시절을 보냈던 것 같습니다. 시골에서 유년시절을 보내고 초등학교를 입학할 때쯤 부모님이 계신 천안으로 오게 되었습니다. 저희 부모님은 자유방임의 교육철학으로 저에게 공부를 강요하시지 않으셨지만 제가 하고자 하는 것은 적극 지지해 주셨습니다. 우리 아들을 믿는다는 말씀과 김 박사라는 호칭으로 절 불러주셨습니다. 김 박사는 제가 어릴 적 집에서 불리던 호칭입니다. 아마도 똑똑하고 바른 사람으로 자라줬으면 하는 바람으로 그런 호칭으로 절 불러주셨던 것 같습니다.
저는 지금 이종 컴퓨터 관련 연구에 참여하고 있습니다. 하지만 이 연구를 계속 진행할 수 없을 상황에 부닥치게 되었습니다. 그런 와중에 국가정보원에서 이종 컴퓨터 관련 인력을 구한다는 소식을 듣게 되었습니다. 국가정보원이라는 곳에 대해서는 잘 알지 못합니다만 지금 제가 하는 분야에 대해서는 누구보다 잘 알고 있으며 또한 잘할 수 있습니다. 지금 제가 하고 있는 일에서 최고가 되고 그로 인해 나라에 도움이 될 수 있다면 더 없는 복이라 생각 합니다
일에 관련해서는 해결하기 힘들었다거나 고생했다고 느낀 일은 많지 않습니다. 컴퓨터라고 하는 분야가 광범위하다 보니 어떤 일이든 늘 새로운 일일 수밖에 없었습니다. 사회에 나와서 처음 했던 일은 UML이라는 개념을 도입해서 프로젝트를 진행하는 일을 했습니다. 국내에서는 UML을 도입해서 실제 제품을 개발하는 곳이 전혀 없다 보니 UML툴을 판매하는 본사로부터 컨설팅을 받아가면서 프로젝트를 진행했습니다. 1년여의 시간 동안 UML을 갖고 설계와 개발을 진행하다 보니 국내에서 UML툴을 제일 잘 다루는 사람이 되어 있었습니다. 이후 맞게 된 일은 임베디드 제품을 개발업무였습니다. 컴퓨터 언어 중 가장 추상도가 높은 고급언어를 사용하다가 하드웨어에 근접한 임베디드 제품 개발을 하게 되니 새로운 세계를 만난 듯했습니다. 하지만 이 역시 못 할 일은 아니었습니다. 1년 정도의 시간을 들여 두 가지 제품을 개발했고 지금은 자리를 옮겨 병렬 컴퓨팅 관련 연구에 참여하고 있습니다. 다양한 경험을 갖고 맞은바 임무에 최선을 다하겠습니다.
단체 생활이라고 할 수 있는 경험은 대학 시절 봉사활동으로 했던 천주교 주일학교 교사와 군대 생활 그리고 지금의 직장 생활입니다. 군대 생활이야 말할 것도 없이 힘들었지만 군대 시절 힘들었다는 얘기처럼 재미없는 이야기도 없으니 빼고 저의 대학 시절 얘기를 조금 해 보록 하겠습니다. 숫기 없고 남 앞에 나서기가 죽기보다 싫었을 만큼 내성적인 성격이었던 저는 이 내성적인 성격을 극복해 보고자 어려서부터 다니던 성당에서 주일학교 교사를 하기로 마음먹었습니다. 처음엔 아이들 돌봐주고 교리 공부를 조금 도와주면 되겠다는 생각으로 시작했는데 생각보다 교리교사가 해야할 일이 많았습니다. 여름 방학이 되면 성당에서 캠프를 떠납니다. 이 캠프의 준비는 전적으로 교리교사들의 몫입니다. 성당에 나오는 7살 유치원생부터 초등학교 6학년까지 백여 명의 아이들을 인솔해서 외진 곳에서 며칠을 보낸다는 것은 생각만큼 쉽지 않은 일입니다. 인원도 많고 연령 폭도 넓어서 다양한 나이의 아이들이 함께할 수 있는 프로그램을 만들고 넓은 공간을 효율적으로 이용할 수 있도록 해야 하므로 시간과 공간을 모두 고려한 계획을 세워야 했습니다. 이런 프로그램을 기획하는 일에 빠져 중고등부 교사까지 총 3년이라는 시간 동안 주일학교 교리교사로서 봉사했었습니다.
1978년 3월 25일 출생
* 천안 북일 고등학교 19회 졸업
* 정보처리기사 자격취득(04201021056G) - 2004년 6월 7일
1998년 11월 2일 ~ 2001년 1월 1일
2002년 4월 5일 ~ 2003년 1월 25일
2007년 1월 28일 ~ 2010년 5월 31일
2010년 6월 1일 ~ 2011년 1월 31일
2011년 3월 1일 ~ 현재
2013년 11월 24일
- 리눅스드라이버 . . . . 12 matches
리눅스 드라이버를 만들어 추가하고 컴파일 하는 방법에 대한 설명을 한다.
= 컴파일 설정 =
드라이버는 작성하고 그것을 커널과 함께 컴파일 하기 위해서는 몇 가지 과정이 필요하다.
Makefile의 작성은 계층적인 구성을 갖는다. 각 드렉토리마다 하나의 Makefile과 Kconfig 파일을 작성한다. 만약에 서브 드렉토리가 있다면 드렉토리에 대한 설정을 현 드렉토리에서 처리하지 않고 서브 드렉토리에서 처리 할 수 있도록 설정해 준다.
''설제 컴파일 될 오브젝트가 같은 드렉토리에 있을때는 오브젝트를 넣어준다.''
Kconfig는 커널의 환경변수를 설정하기 위해서 사용하는 설정 파일이다. 이 파일은 make menuconfig때 읽혀진다. Kconfig도 Makefile과 같이 드렉토리 계층에 따라서 하나씩 존재하게 되는데 현 드렉토리에서 서브 드렉토리에 대한 처리를 해줘야 한다.
{{{{color: rgb(255, 1, 1); font-size: 13px; font-weight: bold;}플렛폼에 따라 각기 다른 디렉토리에 있는 Kconfig 파일을 참조하게 되는데 arm 플렛폼을 사용할 경우 /arch/arm/Kconfig 의 내용을 참조한다.}}}
실제 엔트리단에서의 Kconfig 설정 파일은 위와 같다.
초기화 함수는 static으로 선언해서 파일 외부에 노출 시키지 않는 것이 좋다.
__exit 수정자는 모듈 제거용으로만 코드를 사용하라는 표시이다. 컴파일러는 코드를 특수 ELF 섹션에 둔다. 모듈을 커널 내부에 들어가도록 직접 빌드했거나 커널 설정에서 모듈 제거를 허용하지 않은 경우 제거 함수는 버려진다.
[:Kernel%EC%BB%B4%ED%8C%8C%EC%9D%BC%ED%95%98%EA%B8%B0 Kernel 컴파일하기]
- 리눅스의구조 . . . . 41 matches
* 파일 시스템
리눅스 커널은 전체 메모리를 일반적으로 4KB 크기인 페이지 단위로 나우어 관리한다. 커널은 모든 페이지를 접근할 수 있지만, 실제로는 그 일부만 사용하고 나머지는 응용 프로그램에서 사용하게 된다.
* '''사용자 쓰레드''': 쓰레드는 하나의 사용자 프로세스로 매핑된 또 다른 실행 개체이다. 사용자 공간의 쓰레드는 동일한 텍스트, 데이터, 힙 영역을 공유한다. 또한 열려 있는 파일 목록, 시그널 처리 함수 등의 자원은 공유되지만 스택 영역은 별도로 존재한다.
== 파일 시스템 ==
리눅스에서는 다양한 종류의 파일 시스템들이 VFS(Virtual File System)라는 계층을 통해 관리 된다. VFS는 시스템상의 다양한 장치들에 저장된 데이터를 일관적인 형식으로 바라볼 수 있도록 해 준다.
리눅스가 동작하는 모든 장치는, 그것이 임베디드 시스템이든 서버 머신이든 간에 최소한 하나 이상의 파일 시스템이 필요하다.
이것은 특별히 파일 시스템을 필요로 하지 않는 실시간 운영체제와 구분되는 특징이다.
모든 리눅스 시스템은 루트 파일 시스템과 함께, 임베디드 시스템을 위한 플래시나 ROM기반의 늑수 파일 시스템을 지원한다. 또한 호스트상의 파일 시스템을 임베디드 시스템 Target에 마운트 할 수 있는 NFS(Network File System)와 임베디드 시스템에서 유용하게 사용되는 메모리 기반의 파일 시스템에 대한 지원도 포함 된다.
* 임의적인 접근이 가능한 장치들을 지원하는 블록 장치(Block device). 블록 장치는 파일 시스템을 구현하는 기본이 된다.
* '''프로그램''': 파일 시스템상에 존재하는 응용 프로그램으로, 메모리상에 로드되어 실행된다. 가상 메모리 기능으로 전체 프로그램 이미지가 메모리상에 로드 되는 것이 아니라 현제 실행 중인 부분의 페이지만 로드 된다.
== 사용자 공간에서 실행되는 파일 ==
임베디드 시스템에서 가장 일반적으로 쓰이는 바이너리 실행 파일의 형식은
* '''Boot Loader''' : 일반적으로 이 단계에서는 하드웨어 초기화와 테스트를 수행한 후 커널 이미지를 메모리에 로드하고 제어를 커널로 넘기는 일을 한다.
* '''커널 초기화''': 이 단계에서는 플랫폼에 종속적인 초기화 과장이 이루어지고, 커널 서브시스템 시작, 멀티태스킹 시작, 루트 파일 시스템 마운트 과정을 거쳐 사용자 공간으로 점프한다.
* '''사용자 공간 초기화''' : 일반적으로 이 단계에서는 여러 서비스들을 실행시키고, ''네트워크 초기화 과정''을 거쳐 로그인 프롬프트를 보여준다.
커널 진입점을 알아보기 위해서는 링커 스크립트를 확인해 보아야 한다. 이 함수는 일반적으로 '''arch/<아키텍처 이름>/kernel/head.S'''파일 내에 존재하며 다름과 같은 일을 한다.
* 최초로 C루틴이 호출될 때 사용할 스택 영역을 설정한다. 최초로 실행 될 C루틴은 init/main.c 내에 있는 start_kernel()함수 이다. 이 함수는 idle 프로세스 내에서 종료될 때까지 수많은 일들을 수행한다. 이 함수에서 아래에서 설명할 플랫폼 초기화 함수를 호출한다.
부트로더가 램 디스크 영역을 설정해 두었다면 이후에 해당 영역을 루트 파일 시스템으로 마운트할 수 있도록 인식해 둔다.
모든 플랫폼에서 udelay()함수가 동일하게 동작하는 것을 보장하게 한다.
대부분의 서브 시스템 초기화 과정은 start_kernel()함수 내에서 이루어진다. 이 함수의 끝부분에 init 프로세스를 생성한다.(이 프로세스는 드라이버 초기화, initcall 호출, 루트 파일 시스템 마운트 등의 작업을 수행하고 사용자 공간으로 점프한다.) 현재 프로세스는 ID 0번인 idle 프로세스가 된다.
- 임차권등기 . . . . 6 matches
== 사전일지 ==
2020년 1월 18일. 임대인에게 전화로 계약해지 통보
2020년 2월 19일. 계약일에 나가달라는 통보 받음.
2023년 5월 15일 집주인에게 퇴거 통보
2023년 5월 22일 집주인 부동산에 올렸다는 내용 전달 받음
- 자료정리 . . . . 1 match
1. [Kernel 컴파일하기]
- 크로마서브샘플링 . . . . 1 match
인간의 시각 계통이 루미넌스(밝기차)보다 색의 움직임과 자리 이동에 덜 민감하기 때문에[1] 대역폭은 색의 자세한 부분보다 밝기의 부분을 더 많이 저장함으로써 최적화할 수 있다. 일반적인 시차에서 낮은 레이트에서 색의 자세한 부분을 샘플링함으로써 입는 손실은 눈에 띄지 않는 정도이다. 비디오 시스템에서 색차 컴포넌트를 사용하면서 이를 달성할 수 있다. 신호는 루마 (Y') 컴포넌트와 두 개의 색차 컴포넌트(크로마)로 나뉜다.
- 20100217 . . . . 5 matches
= 일정 =
2010년 2월 17일 ~ 2010년 2월 19일까지(3일)
{{{{color: rgb(255, 1, 1); font-size: 13px; font-weight: bold;} 시스템 파트에서 할 일이 없어 종료 }}}
- 20100221 . . . . 2 matches
= 일정 =
2월 8일 ~ 2월 21까지
- 20100222 . . . . 5 matches
= 일정 =
2010년 2월 22일 ~ 2010년 2월
}}} HOME을 소스파일의 루트로 설정하고 기타 경로를 자신의 환경에 맞게 수정한다.
* target : 카메라에서 사용하는 파일 시스템
* ti-davinci : OS 소스 파일
- 20100223 . . . . 4 matches
= 일정 =
2010년 2월 23일 부터 ~ 2010년 2월 26일까지 (4일)
Found 416 matching pages out of 774 total pages
You can also click here to search title.