<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-605533256599376414</id><updated>2012-02-16T07:36:23.950-08:00</updated><category term='Matrox Imaging'/><category term='천연 세정제'/><category term='pearl jam'/><category term='PLS'/><category term='3x3 bitmask'/><category term='Beagleboard'/><category term='STM32'/><category term='Mobile Atlas Creator'/><category term='단어장'/><category term='boot logo'/><category term='USB2RS485'/><category term='AVR Plugin'/><category term='Power Bounce'/><category term='FabFi'/><category term='Square Root'/><category term='미안함'/><category term='FreeRTOS'/><category term='mktarball'/><category term='Do evolution'/><category term='Primus - Mr. Krinkle'/><category term='Git'/><category term='linear algebra'/><category term='Omap'/><category term='Compiz'/><category term='Camera'/><category term='wirless network'/><category term='wireless problem'/><category term='str91xfwa'/><category term='Maple'/><category term='truetype'/><category term='Busybox'/><category term='무의식'/><category term='소유냐 존재냐'/><category term='Laptop'/><category term='hdparm'/><category term='MSI U100'/><category term='텐트'/><category term='대지의 창'/><category term='FPGA'/><category term='Boys Don&apos;t Cry'/><category term='Cho Ghong Rae'/><category term='backup'/><category term='OpenGL'/><category term='freetype'/><category term='delaunay triangle'/><category term='Cypress Development Suit'/><category term='apm'/><category term='pixmap'/><category term='uclinux'/><category term='toolchain'/><category term='circumcircle'/><category term='Maxima'/><category term='flash write'/><category term='Gnome'/><category term='The Cure'/><category term='USB Disk Mount'/><category term='80&apos;s'/><category term='linux device driver'/><category term='Altea'/><category term='5 각형'/><category term='radeon'/><category term='ADC'/><category term='나사산'/><category term='Solios eV-CL'/><category term='ADC2USB'/><category term='KMS'/><category term='patience'/><category term='blackfin'/><category term='Eclipse'/><category term='0xlab'/><category term='AVR'/><category term='Watershed'/><category term='cortex'/><category term='산책'/><category term='Emacs'/><category term='Goldfish'/><category term='ramdisk/tmpfs'/><category term='libcameraservice'/><category term='Trilinear coordinate'/><category term='Python'/><category term='pentagon'/><category term='Optical Coating'/><category term='작업일지'/><category term='USB Camera'/><category term='MingW'/><category term='double linked list'/><category term='To Have or To Be'/><category term='차경아'/><category term='GLUT'/><category term='김근태'/><category term='Radio Head'/><category term='real number'/><category term='acpi'/><category term='ARM'/><category term='H-method'/><category term='1215t'/><category term='SD Card'/><category term='한미 FTA'/><category term='에리히 프롬'/><category term='Regression'/><category term='visitor map'/><category term='eeprom'/><category term='OpenOCD'/><category term='command'/><category term='AD7829'/><category term='module compile'/><category term='GTK'/><category term='Computer Algebra System'/><category term='USB FIFO'/><category term='programmer'/><category term='State Machine'/><category term='Glade'/><category term='suspend/resume'/><category term='3CCD'/><category term='v4l2'/><category term='FIFO'/><category term='SDL'/><category term='투표장 찾기'/><category term='C code'/><category term='devkit8000'/><category term='Meteor-II'/><category term='NIPALS'/><category term='0xdroid'/><category term='OV9121'/><category term='자전거'/><category term='CPLD'/><category term='USB2000'/><category term='Backup HOME directory'/><category term='Lid Closed'/><category term='complex number'/><category term='Android'/><category term='vector'/><category term='CY7C68013'/><category term='ov3640'/><category term='Geodesic dome'/><category term='linux'/><category term='thumb'/><category term='SRAM'/><category term='USBTinyISP'/><category term='KDE'/><category term='STmicrosystem'/><category term='thinning'/><category term='인터넷 전화기'/><category term='WinAVR'/><category term='Debian'/><category term='omap34xxcam'/><category term='banding filter'/><category term='optics'/><category term='arm-none-eabi'/><category term='Image Processing'/><category term='PCB'/><category term='LPC17xx'/><category term='libusb-win32'/><category term='synchronous fifo'/><category term='Unkle'/><category term='time'/><category term='asm'/><category term='fresnel&apos;s equation'/><category term='xorg'/><category term='malloc'/><category term='tesseract-ocr'/><category term='Bayer2rgb'/><category term='하드 디스크 딸깍 거림'/><category term='Heron&apos;s formula'/><category term='책'/><category term='matrix'/><category term='initlogo.rle'/><category term='verilog HDL'/><category term='Kernel ModeSetting'/><category term='조공례'/><category term='devotion'/><category term='Hyperspectral Imaging'/><category term='asus 1215t'/><category term='Jimmy Hendrix'/><category term='MIL-Lite'/><category term='전원관리'/><category term='VCC-F22V39ACL'/><category term='fglrx-driver'/><category term='선택적 부주의'/><title type='text'>Don't panic !</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default?start-index=101&amp;max-results=100'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>219</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-4383991622107046602</id><published>2012-02-15T09:40:00.000-08:00</published><updated>2012-02-15T09:40:49.963-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USB2RS485'/><title type='text'>USB to RS485/RS422 with protection circuit and Isolation housing</title><content type='html'>&lt;a href="http://www.kisansystem.kr/index/shop/item.php?it_id=1263307062"&gt;http://www.kisansystem.kr/index/shop/item.php?it_id=1263307062&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.eleparts.co.kr/front/productdetail.php?productcode=035011001000000074"&gt;http://www.eleparts.co.kr/front/productdetail.php?productcode=035011001000000074&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-4383991622107046602?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/4383991622107046602/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/usb-to-rs485rs422-with-protection.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/4383991622107046602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/4383991622107046602'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/usb-to-rs485rs422-with-protection.html' title='USB to RS485/RS422 with protection circuit and Isolation housing'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-9171189200309461164</id><published>2012-02-15T08:14:00.000-08:00</published><updated>2012-02-15T08:20:00.567-08:00</updated><title type='text'>합리주의 혹은 중용의 도</title><content type='html'>중용과 합리주의 이 둘의 언급 순서를 어떻게 해야 할지 먼저 생각하게 된다. 이 둘은 울림은 개인적으로 비슷하게 느껴지지만, 아직은 중용 보다는 합리주의라는 말이 가슴에 와 닿는 말이다. 아무튼 같다고는 할 수 없지만 이 둘은 공통된 부분을 공감하며 살아간다는 일들이 왠만히 부지런하지 않으면 쉬운 일이 아닌 것 같다. 당연히 지켜져야 할 일들이 짜증나게 사소한 것들에서 부터 추상적인 담론까지 챙기지 못한다면 못된 사람들의 꽃노름에 휘둘이기에 쉽다. 너무나도 혼잡하다. 개인적인 내적 탐구도 힘든데 외부적으로 바른 길을 찾는 길도 힘들다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-9171189200309461164?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/9171189200309461164/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/blog-post_15.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/9171189200309461164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/9171189200309461164'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/blog-post_15.html' title='합리주의 혹은 중용의 도'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-388777304328729389</id><published>2012-02-13T23:44:00.000-08:00</published><updated>2012-02-14T21:59:46.126-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>AVR development environment with eclipse in debian</title><content type='html'>* install "eclipse"&lt;br /&gt;# apt-get install eclipse-cdt&lt;br /&gt;&lt;br /&gt;* install "AVR-plugin"&lt;br /&gt;Execute "eclipse" -&amp;gt; Help -&amp;gt; Install New Software... -&amp;gt; Add -&amp;gt; type "AVR Plugin" in Name tab and insert "http://avr-eclipse.sourceforge.net/updatesite/" in Location tab -&amp;gt; install "AVR Eclipse Plugin"&lt;br /&gt;&lt;br /&gt;*install "C99 LC Parser" in eclipse&lt;br /&gt;&lt;br /&gt;* install gcc-avr, task-c-devel, gcc-doc, gcc-4.2 avr-libc, binutils-avr, and avrdude, avrdude-doc libftdi1&lt;br /&gt;# apt-get install gcc-avr task-c-devel, gcc-doc, gcc-4.2, avr-libc, binutils-avr avrdude avrdude-doc libftdi1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-388777304328729389?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/388777304328729389/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/avr-development-environment-with.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/388777304328729389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/388777304328729389'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/avr-development-environment-with.html' title='AVR development environment with eclipse in debian'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-2272316611124802114</id><published>2012-02-11T07:16:00.000-08:00</published><updated>2012-02-11T07:27:07.769-08:00</updated><title type='text'>미국 일하러 가기 준비</title><content type='html'>* 보통 연봉 : 5만달러 (현재 시점 6천만원)&lt;br /&gt;&lt;br /&gt;* H1비자는 세금 25%&lt;br /&gt;&lt;br /&gt;* 9시 출근 5시 퇴근&lt;br /&gt;&lt;br /&gt;* Silver Spring에 위치한 Lado라는 학교와 University of Maryland 의 어학 연수프로그램, 전자는 회화위주의 사설 교육기간 Beltsville에서 차로 15분 정도거리 후자는 차로 13분 정도의 거리이다.&lt;br /&gt;&lt;br /&gt;* 가정용 공구 :&amp;nbsp;몽키 스패, 펜치, 프라이어, 니퍼, 롱노즈프라이어, 망치, 드라이버 +,- x 대소너, 육각렌치&lt;br /&gt;&lt;br /&gt;* 전기 장판 : 110, 220 겸용&amp;nbsp;&lt;a href="http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=A594372381&amp;amp;frm3=V2"&gt;http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=A594372381&amp;amp;frm3=V2&lt;/a&gt;&amp;nbsp;한일 전기요 대형 180x 135&lt;br /&gt;&lt;br /&gt;* 주거지&lt;br /&gt;rollins park&lt;br /&gt;&lt;a href="http://www.rollinspark.net/floorPlans.php"&gt;http://www.rollinspark.net/floorPlans.php&lt;/a&gt;&lt;br /&gt;congressional tower&lt;br /&gt;&lt;a href="http://www.congressionaltowers.net/"&gt;http://www.congressionaltowers.net/&lt;/a&gt;&lt;br /&gt;mira mont&lt;br /&gt;&lt;a href="http://www.southernmanagement.com/miramont/"&gt;http://www.southernmanagement.com/miramont/&lt;/a&gt;&lt;br /&gt;&lt;a href="https://www.southernmanagement.com/miramont/apply/"&gt;https://www.southernmanagement.com/miramont/apply/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* 이민가방&lt;br /&gt;&lt;a href="http://www.brightonmall.co.kr/mall/index.php"&gt;http://www.brightonmall.co.kr/mall/index.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* 인터넷 전화기 준비 (LG U+ 070, 기본 요금: 2200원)&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-2272316611124802114?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/2272316611124802114/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/blog-post_11.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2272316611124802114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2272316611124802114'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/blog-post_11.html' title='미국 일하러 가기 준비'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7979948414454114891</id><published>2012-02-11T07:11:00.000-08:00</published><updated>2012-02-11T07:11:08.305-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ramdisk/tmpfs'/><title type='text'>[번역] Chrome 브라우져의 cache 영역을 ram으로</title><content type='html'>다음 문서는 Chrome의 cache영역을 ram disk(/dev/shm)밑으로 설정하고 전원이 꺼질때 유실되는 데이터를 하드 디스크로 복사하고 부팅시 복사된 하드 디스크의 데이터를 다시 ramdisk 밑으로 복사하는 과정을 거치는 노력을 하였다.&lt;br /&gt;&lt;br /&gt;출처 :&amp;nbsp;&lt;a href="http://www.anders.bennehag.com/blog/2010/putting-chromes-cache-in-the-ram/"&gt;http://www.anders.bennehag.com/blog/2010/putting-chromes-cache-in-the-ram/&lt;/a&gt;&lt;br /&gt;Chrome 웹 브라우져는 속도를 향상하는 방향으로 변화하고 있다. 그러나 지속적인 디스크 읽기와 쓰기로 내 Laptop 컴퓨터의 배터리와 하드드라이브를 소모하게된다.&lt;br /&gt;&lt;br /&gt;다행이도 리눅스는 Ram으로 Mount 폴더를 가지고 있다. 이건 읽고 쓰는 작업이 하드 디스크에 영향을 미치지 않는다는 것을 의미한다. (실제로 내 Laptop의 디스크보다 2배정도 빠르다) 단점은 전원을 끄게되면 데이터가 사라지게 된다. 이 폴더는 통상 /dev/shm으로 불린다. 나는 이 폴더를 Chrome 브라우져의 cache로 사용하고자 한다. &amp;nbsp;그러나 나는 컴퓨터의 전원을 끌때 환경 설정, 확장 프로그램, 그리고 저장된 데이터의 잃어 버릴 준비가 되어 있지 않다. 그래서 나는 Ram으로 mount된 /dev/shm에 있는 폴더를 디스크로 복사하는 스크립트를 작성하였다. 그리고 이 스크립트는 Crome이 종료 될 때마다 실행된다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것은 Chrome의 cache를 Ram으로 설정하는 것이다.&lt;br /&gt;&lt;br /&gt;# mkdir /dev/shm/.personal_synced # The folder in ram&lt;br /&gt;# mkdir ~/.personal_synced # The mirrored folder on disk&lt;br /&gt;&lt;br /&gt;매 시간마다 실행되는 간단한 스크립트를 작성하였다. (나는 좀더 쉬운 방식으로 작성되어 질 수 있다고 생각한다. 하지만 나는 아직 bash에 초보자 이다.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;# Sync the ramdisk to harddrive&lt;br /&gt;&lt;br /&gt;foldername=”.personal_synced”&lt;br /&gt;ramdisk=”/dev/shm/”$foldername&lt;br /&gt;harddisk_copy=”/home/anders/”&lt;br /&gt;backup=”/home/anders/”$foldername”.old”&lt;br /&gt;&lt;br /&gt;# Remove the old backup&lt;br /&gt;echo “removing $backup”&lt;br /&gt;rm -fr “$backup”&lt;br /&gt;# Make a copy of the old one&lt;br /&gt;echo “Copies the latest backup $harddisk_copy$foldername”&lt;br /&gt;mv -f “$harddisk_copy$foldername” “$backup”&lt;br /&gt;# Copy from ram&lt;br /&gt;echo “Copies $ramdisk to harddrive, $harddisk_copy”&lt;br /&gt;cp -R “$ramdisk” “$harddisk_copy”&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;나는 이 sync 스크립트가 Chrome이 종료 될때 실행되기를 원한다. 먼저 나는 나는 전원이 종료될때 실행되도록 시도하였다. 다음 스크립트는 Chrome이 종료될때 Ram 디스크를 동기화하는 것이고 난 그져 이 스크립트를 가지고 /usr/bin/google-chrome에 있는 symbolic link를 대체하였다.&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;# Start Chrome with cache in the ram&lt;br /&gt;&lt;br /&gt;/opt/google/chrome/google-chrome -user-data-dir=”/dev/shm/.personal_synced/google-chrome” “$@” &amp;amp;&amp;amp; /home/anders/Scripts/syncRamdisk&lt;br /&gt;&lt;br /&gt;소실된 모든 것들은 컴퓨터가 부팅될때 디스크 폴더의 것들을 복사하는 스크립트가 보상한다.&lt;br /&gt;&lt;br /&gt;# The synced folder&lt;br /&gt;cp -R /home/anders/.personal_synced /dev/shm/&lt;br /&gt;chown -R anders /dev/shm/.personal_synced&lt;br /&gt;&lt;br /&gt;# The chrome cache. I don’t want to sync this so it’s placed outside .personal_synced&lt;br /&gt;mkdir /dev/shm/google-chrome&lt;br /&gt;chown anders /dev/shm/google-chrome&lt;br /&gt;&lt;br /&gt;그리고 단순히 시작 프로그램에 이 스크립트를 추가하였다. &amp;nbsp;System-&amp;gt;Preferences에 해당하는 곳에 하면 된다.&lt;br /&gt;&lt;br /&gt;Chrome의 cache를 우리의 자동 synced &amp;nbsp;폴더로 이동하자.&lt;br /&gt;&lt;br /&gt;.config/google-chrome-folder를 synced 폴더로 이동하고 symbolic link로 대체함으로써 작업은 완벽해 졌다. (나는 또한 cache를 ramdisk로 옮겼으나 synced 폴더를 그렇게 하지 않았다. 나는 cache를 유지하는데 필요한 공간과 소비 시간에 아무런 변화점을 보지 못했다.)&lt;br /&gt;&lt;br /&gt;# mv ~/.cache/google-chrome /dev/shm/google-chrome&lt;br /&gt;# ln -s /dev/shm/google-chrome ~/.cache/google-chrome&lt;br /&gt;&lt;br /&gt;# mv ~/.config/google-chrome /dev/shm/.personal_synced/&lt;br /&gt;# ln -s /dev/shm/.personal_synced/google-chrome ~/.config/google-chrome&lt;br /&gt;&lt;br /&gt;주의 사항들:&lt;br /&gt;&lt;br /&gt;/dev/shm/는 모두에 의해서 읽기가 가능하다. 이 폴더에 어떤 것을 넣는 것은 매우 안전한 작업은 아니다.&lt;br /&gt;&lt;br /&gt;추가작업: 나는 스크립트를 약간 수정하였다. root 소유의 폴더에서 문제점이 발생하였다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7979948414454114891?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7979948414454114891/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/chrome-cache-ram.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7979948414454114891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7979948414454114891'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/chrome-cache-ram.html' title='[번역] Chrome 브라우져의 cache 영역을 ram으로'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-182212466859001604</id><published>2012-02-08T07:10:00.000-08:00</published><updated>2012-02-16T07:36:24.217-08:00</updated><title type='text'>/dev/shm  무엇에 쓰는 물건인가?</title><content type='html'>POSIX 기반의 공유 메모리를 위한 파일 시스템으로 응용프로그램들이 데이터 공유를 위해서 잠시 사용하기는 용도로 규정되어 있는 것으로 보인다. 문제는 이 파일 시스템이 메모리를 저장 공간으로 사용하기 때문에 저장및 읽기 속도는 빠르지만 hibernation상태로 진입하게 될때 처럼 전원이 차된되는 경우 데이터를 유실할 가능성이 있다. 그래서 swap영역을 사용하도록 규정되어 있다고 언급된다. 그레서 shm의 데이터는 hibernation상태로 진입할때 하드 디스크영역에 해당하는 swap영역에 데이터를 저장한다고 여겨진다. &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-182212466859001604?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/182212466859001604/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/devshm.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/182212466859001604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/182212466859001604'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/devshm.html' title='/dev/shm  무엇에 쓰는 물건인가?'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1082131125376228878</id><published>2012-02-07T20:06:00.000-08:00</published><updated>2012-02-07T20:06:43.102-08:00</updated><title type='text'>RAM upgrade 후 (2g -&gt; 4g) tmpfs의 용량 바꾸기</title><content type='html'>tmpfs로 mount된 /dev/shm의 용량은 ram의 용량이 2g였을 때의 설정을 그대로 가지고 있다.&lt;br /&gt;&lt;br /&gt;# df -h /dev/shm&lt;br /&gt;&lt;br /&gt;Filesystem &amp;nbsp; &amp;nbsp; &amp;nbsp;Size &amp;nbsp;Used Avail Use% Mounted on&lt;br /&gt;tmpfs &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 760M &amp;nbsp;1.1M &amp;nbsp;759M &amp;nbsp; 1% /run/shm&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;음. ram이 2g 였었지만 비디오 카드가 사용하던 용량이 300M정도 였었음을 감안하면 얼추 맞는것 같다. 90M가 모자르지만 맞다고 하자.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그럼 용량을 바꾸어보자.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# vi /etc/fstab&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;어라 /dev/shm의 mount 정보가 없다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;좀더 찾아 보니 초기화 스크립트로 옮겨 갔다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# ls /etc/rcS.d&lt;/div&gt;&lt;div&gt;&lt;div&gt;README&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;S09checkfs.sh&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;S17nfs-common&lt;/div&gt;&lt;div&gt;S01mountkernfs.sh &amp;nbsp; &amp;nbsp; S10mountall.sh&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;S18mountnfs.sh&lt;/div&gt;&lt;div&gt;S02udev&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;S11mountall-bootclean.sh&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;S19mountnfs-bootclean.sh&lt;/div&gt;&lt;div&gt;S03mountdevsubfs.sh &amp;nbsp; S12mountoverflowtmp&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;S20console-screen.sh&lt;/div&gt;&lt;div&gt;S04bootlogd&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;S13ifupdown-clean&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;S21kbd&lt;/div&gt;&lt;div&gt;S05keyboard-setup &amp;nbsp; &amp;nbsp; S13pppd-dns&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;S22console-setup&lt;/div&gt;&lt;div&gt;S06hdparm&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;S13procps&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;S23alsa-utils&lt;/div&gt;&lt;div&gt;S06hostname.sh&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;S13udev-mtab&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;S23bootmisc.sh&lt;/div&gt;&lt;div&gt;S06hwclockfirst.sh &amp;nbsp; &amp;nbsp;S13urandom&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;S23fuse&lt;/div&gt;&lt;div&gt;S07checkroot.sh &amp;nbsp; &amp;nbsp; &amp;nbsp; S13x11-common&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;S23lm-sensors&lt;/div&gt;&lt;div&gt;S08hwclock.sh&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;S14ifupdown&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;S24stop-bootlogd-single&lt;/div&gt;&lt;div&gt;S08module-init-tools &amp;nbsp;S15networking&lt;/div&gt;&lt;div&gt;S08mtab.sh&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;S16rpcbind&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;여기서&amp;nbsp;S03mountdevsubfs.sh에 해당 내용이 들어 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Mount a tmpfs on /run/shm&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ ! -d /run/shm ]&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; then&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mkdir --mode=755 /run/shm&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ -x /sbin/restorecon ] &amp;amp;&amp;amp; /sbin/restorecon /run/shm&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ yes = "$RAMSHM" ] || read_fstab_entry /run/shm tmpfs; then&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; domount "$MNTMODE" tmpfs shmfs /run/shm tmpfs "-onosuid,nodev$SHM_OPT"&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chmod "$SHM_MODE" /run/shm&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Migrate early, so /dev/shm is available from the start&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ "$MNTMODE" = mount_noupdate ] || [ "$MNTMODE" = mount ]; then&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; run_migrate /dev/shm /run/shm ../run/shm&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;음.. &amp;nbsp;잘 모르겠다 용량 설정하는 내용이 없다. 아마도 SHM_OPT라는 변수에 있을 것 같다.&lt;/div&gt;&lt;div&gt;여기(/lib/init/tmpfs.sh)에 다있네&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;#&lt;/div&gt;&lt;div&gt;# Set tmpfs vars&lt;/div&gt;&lt;div&gt;#에&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# Set defaults for /etc/default/tmpfs, in case any options are&lt;/div&gt;&lt;div&gt;# commented out which are needed for booting. &amp;nbsp;So that an empty or&lt;/div&gt;&lt;div&gt;# outdated file missing newer options works correctly, set the default&lt;/div&gt;&lt;div&gt;# values here.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;TMPFS_SIZE=20%&lt;/div&gt;&lt;div&gt;TMPFS_MODE=755&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RUN_SIZE=10%&lt;/div&gt;&lt;div&gt;RUN_MODE=755&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;LOCK_SIZE=5242880 # 5MiB&lt;/div&gt;&lt;div&gt;LOCK_MODE=1777&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SHM_SIZE=&lt;/div&gt;&lt;div&gt;SHM_MODE=1777&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;TMP_SIZE=&lt;/div&gt;&lt;div&gt;TMP_MODE=1777&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# Source conffile&lt;/div&gt;&lt;div&gt;if [ -f /etc/default/tmpfs ]; then&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; . /etc/default/tmpfs&lt;/div&gt;&lt;div&gt;fi&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RUN_OPT=&lt;/div&gt;&lt;div&gt;[ "${RUN_SIZE:=$TMPFS_SIZE}" ] &amp;amp;&amp;amp; RUN_OPT=",size=$RUN_SIZE"&lt;/div&gt;&lt;div&gt;[ "${RUN_MODE:=$TMPFS_MODE}" ] &amp;amp;&amp;amp; RUN_OPT="$RUN_OPT,mode=$RUN_MODE"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;LOCK_OPT=&lt;/div&gt;&lt;div&gt;[ "${LOCK_SIZE:=$TMPFS_SIZE}" ] &amp;amp;&amp;amp; LOCK_OPT=",size=$LOCK_SIZE"&lt;/div&gt;&lt;div&gt;[ "${LOCK_MODE:=$TMPFS_MODE}" ] &amp;amp;&amp;amp; LOCK_OPT="$LOCK_OPT,mode=$LOCK_MODE"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SHM_OPT=&lt;/div&gt;&lt;div&gt;[ "${SHM_SIZE:=$TMPFS_SIZE}" ] &amp;amp;&amp;amp; SHM_OPT=",size=$SHM_SIZE"&lt;/div&gt;&lt;div&gt;[ "${SHM_MODE:=$TMPFS_MODE}" ] &amp;amp;&amp;amp; SHM_OPT="$SHM_OPT,mode=$SHM_MODE"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;TMP_OPT=&lt;/div&gt;&lt;div&gt;[ "${TMP_SIZE:=$TMPFS_SIZE}" ] &amp;amp;&amp;amp; TMP_OPT=",size=$TMP_SIZE"&lt;/div&gt;&lt;div&gt;[ "${TMP_MODE:=$TMPFS_MODE}" ] &amp;amp;&amp;amp; TMP_OPT="$TMP_OPT,mode=$TMP_MODE"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;아 잘 모르겠다. 시간을 두고 살펴봐야지.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1082131125376228878?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1082131125376228878/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/ram-upgrade-2g-4g-tmpfs.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1082131125376228878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1082131125376228878'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/ram-upgrade-2g-4g-tmpfs.html' title='RAM upgrade 후 (2g -&gt; 4g) tmpfs의 용량 바꾸기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-5597393620509166357</id><published>2012-02-07T00:38:00.000-08:00</published><updated>2012-02-07T02:00:57.170-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ramdisk/tmpfs'/><title type='text'>RAMDISK, ramfs, 그리고 tmpfs사이에 생기는 혼동!</title><content type='html'>이후의 글은 다음 링크를 참조하였다.&lt;br /&gt;&lt;a href="http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Introducing-initramfs-a-new-model-for-initial-RAM-disks/"&gt;http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Introducing-initramfs-a-new-model-for-initial-RAM-disks/&lt;/a&gt;&lt;br /&gt;ramdisk와 ramfs의 차이&lt;br /&gt;&lt;br /&gt;initrd같은 ramdisk는 ram 기반 block device이다. 이건 disk같이 mount되고 포멧된 고정된 크기의 메모리 공간을 의미한다. 이것은 ramdisk의 내용들은 일정한 형식을 갖는 형태로 되어 있어야 하고 특별한 도구(mke2fs, losetup)로 준비되어야한다. 그리고 모든 block device들과 같이 실행시 데이터를 해석하기 위해서 filesystem 드라이버가 필요하다. 이건 또한 낭비되는 공간(ramdisk가 꽉차지 않으면, 나머지메모리는 어떠한 것으로 사용될 수 없다.)이나 공간 제한(ramdisk가 꽉 채워졌지만 나머지 메모리 공간이 여유가 있더라도, 포멧없이 ramdisk의 확장은 불가능하다.)인위적인 크기 제한을 의미한다.&lt;br /&gt;&lt;br /&gt;그러나 ramdisk들은 실제로 caching 때문에 많은 공간을 낭비한다. Linux는 block device를 쓰거나 읽기 위한 모든 파일과 디렉토리 entry를 cache로 처리하도록 고안되어져 있다. 그레서 Linux는 ramdisk에 쓰거나 읽게된 데이터를 "page cache"나 "dentry cache"로 복사한다. ramdisk의 아랫쪽 부분은 block device처럼 다루어 진다.&lt;br /&gt;&lt;br /&gt;몇년 후 Linus Torvalds는 잘정리된 아이디어를 가졌다. 리눅스의 cache시스템이 filesystem처럼 mount되어 진다면 어떨까?하는... cache에 파일을 유지하고 시스템이 재시동하거나 지워질때까지 절대 지우지 안으면 어떨까? Linus는 "ramfs"이라 불리는 cache 시스템을 둘러싸는 작은 껍데기를 작성하였다. 다른 커널 개발자들은 "tmpfs"이라 불리는 개선된 버전을 만들었다. (이것은 데이터를 swap 공간에 저장할 수 있고 모든 가용 메모리를 다 소비하기 전에 공간이 다 채워지는 mount 지점의 크기를 &amp;nbsp;제한한다. tmpfs의 예는 Initramfs이다.&lt;br /&gt;&lt;br /&gt;이러한 ram 기반 filesystem들은 자동적으로 그들이 가지고 있는 데이터의 크기에 맞게 작아지거나 커진다. ramfs에 파일을 추가하거나 있는 파일의 용량을 키우는 작업은 자동적으로 더 많은 메모리를 할당한다. 그리고 파일을 지우거나 줄이는 작업은 그 메모리를 되돌려준다. 현시점에서 block device가 없기 때문에 block device와 cache사이에 어떠한 복사도 없다. cache에서의 복사는 데이터의 단순한 복사이다. 모든 훌룡한 부분들은 새로운 코드들이 아니다. 그러나 기존의 Linux caching 코드들을 위한 새로운 응용프로그램은 매우 단순하고 극도록 잘 검증된 기반구조에 기초한다.&lt;br /&gt;&lt;br /&gt;root file system으로 initramfs을 사용하는 시스템은 filesystem으로 해석될 block device가 없기 때문에 하나의 filesystem 드라이버만으로 구현된&amp;nbsp;커널이면 안된다. 그져 메모리에 파일이 존재하게된다.&lt;br /&gt;&lt;br /&gt;이 둘의 차이는 &amp;nbsp;가상적인 disk와 filesystem의 차이이다. 서로 다른 차원에서 형성된 개념으로 비교가 불가능하다. 예를 들어 이야기 하자면 시스템의 RAM의 한부분을 RAMDISK로 사용하고 파일 시스템을 ramfs으로 포멧한다라고 하면 이해가 되려나?&lt;br /&gt;&lt;br /&gt;이후의 내용은 다음 링크의 내용을 참조 하였음&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/"&gt;http://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ramfs과 tmpfs의 차이&lt;br /&gt;&lt;br /&gt;기본적으로 tmpfs과 ramfs는 몇가지 세세한 사항을 제외하고 거의 동일하다.&lt;br /&gt;&lt;br /&gt;ramdisk는 동적으로 공간을 할당한다. 그레서 ramfs에 데이터를 쓰는 작업은 시스템에서 사용가능한 메모리의 크기를 넘어가지 않도록 해야한다. 이야기 해보자면 여러분이 시스템에 2G의 &amp;nbsp;RAM을 가지고 있고&amp;nbsp;1G의 ramfs을 생성하고&amp;nbsp;/tmp/ram의 지점에 mount되어 있다고 하자. /tmp/ram의 전체 크기가 1G를 상회할 때도 여전히 데이터를 저장할 수 있다. 시스템은 1G를 넘는 데이터 저장 행위를 멈추지 못한다. 그러나 시스템의 &amp;nbsp;RAM의 전체 크기 2G를 넘는 데이터 저장을 하게 되면 시스템은 멈추고 RAM에는 더이상 데이터를 저장할 공간이 없어지게 된다.&lt;br /&gt;&lt;br /&gt;tmpfs은 동적으로 공간을 할당하지 않는다. tmpfs을 mount할 때 설정한 용량을 넘어서서 데이터 저장을 허용하지 않는다. 그레서 데이터를 쓰는 작업이 용량이 넘지 않도록 신경쓰지 않아도 된다. 하지만, 용량을 넘어서는 작업을 하게되면&amp;nbsp;“No space left on device”라는 메시지를 내보낸다.&lt;br /&gt;&lt;br /&gt;tmpfs은 swap을 사용한다. (swap은 파일 시스템의 swap 디스크를 일컷는다.)&lt;br /&gt;&lt;br /&gt;ramfs은 swap을 사용하지 않는다.&lt;br /&gt;&lt;br /&gt;ramfs과 tmpfs의 단점&lt;br /&gt;&lt;br /&gt;ramfs과 tmpfs의 단점은 시스템이 재시동하거나 멈추게 될 때 다 지워지게 된다. 그레서 주기적으로 disk에 저장하는 작업을 해주어야 한다. 시스템이 재시동할 때 ramfs과 tmpfs의 데이터를 disk에 저장하는 작업을 할 수 있지만 시스템이 멈출때는 이러한 추가적인 도움을 받을 수 없다.&lt;br /&gt;&lt;br /&gt;Table: Comparison of ramfs and tmpfs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Experimentation&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Tmpfs &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ramfs&lt;br /&gt;허용량이상의 데이터 쓰기 &amp;nbsp; &amp;nbsp;에러 메시지 &amp;nbsp; &amp;nbsp; &amp;nbsp;쓰기 작업 허용&lt;br /&gt;고정된 총 용량 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;고정된 총크기 &amp;nbsp; 변동적인 총 크기&lt;br /&gt;Swap 디스크 사용 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;사용 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;무사용&lt;br /&gt;휘발성 저장 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 예 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 예&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;여러분이 데이터를 쓰는 작업을 좀 더 빠르게 하자고 한다면, 시스템 주의사항을 제공하는 tmpfs이 좀더 낳다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-5597393620509166357?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/5597393620509166357/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/ramdisk-ramfs-tmpfs.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5597393620509166357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5597393620509166357'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/ramdisk-ramfs-tmpfs.html' title='RAMDISK, ramfs, 그리고 tmpfs사이에 생기는 혼동!'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3299570303340907097</id><published>2012-02-06T22:38:00.000-08:00</published><updated>2012-02-06T22:48:40.221-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ramdisk/tmpfs'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>RAM 업그레이드 후  Debian (wheezy) 시스템의 자원 사용 현황</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: justify;"&gt;먼저 gnome-system-monitor에서 &amp;nbsp;보여준 결과는 다음과 같다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mrJU7g1kiTc/TzDB4b4WYHI/AAAAAAAAAbo/zEjzBm7WEMM/s1600/%ED%99%94%EB%A9%B4+-+%EC%8B%9C%EA%B0%81+2012-02-07+15:15:43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="295" src="http://4.bp.blogspot.com/-mrJU7g1kiTc/TzDB4b4WYHI/AAAAAAAAAbo/zEjzBm7WEMM/s400/%ED%99%94%EB%A9%B4+-+%EC%8B%9C%EA%B0%81+2012-02-07+15:15:43.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;실행한 프로그램은 rythmbox, crome(active 30 tabs), virtualbox, 관리자 터미널, &amp;nbsp;libreoffice등이다. 평소에 사용하는 조합이다. 가장 큰 가변 요인은 virtualbox의 램 사용률이다 설정은 1G로 설정해 놓았지만, 실제 그렇지는 않는 것 같다. 유동적으로 나눠 쓰는 모양인지 모르겠다. 아무튼 살펴본 봐는 위와 같다.&lt;br /&gt;&lt;br /&gt;swap 파일 시스템은 전혀 사용하지 않는다. &amp;nbsp;CPU는 어쩔 수 없지만 메모리는 1G정도 여유가 있는 것 같다. 그레서 crome의 cache 저장용으로 ramdisk나 tmpfs을 만들어서 사용해야 겠다.&lt;br /&gt;&lt;br /&gt;우선 ramdisk와 tmpfs의 차이점에 대해서 살펴 봐야 겠다. 둘다 RAM을 디스크로 사용하는 기법인 것 같은데 구체적인 구현이 다른 것 같다. 그리고 둘을 지원하는지 살펴 보아야 겠다. 이것 당장 해 보았다.&lt;br /&gt;&lt;br /&gt;tmpfs을 지원하는지 살펴보기&lt;br /&gt;# grep tmpfs /proc/filesystems&lt;br /&gt;nodev&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;tmpfs&lt;br /&gt;nodev&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;devtmpfs&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RAMDISK를 지원하는지 살펴보기&lt;/div&gt;&lt;div&gt;# &amp;nbsp;dmesg | grep RAMDISK&lt;/div&gt;&lt;div&gt;&lt;div&gt;[ &amp;nbsp; &amp;nbsp;0.000000] RAMDISK: 36cc6000 - 3765b000&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;음. tmpfs이나 RAMDISK는 지원하는것 같다. 아래 출력은 이미 사용중이라는 생각이 들긴하지만 자세히 무엇을 의미하는지 모르겠다. 용량으로 살펴 볼땐 그래픽 모듈이 사용하는 것 같긴하다.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;다음은 RAMDISK 만드는 법이다.&lt;br /&gt;&lt;a href="http://shibuvarkala.blogspot.com/2009/09/howto-create-ramdisk-in-ubuntu-debian.html"&gt;http://shibuvarkala.blogspot.com/2009/09/howto-create-ramdisk-in-ubuntu-debian.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.techtach.org/using-and-mounting-a-ram-disk-in-ubuntu-the-easy-way"&gt;http://www.techtach.org/using-and-mounting-a-ram-disk-in-ubuntu-the-easy-way&lt;/a&gt;&lt;br /&gt;&lt;a href="http://securfox.wordpress.com/2009/03/14/how-to-create-a-ram-disk/"&gt;http://securfox.wordpress.com/2009/03/14/how-to-create-a-ram-disk/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ubuntu나 Fedora 배포판의 Firefox나 Crome에서 RAM을 cache로 설정하는 법&lt;br /&gt;&lt;a href="http://www.linuxreaders.com/2011/01/11/firefox-chrome-cache-on-ram-drive-fedora-ubuntu/"&gt;http://www.linuxreaders.com/2011/01/11/firefox-chrome-cache-on-ram-drive-fedora-ubuntu/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3299570303340907097?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3299570303340907097/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/ram-debian-wheezy.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3299570303340907097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3299570303340907097'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/ram-debian-wheezy.html' title='RAM 업그레이드 후  Debian (wheezy) 시스템의 자원 사용 현황'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-mrJU7g1kiTc/TzDB4b4WYHI/AAAAAAAAAbo/zEjzBm7WEMM/s72-c/%ED%99%94%EB%A9%B4+-+%EC%8B%9C%EA%B0%81+2012-02-07+15:15:43.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-5392703362962962375</id><published>2012-02-06T18:45:00.000-08:00</published><updated>2012-02-06T18:47:52.853-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='인터넷 전화기'/><title type='text'>인터넷 전화기(LG U+ 070) 준비</title><content type='html'>&lt;br /&gt;새것으로 구매하려고 하였으나 매달 행사로 나오는 물건들도 따지고 보면 많은 손해를 보도록 되어 있다.&lt;br /&gt;삼년약정에 공유기 대여비 추가 부담.&lt;br /&gt;그러니 행사가 아닌 물건은 도대체 누가 사는 것인지 궁금하다.&lt;br /&gt;&lt;br /&gt;중고로 물건을 샀다. 평균가격이 3만원이었다만 여기저기 전화하고 그러는게 귀찬아 그냥 4만원짜리 샀다.&lt;br /&gt;인내심을 시험하는 ARS 전화를 거쳐 중고기계를 사용한다는 사정 설명과 귀찮은 개인정보 동의 같은 것들.&lt;br /&gt;&lt;br /&gt;그래서 결론은 월 2200원에 설치비 11000원이 든단다.&lt;br /&gt;이놈의 설치비 라는 것은 전화한통으로 해결되는 mac주소 불러주는 것을 이야기하는 것이 었다.&lt;br /&gt;&lt;br /&gt;음. 근데 동작을 안한다. MAC주소 받아 적는데 착오가 있었거나 뭔가 전산 착오라고 유추한다.&lt;br /&gt;어쨌든 월요일에 설치기사가 온단다. 기다려 보자.&lt;br /&gt;&lt;br /&gt;* mylg070로 기본 SSID가 설정되어 있는것 해제하여 다른 공유기를 사용하기&lt;br /&gt;http://clien.career.co.kr/cs2/bbs/board.php?bo_table=lecture&amp;amp;wr_id=41561&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-5392703362962962375?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/5392703362962962375/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/lg-u-070.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5392703362962962375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5392703362962962375'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/lg-u-070.html' title='인터넷 전화기(LG U+ 070) 준비'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-2922600035441674674</id><published>2012-02-05T07:42:00.000-08:00</published><updated>2012-02-06T18:46:57.449-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='suspend/resume'/><title type='text'>Suspend to Ram에 생긴 그간의 문제 해결</title><content type='html'>그 동안 debian wheezy의 hibernation은 잘 동작하였다.&lt;br /&gt;그러니 suspend에 필요한 기본적인 동작들은 완벽하다.&lt;br /&gt;하지만 Suspend to Ram에서 복구하는 기능은 마우스 커서가 살아있는 상태에서&lt;br /&gt;멈춰서 버린다. 그래서 Ctrl+Alt+F1으로 관리자 터미널을 띄워서 재부팅하였다.&lt;br /&gt;그리고 /var/log/pm-suspend.log의 기록들을 확인해 보았다.&lt;br /&gt;다음과 같은 실패 항목들이 나타난다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/etc/pm/sleep.d/10_unattended-upgrades-hibernate suspend suspend: success.&lt;br /&gt;Running hook /usr/lib/pm-utils/sleep.d/55NetworkManager suspend suspend:&lt;br /&gt;&lt;span style="color: red;"&gt;Having NetworkManager put all interaces to sleep...Failed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/usr/lib/pm-utils/sleep.d/55NetworkManager suspend suspend: success.&lt;br /&gt;Running hook /usr/lib/pm-utils/sleep.d/60_wpa_supplicant suspend suspend:&lt;br /&gt;&lt;span style="color: red;"&gt;Failed to connect to wpa_supplicant - wpa_ctrl_open: No such file or directory&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;자세한 내용들을 찾아 보려고 googling을 해보았지만, 시원한 해결책은 없었다.&lt;br /&gt;그져 네트워크 문제라고 유추해 볼 뿐이다.&lt;br /&gt;&lt;br /&gt;네트워크의 가장 기초적인 설정을 살펴 보았다. 다음과 같이 되어있었다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# This file describes the network interfaces available on your system&lt;br /&gt;# and how to activate them. For more information, see interfaces(5).&lt;br /&gt;&lt;br /&gt;# The loopback network interface&lt;br /&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;&lt;br /&gt;# The primary network interface&lt;br /&gt;allow-hotplug eth0&lt;br /&gt;#NetworkManager#iface eth0 inet dhcp&lt;br /&gt;&lt;br /&gt;#auto wlan0&lt;br /&gt;#iface wlan0 inet dhcp&lt;br /&gt;# wpa-ssid networkname&lt;br /&gt;# wpa-psk password&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;아. 이 모든 것들은 필요에 따라 조금씩 수정해 보왔던 내 탓이다.&lt;/div&gt;&lt;div&gt;그래도 잘 동작했었다. 가끔씩 resume이 안되었을 때가 있었지만.&lt;/div&gt;&lt;div&gt;그리고 suspend to Ram은 잘 사용하지도 않는다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그래서 다시 되돌려 놓았다. 문제되는 NetworkManager와 wpa-ssid, wpa-psk항목들을 제외하고, 그러니 되돌아 왔다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# This file describes the network interfaces available on your system&lt;/div&gt;&lt;div&gt;# and how to activate them. For more information, see interfaces(5).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# The loopback network interface&lt;/div&gt;&lt;div&gt;auto lo&lt;/div&gt;&lt;div&gt;iface lo inet loopback&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# The primary network interface&lt;/div&gt;&lt;div&gt;allow-hotplug eth0&lt;/div&gt;&lt;div&gt;#NetworkManager&lt;/div&gt;&lt;div&gt;iface eth0 inet dhcp&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;auto wlan0&lt;/div&gt;&lt;div&gt;#iface wlan0 inet dhcp&lt;/div&gt;&lt;div&gt;# wpa-ssid networkname&lt;/div&gt;&lt;div&gt;# wpa-psk password&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이로써 Suspend to Ram도 잘 동작하였다.&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-2922600035441674674?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/2922600035441674674/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/suspend-to-ram.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2922600035441674674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2922600035441674674'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/suspend-to-ram.html' title='Suspend to Ram에 생긴 그간의 문제 해결'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7677774966267550889</id><published>2012-02-02T09:27:00.000-08:00</published><updated>2012-02-02T09:27:17.824-08:00</updated><title type='text'>미래에 대처하는 나의 자세</title><content type='html'>나는 불안정하고&lt;br /&gt;때로는 위로 받고 싶다.&lt;br /&gt;&lt;br /&gt;가끔은 이런게 모자라 정체되곤한다.&lt;br /&gt;그래서 바보가 되곤한다.&lt;br /&gt;&lt;br /&gt;그래도 계속 가야한다.&lt;br /&gt;그러니 가끔 멍하게 지내야한다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7677774966267550889?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7677774966267550889/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7677774966267550889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7677774966267550889'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/02/blog-post.html' title='미래에 대처하는 나의 자세'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7190306458157562552</id><published>2012-01-24T17:52:00.000-08:00</published><updated>2012-02-06T18:51:23.083-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linear algebra'/><title type='text'>Eigenvector(고유벡터) 와 Eigenvalue(고유값) 구하기</title><content type='html'>책속에서 존재하는 eigenvector와 eigenvalue구하기의 난제는 다항식을 푸는 문제로 귀결된다.&lt;br /&gt;하지만, 컴퓨터로 구현하고자 한다면 다항식을 푸는 문제 자체도 대단히 어려운 일이다.&lt;br /&gt;해가 &amp;nbsp;있는지 (허근인지 실근인지) 무엇보다도 소인수 분해와 같은 암호 해독과 같이 어려운 문제에 봉착하게 된다.&lt;br /&gt;그래서 다항식 해법으로 접근하지 않고 eigenvetor와 eigenvalue의 property(속성)을 이용하여 반복적인 연산을 통하여 실제 eigenvector와 eigenvalue에 수렴할 수 있는 근접한 값을 찾아 내는 &amp;nbsp;방법을 사용한다. 여기에는 여러가지 방법들이 존재한다. power iteration method, shifted inverse iteration method, Rayleigh quotient method, simultaneous iteration method, QR method&lt;br /&gt;&amp;nbsp;이와 같은 반복적인 연산을 이용한 방식은 eigenvalue와 eigenvector가 존재한다는 가정하에 다음과 같은 속성을 이용한다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;존재한다고 가정한 eigenvalue들은 {q_{i}}이고 eigenvalue들은 {lambda_{i}}이다.&lt;br /&gt;여기서, | lambda_{1} | &amp;gt; | lambda_{2} | &amp;gt; ... &amp;gt; | lambda_{n} |의 조건을 갖는다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그리고 추정하고자하는 eigenvector는 실제 eigenvector의 span으로 표현할 수 있다. 왜냐하면 eigenvector는 해당 공간의 basis가 되기 때문이다. 그래서 다음과 같이 eigenvector의 linear combination으로 표현할 수 있다.&lt;br /&gt;&amp;nbsp;v_{0} = c_{1} * q_{1} + ... + c_{n} * q_{n}.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이와같은 추정치가 eigenvector라고 한다면 실제의 eigenvector의 정의에 해당하는 조건식에도 부합되어야한다.&lt;br /&gt;&lt;br /&gt;A * x = lambda *x 에서 부터&lt;br /&gt;A * v_{0} = c_{1} * lambda_{1} * q_{1} + ... + c_{n} * lambda_{n} * q_{n}&lt;br /&gt;&lt;br /&gt;그리고 A^k * x = lambda^k * x 의 확장된 속성으로 부터&lt;br /&gt;A^k * v_{0} = c_{1} * lambda_{1}^k * q_{1} + ... + c_{n} * lambda_{n}^k * q_{n}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= lambda_{1}^k * [ c_{1} * q_{1} + c_{2} * (lambda_{2} / lambda_{1})^k * q_{2} + ... + c_{n} * (lambda_{n} / lambda_{1})^k * q_{n} ]&lt;br /&gt;&lt;br /&gt;으로 전제할 수 있다. 여기서 주의 깊게 살펴보아야할 부분은 (lambda_{i} / lambda_{1})^k의 부분이다. 분모에 해당하는 lambda_{1}는 가장 큰 절대값을 갖는 eigenvalue이기 때문에 k값이 커질 수록 0의 값으로 수렴하게 된다. 그럼 나머지 항들은 사라지고 &amp;nbsp;lambda_{1}에 해당하는 eigenvector의 값으로 v_{0}의 값은 수렴하게 된다. 기본적으로 이러한 개념하에 위의 반복적인 연산이 이루어진다.&lt;br /&gt;&lt;br /&gt;그리고 이러한 기본 개념하에 power iteration방식과 shifted inverse iteration방식이 설명된다. 기타 다른 방식들도 이 방식에서 확장해 나아가는 형식을 취하고 있다.&lt;br /&gt;&lt;br /&gt;power iteration&lt;br /&gt;이 방식은 eigen value중 가장 큰 값에 해당하는 eigen vector만 구할수 있다.&lt;br /&gt;&lt;br /&gt;* psudo code of power iteration&lt;br /&gt;v = random vector with its &amp;nbsp;norm "1"&lt;br /&gt;do {&lt;br /&gt;&amp;nbsp; w = A * v;&lt;br /&gt;&amp;nbsp; if (w == v) break;&lt;br /&gt;&amp;nbsp; v = w / |w|;&lt;br /&gt;} while (1);&lt;br /&gt;&lt;br /&gt;inverse iteration&lt;br /&gt;이 방식은 eigen value중 가장 작은 값에 해당하는 &amp;nbsp;eigen vector만 구할 수 있다. power iteration 방식은 A의 eigen value가 lambda_{i}라면 A^{-1}의 eigen value이 1/lambda_{i}가 &amp;nbsp;되는 특성을 이용하여 A^{-1}에 power iteration을 적용한다.&lt;br /&gt;&lt;br /&gt;* psudo code of inverse iteration&lt;br /&gt;&lt;br /&gt;v = random vector with its &amp;nbsp;norm "1"&lt;br /&gt;do {&lt;br /&gt;&amp;nbsp; w = A^{-1} * v;&lt;br /&gt;&amp;nbsp; if (w == v) break;&lt;br /&gt;&amp;nbsp; v = w / |w|;&lt;br /&gt;} while (1);&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;shifted inverse iteration&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A의 특정 &amp;nbsp;eigen value에 근접하는 값을 임의로 선택한 값이 u라고 하면 &amp;nbsp;(A - u * I)의 eigen value은 lambda_{i} - u가 된다. 그리고 (A - u * I)에&amp;nbsp;inverse iteration을 적용하면 u값에 근접하는 eigen value에 해당하는 eigen vector를 구할 수 있다.&lt;br /&gt;&lt;br /&gt;* psudo code of shifted inverse iteration (finding eigen vector corresponding to eigen value closed to u)&lt;br /&gt;&lt;br /&gt;v = random vector with its &amp;nbsp;norm "1"&lt;br /&gt;do {&lt;br /&gt;&amp;nbsp; w = (A - u * I)^{-1} * v;&lt;br /&gt;&amp;nbsp; if (w == v) break;&lt;br /&gt;&amp;nbsp; v = w / |w|;&lt;br /&gt;} while (1);&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Rayleigh quotient iteration&lt;/div&gt;&lt;div&gt;이 방식은 shifted inverse iteration에서 u값과 v값을 동시에 근사화 시켜서 연산 시간을 줄여주는 방식이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;* psudo code of&amp;nbsp;Rayleigh quotient&amp;nbsp;iteration (finding eigen vector corresponding to eigen value closed to u)&lt;br /&gt;&lt;br /&gt;v = random vector with its &amp;nbsp;norm "1"&lt;br /&gt;do {&lt;br /&gt;&amp;nbsp; w = (A - u * I)^{-1} * v;&lt;br /&gt;&amp;nbsp; if (w == v) break;&lt;br /&gt;&amp;nbsp; v = w / |w|;&lt;br /&gt;&amp;nbsp; u = v^{T} * A * v;&lt;br /&gt;} while (1);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Simultaneous iteration&lt;/div&gt;&lt;div&gt;이 방식은 이전의 방식들이 한번에 하나의 eigen vector만을 구할 수 있지만 한번에 모두 구할 수 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;* psudo code of simultaneous iteration&lt;/div&gt;&lt;div&gt;V = [v_{i} : random vector with its &amp;nbsp;norm "1" and i = 1..n];&lt;/div&gt;&lt;div&gt;// QR decomposite&lt;/div&gt;&lt;div&gt;Q * R = QR_decomposite(V);&lt;/div&gt;&lt;div&gt;do {&lt;/div&gt;&lt;div&gt;&amp;nbsp; W = A * Q;&lt;/div&gt;&lt;div&gt;&amp;nbsp; Q * R = QR_decomposite(W);&lt;/div&gt;&lt;div&gt;&amp;nbsp; if (Q is not changed) break;&lt;/div&gt;&lt;div&gt;} while (1);&lt;/div&gt;&lt;div&gt;&lt;div&gt;the columns of Q will converge towards a basis of eigenvectors of A&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The QR method&lt;br /&gt;이 방식은 QR 분해를 반복적으로 수행하는 것이다. 이론이고 뭐고 orthogonal column vector들은 항상 Q 행렬에 모이게 되고 Upper triangular 행렬은 R에 모이는 QR 분해를 Q 행렬에 반복적으로 recursive하게 적용하면 뭔가 유일한 orthogonal columns vector가 나올 법하게 느껴진다.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;* psudo code of QR method&lt;/div&gt;&lt;/div&gt;&lt;div&gt;B = A;&lt;/div&gt;&lt;div&gt;do {&lt;/div&gt;&lt;div&gt;&amp;nbsp; Q * R = QR_decomposite(B);&lt;/div&gt;&lt;div&gt;&amp;nbsp; B = R * Q;&lt;br /&gt;&amp;nbsp; if (Q is not changed) break;&lt;/div&gt;&lt;div&gt;} while (1);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7190306458157562552?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7190306458157562552/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/01/eigenvector-eigenvalue.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7190306458157562552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7190306458157562552'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/01/eigenvector-eigenvalue.html' title='Eigenvector(고유벡터) 와 Eigenvalue(고유값) 구하기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-747188618538713995</id><published>2012-01-24T03:41:00.000-08:00</published><updated>2012-01-24T03:42:19.532-08:00</updated><title type='text'>무모한 클릭질</title><content type='html'>&lt;br /&gt;모니터에 불을 댕기고&lt;br /&gt;수십번 클릭질을 해보아도&lt;br /&gt;맘맞는 사람과 이야기하는 것만큼&lt;br /&gt;허기가 풀리지는 않는구나&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-747188618538713995?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/747188618538713995/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/01/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/747188618538713995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/747188618538713995'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/01/blog-post.html' title='무모한 클릭질'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-6675772764155211067</id><published>2012-01-15T06:12:00.000-08:00</published><updated>2012-01-15T06:34:42.112-08:00</updated><title type='text'>Must buy !</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/hyQoJj94Blw/0.jpg" height="360" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hyQoJj94Blw&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="640" height="360"  src="http://www.youtube.com/v/hyQoJj94Blw&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;잠비나이 - 나부락&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/qa4V5OaHpj8/0.jpg" height="360" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/qa4V5OaHpj8&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="640" height="360"  src="http://www.youtube.com/v/qa4V5OaHpj8&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;이슈타르 - All of You ( 여자 찰스디킨스 )&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-6675772764155211067?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/6675772764155211067/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2012/01/must-buy.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6675772764155211067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6675772764155211067'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2012/01/must-buy.html' title='Must buy !'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-4076257298126366346</id><published>2011-12-30T08:18:00.001-08:00</published><updated>2011-12-30T08:18:39.771-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='미안함'/><category scheme='http://www.blogger.com/atom/ns#' term='김근태'/><title type='text'>쫄지마 ! (Don't panic !)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-TbQqxGSVymc/Tv3kOT3AWBI/AAAAAAAAAbc/2Giwtj3qriY/s1600/1233480744.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/-TbQqxGSVymc/Tv3kOT3AWBI/AAAAAAAAAbc/2Giwtj3qriY/s640/1233480744.jpg" width="488" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-4076257298126366346?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/4076257298126366346/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/dont-panic.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/4076257298126366346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/4076257298126366346'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/dont-panic.html' title='쫄지마 ! (Don&apos;t panic !)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-TbQqxGSVymc/Tv3kOT3AWBI/AAAAAAAAAbc/2Giwtj3qriY/s72-c/1233480744.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-6122413004319702685</id><published>2011-12-12T17:50:00.000-08:00</published><updated>2011-12-14T06:17:50.953-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Debian(wheezy)의 Gnome3 기본 테마 adwaita 변경하기</title><content type='html'># apt-get dist-upgrade후 gnome3의 기본 테마인 adwaita에 변화가 생겼다. taskbar 의 메뉴의 글자색이 taskbar와 같아져 버려 확인이 불가능하고 풍선 도움말의 글자색도 풍선 도움 바탕색과 같아서 마찬가지로 확인 불가능하다. 이래저래 기본 테마를 변경해야하는 상황이 되어 버렸다. 우선 gnome-look.org에 가서 적당한 gtk3 theme를 다운로드하고 ~/.themes밑에 복사한다. &amp;nbsp; 그리고 테마를 변경하기 위해서 gnome-tweak-tool을 설치하자&lt;br /&gt;&lt;br /&gt;# apt-get install gnome-tweak-tool&lt;br /&gt;&lt;br /&gt;그럼 taskbar의 프로그램 -&amp;gt; 시스템도구 -&amp;gt; 기본설정 밑에 Tweak Advanced Settings라는 항목이 생긴다. 이를 실행하고 gtk+ 테마와 current theme를 다운로드한 테마로 변경하자.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-HtCT-txuNOs/TuasS59MzGI/AAAAAAAAAa4/BOrmDeFsgGs/s1600/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A35%253A56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://3.bp.blogspot.com/-HtCT-txuNOs/TuasS59MzGI/AAAAAAAAAa4/BOrmDeFsgGs/s400/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A35%253A56.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hO2f7dO1p_Q/TuasX8G4IyI/AAAAAAAAAbA/vSRTrtoiaxE/s1600/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A36%253A30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://1.bp.blogspot.com/-hO2f7dO1p_Q/TuasX8G4IyI/AAAAAAAAAbA/vSRTrtoiaxE/s400/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A36%253A30.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;내가 선택한 테마는 clearwaita-master라는 테마다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;그리고 Gnome Shell titlebar의 테마를 변경하기 위해서 Mutter라는 것을 건들여야한다. &amp;nbsp;나의 경우는 Gnome Classic으로 사용중이기 때문에 변경 하지 않아도 된다. 하지만 Gnome Classic 버전의 Metacity의 변경을 해주어야한다.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;이와 같이 Mutter와 Metacity를 변경하기 위해선 gconf-editor를 사용해야한다. 설치되지 않았다면 설치하자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;# apt-get install gconf-editor&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;다음은 Mutter의 테마와 Metacity의 테마를 변경하는 상황이다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-f7W5yv891TQ/TuaueK5pUcI/AAAAAAAAAbI/BXynbl1Tkt0/s1600/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A46%253A09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="326" src="http://1.bp.blogspot.com/-f7W5yv891TQ/TuaueK5pUcI/AAAAAAAAAbI/BXynbl1Tkt0/s400/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A46%253A09.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-X-fVoVxziWw/TuavAZFSXTI/AAAAAAAAAbQ/KAtcAJae-FA/s1600/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A48%253A18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="326" src="http://4.bp.blogspot.com/-X-fVoVxziWw/TuavAZFSXTI/AAAAAAAAAbQ/KAtcAJae-FA/s400/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A48%253A18.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;해놓고 확인된 사항이지만 gnome-tweak-tool로 설정해 놓으면 위의 두 사항은 자동으로 설정되는 것 같다. 막상 변경하려고 gconf-editor를 실행 시켜 보았더니 이미 변경되어 있었다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-6122413004319702685?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/6122413004319702685/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/wheezy-gnome3-adwaita.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6122413004319702685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6122413004319702685'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/wheezy-gnome3-adwaita.html' title='Debian(wheezy)의 Gnome3 기본 테마 adwaita 변경하기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-HtCT-txuNOs/TuasS59MzGI/AAAAAAAAAa4/BOrmDeFsgGs/s72-c/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-13+10%253A35%253A56.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-9107003893241852383</id><published>2011-12-12T02:40:00.000-08:00</published><updated>2011-12-14T06:18:08.703-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Gnome3 의 바탕화면에서의 아이콘과 마우스 오른쪽 버튼 살리기</title><content type='html'># dconf-editor&lt;br /&gt;&lt;br /&gt;바탕화면에 아이콘이 보고 싶다면 다음 사항을 체크하고&lt;br /&gt;&lt;br /&gt;org -&amp;gt; gnome -&amp;gt; background 밑에 show-desktop-icons [V]&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-q7rsOA9Quts/TuXZ0Z75k2I/AAAAAAAAAao/BnaVi2F6h28/s1600/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-12+19%253A38%253A34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://4.bp.blogspot.com/-q7rsOA9Quts/TuXZ0Z75k2I/AAAAAAAAAao/BnaVi2F6h28/s400/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-12+19%253A38%253A34.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;쓰레기통이 보고 싶다면 다음 사항도 체크하자.&lt;br /&gt;&lt;br /&gt;org -&amp;gt; nautilus -&amp;gt; desktop밑에 trash-icon-visible [V]&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IYU1yVtRxao/TuXZ6OSbftI/AAAAAAAAAaw/dAkZh1OleDo/s1600/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-12+19%253A38%253A16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://2.bp.blogspot.com/-IYU1yVtRxao/TuXZ6OSbftI/AAAAAAAAAaw/dAkZh1OleDo/s400/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-12+19%253A38%253A16.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-9107003893241852383?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/9107003893241852383/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/gnome3.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/9107003893241852383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/9107003893241852383'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/gnome3.html' title='Gnome3 의 바탕화면에서의 아이콘과 마우스 오른쪽 버튼 살리기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-q7rsOA9Quts/TuXZ0Z75k2I/AAAAAAAAAao/BnaVi2F6h28/s72-c/%25ED%2599%2594%25EB%25A9%25B4+-+%25EC%258B%259C%25EA%25B0%2581+2011-12-12+19%253A38%253A34.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-8273169970176826187</id><published>2011-12-06T23:36:00.001-08:00</published><updated>2011-12-08T04:29:35.054-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='한미 FTA'/><title type='text'>[펌] 한미 FTA; Raising the Flag on Korea</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-dZqXripPh-g/Tt8XXh3iY4I/AAAAAAAAAag/CZzzSAP97SI/s1600/1323239671_dbASZRuE_poo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="552" src="http://1.bp.blogspot.com/-dZqXripPh-g/Tt8XXh3iY4I/AAAAAAAAAag/CZzzSAP97SI/s640/1323239671_dbASZRuE_poo.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;출처 :&amp;nbsp;&lt;a href="http://clien.career.co.kr/cs2/bbs/board.php?bo_table=image&amp;amp;wr_id=3647134"&gt;http://clien.career.co.kr/cs2/bbs/board.php?bo_table=image&amp;amp;wr_id=3647134&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-8273169970176826187?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/8273169970176826187/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/raising-flag-on-korea.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8273169970176826187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8273169970176826187'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/raising-flag-on-korea.html' title='[펌] 한미 FTA; Raising the Flag on Korea'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-dZqXripPh-g/Tt8XXh3iY4I/AAAAAAAAAag/CZzzSAP97SI/s72-c/1323239671_dbASZRuE_poo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7511333379524708080</id><published>2011-12-01T07:37:00.001-08:00</published><updated>2011-12-01T07:37:48.796-08:00</updated><title type='text'>Xorg의 touchpad설정하기 (클릭과 스크롤 설정하기)</title><content type='html'>http://www.reddeadresolve.com/2011/01/configure-synaptic-touchpad-enable.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7511333379524708080?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7511333379524708080/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/xorg-touchpad.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7511333379524708080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7511333379524708080'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/12/xorg-touchpad.html' title='Xorg의 touchpad설정하기 (클릭과 스크롤 설정하기)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7296645988849500984</id><published>2011-11-30T03:30:00.001-08:00</published><updated>2011-11-30T03:54:53.081-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fglrx-driver'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Debian Wheezy에서 사라졌었던 fglrx-driver와 fglrx-control 다시 깔기</title><content type='html'>&lt;br /&gt;$ sudo apt-get remove --purge xserver-xorg-video-radeon&lt;br /&gt;$ sudo apt-get install fglrx-driver fglrx-control fglrx-glx fglrx-atieventsd fglrx-modules-dkms&lt;br /&gt;&lt;br /&gt;그리고&lt;br /&gt;&lt;br /&gt;$ sudo aticonfig -initial 로 xorg.conf파일을 /etc/X11밑에 생성 시킨다.&lt;br /&gt;&lt;br /&gt;만약 laptop의 경우 dual헤드를 사용하여 모니터를 두 개 사용하고자 한다면&lt;br /&gt;&lt;br /&gt;다음과 같은 방식으로 xorg.conf파일을 생성하자.&lt;br /&gt;&lt;br /&gt;$ sudo aticonfig --initial=dual-head --screen-layout=right -v&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7296645988849500984?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7296645988849500984/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/debian-wheezy-fglrx-driver-fglrx.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7296645988849500984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7296645988849500984'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/debian-wheezy-fglrx-driver-fglrx.html' title='Debian Wheezy에서 사라졌었던 fglrx-driver와 fglrx-control 다시 깔기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1863992000011860417</id><published>2011-11-25T01:58:00.001-08:00</published><updated>2011-11-25T02:12:40.743-08:00</updated><title type='text'>새로운 3CCD 영상 분할 프리즘 구조</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-wVYO2JgHsjs/Ts9m1TBog8I/AAAAAAAAAaY/V_Fhzfs9CCA/s1600/opticalpath.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-wVYO2JgHsjs/Ts9m1TBog8I/AAAAAAAAAaY/V_Fhzfs9CCA/s320/opticalpath.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;출처 :&amp;nbsp;&lt;a href="http://www.nitto-optical.co.jp/english/products/basic_prism/index.html"&gt;http://www.nitto-optical.co.jp/english/products/basic_prism/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;참조 :&amp;nbsp;&lt;a href="http://ntuzhchen.blogspot.com/2011/01/toshiba-3ccd.html"&gt;http://ntuzhchen.blogspot.com/2011/01/toshiba-3ccd.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1863992000011860417?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1863992000011860417/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/3ccd.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1863992000011860417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1863992000011860417'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/3ccd.html' title='새로운 3CCD 영상 분할 프리즘 구조'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-wVYO2JgHsjs/Ts9m1TBog8I/AAAAAAAAAaY/V_Fhzfs9CCA/s72-c/opticalpath.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3125830710968775930</id><published>2011-11-24T18:42:00.001-08:00</published><updated>2011-11-24T18:43:38.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hyperspectral Imaging'/><title type='text'>[번역] Multispectral line-scan imaging system for simultaneous fluorescence and reflectance measurements of apples: multitask apple inspection system</title><content type='html'>Multispectral line-scan imaging system for simultaneous&lt;br /&gt;fluorescence and reflectance measurements of apples: multitask&lt;br /&gt;apple inspection system&lt;br /&gt;&lt;br /&gt;Moon Sung Kim, Kangjin Lee, Kuanglin Chao, Alan M. Lefcourt,&lt;br /&gt;Won Jun, Diane E. Chan&lt;br /&gt;&lt;br /&gt;이 방법론적 논문에서는 고속으로 움직이는 물체로부터 다파장 반사및 형광 영상을 동시에 획득할 수 있는 최근 개발된 라인-스캔 방식의 영상 시스템이 소개 한다.&lt;br /&gt;&lt;br /&gt;시스템은 다파장 영역의 유동적인 선택으로 사과의 품질과 안정성에 대한 다중 검사 작업을 할 수 있도록 해준다.&lt;br /&gt;&lt;br /&gt;상업적인 사과 분류 기계에 장착된 시스템은 초당 3 ~ 4개의 선별 속도에서 사과의 영상 해상도를 결정하도록 개발되었다.&lt;br /&gt;&lt;br /&gt;분류 시스템에 적재된 사과들은 약 15cm의 간격을 갖도록 하였다.&lt;br /&gt;&lt;br /&gt;이런 인자들을 가지고 결과 영상들은 사과당 40개의 라인스캔 영상들을 보여준다.&lt;br /&gt;&lt;br /&gt;수평 방향 해상도는 픽셀당 2mm이고, 수직 방향으로 각 라인 스캔 영상당 1002픽셀이고, &lt;br /&gt;&lt;br /&gt;시스템의 공간 해상도는 binning의 선택에 의존하는데 픽셀당 0.2mm 정도이다. &lt;br /&gt;&lt;br /&gt;종합적인 공간 해상도는 사과의 표면 오염이나 결함의 온라인 영상 기반 검사에 적합하고 이전의 우리의 연구에 비해서도 구분된다.&lt;br /&gt;&lt;br /&gt;Keywords&lt;br /&gt;Online inspection, Multispectral imaging, Imaging system, Fluorescence, Reflectance, Food safety and quality, Apples&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3125830710968775930?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3125830710968775930/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/multispectral-line-scan-imaging-system.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3125830710968775930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3125830710968775930'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/multispectral-line-scan-imaging-system.html' title='[번역] Multispectral line-scan imaging system for simultaneous fluorescence and reflectance measurements of apples: multitask apple inspection system'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3410659825267449207</id><published>2011-11-24T01:07:00.001-08:00</published><updated>2011-11-24T18:43:55.938-08:00</updated><title type='text'>경향신문 1면 FTA 찬성자 명단</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dv3gcHP4rrI/Ts4JXyk6xuI/AAAAAAAAAaQ/6uZ_DyVPHmk/s1600/310529_288211644551778_161649467207997_887572_1324761561_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/-dv3gcHP4rrI/Ts4JXyk6xuI/AAAAAAAAAaQ/6uZ_DyVPHmk/s640/310529_288211644551778_161649467207997_887572_1324761561_n.jpg" width="628" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3410659825267449207?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3410659825267449207/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/fta-list.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3410659825267449207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3410659825267449207'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/fta-list.html' title='경향신문 1면 FTA 찬성자 명단'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-dv3gcHP4rrI/Ts4JXyk6xuI/AAAAAAAAAaQ/6uZ_DyVPHmk/s72-c/310529_288211644551778_161649467207997_887572_1324761561_n.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-2557910420198543190</id><published>2011-11-23T23:06:00.001-08:00</published><updated>2011-11-23T23:07:49.719-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hyperspectral Imaging'/><title type='text'>[번역] LINE‐SCAN HYPERSPECTRAL IMAGING PLATFORM FOR AGRO‐FOOD SAFETY AND QUALITY EVALUATION: SYSTEM ENHANCEMENT AND CHARACTERIZATION</title><content type='html'>LINE‐SCAN HYPERSPECTRAL IMAGING PLATFORM FOR&lt;br /&gt;AGRO‐FOOD SAFETY AND QUALITY EVALUATION:&lt;br /&gt;SYSTEM ENHANCEMENT AND CHARACTERIZATION&lt;br /&gt;&lt;br /&gt;M. S. Kim,&amp;nbsp; K. Chao,&amp;nbsp; D. E. Chan,&amp;nbsp; W. Jun,&amp;nbsp; A. M. Lefcourt,&amp;nbsp; S. R. Delwiche,&amp;nbsp; S. Kang, K. Lee&lt;br /&gt;&lt;br /&gt;Keywords. Fluorescence, Hyperspectral, Line?scan imaging, Reflectance, Spectral calibration.&lt;br /&gt;&lt;br /&gt;라인 스캔방식의 초분광 영상화 기술들은 고속 온라인 응용분야에 대한 단 몇 가지의 파장대에 기반한 고속 다파장 기법 개발에 대한 연구 도구로 자주 제안되어 진다.&lt;br /&gt;&lt;br /&gt;지속적인 기술적 발전과 광전자 영상화 소자(optoelectronic imaging sensors)와 파장 영상용 파장 분해 장치(spectral imaging spectrographs)에 대한 좀 더 낳은 접근성, 유용성이 증대 됨에 따라서&lt;br /&gt;&lt;br /&gt;초분광 영상 장치의 적용 분야는 식품및 농업 산업에서 품질및 안정성 검사 수요에 걸쳐 확대되어 왔다.&lt;br /&gt;&lt;br /&gt;우리는 적은 빛에도 감응도를 갖는 EMCCD를 사용한 초분광 라인 스캔 영상 장치에 기반한 식품 검사 영상 시스템을 계속해서 개발해 왔다. &lt;br /&gt;&lt;br /&gt;이 방법론적 기사에서 ARS 초분광 영상 시스템의 가장 최근 세대(가시 및 근적외 파장대 영역 400 - 1000nm에서 반사와 형광 측정이 가능한)의 파장 및 공간적 성능이 평가 되었다.&lt;br /&gt;&lt;br /&gt;결과는 시스템의 파장 분해능은 우리의 일반적인 동작 모드 (6 픽셀의 파장 binning)에서 6nm의 FWHM과 FWHM 구간에서 4.4nm의 간격을 보인다. &lt;br /&gt;&lt;br /&gt;우리는 A/D 변환의 동적인 범위를 더 활용하기 위해서 파장공간에서의 가중 필터를 사용한 시스템 출력 응답성을 개선하였다. &lt;br /&gt;&lt;br /&gt;이러한 시스템 출력 조정으로 표준 방사 반사체의 영역에 대한 근적외선 영역 대에서의 잡음으로 추정되는 지수를 측정한 결과 50%정도의 감소 되었다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-2557910420198543190?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/2557910420198543190/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/linescan-hyperspectral-imaging-platform.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2557910420198543190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2557910420198543190'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/linescan-hyperspectral-imaging-platform.html' title='[번역] LINE‐SCAN HYPERSPECTRAL IMAGING PLATFORM FOR AGRO‐FOOD SAFETY AND QUALITY EVALUATION: SYSTEM ENHANCEMENT AND CHARACTERIZATION'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-448799924493315251</id><published>2011-11-23T20:53:00.001-08:00</published><updated>2011-11-23T20:56:38.082-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hyperspectral Imaging'/><title type='text'>[번역] DETECTION OF ORGANIC RESIDUES ON POULTRY PROCESSING EQUIPMENT SURFACES BY LED‐INDUCED  FLUORESCENCE IMAGING</title><content type='html'>DETECTION OF ORGANIC RESIDUES ON POULTRY PROCESSING&lt;br /&gt;EQUIPMENT SURFACES BY LED‐INDUCED &lt;br /&gt;FLUORESCENCE IMAGING&lt;br /&gt;&lt;br /&gt;J. Qin,&amp;nbsp; K. Chao,&amp;nbsp; M. S. Kim,&amp;nbsp; S. Kang,&amp;nbsp; B.‐K. Cho,&amp;nbsp; W. Jun&lt;br /&gt;&lt;br /&gt;가금류 처리 공장에서 장치 표면에 있는 Organic residues(유기물 찌꺼기)는 교차오염을 유발 시킬 수 있고 소비자에게 안전하지 않은 음식에 대한 위험을 증가 시킨다.&lt;br /&gt;&lt;br /&gt;이 연구는 가금류 처리 장비 표면에 있는 유기물 찌꺼기 신속한 검사를 위한 LED로 생성된 형광 영상 기술의 가능성을 조사하는 목적을 가지고 있다.&lt;br /&gt;&lt;br /&gt;400nm의 파장대의 출력을 갖는 고출력 파란색 LED가 라인 스캔 방식의 초분광 영상 시스템을 위한 활성화 반응의 광원으로 사용되어 졌다.&lt;br /&gt;&lt;br /&gt;지방, 피, (결장, 십이지장, 장)배설물을 포함한 공통적인 닭의 찌꺼기 표본들은 스테인레스 철판에 준비하였다.&lt;br /&gt;&lt;br /&gt;형광 방출 영상들은 500에서 700nm의 파장대에서 각 찌꺼기의 종류별 20개씩 총 120개의 표본의 영상이다.&lt;br /&gt;&lt;br /&gt;실험에 사용된 표본의 LED광원 형광 특성들이 판정 되었다.&lt;br /&gt;&lt;br /&gt;주성분 분석(PCA)은 형광 스펙트럼 데이터를 분석에 사용되었다.&lt;br /&gt;&lt;br /&gt;두 개의 SIMCA 모델들이 유기물 찌꺼기와 스테인레스 표본을 구분하는데 개발되었다.&lt;br /&gt;&lt;br /&gt;유기물 찌꺼기와 스테인레스 강의 2 부류와 스테인레스강, 지방, 피, 배설물등의 4부류에 대한 SIMCA 모델의 분류 정확도는 각각 100%와 97.5%였다. &lt;br /&gt;&lt;br /&gt;666nm로 선택된 파장대를 이용한 최적 단일 밴드 접근은 닭의 피 검사에 있어서 false negative errors를 생성할 수 있었다.&lt;br /&gt;&lt;br /&gt;503과 666nm의 파장대를 이용한 두 파장의 비율(F503/F666) 영상은 스테인레스 강 표면에 다양한 닭 찌꺼지를 검출하는데 가능성을 보인다.&lt;br /&gt;&lt;br /&gt;이 파장대 조합은 가금류 처리 장치 표면 검사를 위해서 LED 기반의 휴대용 형광 영상화 장치 개발에 적용 될 수 있다.&lt;br /&gt;&lt;br /&gt;keywords. Food safety, Sanitation monitoring, Hyperspectral imaging, Fluorescence, LED, Poultry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-448799924493315251?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/448799924493315251/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/detection-of-organic-residues-on.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/448799924493315251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/448799924493315251'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/detection-of-organic-residues-on.html' title='[번역] DETECTION OF ORGANIC RESIDUES ON POULTRY PROCESSING EQUIPMENT SURFACES BY LED‐INDUCED  FLUORESCENCE IMAGING'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-6194123602445692388</id><published>2011-11-21T03:31:00.001-08:00</published><updated>2012-02-08T07:30:23.163-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='단어장'/><title type='text'>한글 번역 참조</title><content type='html'>HowTO : &amp;nbsp;도움글&lt;br /&gt;Residues : 찌꺼기 &lt;br /&gt;Optoelectronic Imaging Sensors: 광전자 영상화 소자&lt;br /&gt;Spectral Imaging Spectrographs:&amp;nbsp;파장 영상용 파장 분해 장치&lt;br /&gt;Push Broom : &amp;nbsp;밀대&lt;br /&gt;KnowHow: 비법&lt;br /&gt;Threshold Value: 문턱값&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-6194123602445692388?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/6194123602445692388/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/blog-post_21.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6194123602445692388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6194123602445692388'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/blog-post_21.html' title='한글 번역 참조'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3469363561822466563</id><published>2011-11-19T23:57:00.001-08:00</published><updated>2011-11-20T06:19:09.888-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asus 1215t'/><category scheme='http://www.blogger.com/atom/ns#' term='Lid Closed'/><title type='text'>ASUS 1215T 여러가지 문제점들</title><content type='html'>전에는 touchpad 동작에 문제가 많아 분해하는 과정에서 유격이 발생하고 몇몇 힌지가 부러져 버렸다. 문제 해결은 touchpad의 금박에 접촉되는 두개의 패드만 제거 하면 되었다.&lt;br /&gt;그리고 그 이후 데비안에서 xorg.conf를 변경하고 테스트 하던중 마우스가 혼자서 춤을 추길래 재부팅을 하였다. 화면이 나오질 않았다. 부팅과정은 외장 모니터를 연결해본 결과 정상적으로 동작하는 것을 확인 할 수 있었다. 우선 변경하였던 Xorg.conf를 원상 복구하고 외장 모니터를 연결해서 원상 복구 시켰다. 하지만, 노트북 lcd는 복구 불가능 한 것 같아 보였다. ASUS A/S에 갔다 첫날엔 부품 없다고 다음날 오라는 통보를 받았다. 다음날 갔다. 1시간 이상 걸린것 같다. 엔지니어 분도 미안했는지 LCD 연결 케이블 까지 같이 갈아 드리려다 보니 시간이 지체되었다고 하시며 교체한 케이블도 보여주었다. 우선은 잘 동작하는 것 같아 만족스럽게 가지고 왔다.&lt;br /&gt;&lt;br /&gt;몇일 사용하던중 노트북 Lid "closed"가 동작하지 않는 것을 발견하였다.&amp;nbsp;뚜껑이 닫혀도 화면은 여전히 밝게 나오고 있었다.&amp;nbsp;우선은 ACPI의 동작을 의심해 보았다. 코딩으로 LID의 동작을 모니터링 해 보았다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;br /&gt;&lt;br /&gt;void main(void)&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;char state[80];&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;FILE *fd;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;while (1) {&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;fd = fopen("/proc/acpi/button/lid/LID/state", "r");&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;fgets(state, 80, fd);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;printf("%s", state);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;fclose(fd);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;sleep(1);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;위와 같이 코딩하고 다음과 같이 컴파일하고 실행 하였다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# gcc test_lid.c&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# ./a.out&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그리고 뚜껑을 닫아 보았다. 여전히 &amp;nbsp;"state: open"이라는 메시지만 나온다.&lt;/div&gt;&lt;div&gt;하드웨어 적인 문제로 의심을 확정하게 되었다. 우선 뚜껑 주변에 스위치를 찾아 보았다.&lt;/div&gt;&lt;div&gt;어디에도 뚜껑이 닫히는 것을 감지할만한 스위치는 없었다. 검색해 보니 LCD하단에 자석이 있어야 동작을 한단다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.insidemylaptop.com/images/Asus-Eee-PC-1201n-screen/replace-damaged-laptop-screen-11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://www.insidemylaptop.com/images/Asus-Eee-PC-1201n-screen/replace-damaged-laptop-screen-11.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;출처: http://www.insidemylaptop.com/images/Asus-Eee-PC-1201n-screen/replace-damaged-laptop-screen-11.jpg&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;위 그림의 노란색 화살표가 바로 뚜껑이 동작하게 해주는 자석이다. 뜯어 보니 자석인 사진의 위치보다 한참 위에 있었다. A/S기사의 실수 였다. 핀셋으로 위치를 내렸지만 볼트 머리때문에 사진의 위치까지는 내려가지 않았다. 하지만, 동작은 하였다. 그냥 덥었다. 하도 뜯었다 조립했다를 반복했더니 유격이 있다. 에휴,. 깨끗하게 쓰고 싶었는데 걸래가 되었다.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3469363561822466563?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3469363561822466563/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/asus-1215t.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3469363561822466563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3469363561822466563'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/asus-1215t.html' title='ASUS 1215T 여러가지 문제점들'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-8165811910768903731</id><published>2011-11-13T08:46:00.001-08:00</published><updated>2011-11-13T08:47:30.852-08:00</updated><title type='text'>이질적인 우분투 11.10의 가장먼저 설치할 것들</title><content type='html'># sudo apt-get install gnome-session-fallback gnome-tweak-tool&lt;br /&gt;&lt;br /&gt;로그인시 그놈 클래식으로 선택하고 gnome-tweak-tool에서 눈 안아픈 테마를 설치하자&lt;br /&gt;&lt;br /&gt;추천하는 테마는 adwait-white 인가하는 것이다.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-8165811910768903731?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/8165811910768903731/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/1110.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8165811910768903731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8165811910768903731'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/1110.html' title='이질적인 우분투 11.10의 가장먼저 설치할 것들'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1074403171264827513</id><published>2011-11-04T06:30:00.000-07:00</published><updated>2011-11-04T06:40:14.089-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='에리히 프롬'/><category scheme='http://www.blogger.com/atom/ns#' term='선택적 부주의'/><category scheme='http://www.blogger.com/atom/ns#' term='무의식'/><title type='text'>막가파 불도저의 무의식이란 ?</title><content type='html'>무의식이란 단어의 의미는 의식이 없다는 뜻이다.&lt;br /&gt;&lt;br /&gt;이 말은 본질적으로 잘못된 말이다.&lt;br /&gt;&lt;br /&gt;굳이 이야기 하자면 자각과 무자각의 대립상태를 말하는 것이다.&lt;br /&gt;&lt;br /&gt;이러한 무의식의 개념은 프로이드가 많이 연구하였다.&lt;br /&gt;&lt;br /&gt;하지만 여기서 이야기하고자 하는 내용은&lt;br /&gt;&lt;br /&gt;에리히 프롬의 무의식에 대한 재해석을 기반으로 한다.&lt;br /&gt;&lt;br /&gt;나의 경험이다&lt;br /&gt;&lt;br /&gt;커다란 일을 시작하다 보면 초반에 여러가지의 문제에 봉착하기도 하고&lt;br /&gt;&lt;br /&gt;이 일의 당위성에 위배되는 많은 일들을 겪게 된다.&lt;br /&gt;&lt;br /&gt;그래서 아주 짜증나고 골치아픈 일이지만&lt;br /&gt;&lt;br /&gt;그러한 일들을 피해갈 수 있는 길들을 고려하면서 일을 진행한다.&lt;br /&gt;&lt;br /&gt;그렇게 시간이 지나고 일이 끝날때 쯤 생각을 정리해 보면&lt;br /&gt;&lt;br /&gt;위와 같은 일들은 까맣게 잃어 버리고 있었던 나를 발견한다.&lt;br /&gt;&lt;br /&gt;싫은 일은 보지 않고 넘어간다는 인간의 능력,&lt;br /&gt;&lt;br /&gt;즉 인간은 인식하려고하면 인식할 수 있는 일을&lt;br /&gt;&lt;br /&gt;진지한 얼굴로 부정하는 경우도 있다는 사실을 잊었던 것이다.&lt;br /&gt;(H.S. 설리번은 이현상을 매우 훌룡히 표현하여 '선택적 부주의'라는 술어를 만들었다.)&lt;br /&gt;&lt;br /&gt;나의 경우는 일을 깔끔하고 추진력있게 진행해야한다는 압박 때문에&lt;br /&gt;&lt;br /&gt;이러한 선택적 부주의가 작동한 것같다.&lt;br /&gt;&lt;br /&gt;지금에와서 자각해 버렸지만, 지나온 일들은 우려하는 목소리를 전혀 듣지 않았다.&lt;br /&gt;&lt;br /&gt;그져 미안한 마음뿐이다. 정말 악의적이지는 않았다.&lt;br /&gt;&lt;br /&gt;우리의 가카도 이와 같지 않았나 하는 추정을 해본다.&lt;br /&gt;&lt;br /&gt;처음에 반대의 목소리를 귀기울여 듣겠다고 명심했지만,&lt;br /&gt;&lt;br /&gt;꼭 임기 중에 해치워야 하는데 하는 압박감이&lt;br /&gt;&lt;br /&gt;'선택적 부주의'라는 매카니즘을 작동 시켰다고.&lt;br /&gt;&lt;br /&gt;그래서 '유체이탈 화법'은 의도적인 것이 아닌것이다.&lt;br /&gt;&lt;br /&gt;그러한 면에서 나도 조심해야 하겠다고 생각한다.&lt;br /&gt;&lt;br /&gt;반대의 목소리를 선택적으로 부주의하게 하지 않도록....&lt;br /&gt;&lt;br /&gt;하지만, 우리나라에서 성공했다는 그 많은 사람들은&lt;br /&gt;&lt;br /&gt;알게 모르게 위와 같은 '선택적 부주의' 매카니즘을 효율적으로 사용하였다.&lt;br /&gt;&lt;br /&gt;사실인지 모르겠지만 공식적으로 이야기 한다.&lt;br /&gt;&lt;br /&gt;반대의 안된다는 목소리는 신경쓰지 않았다고.&lt;br /&gt;&lt;br /&gt;뭐 하고 싶은 일이고 당위성이 있었다면 문제가 없는 건가 ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1074403171264827513?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1074403171264827513/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/blog-post_04.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1074403171264827513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1074403171264827513'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/blog-post_04.html' title='막가파 불도저의 무의식이란 ?'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-8021067696122271071</id><published>2011-11-04T03:32:00.000-07:00</published><updated>2011-11-04T03:33:01.055-07:00</updated><title type='text'>왜 국가는 왜 주식시장에 민감한가 ?</title><content type='html'>실업율보다 더&lt;br /&gt;물가 보다 더&lt;br /&gt;양극화 지수보다 더&lt;br /&gt;주택비용보다 더&lt;br /&gt;빈민층의 비율 보다 더&lt;br /&gt;&lt;br /&gt;신경쓰는 것 같다.&lt;br /&gt;&lt;br /&gt;반대로 생각해야 하는게 맞는거 아닌가.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-8021067696122271071?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/8021067696122271071/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8021067696122271071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8021067696122271071'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/blog-post.html' title='왜 국가는 왜 주식시장에 민감한가 ?'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-9111566020562426107</id><published>2011-11-03T10:43:00.001-07:00</published><updated>2011-11-03T10:43:16.522-07:00</updated><title type='text'>Enable MSN, yahoo, etc in Empathy (gnome default messenger)</title><content type='html'># apt-get install telepathy-haze&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-9111566020562426107?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/9111566020562426107/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/enable-msn-yahoo-etc-in-empathy-gnome.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/9111566020562426107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/9111566020562426107'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/enable-msn-yahoo-etc-in-empathy-gnome.html' title='Enable MSN, yahoo, etc in Empathy (gnome default messenger)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3484512053458225388</id><published>2011-11-02T21:24:00.000-07:00</published><updated>2011-11-02T21:24:58.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile Atlas Creator'/><title type='text'>Install Mobile Atlas Creator on Debian</title><content type='html'>Mobile Atlas Creator is&amp;nbsp;&amp;nbsp;offline atlases for GPS handhelds and cell phone applications.&lt;br /&gt;&lt;br /&gt;Installation&lt;br /&gt;# su&lt;br /&gt;# apt-get install mobile-atlas-creator&lt;br /&gt;&lt;br /&gt;Execution&lt;br /&gt;# su&lt;br /&gt;# mobile-atlas-creator&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3484512053458225388?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3484512053458225388/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/install-mobile-atlas-creator-on-debian.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3484512053458225388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3484512053458225388'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/11/install-mobile-atlas-creator-on-debian.html' title='Install Mobile Atlas Creator on Debian'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-574042310109315363</id><published>2011-10-31T08:09:00.000-07:00</published><updated>2011-11-20T00:17:39.426-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asus 1215t'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless problem'/><title type='text'>EEEPC(1215t) hang on with Caplock led blinking in Debian Wheezy.</title><content type='html'>This symptom is because of kernel panic crashing with wireless module.&lt;br /&gt;&lt;br /&gt;# lspci&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;02:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g/n Wireless LAN Controller (rev 01)&lt;br /&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see, my wireless card is named as "BCM4313 802.11b/g/n Wireless LAN".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Googling provides that it is necessary to upgrade linux-kernel as 3.0.x.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-574042310109315363?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/574042310109315363/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/eeepc1215t-hang-on-with-caplock-led.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/574042310109315363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/574042310109315363'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/eeepc1215t-hang-on-with-caplock-led.html' title='EEEPC(1215t) hang on with Caplock led blinking in Debian Wheezy.'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-2421746460586302902</id><published>2011-10-28T09:06:00.000-07:00</published><updated>2011-10-28T09:08:02.707-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='자전거'/><title type='text'>자전거란?</title><content type='html'>나의 경우 자전거를 사용하게된 계기는&lt;br /&gt;&lt;br /&gt;내가 생활하는 영역안에서 조금이나마 자동차의 사용을 줄이려는 목적에 의해서 였다.&lt;br /&gt;&lt;br /&gt;다른 사람들도 이와 크게 다르지 않을 것이라 생각한다.&lt;br /&gt;&lt;br /&gt;등교 길에서 출퇴근 길에서 자전거 도로가 구비 되고 환경이 갖추어진다면 좋다.&lt;br /&gt;&lt;br /&gt;그런 의미에서 "MB의 자전거 길이란 ?"&lt;br /&gt;&lt;br /&gt;주말에 잠시 자전거를 타기 위해서 만든&lt;br /&gt;&lt;br /&gt;마치 놀이 공원에 가서 자전거를 잠시 타고온 듯한 효과를 노려&lt;br /&gt;&lt;br /&gt;놀이 공원이 아주 친환경적인 듯한 착각을 불러 잃으키게 만드는&lt;br /&gt;&lt;br /&gt;자전거의 용도를 오직 레져로서만 바라본&lt;br /&gt;&lt;br /&gt;극히 끼워 맞춘듯한 그 많은 공사에 대한 변명거리의 용도로 밖에 볼 수 없다.&lt;br /&gt;&lt;br /&gt;이와 같은 예는 얼마든지 찾아 볼 수 있다.&lt;br /&gt;&lt;br /&gt;핵연료가 단지 이산화탄소만 배출하지 않는 다는 이유로&lt;br /&gt;&lt;br /&gt;폐기물 처리에 들어가는 환경적인 피해나 관리 비용에 대한 언급은 없이&lt;br /&gt;&lt;br /&gt;친환경 에너지라고 선전하는 것이라던가.&lt;br /&gt;&lt;br /&gt;수소에너지에 대한 선전을 위해서 항상 예를 들던 맹물 자동차에 대한 허풍이라던가.&lt;br /&gt;&lt;br /&gt;물에서 수소를 분리해내기 위해선&lt;br /&gt;&lt;br /&gt;얼마나 많은 양의 석유로 발전된 전기로 분해내야 한다는 것은 전혀 고려하지 않는다.&lt;br /&gt;&lt;br /&gt;이런식이다. 항상.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-2421746460586302902?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/2421746460586302902/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2421746460586302902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2421746460586302902'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/blog-post.html' title='자전거란?'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1663448706415915273</id><published>2011-10-26T01:51:00.000-07:00</published><updated>2011-10-26T01:52:29.131-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='radeon'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><title type='text'>After removing AMD/ATI Catalyst radeon driver, experimental trials for fixing problems드라이버의 문제해결을 위한 혹시나 하는 재설정</title><content type='html'># apt-get update&lt;br /&gt;&lt;br /&gt;# apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-dri &amp;lt;--- libGL.so + mesa3d DRI drivers&lt;br /&gt;&lt;br /&gt;# apt-get install --reinstall xserver-xorg-core &amp;lt;--- libglx.so of xserver&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# apt-get build-dep libdrm &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;--- Userspace interface to kernel DRM services (development files, radeon-specific, etc.)&lt;br /&gt;&lt;br /&gt;# apt-get build-dep mesa &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;--- A free implementation of the OpenGL API (DRI modules, GLX runtime, GLX development files, etc.)&lt;br /&gt;&lt;br /&gt;# apt-get build-dep xserver-xorg-video-ati &amp;lt;--- X.Org X server -- AMD/ATI display driver&lt;br /&gt;&lt;br /&gt;# apt-get build-dep xorg-server &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;--- Xorg X server (core server, development files, etc.)&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.x.org/wiki/radeonBuildHowTo#Removing_AMD.2BAC8-ATI_catalyst.2BAC8-fglrx_driver_.28closed_source.29"&gt;http://www.x.org/wiki/radeonBuildHowTo#Removing_AMD.2BAC8-ATI_catalyst.2BAC8-fglrx_driver_.28closed_source.29&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1663448706415915273?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1663448706415915273/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/after-removing-amdati-catalyst-radeon.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1663448706415915273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1663448706415915273'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/after-removing-amdati-catalyst-radeon.html' title='After removing AMD/ATI Catalyst radeon driver, experimental trials for fixing problems드라이버의 문제해결을 위한 혹시나 하는 재설정'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1365109363741238490</id><published>2011-10-26T01:20:00.000-07:00</published><updated>2011-10-26T01:20:53.073-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel ModeSetting'/><title type='text'>ATI radeon 비디오 카드를 위한 Kernel ModeSetting (KMS) 비활성화 하기</title><content type='html'>부팅시 "nomodeset"를 설정해서 시스템을 가동하고&lt;br /&gt;&lt;div&gt;/etc/modprobe.d/radeon-kms.conf를 편집한다.&lt;/div&gt;&lt;div&gt;"options radeon modeset=0"&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1365109363741238490?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1365109363741238490/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/ati-radeon-kernel-modesetting-kms.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1365109363741238490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1365109363741238490'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/ati-radeon-kernel-modesetting-kms.html' title='ATI radeon 비디오 카드를 위한 Kernel ModeSetting (KMS) 비활성화 하기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1696812696444952799</id><published>2011-10-26T01:02:00.000-07:00</published><updated>2011-10-26T01:02:28.503-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='suspend/resume'/><title type='text'>Debian Wheezy(7.0) 에서 suspend 동작 살펴보기(debugging 하기)</title><content type='html'>[출처]&amp;nbsp;&lt;a href="http://wiki.debian.org/Suspend"&gt;http://wiki.debian.org/Suspend&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wheezy는 아직도 testing 상태에 있다. 그레서 그 구성은 언제든지 갑자기 변경될 수 있다.&lt;br /&gt;&lt;br /&gt;가장 주목할 만한 변화는 HAL 패키지가 단계적으로 배제된다는 것이다. 여러분이 아직도 HAL 패키지가 설치된 상태로 있다면, 제거해야 합니다. 그렇지 않으면 suspend상태 동안에 pm-utils과 충돌하게 될 겁니다.&lt;br /&gt;&lt;br /&gt;suspend / resume 이 여러분의 시스템에서 잘 동작한다면, 여러분은 다행이도 이 페이지의 어떤 것도 읽을 것이 없습니다. 그렇지 않다면 맨 먼저 debug 해야 할 것은suspend와 resume을 제어하는 pm-utils의 debug를 활성화 하는 것이다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;pm-utils의 debug를 활성화 하기&lt;/b&gt;&lt;br /&gt;suspend와 resume process의 동작 기록은 /var/log/pm-suspend.log 파일에 있다. 이것은 초기설정으로 절제된 동작 정보를 가지고 있다. 더 많은 정보는 /usr/lib/pm-utils/pm-functions 파일의 앞부분에 "export PM_DEBUG=true"를 추가해서 활성화된 debug를 통해서 활성화 된다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;resume시 오류가 있는 video화면 고치기&lt;/b&gt;&lt;br /&gt;컴퓨터가 resume 후에 생기는 가장 공통적인 문제는 오류가 있는 video나 검은 화면, 백라이트가 없는 LCD화면이 나타나는 것이다. 먼저 점검해 봐야 할 점은 시스템이 여전히 동작하는지 확인해 보는 것이다. 이건 "Capslock"버튼을 눌러서 간단히 확인해 볼 수 있다. Capslock LED가 적절히 변화는지를 점검하면 된다. 시스템이 여전히 동작한다면, 대부분의 경우 여러분의 비디오 카드를 위한 "video quirk"를 추가하는 것이 필요하다.&lt;br /&gt;&lt;br /&gt;Debian은 현재 Intel, nVidia와 ATI 비디오 카드에 대해서 초기적으로 활성화된 kernel mode setting(KMS)을 가지고 있다. 그러나 pm-utils의 video quirk는 KMS를 이미 지원하고 있다. 그래서 대부분의 경우 여러분은 KMS를 먼저 비활성화하는 시도를 해야한다. 여러분의 특정 비디오 카드에 대한 세세한 내용은 온라인을 검색해서 쉽게 찾아 볼 수 있다.&lt;br /&gt;&lt;br /&gt;KMS를 비활성화한 후에도 resume후 video에 여전히 오류가 있다면, 여러분은 어떤 video quirk를 사용함으로써 시스템이 suspend하도록 시도할 수 있다. 모든 사용 가능한 quirk의 자세한 설명은 pm-suspend 프로그램의 manpage를 읽어라. 그리고 명령행에서 그들의 조합을 시도하라. 여러분이 성공적으로 시스템에서 잘 동작하는 quirk의 조합을 찾았다면, 영구적으로 동작하도록 /usr/lib/pm-utils/video-quirks에 추가 할 수 있다. 그리고 동시에 많은 사람들에게 도움이 될 수 있도록 여러분의 변경사항에 대한 patch로 pm-utils 패키지의 bug 파일에 도움을 달라.&lt;br /&gt;&lt;br /&gt;Debian의 예전 버전에서 upgrade된 시스템에서 생기는 공통된 문제점은 suspend동안 시스템을 멈추어 버리게 하는 quirk-s3-bios의 활성화 되는 것이다. 여러분의 시스템이 suspend동안 멈추어 버린다면, debug를 활성화 한후에 pm-suspend.log 파일을 주의 깊게 점검하자. 그리고 quirk-s3-bios를 사용하지 않는지를 확인하도록 하자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1696812696444952799?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1696812696444952799/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/debian-wheezy70-suspend-debugging.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1696812696444952799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1696812696444952799'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/debian-wheezy70-suspend-debugging.html' title='Debian Wheezy(7.0) 에서 suspend 동작 살펴보기(debugging 하기)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-6641559622876446410</id><published>2011-10-25T21:35:00.000-07:00</published><updated>2011-10-25T21:51:52.415-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='투표장 찾기'/><title type='text'>10.26. 투표 안내문 없이 투표장 찾기</title><content type='html'>마이크로 소프트 사의 인터넷 익스플로에서&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nec.go.kr/"&gt;http://www.nec.go.kr/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;위의 주소로 이동한다.&lt;br /&gt;&lt;br /&gt;다음과 같은 화면에서 빨간 네모의 "내 투표소 찾기"를 선택한다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-GBJTRYiNfAM/TqeK17d3RRI/AAAAAAAAAZw/Yy_FntIffXM/s1600/%25ED%2599%2594%25EB%25A9%25B4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://2.bp.blogspot.com/-GBJTRYiNfAM/TqeK17d3RRI/AAAAAAAAAZw/Yy_FntIffXM/s400/%25ED%2599%2594%25EB%25A9%25B4.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;내 거주 지역의 주소와 이름 주민번호를 입력하면 해당 투표소의 주소와 지도를볼수 있다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-dThniDSQtHI/TqeN90FJS9I/AAAAAAAAAaI/9LmSokM0H-I/s1600/%25EC%259D%25B4%25EB%25AF%25B8%25EC%25A7%2580+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="http://3.bp.blogspot.com/-dThniDSQtHI/TqeN90FJS9I/AAAAAAAAAaI/9LmSokM0H-I/s320/%25EC%259D%25B4%25EB%25AF%25B8%25EC%25A7%2580+2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-6641559622876446410?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/6641559622876446410/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/1026.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6641559622876446410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6641559622876446410'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/1026.html' title='10.26. 투표 안내문 없이 투표장 찾기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-GBJTRYiNfAM/TqeK17d3RRI/AAAAAAAAAZw/Yy_FntIffXM/s72-c/%25ED%2599%2594%25EB%25A9%25B4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7598295589204292589</id><published>2011-10-18T09:42:00.000-07:00</published><updated>2011-10-18T09:46:16.855-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PLS'/><title type='text'>Orthogonal Partial Least Squares Calibration</title><content type='html'>* Expression of matrix&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(MATRIX:[n x m]) ;&amp;nbsp;n is the number of rows and m is the number of columns.&lt;br /&gt;&lt;br /&gt;* Expression of column vector&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(MATRIX)(j,*) ; &amp;nbsp;j-th column vector of MATRIX&lt;br /&gt;&lt;br /&gt;* Expression of row vector&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(MATRIX)(*,i) ; i-th row vector of MATRIX&lt;br /&gt;&lt;br /&gt;* Operation for matrix&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(MATRIX)' ; transpose of Matrix&lt;br /&gt;&amp;nbsp;(MATRIX)^(-1) ; inverse matrix&lt;br /&gt;&lt;br /&gt;* Algorithm&lt;br /&gt;&lt;br /&gt;Inputs&lt;br /&gt;&lt;br /&gt;&amp;nbsp;n ; the number of samples&lt;br /&gt;&amp;nbsp;m ; the number of dimension of independent value&lt;br /&gt;&amp;nbsp;(X:[n x m]) ; independent values&lt;br /&gt;&amp;nbsp;(y:[n x 1]) ; dependent values&lt;br /&gt;&amp;nbsp;interation ; the number of iteration for calibration&lt;br /&gt;&lt;br /&gt;Step 1.&lt;br /&gt;&lt;br /&gt;Mean centering&lt;br /&gt;(mx:[1 x m]) ; Mean of (X:[n x m])(*,i)&amp;nbsp;for i = 0 ... n-1&lt;br /&gt;(X_{0}:[n x m])(*,i) = (X:[n x m])(*,i) - (mx:[1 x m]) for i = 0 ... n-1&lt;br /&gt;&lt;br /&gt;Step 2.&lt;br /&gt;&lt;br /&gt;Loading Weight&lt;br /&gt;(w_{a}:[m x 1]) = (X_{a-1}:[n x m])' * (y_{a-1}:[n x 1]) /&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sqrt((y_{a-1}:[n x 1])'&amp;nbsp;*&amp;nbsp;(X_{a-1}:[n x m]) *&amp;nbsp;(X_{a-1}:[n x m])' * (y_{a-1}:[n x 1]))&lt;br /&gt;&lt;br /&gt;Step 3.&lt;br /&gt;&lt;br /&gt;Scoring&lt;br /&gt;(t_{a}:[n x 1]) = (X_{a-1}:[n x m]) * (w_{a}:[m x 1])&lt;br /&gt;&lt;br /&gt;Step 4.&lt;br /&gt;Spectral Loading&lt;br /&gt;(p_{a}:[m x 1]) = (X_{a-1}:[n x m])' * (t_{a}:[n x 1]) / ((t_{a}:[n x 1])' * (t_{a}:[n x 1]))&lt;br /&gt;&lt;br /&gt;Step 5.&lt;br /&gt;&lt;br /&gt;Chemical Loading&lt;br /&gt;(q_{a}:[1 x 1]) = (y_{a-1}:[n x 1])'&amp;nbsp;* (t_{a}:[n x 1]) / ((t_{a}:[n x 1])' * (t_{a}:[n x 1]))&lt;br /&gt;&lt;br /&gt;Step 6.&lt;br /&gt;&lt;br /&gt;Updating&lt;br /&gt;(X_{a}:[n x m]) = (X_{a-1}:[n x m]) - (t_{a}:[n x 1]) * (p_{a}:[m x 1])'&lt;br /&gt;(y_{a}:[n x 1]) = (y_{a-1}:[n x 1]) - (t_{a}:[n x 1]) * (q_{a}:[1 x 1])&lt;br /&gt;a = a + 1&lt;br /&gt;&lt;br /&gt;Step 7.&lt;br /&gt;&lt;br /&gt;Until 'a' is equal to "iteration" repeat Step 2, 3, 4, 5, and 6.&lt;br /&gt;&lt;br /&gt;Step 8.&lt;br /&gt;&lt;br /&gt;(b:[m x 1]) = (W:[m x iteration]) * ((P:[m x iteration])' * (W:[m x iteration]))^(-1) * (Q:[iteration x 1])&lt;br /&gt;(b0:[1 x 1]) = (my:[1 x 1]) - (mx:[1 x m]) * (b:[m x 1])&lt;br /&gt;&lt;br /&gt;where&lt;br /&gt;&lt;br /&gt;(W:[m x iteration])(a,*) =&amp;nbsp;(w_{a}:[m x 1])&lt;br /&gt;(P:[m x iteration])(a, *) = (p_{a}:[m x 1])&lt;br /&gt;(Q:[iteration x 1])(a, *) = (q_{a}:[1 x 1])&lt;br /&gt;(my:[1 x 1]) ;&amp;nbsp;Mean of (y:[m x 1])(0,i)&amp;nbsp;for i = 0 ... n-1&lt;br /&gt;&lt;br /&gt;* Prediction&lt;br /&gt;&lt;br /&gt;(y^:[1 x 1]) = (b0:[1 x 1]) + (x:[1 x m]) * (b:[m x 1])&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7598295589204292589?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7598295589204292589/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/orthogonal-partial-least-squares.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7598295589204292589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7598295589204292589'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/orthogonal-partial-least-squares.html' title='Orthogonal Partial Least Squares Calibration'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-466103119635948091</id><published>2011-10-18T04:30:00.000-07:00</published><updated>2011-10-18T04:30:58.357-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fglrx-driver'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Debian Wheezy(7.0)의 repository에서 사라진 fglrx-driver, fglrx-control ???</title><content type='html'>여느날과 다름없이 업데이트 알림에 대해 의심없이 찬성을 했다가 다음 부팅시 Xorg 작동이 멈추어서 터미널로 로그인하게 되었다. 우선 /etc/X11/xorg.conf를 지우고 부팅하면 작동은 되었다만 여간 답답한게 아니다. 동영상도 느리고 화면 반응도 답답하다. 찾아 본 봐 AMD proprierty 드라이버가 충돌이 잃어난다는 보고에 패키지가 내려갔다고 한다. 그 동안은 xorg-server-radeon으로 버텨야 해야한다.&amp;nbsp;&lt;a href="http://web.archiveorange.com/archive/v/rzXEMJaA6QnUnWIezYjn"&gt;http://web.archiveorange.com/archive/v/rzXEMJaA6QnUnWIezYjn&lt;/a&gt;&amp;nbsp;에서 알 수 있듯이&amp;nbsp;fglrx-driver 11-10이 나온후&amp;nbsp;packaging과 migration 을 거친후 11월 중순에나 만나 볼 수 있겠다고 한다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-466103119635948091?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/466103119635948091/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/debian-wheezy70-repository-fglrx-driver.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/466103119635948091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/466103119635948091'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/debian-wheezy70-repository-fglrx-driver.html' title='Debian Wheezy(7.0)의 repository에서 사라진 fglrx-driver, fglrx-control ???'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-5926750043643195559</id><published>2011-10-06T19:24:00.000-07:00</published><updated>2011-10-06T19:24:46.951-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='MingW'/><title type='text'>MingW + GIT + Emacs</title><content type='html'>Previous post mentioned about the installation of MingW.&lt;br /&gt;And I add further setting to use Emacs;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-WN3grI2bJw0/To5coKIUohI/AAAAAAAAAZo/iwAkj0Juznk/s1600/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="97" src="http://4.bp.blogspot.com/-WN3grI2bJw0/To5coKIUohI/AAAAAAAAAZo/iwAkj0Juznk/s320/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;To use git tool with MingW in windows XP I installed windows-ported version.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/msysgit/"&gt;http://code.google.com/p/msysgit/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DNeSq3svcLo/To5exBElz4I/AAAAAAAAAZs/uqSURyCsYrc/s1600/%25EC%25A0%259C%25EB%25AA%25A9+%25EC%2597%2586%25EC%259D%258C.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://2.bp.blogspot.com/-DNeSq3svcLo/To5exBElz4I/AAAAAAAAAZs/uqSURyCsYrc/s320/%25EC%25A0%259C%25EB%25AA%25A9+%25EC%2597%2586%25EC%259D%258C.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Then there are two the same shell commanders; Git Bash and Msys Bash contained in MingW package.&lt;br /&gt;I would like to use Git under Msys Bash. However, in Msys Bash I can't access Git binary.&lt;br /&gt;So, I need the below procedure.&lt;br /&gt;&lt;br /&gt;1. Create .profile file in your home directory&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After installation of Msys, set up your .profile something like this.&lt;br /&gt;Create a .profile file in your home directory&lt;br /&gt;&lt;br /&gt;Put the content needed into it. An example might be:&lt;br /&gt;&lt;br /&gt;#!/bin/sh.exe&lt;br /&gt;#&lt;br /&gt;# Get the aliases and functions&lt;br /&gt;#&lt;br /&gt;if [ -f ${HOME}/.bashrc ]&lt;br /&gt;then&lt;br /&gt;&amp;nbsp; . ${HOME}/.bashrc&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;export CVS_RSH="ssh"&lt;br /&gt;export EDITOR="/usr/bin/vim"&lt;br /&gt;export HISTSIZE="500"&lt;br /&gt;export PATH="/c/emacs-23.3/bin:/c/Program\ Files/Git/bin:${HOME}/bin:${PATH}"&lt;br /&gt;&lt;br /&gt;2. Create a .bashrc file in your home directory :&lt;br /&gt;&lt;br /&gt;Put the content needed into it. An example might be:&lt;br /&gt;&lt;br /&gt;# .bashrc&lt;br /&gt;&lt;br /&gt;# Source global definitions&lt;br /&gt;if [ -f /etc/bashrc ]&lt;br /&gt;then&lt;br /&gt;&amp;nbsp; . /etc/bashrc&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# User specific aliases and functions&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;Close and restart the MSYS Shell.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-5926750043643195559?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/5926750043643195559/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/mingw-git-emacs.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5926750043643195559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5926750043643195559'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/10/mingw-git-emacs.html' title='MingW + GIT + Emacs'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-WN3grI2bJw0/To5coKIUohI/AAAAAAAAAZo/iwAkj0Juznk/s72-c/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-4074791409654391391</id><published>2011-09-25T22:36:00.000-07:00</published><updated>2011-09-25T22:36:56.927-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MingW'/><category scheme='http://www.blogger.com/atom/ns#' term='SDL'/><title type='text'>Install MingW and SDL.</title><content type='html'>* Goto&amp;nbsp;&lt;a href="http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get/"&gt;http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BMIIyhtwE8Q/ToAG7rSRjRI/AAAAAAAAAZY/Yt59S1U8Pas/s1600/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="356" src="http://4.bp.blogspot.com/-BMIIyhtwE8Q/ToAG7rSRjRI/AAAAAAAAAZY/Yt59S1U8Pas/s400/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;* Download mingw-get-inst-xxxxxx.exe&lt;br /&gt;&lt;br /&gt;* Execute MingW Shell&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-U0OvNGe1w-4/ToAIKKOf44I/AAAAAAAAAZg/-CdbZRHwj6E/s1600/%25EC%2583%2588+%25EC%259D%25B4%25EB%25AF%25B8%25EC%25A7%2580+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://4.bp.blogspot.com/-U0OvNGe1w-4/ToAIKKOf44I/AAAAAAAAAZg/-CdbZRHwj6E/s320/%25EC%2583%2588+%25EC%259D%25B4%25EB%25AF%25B8%25EC%25A7%2580+2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-d-lt8AkOiQM/ToAIJ4bK4iI/AAAAAAAAAZc/yvC9tXw0dkc/s1600/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://1.bp.blogspot.com/-d-lt8AkOiQM/ToAIJ4bK4iI/AAAAAAAAAZc/yvC9tXw0dkc/s320/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;* Execute "mingw-get update" and "mingw-get upgrade"&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;* Goto&amp;nbsp;&lt;a href="http://www.libsdl.org/download-1.2.php"&gt;http://www.libsdl.org/download-1.2.php&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;* Download SDL-X.X.X-win32.zip under Win32 of Runtime Libraries and SDL-devel-X.X.X-mingw32.tar.gz under Win32 of Development Libraries.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-5xB-rE4rJQ8/ToALlwmrXNI/AAAAAAAAAZk/UBA4FEuttdM/s1600/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="285" src="http://3.bp.blogspot.com/-5xB-rE4rJQ8/ToALlwmrXNI/AAAAAAAAAZk/UBA4FEuttdM/s320/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+4.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;* Extract SDL-devel-X.X.X-win32.zip.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;* Copy libSDLmain.a, libSDL.la, and libSDL.dll.a into into $(MingW Directory)/lib/*.a.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;* Copy include/SDL/* into&amp;nbsp;$(MingW Directory)/include/SDL.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;* Copy bin/SDL.dll and bin/sdl-config into&amp;nbsp;$(MingW Directory)/bin.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-4074791409654391391?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/4074791409654391391/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/install-mingw.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/4074791409654391391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/4074791409654391391'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/install-mingw.html' title='Install MingW and SDL.'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-BMIIyhtwE8Q/ToAG7rSRjRI/AAAAAAAAAZY/Yt59S1U8Pas/s72-c/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-5558729347349997883</id><published>2011-09-25T03:08:00.000-07:00</published><updated>2011-09-25T06:38:44.852-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delaunay triangle'/><category scheme='http://www.blogger.com/atom/ns#' term='thinning'/><title type='text'>Using delaunay trianglulation, thinning of a mass object.</title><content type='html'>Thinning algorithm based on morphology operation is not adopted for a mass object on image. It needs too many operations. To down-size a processing time one of the other methods is based on delaunay triangulation.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-57ZTEP3d2PY/Tn7qHDa_spI/AAAAAAAAAZM/ZpjITgjOeIM/s1600/delaunay.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-57ZTEP3d2PY/Tn7qHDa_spI/AAAAAAAAAZM/ZpjITgjOeIM/s400/delaunay.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;For a triangle having a edge in outside of a mass object, it is out of consideration.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BqR3CGp9Keg/Tn7rAQp_IMI/AAAAAAAAAZU/h5V-5Q0ENSY/s1600/delaunay1.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-BqR3CGp9Keg/Tn7rAQp_IMI/AAAAAAAAAZU/h5V-5Q0ENSY/s400/delaunay1.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Blue-colored triangles are out of consideration. And then it needs analysis the&amp;nbsp;relationship of connectivity between triangles. A few definitions are enlisted. the End Triangle is defined as two edges of triangle meet outside of mass object, the Edge Triangle is defined as one edge of triangle meets outside of mass object, and the Branch Triangle is defined as none edge of triangle meets outside of mass object.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Tm2lIfuQN0s/Tn7qHzbf_7I/AAAAAAAAAZQ/GpmTd65lq4M/s1600/delaunay1.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-Tm2lIfuQN0s/Tn7qHzbf_7I/AAAAAAAAAZQ/GpmTd65lq4M/s400/delaunay1.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Blue-colored triangle indicates a End Triangle, Green-colored triangle indicates a Edge Triangle, and red-colored triangle indicates a Branch Triangle. According to connectivity among three types of triangles, the center of innercircle of End and Branch Triangle forms thinning lines.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-5558729347349997883?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/5558729347349997883/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/using-delaunay-trianglulation-thinning.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5558729347349997883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5558729347349997883'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/using-delaunay-trianglulation-thinning.html' title='Using delaunay trianglulation, thinning of a mass object.'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-57ZTEP3d2PY/Tn7qHDa_spI/AAAAAAAAAZM/ZpjITgjOeIM/s72-c/delaunay.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-9218202589446910837</id><published>2011-09-21T09:15:00.000-07:00</published><updated>2011-09-22T09:02:34.870-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delaunay triangle'/><title type='text'>Fixing delaunay triangulation</title><content type='html'>During delaunay triangulation unexpacted line crossing is performed.&lt;br /&gt;Given points are like this.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-25V34UsT64o/TnoJBAcuLPI/AAAAAAAAAY0/JbYwKrzc4dQ/s1600/GivenPoints.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="313" src="http://4.bp.blogspot.com/-25V34UsT64o/TnoJBAcuLPI/AAAAAAAAAY0/JbYwKrzc4dQ/s400/GivenPoints.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And Its result is&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-f75OOPZg3e0/TnoJF5NwTcI/AAAAAAAAAY4/xUJsCrkWh5o/s1600/DelaunayMesh.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="313" src="http://3.bp.blogspot.com/-f75OOPZg3e0/TnoJF5NwTcI/AAAAAAAAAY4/xUJsCrkWh5o/s400/DelaunayMesh.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Its code is&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void delaunay_list_create_2d_network(delaunay_list_t *list, point_list_t *points, bitmap_t *roi)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *x, *y, *z;&lt;br /&gt;&amp;nbsp; point_t *o, *a, *b, *c;&lt;br /&gt;&amp;nbsp; point_t *v1, *v2, *v3, *org;&lt;br /&gt;&amp;nbsp; delaunay_net_t *neta, *netb, *netc, *net;&lt;br /&gt;&amp;nbsp; //dlist_t *triangles;&lt;br /&gt;&amp;nbsp; triangle_list_t *triangles;&lt;br /&gt;&amp;nbsp; triangle_t *tri;&lt;br /&gt;&amp;nbsp; //dlist_t *lines;&lt;br /&gt;&amp;nbsp; line_list_t *lines;&lt;br /&gt;&amp;nbsp; line_t *line, *l;&lt;br /&gt;&amp;nbsp; real_t da, db, dc, s;&lt;br /&gt;&amp;nbsp; real_t val, vmin;&lt;br /&gt;&amp;nbsp; real_t radius, area;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&amp;nbsp; assert(points);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // allocate delaunay network list&lt;br /&gt;&amp;nbsp; //list = delaunay_list_new();&lt;br /&gt;&amp;nbsp; for (x = points-&amp;gt;tail-&amp;gt;next; x != points-&amp;gt;head; x = x-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; net = delaunay_net_new((point_t *)x-&amp;gt;object);&lt;br /&gt;&amp;nbsp; &amp;nbsp; delaunay_list_insert(net, list);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // starting point&lt;br /&gt;&amp;nbsp; neta = delaunay_list_get_net(0, list);&lt;br /&gt;&amp;nbsp; a = delaunay_net_get_coordinate(neta);&lt;br /&gt;&amp;nbsp; // find minimum distance between points&lt;br /&gt;&amp;nbsp; for (netb = NULL, x = list-&amp;gt;tail-&amp;gt;next-&amp;gt;next; x != list-&amp;gt;head; x = x-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; net = (delaunay_net_t *)x-&amp;gt;object;&lt;br /&gt;&amp;nbsp; &amp;nbsp; o = delaunay_net_get_coordinate(net);&lt;br /&gt;&amp;nbsp; &amp;nbsp; val = distance_between_points(a, o);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (val &amp;lt; REAL_EPSILON) continue;&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (netb == NULL || val &amp;lt; vmin) { netb = net; vmin = val; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; b = delaunay_net_get_coordinate(netb);&lt;br /&gt;&amp;nbsp; // find minimum radius of circumscribed circle for triangle&lt;br /&gt;&amp;nbsp; for (netc = NULL, x = list-&amp;gt;tail-&amp;gt;next-&amp;gt;next; x != list-&amp;gt;head; x = x-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; net = (delaunay_net_t *)x-&amp;gt;object;&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (net == netb) continue;&lt;br /&gt;&amp;nbsp; &amp;nbsp; o = delaunay_net_get_coordinate(net);&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Heron's formula to find the area formed by three points&lt;br /&gt;&amp;nbsp; &amp;nbsp; da = distance_between_points(a, b);&lt;br /&gt;&amp;nbsp; &amp;nbsp; db = distance_between_points(b, o);&lt;br /&gt;&amp;nbsp; &amp;nbsp; dc = distance_between_points(o, a);&lt;br /&gt;&amp;nbsp; &amp;nbsp; s = (da + db + dc) / 2;&lt;br /&gt;&amp;nbsp; &amp;nbsp; area = sqrt(s * (s - da) * (s - db) * (s - dc));&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (area &amp;lt; REAL_EPSILON) continue;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // calculate radius of circumscribed circle for triangle&lt;br /&gt;&amp;nbsp; &amp;nbsp; radius = (da * db * dc) / (4 * area);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (netc == NULL || radius &amp;lt; vmin) { netc = net; vmin = radius; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; c = delaunay_net_get_coordinate(netc);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; v1 = point_new();&lt;br /&gt;&amp;nbsp; v2 = point_new();&lt;br /&gt;&amp;nbsp; v3 = point_new();&lt;br /&gt;&amp;nbsp; org = point_new();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // re-ordering&lt;br /&gt;&amp;nbsp; point_subtract(v1, b, a);&lt;br /&gt;&amp;nbsp; point_subtract(v2, c, a);&lt;br /&gt;&amp;nbsp; point_xproduct(v3, v1, v2);&lt;br /&gt;&amp;nbsp; if (v3-&amp;gt;z &amp;gt; 0) { // counterclockwise following a to b to c ?&lt;br /&gt;&amp;nbsp; &amp;nbsp; net = netb, netb = netc, netc = net;&lt;br /&gt;&amp;nbsp; &amp;nbsp; o = b, b = c, c = o;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // connect delaunay network&lt;br /&gt;&amp;nbsp; delaunay_net_connect(neta, netb);&lt;br /&gt;&amp;nbsp; delaunay_net_connect(netb, netc);&lt;br /&gt;&amp;nbsp; delaunay_net_connect(netc, neta);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Synthesize a triangle and insert it.&lt;br /&gt;&amp;nbsp; //triangles = dlist_new();&lt;br /&gt;&amp;nbsp; triangles = triangle_list_new();&lt;br /&gt;&amp;nbsp; tri = triangle_new_and_assign(a, b, c);&lt;br /&gt;&amp;nbsp; triangle_list_insert(tri, triangles);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; //triangle_dump(tri);&lt;br /&gt;&amp;nbsp; // Synthesize three line and insert it.&lt;br /&gt;&amp;nbsp; lines = line_list_new();&lt;br /&gt;&amp;nbsp; line = line_new_and_assign(a, b);&lt;br /&gt;&amp;nbsp; line_list_insert(line, lines);&lt;br /&gt;&amp;nbsp; line = line_new_and_assign(b, c);&lt;br /&gt;&amp;nbsp; line_list_insert(line, lines);&lt;br /&gt;&amp;nbsp; line = line_new_and_assign(c, a);&lt;br /&gt;&amp;nbsp; line_list_insert(line, lines);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // main routine&lt;br /&gt;&amp;nbsp; for (x = lines-&amp;gt;tail-&amp;gt;next; x != lines-&amp;gt;head; x = x-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; line = (line_t *)x-&amp;gt;object;&lt;br /&gt;&amp;nbsp; &amp;nbsp; //line_dump(line);&lt;br /&gt;&amp;nbsp; &amp;nbsp; for (y = list-&amp;gt;tail-&amp;gt;next; y != list-&amp;gt;head; y = y-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; netc = (delaunay_net_t *)y-&amp;gt;object;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; c = delaunay_net_get_coordinate(netc);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (point_cmp(c, line-&amp;gt;a) == 0 || point_cmp(c, line-&amp;gt;b) == 0)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;continue;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // counter-clockwise rotation of the triangle formed by a, b, and c&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; point_subtract(v1, line-&amp;gt;b, line-&amp;gt;a);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; point_subtract(v2, c, line-&amp;gt;a);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; point_xproduct(v3, v1, v2);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (v3-&amp;gt;z &amp;lt; REAL_EPSILON) continue;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Does the triangle exist in the pool of delaunay triangles before ?&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; tri = triangle_new_and_assign(line-&amp;gt;a, c, line-&amp;gt;b);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; //if (is_triangle_in_list(tri, triangles)) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (triangle_list_query(tri, triangles) &amp;gt;= 0) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;triangle_destroy(tri);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;tri = NULL;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;continue;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Does the unique triangle form the delaunay triangle ?&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; radius = triangle_circumcircle(org, tri);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (z = list-&amp;gt;tail-&amp;gt;next; z != list-&amp;gt;head; z = z-&amp;gt;next) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;net = (delaunay_net_t *)z-&amp;gt;object;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;o = delaunay_net_get_coordinate(net);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (point_cmp(o, line-&amp;gt;a) == 0 ||&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;point_cmp(o, line-&amp;gt;b) == 0 ||&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;point_cmp(o, c) == 0)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;continue;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (distance_between_points(o, org) &amp;lt; radius) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;triangle_destroy(tri);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;tri = NULL;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;break;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (tri) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* put the trinangle into triangle's list,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; * establish connection between delaunay networks, and&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; * allocate and put two lines into line's list */&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;triangle_list_insert(tri, triangles);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;l = line_new_and_assign(line-&amp;gt;a, c);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (line_list_query(l, lines) &amp;lt; 0) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;line_list_insert(l, lines);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;for (z = list-&amp;gt;tail-&amp;gt;next; z != list-&amp;gt;head; z = z-&amp;gt;next) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;net = (delaunay_net_t *)z-&amp;gt;object;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;o = delaunay_net_get_coordinate(net);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;if (point_cmp(o, line-&amp;gt;a) == 0) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaunay_net_connect(netc, net);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;} else line_destroy(l);&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;l = line_new_and_assign(c, line-&amp;gt;b);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (line_list_query(l, lines) &amp;lt; 0) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;line_list_insert(l, lines);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;for (z = list-&amp;gt;tail-&amp;gt;next; z != list-&amp;gt;head; z = z-&amp;gt;next) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;net = (delaunay_net_t *)z-&amp;gt;object;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;o = delaunay_net_get_coordinate(net);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;if (point_cmp(o, line-&amp;gt;b) == 0) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaunay_net_connect(netc, net);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;} else line_destroy(l);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // de-allocation lines and triangles&lt;br /&gt;&amp;nbsp; /*&lt;br /&gt;&amp;nbsp; while (triangles-&amp;gt;count) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; tri = triangle_list_pop(triangles);&lt;br /&gt;&amp;nbsp; &amp;nbsp; //triangle_dump(tri);&lt;br /&gt;&amp;nbsp; &amp;nbsp; triangle_destroy(tri);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; triangle_list_destroy(triangles);&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; list-&amp;gt;head-&amp;gt;object = (void *)triangles;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; while (lines-&amp;gt;count) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; line = line_list_pop(lines);&lt;br /&gt;&amp;nbsp; &amp;nbsp; //line_dump(line);&lt;br /&gt;&amp;nbsp; &amp;nbsp; line_destroy(line);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; line_list_destroy(lines);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; point_destroy(v1);&lt;br /&gt;&amp;nbsp; point_destroy(v2);&lt;br /&gt;&amp;nbsp; point_destroy(v3);&lt;br /&gt;&amp;nbsp; point_destroy(org);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // &amp;nbsp;return list;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Its reason is because of four points on the same circle. Delaunay Triangulation is determined by whether there is a point in circumference circle, but for this four points it is impossible to construct the unique delaunay triangulation.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UNT-rNqfr8s/TnoMzQuWztI/AAAAAAAAAY8/WfyMHbXLNr8/s1600/DelaunayMesh1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="251" src="http://2.bp.blogspot.com/-UNT-rNqfr8s/TnoMzQuWztI/AAAAAAAAAY8/WfyMHbXLNr8/s320/DelaunayMesh1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The triangle with red color has properties like this;&lt;br /&gt;three vertex: (333, 311), (333, 183), (308, 315)&lt;br /&gt;center of circumference circle: (309.94, 247)&lt;br /&gt;radius of circumference circle: 68.027688&lt;br /&gt;&lt;br /&gt;The triangle with blue color has properties like this;&lt;br /&gt;three vertex: (308, 315), (333, 311), (308, 179)&lt;br /&gt;center of circumference circle: (309.94, 247)&lt;br /&gt;radius of circumference circle: 68.027688&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;In this case it is necessary that additional algorithm is to avoid a crossing between lines.&lt;br /&gt;&lt;br /&gt;The subroutine to detect whether two lines has intersecting point or not. It is referenced at&amp;nbsp;&lt;a href="http://paulbourke.net/geometry/lineline2d/"&gt;http://paulbourke.net/geometry/lineline2d/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int intersect_point_between_lines(point_t *p, line_t *l, line_t *m)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; real_t denom, ua, ub;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(p);&lt;br /&gt;&amp;nbsp; assert(l);&lt;br /&gt;&amp;nbsp; assert(m);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Pl = l-&amp;gt;a + Ua * (l-&amp;gt;b - l-&amp;gt;a)&lt;br /&gt;&amp;nbsp; // Pm = m-&amp;gt;a + Ub * (m-&amp;gt;b - m-&amp;gt;a)&lt;br /&gt;&amp;nbsp; // for Pl = Pm&lt;br /&gt;&amp;nbsp; denom = (m-&amp;gt;b-&amp;gt;y - m-&amp;gt;a-&amp;gt;y) * (l-&amp;gt;b-&amp;gt;x - l-&amp;gt;a-&amp;gt;x) - (m-&amp;gt;b-&amp;gt;x - m-&amp;gt;a-&amp;gt;x) * (l-&amp;gt;b-&amp;gt;y - l-&amp;gt;a-&amp;gt;y);&lt;br /&gt;&amp;nbsp; ua = (m-&amp;gt;b-&amp;gt;x - m-&amp;gt;a-&amp;gt;x) * (l-&amp;gt;a-&amp;gt;y - m-&amp;gt;a-&amp;gt;y) - (m-&amp;gt;b-&amp;gt;y - m-&amp;gt;a-&amp;gt;y) * (l-&amp;gt;a-&amp;gt;x - m-&amp;gt;a-&amp;gt;x);&lt;br /&gt;&amp;nbsp; ub = (l-&amp;gt;b-&amp;gt;x - l-&amp;gt;a-&amp;gt;x) * (l-&amp;gt;a-&amp;gt;y - m-&amp;gt;a-&amp;gt;y) - (l-&amp;gt;b-&amp;gt;y - l-&amp;gt;a-&amp;gt;y) * (l-&amp;gt;a-&amp;gt;x - m-&amp;gt;a-&amp;gt;x);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (abs(denom) &amp;lt; REAL_EPSILON) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (abs(ua) &amp;lt; REAL_EPSILON &amp;amp;&amp;amp; abs(ub) &amp;lt; REAL_EPSILON)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return 0; // COINCIDENT&lt;br /&gt;&amp;nbsp; &amp;nbsp; return -1; // PARALLEL&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ua = ua / denom;&lt;br /&gt;&amp;nbsp; ub = ub / denom;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (ua &amp;lt; 0 || ua &amp;gt; 1 || ub &amp;lt; 0 &amp;nbsp;|| ub &amp;gt; 1)&lt;br /&gt;&amp;nbsp; &amp;nbsp; return -2; // Not intersecting&lt;br /&gt;&lt;br /&gt;&amp;nbsp; p-&amp;gt;x = l-&amp;gt;a-&amp;gt;x + ua * (l-&amp;gt;b-&amp;gt;x - l-&amp;gt;a-&amp;gt;x);&lt;br /&gt;&amp;nbsp; p-&amp;gt;y = l-&amp;gt;a-&amp;gt;y + ua * (l-&amp;gt;b-&amp;gt;y - l-&amp;gt;a-&amp;gt;y);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if ((abs(ua) &amp;lt; REAL_EPSILON || abs(ua - 1.0) &amp;lt; REAL_EPSILON) ||&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (abs(ub) &amp;lt; REAL_EPSILON || abs(ub - 1.0) &amp;lt; REAL_EPSILON))&lt;br /&gt;&amp;nbsp; &amp;nbsp; return 2; // ENDPOINT&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return 1; // INTERSECTING&lt;br /&gt;}&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And the code of modified delaunay triangulation is here.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;void delaunay_list_create_2d_network(delaunay_list_t *list, point_list_t *points, bitmap_t *roi)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp; dlink_t *x, *y, *z;&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_t *o, *a, *b, *c;&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_t *v1, *v2, *v3, *org;&lt;/div&gt;&lt;div&gt;&amp;nbsp; delaunay_net_t *neta, *netb, *netc, *net;&lt;/div&gt;&lt;div&gt;&amp;nbsp; //dlist_t *triangles;&lt;/div&gt;&lt;div&gt;&amp;nbsp; triangle_list_t *triangles;&lt;/div&gt;&lt;div&gt;&amp;nbsp; triangle_t *tri;&lt;/div&gt;&lt;div&gt;&amp;nbsp; //dlist_t *lines;&lt;/div&gt;&lt;div&gt;&amp;nbsp; line_list_t *lines;&lt;/div&gt;&lt;div&gt;&amp;nbsp; line_t *line, *l, *m;&lt;/div&gt;&lt;div&gt;&amp;nbsp; real_t da, db, dc, s;&lt;/div&gt;&lt;div&gt;&amp;nbsp; real_t val, vmin;&lt;/div&gt;&lt;div&gt;&amp;nbsp; real_t radius, area;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; assert(list);&lt;/div&gt;&lt;div&gt;&amp;nbsp; assert(points);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; // allocate delaunay network list&lt;/div&gt;&lt;div&gt;&amp;nbsp; //list = delaunay_list_new();&lt;/div&gt;&lt;div&gt;&amp;nbsp; for (x = points-&amp;gt;tail-&amp;gt;next; x != points-&amp;gt;head; x = x-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; net = delaunay_net_new((point_t *)x-&amp;gt;object);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; delaunay_list_insert(net, list);&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; // starting point&lt;/div&gt;&lt;div&gt;&amp;nbsp; neta = delaunay_list_get_net(0, list);&lt;/div&gt;&lt;div&gt;&amp;nbsp; a = delaunay_net_get_coordinate(neta);&lt;/div&gt;&lt;div&gt;&amp;nbsp; // find minimum distance between points&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; for (netb = NULL, x = list-&amp;gt;tail-&amp;gt;next-&amp;gt;next; x != list-&amp;gt;head; x = x-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; net = (delaunay_net_t *)x-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; o = delaunay_net_get_coordinate(net);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; val = distance_between_points(a, o);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if (val &amp;lt; REAL_EPSILON) continue;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if (netb == NULL || val &amp;lt; vmin) { netb = net; vmin = val; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; b = delaunay_net_get_coordinate(netb);&lt;/div&gt;&lt;div&gt;&amp;nbsp; // find minimum radius of circumscribed circle for triangle&lt;/div&gt;&lt;div&gt;&amp;nbsp; for (netc = NULL, x = list-&amp;gt;tail-&amp;gt;next-&amp;gt;next; x != list-&amp;gt;head; x = x-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; net = (delaunay_net_t *)x-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if (net == netb) continue;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; o = delaunay_net_get_coordinate(net);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; // Heron's formula to find the area formed by three points&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; da = distance_between_points(a, b);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; db = distance_between_points(b, o);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; dc = distance_between_points(o, a);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; s = (da + db + dc) / 2;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; area = sqrt(s * (s - da) * (s - db) * (s - dc));&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if (area &amp;lt; REAL_EPSILON) continue;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; // calculate radius of circumscribed circle for triangle&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; radius = (da * db * dc) / (4 * area);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if (netc == NULL || radius &amp;lt; vmin) { netc = net; vmin = radius; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; c = delaunay_net_get_coordinate(netc);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; v1 = point_new();&lt;/div&gt;&lt;div&gt;&amp;nbsp; v2 = point_new();&lt;/div&gt;&lt;div&gt;&amp;nbsp; v3 = point_new();&lt;/div&gt;&lt;div&gt;&amp;nbsp; org = point_new();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; // re-ordering&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_subtract(v1, b, a);&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_subtract(v2, c, a);&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_xproduct(v3, v1, v2);&lt;/div&gt;&lt;div&gt;&amp;nbsp; if (v3-&amp;gt;z &amp;gt; 0) { // counterclockwise following a to b to c ?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; net = netb, netb = netc, netc = net;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; o = b, b = c, c = o;&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; // connect delaunay network&lt;/div&gt;&lt;div&gt;&amp;nbsp; delaunay_net_connect(neta, netb);&lt;/div&gt;&lt;div&gt;&amp;nbsp; delaunay_net_connect(netb, netc);&lt;/div&gt;&lt;div&gt;&amp;nbsp; delaunay_net_connect(netc, neta);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; // Synthesize a triangle and insert it.&lt;/div&gt;&lt;div&gt;&amp;nbsp; //triangles = dlist_new();&lt;/div&gt;&lt;div&gt;&amp;nbsp; triangles = triangle_list_new();&lt;/div&gt;&lt;div&gt;&amp;nbsp; tri = triangle_new_and_assign(a, b, c);&lt;/div&gt;&lt;div&gt;&amp;nbsp; triangle_list_insert(tri, triangles);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; //triangle_dump(tri);&lt;/div&gt;&lt;div&gt;&amp;nbsp; // Synthesize three line and insert it.&lt;/div&gt;&lt;div&gt;&amp;nbsp; lines = line_list_new();&lt;/div&gt;&lt;div&gt;&amp;nbsp; line = line_new_and_assign(a, b);&lt;/div&gt;&lt;div&gt;&amp;nbsp; line_list_insert(line, lines);&lt;/div&gt;&lt;div&gt;&amp;nbsp; line = line_new_and_assign(b, c);&lt;/div&gt;&lt;div&gt;&amp;nbsp; line_list_insert(line, lines);&lt;/div&gt;&lt;div&gt;&amp;nbsp; line = line_new_and_assign(c, a);&lt;/div&gt;&lt;div&gt;&amp;nbsp; line_list_insert(line, lines);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; // main routine&lt;/div&gt;&lt;div&gt;&amp;nbsp; for (x = lines-&amp;gt;tail-&amp;gt;next; x != lines-&amp;gt;head; x = x-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; line = (line_t *)x-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; //line_dump(line);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; for (y = list-&amp;gt;tail-&amp;gt;next; y != list-&amp;gt;head; y = y-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; netc = (delaunay_net_t *)y-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; c = delaunay_net_get_coordinate(netc);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (point_cmp(c, line-&amp;gt;a) == 0 || point_cmp(c, line-&amp;gt;b) == 0)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;continue;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // counter-clockwise rotation of the triangle formed by a, b, and c&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; point_subtract(v1, line-&amp;gt;b, line-&amp;gt;a);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; point_subtract(v2, c, line-&amp;gt;a);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; point_xproduct(v3, v1, v2);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (v3-&amp;gt;z &amp;lt; REAL_EPSILON) continue;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Does any line crossing with line in the line list ?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; l = line_new_and_assign(line-&amp;gt;a, c);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; m = line_new_and_assign(c, line-&amp;gt;b);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (z = lines-&amp;gt;tail-&amp;gt;next; z != lines-&amp;gt;head; z = z-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;// Is there an intersecting ?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if ((intersect_point_between_lines(v3, l, (line_t *)z-&amp;gt;object) == 1) ||&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;(intersect_point_between_lines(v3, m, (line_t *)z-&amp;gt;object) == 1)) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;line_destroy(l); l = NULL;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;line_destroy(m); m = NULL;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;break;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (l == NULL &amp;amp;&amp;amp; m == NULL) continue;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Does the triangle exist in the pool of delaunay triangles before ?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; tri = triangle_new_and_assign(line-&amp;gt;a, c, line-&amp;gt;b);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; //if (is_triangle_in_list(tri, triangles)) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (triangle_list_query(tri, triangles) &amp;gt;= 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;triangle_destroy(tri);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;tri = NULL;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;continue;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Does the unique triangle form the delaunay triangle ?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; radius = triangle_circumcircle(org, tri);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (z = list-&amp;gt;tail-&amp;gt;next; z != list-&amp;gt;head; z = z-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;net = (delaunay_net_t *)z-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;o = delaunay_net_get_coordinate(net);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if (point_cmp(o, line-&amp;gt;a) == 0 ||&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;point_cmp(o, line-&amp;gt;b) == 0 ||&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;point_cmp(o, c) == 0)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;continue;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if (distance_between_points(o, org) &amp;lt; radius) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;triangle_destroy(tri);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;tri = NULL;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;break;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (tri) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;/* put the trinangle into triangle's list,&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; * establish connection between delaunay networks, and&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; * allocate and put two lines into line's list */&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;triangle_list_insert(tri, triangles);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;//triangle_dump(tri);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;//point_dump(org);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;//printf("radius: %lf\n", radius);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;//l = line_new_and_assign(line-&amp;gt;a, c);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if (line_list_query(l, lines) &amp;lt; 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;line_list_insert(l, lines);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;//line_dump(l);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;for (z = list-&amp;gt;tail-&amp;gt;next; z != list-&amp;gt;head; z = z-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;net = (delaunay_net_t *)z-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;o = delaunay_net_get_coordinate(net);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;if (point_cmp(o, line-&amp;gt;a) == 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaunay_net_connect(netc, net);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;} else line_destroy(l);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;//m = line_new_and_assign(c, line-&amp;gt;b);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if (line_list_query(m, lines) &amp;lt; 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;line_list_insert(m, lines);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;//line_dump(m);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;for (z = list-&amp;gt;tail-&amp;gt;next; z != list-&amp;gt;head; z = z-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;net = (delaunay_net_t *)z-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;o = delaunay_net_get_coordinate(net);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;if (point_cmp(o, line-&amp;gt;b) == 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaunay_net_connect(netc, net);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;} else line_destroy(m);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;//keyhit();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;break;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; // de-allocation lines and triangles&lt;/div&gt;&lt;div&gt;&amp;nbsp; /*&lt;/div&gt;&lt;div&gt;&amp;nbsp; while (triangles-&amp;gt;count) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; tri = triangle_list_pop(triangles);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; //triangle_dump(tri);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; triangle_destroy(tri);&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; triangle_list_destroy(triangles);&lt;/div&gt;&lt;div&gt;&amp;nbsp; */&lt;/div&gt;&lt;div&gt;&amp;nbsp; list-&amp;gt;head-&amp;gt;object = (void *)triangles;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; while (lines-&amp;gt;count) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; line = line_list_pop(lines);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; //line_dump(line);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; line_destroy(line);&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; line_list_destroy(lines);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_destroy(v1);&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_destroy(v2);&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_destroy(v3);&lt;/div&gt;&lt;div&gt;&amp;nbsp; point_destroy(org);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; // &amp;nbsp;return list;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At result the line crossing is disappeared.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0GqZVhT0wQY/TnolMDuVQFI/AAAAAAAAAZA/SMFZLWMEYGU/s1600/DelaunayMesh2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="313" src="http://2.bp.blogspot.com/-0GqZVhT0wQY/TnolMDuVQFI/AAAAAAAAAZA/SMFZLWMEYGU/s400/DelaunayMesh2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Unfortunately, two delaunay triangles are deleted in the figure. In the figure dot is the mean center of delaunay triangle. As you see, you can find two triangles without mean center. It is remaining side effect of four points on the same circle.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-SzMhpZM4qVE/TntZZBmuC6I/AAAAAAAAAZE/R89jynmmE-M/s1600/delaunay.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-SzMhpZM4qVE/TntZZBmuC6I/AAAAAAAAAZE/R89jynmmE-M/s400/delaunay.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So, it needs to change comparison between variables expressed in floating points.&lt;br /&gt;&lt;br /&gt;Change&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; // Does the unique triangle form the delaunay triangle ?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; radius = triangle_circumcircle(org, tri);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (z = list-&amp;gt;tail-&amp;gt;next; z != list-&amp;gt;head; z = z-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;net = (delaunay_net_t *)z-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;o = delaunay_net_get_coordinate(net);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if (point_cmp(o, line-&amp;gt;a) == 0 ||&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;point_cmp(o, line-&amp;gt;b) == 0 ||&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;point_cmp(o, c) == 0)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp;continue;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if (distance_between_points(o, org) &amp;lt; radius) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp;triangle_destroy(tri);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp;tri = NULL;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp;break;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;....&lt;br /&gt;to&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; // Does the unique triangle form the delaunay triangle ?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; radius = triangle_circumcircle(org, tri);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (z = list-&amp;gt;tail-&amp;gt;next; z != list-&amp;gt;head; z = z-&amp;gt;next) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;net = (delaunay_net_t *)z-&amp;gt;object;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;o = delaunay_net_get_coordinate(net);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if (point_cmp(o, line-&amp;gt;a) == 0 ||&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;point_cmp(o, line-&amp;gt;b) == 0 ||&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;point_cmp(o, c) == 0)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp;continue;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	val = &lt;/span&gt;distance_between_points(o, org);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if ((val &amp;lt; radius) &amp;amp;&amp;amp; (round(100*val) &amp;lt; round(100*radius)) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp;triangle_destroy(tri);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp;tri = NULL;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp;break;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;Then,&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-z0-41SAt5GI/Tntb70o39DI/AAAAAAAAAZI/l7H39GGU5k4/s1600/delaunay.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-z0-41SAt5GI/Tntb70o39DI/AAAAAAAAAZI/l7H39GGU5k4/s400/delaunay.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-9218202589446910837?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/9218202589446910837/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/fixing-delaunay-triangulation.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/9218202589446910837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/9218202589446910837'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/fixing-delaunay-triangulation.html' title='Fixing delaunay triangulation'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-25V34UsT64o/TnoJBAcuLPI/AAAAAAAAAY0/JbYwKrzc4dQ/s72-c/GivenPoints.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-6639346950862014936</id><published>2011-09-18T03:44:00.000-07:00</published><updated>2011-09-18T08:48:48.925-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Watershed'/><category scheme='http://www.blogger.com/atom/ns#' term='Image Processing'/><title type='text'>Watershed by immersion (Vincent-Soille watershed algorithm)</title><content type='html'>procedure: Watershed-by-Immersion&lt;br /&gt;Input: digital grey scale image G = (D;E; im).&lt;br /&gt;Output: labelled watershed image lab on D.&lt;br /&gt;&lt;br /&gt;#define INIT&amp;nbsp;&amp;nbsp; 1 // initial value of lab image&lt;br /&gt;#define MASK&amp;nbsp;&amp;nbsp; 2 // initial value at each level&lt;br /&gt;#define WSHED 0 // label of the watershed pixels&lt;br /&gt;#define FICTITIOUS (-1, -1)&amp;nbsp; //  fictitious pixel 2 D&lt;br /&gt;&lt;br /&gt;curlab &amp;lt;= 0; // curlab is the current label&lt;br /&gt;fifo_init(queue);&lt;br /&gt;&lt;br /&gt;for all p in D do&lt;br /&gt;&amp;nbsp;&amp;nbsp; lab[p] &amp;lt;= INIT;&lt;br /&gt;&amp;nbsp;&amp;nbsp; dist[p] &amp;lt;= 0; // dist is a work image of distances&lt;br /&gt;end for&lt;br /&gt;&lt;br /&gt;SORT pixels in increasing order of grey values (minimum hmin, maximum hmax)&lt;br /&gt;&lt;br /&gt;// Start Flooding&lt;br /&gt;for h = hmin to hmax do // Geodesic SKIZ of level h&amp;nbsp;&amp;nbsp; 1 inside level h&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; for all p in D with im[p] = h do // mask all pixels at level h&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // these are directly accessible because of the sorting step&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lab[p] &amp;lt;= MASK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if p has a neighbour q with (lab[q] &amp;gt; 0 or lab[q] == WSHED) then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialize queue with neighbours at level h of current basins or watersheds&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dist[p] &amp;lt;= 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fifo_add(p, queue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;br /&gt;&amp;nbsp;&amp;nbsp; end for&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; curdist &amp;lt;= 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; fifo_add(FICTITIOUS, queue);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; loop // extend basins&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p &amp;lt;= fifo_remove(queue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if p == FICTITIOUS then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if fifo_empty(queue) then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fifo_add(FICTITIOUS, queue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curdist &amp;lt;= curdist + 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p &amp;lt;= fifo_remove(queue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for all q in neighbours of p do // labelling p by inspecting neighbours&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dist[q] &amp;lt; curdist and (lab[q] &amp;gt; 0 or lab[q] == WSHED) then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // q belongs to an existing basin or to watersheds&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lab[q] &amp;gt; 0 then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lab[p] == MASK or lab[p] == WSHED then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lab[p] &amp;lt;= lab[q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if lab[p] != lab[q] then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lab[p] &amp;lt;= WSHED;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if lab[p] == MASK then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lab[p] &amp;lt;= WSHED;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if lab[q] == MASK and dist[q] == 0 then // q is plateau pixel&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dist[q] &amp;lt;= curdist + 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fifo_add(q, queue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end for&lt;br /&gt;&amp;nbsp;&amp;nbsp; end loop&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; // detect and process new minima at level h&lt;br /&gt;&amp;nbsp;&amp;nbsp; for all p in D with im[p] = h do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dist[p] &amp;lt;= 0; // reset distance to zero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lab[p] == MASK then // p is inside a new minimum&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curlab &amp;lt;= curlab + 1;&amp;nbsp; // create new label&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fifo_add(p, queue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lab[p] &amp;lt;= curlab;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while not fifo_empty(queue) do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q &amp;lt;= fifo_remove(queue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for all r in neighbours of q do // inspect neighbours of q&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lab[r] == MASK then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fifo_add(r, queue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lab[r] &amp;lt;= curlab;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end for&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end while&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;br /&gt;&amp;nbsp;&amp;nbsp; end for&lt;br /&gt;end for&lt;br /&gt;// End Flooding&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;br /&gt;The Watershed Transform: De nitions, Algorithms and&lt;br /&gt;Parallelization Strategies&lt;br /&gt;Jos B.T.M. Roerdink and Arnold Meijster&lt;br /&gt;Institute for Mathematics and Computing Science&lt;br /&gt;University of Groningen&lt;br /&gt;P.O. Box 800, 9700 AV Groningen, The Netherlands&lt;br /&gt;Email: roe@cs.rug.nl,a.meijster@rc.rug.nl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-6639346950862014936?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/6639346950862014936/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/watershed-by-immersion-vincent-soille.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6639346950862014936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6639346950862014936'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/watershed-by-immersion-vincent-soille.html' title='Watershed by immersion (Vincent-Soille watershed algorithm)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-5584521469596058402</id><published>2011-09-14T19:57:00.000-07:00</published><updated>2011-09-17T22:50:55.404-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><title type='text'>Debian Wheezy의  safe-upgrade 해제한 최신 업데이트</title><content type='html'>다른건 아무런 문제가 없지만 gnome-terminal과 xterm등등의 gnome 어플리케이션의 동작에 문제가 생겼다. 아무래도 gnome버전이 2.x에서 3.0.1로 옮아가는 가정에서 생기는 문제점인거 같다. 일명 slow key라고 하는 한 5번 누르면 하나 입력이 되는 키보드 먹통현상이 가장 큰 문제이다. 그리고 gnome의 기본 테마가 적용이 안된다. xorg에서 제공하는 기본 테마가 적용되서 다른 어플리케이션과 스크롤바와 메뉴등의 테마가 다르다. 수정되겠지 하면서 쓰고 있다. 그냥 safe-upgrade로 업테이트 해야 겠다. 빨리 gnome 3.x가 안정화 되길 바란다.&lt;br /&gt;&lt;br /&gt;여러가지 씨름을 한후 ibus와 scim의 충돌로 인한 키보드 입력에 문제가 발생한 것을 알아 차리고 scim을 지웠다. 그 이후로는 ibus를 입력기로 사용하고 있다. 키보드 입력문제는 해결을 보았으나, 여전히 테마적용문제는 풀리지 않고 있다.&lt;br /&gt;&lt;br /&gt;이 문제도 해결을 보았다. home 디렉토리 밑의 .gconf를 싹 지웠더니 설정이 제대로 되고 있다. 하지만 그동안의 설정이 사라졌다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-5584521469596058402?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/5584521469596058402/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/debian-wheezy-safe-upgrade.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5584521469596058402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5584521469596058402'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/debian-wheezy-safe-upgrade.html' title='Debian Wheezy의  safe-upgrade 해제한 최신 업데이트'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-2281571630046541811</id><published>2011-09-12T21:35:00.000-07:00</published><updated>2011-09-12T21:35:16.022-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visitor map'/><title type='text'>멋있는 방문자 지도 제공 사이트</title><content type='html'>&lt;a href="http://www.revolvermaps.com/?target=setup"&gt;http://www.revolvermaps.com/?target=setup&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;지도와 해상도 기타등등을 선택하고 코드를 자신의 사이트에 추가하면 된다. 간단하다.&lt;br /&gt;&lt;br /&gt;이러한 노력의 결과물을 많이 꽁짜로 제공하는데 왜 그런지 의문스럽다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-2281571630046541811?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/2281571630046541811/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2281571630046541811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/2281571630046541811'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/blog-post.html' title='멋있는 방문자 지도 제공 사이트'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7104840159015966608</id><published>2011-09-10T21:00:00.000-07:00</published><updated>2011-09-10T21:00:44.412-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='나사산'/><title type='text'>KS 규격 나사산 그리기(탭 깊이, 나사 맞춤 깊이)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RQIFymwKoOU/TmwyYCCmE0I/AAAAAAAAAYk/CKZkbWB2d28/s1600/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-RQIFymwKoOU/TmwyYCCmE0I/AAAAAAAAAYk/CKZkbWB2d28/s320/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+2.png" width="223" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;* M3&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;숫나사의 바깥 지름 d: 3mm&lt;br /&gt;나사를 내기 위한 구멍의 지름 d1: 2.4mm&lt;br /&gt;드릴 깊이 b: 6(강, 주강, 청동, 청동주물), 7.5(주철), 8.5(알미늄과 기타의 경합금제)&lt;br /&gt;탭 깊이 a: 3(강, 주강, 청동, 청동주물), 4.5(주철), 5.5(알미늄가 기타의 경합금제)&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;* M6&lt;br /&gt;&lt;br /&gt;숫나사의 바깥 지름 d: 6mm&lt;br /&gt;나사를 내기 위한 구멍의 지름 d1: 5mm&lt;br /&gt;드릴 깊이 b: 10(강, 주강, 청동, 청동주물), 13(주철), 15(알미늄과 기타의 경합금제)&lt;br /&gt;탭 깊이 a: 6(강, 주강, 청동, 청동주물), 9(주철), 11(알미늄가 기타의 경합금제)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7104840159015966608?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7104840159015966608/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/ks.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7104840159015966608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7104840159015966608'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/ks.html' title='KS 규격 나사산 그리기(탭 깊이, 나사 맞춤 깊이)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-RQIFymwKoOU/TmwyYCCmE0I/AAAAAAAAAYk/CKZkbWB2d28/s72-c/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3613566609735049040</id><published>2011-09-05T22:02:00.000-07:00</published><updated>2011-09-05T22:11:32.086-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Untouchable HDD noise on Laptop as having age.</title><content type='html'>I give a priority to change HDD as SDD for out of noise.&lt;br /&gt;&lt;br /&gt;But my debian system is too heavy to reconfigure.&lt;br /&gt;&lt;br /&gt;One of the disk copy between HDD is through "cat" commnand.&lt;br /&gt;&lt;br /&gt;# cat /dev/sda1 &amp;gt; /dev/sda2&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;# dd if=/dev/sda1 of=backup , dd if=backup of=/dev/sda2&lt;br /&gt;&lt;br /&gt;Other is backup image of HDD through "tar".&lt;br /&gt;&lt;br /&gt;# cd /&lt;br /&gt;# tar cvpjf backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/media --exclude=/sys /&lt;br /&gt;&lt;br /&gt;Then copy this tar into new HDD and extract it.&lt;br /&gt;&lt;br /&gt;# cd $(new_HDD)&lt;br /&gt;#&amp;nbsp;tar xvpjf backup.tar.bz2 -C /&lt;br /&gt;# mkdir proc&lt;br /&gt;# mkdir lost+found&lt;br /&gt;# mkdir mnt&lt;br /&gt;# mkdir sys&lt;br /&gt;# mkdir media&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3613566609735049040?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3613566609735049040/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/untouchable-hdd-noise-on-laptop-as.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3613566609735049040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3613566609735049040'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/untouchable-hdd-noise-on-laptop-as.html' title='Untouchable HDD noise on Laptop as having age.'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3882522038176592651</id><published>2011-09-05T02:34:00.000-07:00</published><updated>2011-09-05T20:27:14.311-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3x3 bitmask'/><category scheme='http://www.blogger.com/atom/ns#' term='thinning'/><title type='text'>3x3 bitmask list sorted by crossing number and pixel count</title><content type='html'>Here is the source code for generating 3x3 bitmask list.&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;br /&gt;&lt;br /&gt;int value_3x3[256][9+2];&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;int i, j, value;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;int crossing = 0, count = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;for (i = 0; i &amp;lt; 256; i++) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;value_3x3[i][0] = '*';&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;for (j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;if (i &amp;amp; (1 &amp;lt;&amp;lt; j)) value_3x3[i][j+1] = '*';&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;else value_3x3[i][j+1] = '=';&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;crossing = 0;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count = 0;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;value = value_3x3[i][8];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;for (j = 1; j &amp;lt;= 8; j++) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;if (value_3x3[i][j] != value) crossing++;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;if (value_3x3[i][j] == value_3x3[i][0]) count++;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;value = value_3x3[i][j];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;value_3x3[i][9] = crossing;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;value_3x3[i][10] = count;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;for (crossing = 0; crossing &amp;lt;= 8; crossing += 2) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;for (count = 0; count &amp;lt;= 8; count++) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;for (i = 0; i &amp;lt; 256; i++) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;if (value_3x3[i][9] == crossing &amp;amp;&amp;amp; value_3x3[i][10] == count) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;printf("%c%c%c\n", value_3x3[i][4], value_3x3[i][3], value_3x3[i][2]);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;printf("%c%c%c %d %d\n", value_3x3[i][5], value_3x3[i][0], value_3x3[i][1], value_3x3[i][9], value_3x3[i][10]);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;printf("%c%c%c\n", value_3x3[i][6], value_3x3[i][7], value_3x3[i][8]);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;printf("\n");&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And then the sorted list is here.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;3x3 bitmask, crossing number, pixels equal to center&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;-------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ndVlL1XgqBY/TmWTAH6yNvI/AAAAAAAAAYg/wUeuFW8MqIo/s1600/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="441" src="http://4.bp.blogspot.com/-ndVlL1XgqBY/TmWTAH6yNvI/AAAAAAAAAYg/wUeuFW8MqIo/s640/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3882522038176592651?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3882522038176592651/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/3x3-bitmask-list-sorted-by-crossing.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3882522038176592651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3882522038176592651'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/3x3-bitmask-list-sorted-by-crossing.html' title='3x3 bitmask list sorted by crossing number and pixel count'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ndVlL1XgqBY/TmWTAH6yNvI/AAAAAAAAAYg/wUeuFW8MqIo/s72-c/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3478354828615665388</id><published>2011-09-01T22:12:00.000-07:00</published><updated>2011-09-01T22:38:30.595-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='acpi'/><category scheme='http://www.blogger.com/atom/ns#' term='asus 1215t'/><category scheme='http://www.blogger.com/atom/ns#' term='hdparm'/><category scheme='http://www.blogger.com/atom/ns#' term='apm'/><title type='text'>To remove clicking configuration of hdparm in Asus 1215t debian system</title><content type='html'>1. edit /etc/hdparm.conf&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;/dev/sda&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;apm = 255&lt;br /&gt;&amp;nbsp; &amp;nbsp;spindown_time = 0&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dma = on&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. edit /etc/apm/event.d/20hdparm&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;APMD_DRIVES=sda&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;power_performance ()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; # Disable IDE hard disk spindown.&lt;br /&gt;&amp;nbsp; &amp;nbsp; for DRIVE in $APMD_DRIVES; do&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; "${HDPARM}" -q -S 0 -B 254 "${DRIVE}" || true&lt;br /&gt;&amp;nbsp; &amp;nbsp; done&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;3. edit /etc/acpi/fglrx-powermode.sh&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;for dev in /dev/sd? /dev/hd? ; do&lt;br /&gt;&amp;nbsp; &amp;nbsp;if [ -b $dev] ; then&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # Check for APM support; discard errors since not all drives&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # support HDIO_GET_IDENTITY (-i).&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if /sbin/hdparm -i $dev 2&amp;gt; /dev/null | grep -q 'AdvancedPM=yes' ; then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ -f /sys/class/power_supply/AC0/online ] &amp;amp;&amp;amp; [ grep -q '1'&amp;nbsp;/sys/class/power_supply/AC0/online&amp;nbsp;]; then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /sbin/hdparm -B 254 $dev&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /sbin/hdparm -B 128 $dev&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;br /&gt;&amp;nbsp; &amp;nbsp;fi&lt;br /&gt;done&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3478354828615665388?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3478354828615665388/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/to-remove-clicking-configuration-of.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3478354828615665388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3478354828615665388'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/to-remove-clicking-configuration-of.html' title='To remove clicking configuration of hdparm in Asus 1215t debian system'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7271714653222245355</id><published>2011-09-01T21:41:00.000-07:00</published><updated>2011-09-01T21:41:40.496-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hdparm'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>[번역] hdparm - 완벽 가이드 (hdparm - complete guide)</title><content type='html'>출처 :&amp;nbsp;&lt;a href="http://forums.debian.net/viewtopic.php?t=32794"&gt;http://forums.debian.net/viewtopic.php?t=32794&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이글의 목적은 당신의 하드 디스크의 load cycle(하드 디스크의&lt;br /&gt;clicking 음이 반복되어 나타나게 되는 원인)을 조절하기 위한 매개변수를 설정하는 것이다. 이를 통해서 laptop이나 desktop에서 불필요한 하드의 헤드의 정차(하드 디스크의 끍는 소리는 이 헤드의 정차음이다)를 멈출 수 있다. &amp;nbsp;그러나 이렇게 설정하더라도 베터리로 동작할때 laptop이 헤드의 정차를 하도록 한다.&lt;br /&gt;&lt;br /&gt;그레서 나는 사람들이 작성한 스크립트를 이용한 방법을 전혀 사용하지 않았다. 여러분은 이 화면에 있는 것들을 복사해서 사용해야 할 것이다. 대신 약 1년쯤 전에 여러분이 지지하는 방식의 방법을 찾았다. 나는 항상 모두 공유하고 싶지만 워낙에 게을러서. 지금은 작업을 밀어붙이고 있으며 진작에 이것을 공유하지 않은 것에 대해서 자책하고 있다. 나는 여러분이 이 방법을 온라인상에서 찾아 볼 수 있을지 어떨지는 잘 모르겠다. howto 문서와 떨어져 있기 때문에 그러나 여러분은 검색을 통해서 찾아 볼 수 있다.&lt;br /&gt;&lt;br /&gt;그리고 문서 작성하면서 기억해 낸 것인데 한가지 주의할 점은 255의 apm 순위는 어떤 컴퓨터에서는 작동하지 않는다. 여러분이 이 값으로 254를 사용하지 않는다면 모든 것은 기본적으로 동일하다.&lt;br /&gt;&lt;br /&gt;1. 여러분은 repos(패키지 저장소)로 부터 구할 수 있는 hdparm, sysvconfg, smartmontools를 설치해야한다.&lt;br /&gt;&lt;br /&gt;2. hdparm 이 로그인시 시작되는지 확인하자. sysvconfg를 실행하고 hdparm을 enable시키면 로그인시 자동으로 시작된다.&lt;br /&gt;&lt;br /&gt;3. 그럼 여기서 내가 다르게 접근한 약간의 것들이 필요하다. 여러분이 직접 수정해야할 몇개의 파일들이 있다. 로그인시 로드되거나 이미 존재하는 hdparm의 config 파일과 약간의 스크립트가 필요하다. 그래서 여러분은 정확한 정보를 그들에게 알려주어야한다.&lt;br /&gt;&lt;br /&gt;3.1. /etc/hdparm.conf 수정&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;/dev/${your hard drive name}&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;apm = 254&lt;br /&gt;&amp;nbsp; &amp;nbsp;spindown_time = 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;dma = on&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;3.2. 기타 파일 작성&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# cd /etc/apm/event.d&lt;br /&gt;# ls&lt;br /&gt;# nano 20hdparm&lt;br /&gt;&lt;br /&gt;그저 간단하다. 다음 몇 줄을 추가하자.&lt;br /&gt;&lt;br /&gt;APMD_DRIVES=sda &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;##Again put YOUR device&lt;br /&gt;&lt;br /&gt;그런 다음 스크립트가 동작하도록 편집하자.&lt;br /&gt;&lt;br /&gt;power_performance ()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; # Disable IDE hard disk spindown.&lt;br /&gt;&amp;nbsp; &amp;nbsp; for DRIVE in $APMD_DRIVES; do&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; "${HDPARM}" -q -S 0 -B 255 "${DRIVE}" || true&lt;br /&gt;&amp;nbsp; &amp;nbsp; done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;기본적으로 여러분은 AC 전원일때 loading/unloading cycles을 얻을 수 없다.&lt;br /&gt;&lt;br /&gt;3.3. 마지막 단계.&lt;br /&gt;&lt;br /&gt;ACPI 전원 관리를 위한 것이다.&lt;br /&gt;&lt;br /&gt;# cd /etc/acpi/ac.d&lt;br /&gt;# ls&lt;br /&gt;# nano 90-hdparm.sh &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;## or whatever ls shows you&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;for dev in /dev/sd? /dev/hd? ; do&lt;br /&gt;&amp;nbsp; &amp;nbsp; if [ -b $dev ] ; then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # Check for APM support; discard errors since not all drives&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # support HDIO_GET_IDENTITY (-i).&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if hdparm -i $dev 2&amp;gt; /dev/null | grep -q 'AdvancedPM=yes' ; then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ $STATE = "BATTERY" ] ; then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hdparm -B 128 $dev&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hdparm -B 255 $dev&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;br /&gt;&amp;nbsp; &amp;nbsp; fi&lt;br /&gt;&amp;nbsp; done&lt;br /&gt;fi&lt;br /&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3.4. reboot후 확인하기&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#&amp;nbsp;smartctl -a /dev/sda | grep Load_Cycle_Count&lt;/div&gt;&lt;div&gt;#&amp;nbsp;smartctl -a -d ata -i /dev/sda | grep Load_Cycle_Count&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이 명령은 94116이라는&amp;nbsp;다섯 자리의 숫자를 제공할 것이다. 몇 분후에 다시 해보자. 숫자는 같아야 한다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그리고 몇일 후에 알아낸 것인데 내 컴퓨터의 경우 hdparm이 suspend후 resume되었을대 작동되지 않는다. 이경우 나는 다음과 같이 수동으로 사용한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# hdparm -B 254 -S 0 /dev/sda&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7271714653222245355?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7271714653222245355/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/hdparm-hdparm-complete-guide.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7271714653222245355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7271714653222245355'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/09/hdparm-hdparm-complete-guide.html' title='[번역] hdparm - 완벽 가이드 (hdparm - complete guide)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3605726955544624805</id><published>2011-08-30T22:48:00.000-07:00</published><updated>2011-08-30T22:48:41.122-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Square Root'/><title type='text'>Square Root of Complex Number</title><content type='html'>As before, r = sqrt(a * a + b * b)&lt;br /&gt;&lt;br /&gt;sqrt(a + J*b)&lt;br /&gt;&amp;nbsp;= sqrt(r) * (sqrt((1 + a / r) / 2) (+ or -) J * sqrt((1 - a / r) / 2))&lt;br /&gt;&amp;nbsp;= sqrt((r + a) / 2) (+ or -) J * sqrt((r - a) / 2)&lt;br /&gt;&amp;nbsp;= sqrt((sqrt(a * a + b * b) + a) / 2) (+ or -) J * sqrt((sqrt(a * a + b * b) - a) / 2)&lt;br /&gt;&lt;br /&gt;caution ! (+ or -) should be chosen to be the same as the sign of b&lt;br /&gt;&lt;br /&gt;example:&lt;br /&gt;&lt;br /&gt;sqrt(3 - J * 2) = sqrt((sqrt(3 * 3 + 2 *2) + 3) / 2) - J * sqrt((sqrt(3 * 3 + 2 * 2) - 3) / 2)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3605726955544624805?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3605726955544624805/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/square-root-of-complex-number.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3605726955544624805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3605726955544624805'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/square-root-of-complex-number.html' title='Square Root of Complex Number'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3386509316398320328</id><published>2011-08-23T00:14:00.000-07:00</published><updated>2011-08-23T00:17:12.475-07:00</updated><title type='text'>정부, 삼성, LG의 독자 OS 개발에 대한 생각</title><content type='html'>아마 예전에도 있었던 행태가 아닌가 기억한다. 보도에서 600억이라는 금액을 투자한다고 하는데 우선 드는 생각이 연구비 사냥꾼에 좋은 먹이감이 아닌가 생각이 든다. 누군가의 펀딩 욕심이거나 누군가의 실적올리기용 꼼수이 아닌가 한다.&lt;br /&gt;&lt;br /&gt;아이폰에서 안드로이드폰으로 이어지는 OS 와 제조사의 결합이 이루어 졌다. 뭐 그렇다고 안드로이드가 개방정책을 철회하는것은 아니지만 (혹 그럴지도 모른다) 이&amp;nbsp;결합에 많이들 걱정하는 것 같다. 뭐 사용자 입장에서 나쁜 것 보다 좋은 점이 더 많다. 우후 죽순처럼 양산되는 완벽하지 못한 안드로이드 폰들을 사용하는 것보다 잘 정돈된 안드로이드폰이 훨씬 쓸만 하니깐. 그런 의미에서 삼성과 LG는 안드로이드 OS자체를 자신의 용도에 맞게 고쳐 쓸 수 있는 혹은 수정할 수 있는 인력의 확보가 더 중요할 지도 모른다. 한 발 더 나아가서 안드로이드 OS에서 파생되는 자체 OS를 개발 할 수도 있다. 안드로이드의 OS의 라이센스를 잘 모르겠지만 물리적으로 얼마든지 가능하다.&lt;br /&gt;&lt;br /&gt;그렇지 않고 이 두 OS와 경쟁하기 위해서 지금 당장 처음부터 개발한다는 것은 무모하다. 일정 수준의 완성도를 갖기 위해서 두 회사가 거쳐온 기간과 자금, 지금 현재 유지, 보수되고 있는 노력들을 살펴보면 이해가 쉽다. 만약 안드로이드의 라이센스정책이 그러한 파생 OS를 허용하지 않거나 공개를 철회할 경우,&amp;nbsp;비슷한 부류의 GNU프로젝트에 투자를 한다던가 개발자를 고용해서 그 프로젝트에 기여하는 방식을 생각해 볼 수 있다. 물론 GPL 라이센스 형식으로 말이다. 그게 유지, 보수 및 개발에 훨씬 유리할 지도 모른다. 안드로이드의 태생도 이러한 방식의 소프트웨어를 기반으로 탄생한 것이었으니깐 말이다.&amp;nbsp;물론 사적이익 창출이 목표인 삼성이나 LG에서 못마땅 할 수 있지만 공공의 이익을 생각하는 정부 입장에서는 충분히 고려해 볼만한 가치가 있다. 반면 삼성이나 LG의 입장에서는&amp;nbsp;노키아에 팽당한 인텔의 MiGO프로젝트에 참여하는 방식도 충분히 고려해 볼만한 사항이다. RIM이나 HP를 염두해 두는 목소리도 많은데 내가 보기엔 이 둘과 손을 잡으면 지금 현재 상태의 구글과의 관계보다 더 어려울 수 있다. 이미 OS와 제조를 다 가지고 있기 때문이다.&lt;br /&gt;&lt;br /&gt;사용자들은 아무런 걱정을 할 필요가 없다 좋은 것만 잘 골라서 쓰기만 하면된다. 개발자들도 마찬가지로 편한 환경을 골라서 개발하면 아무 문제 없다. 그저 이익이 줄어들어서 걱정하는 삼성과 LG가 문제이지. 그리고 안드로이드가 이상해 지더라도 걱정할 것 없다. 비슷한 목표를 가진 GNU프로젝트는 얼마 든지 많으니깐 당장 쓸정도가 아닌지 모르겠지만 스마트폰의 명세만 잘 공개 된다면 그 누군가의 그룹들이 뚝딱뚝딱하면서 쓸모 있게 만들테니깐 자원들은 풍부하다. 안드로이드도 많은 부분 이러한 자원들에 의존하고 있다. 그러니깐 대부분의 사람들은 삼성, LG 걱정할 필요없다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3386509316398320328?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3386509316398320328/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/lg-os.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3386509316398320328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3386509316398320328'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/lg-os.html' title='정부, 삼성, LG의 독자 OS 개발에 대한 생각'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-6062326194804230944</id><published>2011-08-15T08:13:00.000-07:00</published><updated>2011-08-15T08:31:39.067-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GLUT'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL'/><title type='text'>OpenGL 프로그래밍에 대해서</title><content type='html'>OpenGL은 하드웨어 독립적인 2D/3D 그래픽 라이브러리이다. SGI사의 IRIS GL라이브러리를 기초로 개발되었지만 개방형이다. 그래픽 라이브러리이기 때문에 기본적인 창관리와 입력처리에 대한 부분이 없다. 그래서 GLUT이라는 보조 도구를 이용해서 창을 관리하고 입력을 관리하는 방법을 제공한다. 이것도 역시 시스템 독립적이기 때문에 OpenGL과 GLUT의 조합이면 어떤 시스템에서도 동일한 결과를 갖는 프로그램을 개발 할 수 있다.&lt;br /&gt;&lt;br /&gt;GLUT: OpenGL 유틸리티 툴킷을 줄인 말인 것 같다. 내부에 많은 상태 변수들을 관리하고 있단다. 간단히 초기화하고 창에 점과 선만 그릴 수 있었음 만족한다. 간단히 초기화 하는 법은 다음과 같다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;gl glut.h=""&gt;&amp;nbsp;&lt;/gl&gt;&lt;br /&gt;&lt;br /&gt;void MyIdle(void)&lt;br /&gt;{ &lt;br /&gt;&amp;nbsp; &amp;nbsp;/* 사용된 변수값을 다음 프레임의 상태로 수정해 주는부분*/ &amp;nbsp;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void MyDisplay(void)&lt;br /&gt;{ &lt;br /&gt;&amp;nbsp; &amp;nbsp;/* 프레임에 실제 그림을 그리는 OpenGL명령어들이 들어간다. */ &lt;br /&gt;&amp;nbsp; &amp;nbsp;/* 프레임이 다 그려진 다음 버퍼를 교체한다. */ &lt;br /&gt;&amp;nbsp; &amp;nbsp;glutSwapBuffers(); &lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void main(int argcp, char **argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;/* GLUT상태를 초기화 한다. */ &lt;br /&gt;&amp;nbsp; &amp;nbsp;glutInit(&amp;amp;argcp, argv); &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;glutInitWindowSize(640, 480); &lt;br /&gt;&amp;nbsp; &amp;nbsp;glutInitWindowPosition(0, 0);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;/* 창을 연다. */ &lt;br /&gt;&amp;nbsp; &amp;nbsp;glutCreateWindow("My OpenGL Application");&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;/* 디스플레이모드를 선택한다.: &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 이중버퍼 &amp;amp; RGBA색상 */ &lt;br /&gt;&amp;nbsp; &amp;nbsp;glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;/* 콜백함수들을 등록한다. */ &lt;br /&gt;&amp;nbsp; &amp;nbsp;glutDisplayFunc(MyDisplay) &lt;br /&gt;&amp;nbsp; &amp;nbsp;glutIdleFunc(MyIdle)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;/* 이벤트 처리엔진을 시작한다 */ &lt;br /&gt;&amp;nbsp; &amp;nbsp;glutMainLoop(); &lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-6062326194804230944?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/6062326194804230944/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/opengl.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6062326194804230944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/6062326194804230944'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/opengl.html' title='OpenGL 프로그래밍에 대해서'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7887412422797027682</id><published>2011-08-07T09:27:00.000-07:00</published><updated>2011-08-07T09:27:33.122-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Camera'/><title type='text'>카메라 신호 분석하기</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: justify;"&gt;카메라 센서 설정을 보게 되면 Active High혹은 Active Low라는 설정이 있다. 회사마다 다르겠지만, 아래의 두가지 경우를 설정하는 방식을 다양하게 제공하고 있을 꺼다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&amp;nbsp;설명하자면 바로 아래의 사진은 Active Low로 설정된 HREF신호이다. 초기 상태는 이와 같은 상태 일 것이다. 대부분이. HREF신호가 Rising edge로의 변경은 PCLK의 Low edge에서 발생한다. 즉 PCLK 의 rising edge에서 화소값을 읽어 들이면 된다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xprCbmKqfo0/Tj67GYU6rBI/AAAAAAAAAYI/P1yDyjAcOwg/s1600/activelowPCLK.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-xprCbmKqfo0/Tj67GYU6rBI/AAAAAAAAAYI/P1yDyjAcOwg/s320/activelowPCLK.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;이와는 반대로 Active High는 정반이다. 마찬가지로 HREF신호의 HIGH상태로의 전이는 PCLK의 Rising Edge에서 잃어난다. 그럼 동일한 방식으로 화소값은 Falling edge에서 읽어 들이면 된다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-lMV02kTAgDU/Tj67G8OA2mI/AAAAAAAAAYM/a9Bt0anel5A/s1600/activehighMCLK.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-lMV02kTAgDU/Tj67G8OA2mI/AAAAAAAAAYM/a9Bt0anel5A/s320/activehighMCLK.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;문제는 무엇이냐 하면 둘 중 어떤 것으로 설정해도 화면은 나온다. 읽어 들이는 시점이 이전 상태를 읽어 들여서 문제지. 이상하게 좌측에 검은 줄이 생긴다면 의심해 볼 필요가 있다. Active Low 인지 High인지 읽어 들이는 시점은 정확한지.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7887412422797027682?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7887412422797027682/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post_9406.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7887412422797027682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7887412422797027682'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post_9406.html' title='카메라 신호 분석하기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-xprCbmKqfo0/Tj67GYU6rBI/AAAAAAAAAYI/P1yDyjAcOwg/s72-c/activelowPCLK.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-5876544747455299372</id><published>2011-08-07T09:15:00.000-07:00</published><updated>2011-08-07T09:15:30.992-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='산책'/><title type='text'>비오는 날</title><content type='html'>비가 와서 산책은 하고 싶고 산에는 못가도 언덕 비슷한 것은 가고 싶다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-w9y6bzhGaV0/Tj65sElL2WI/AAAAAAAAAYA/isytfPM5fW0/s1600/%25EC%2582%25AC%25EC%25A7%2584110625_000.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-w9y6bzhGaV0/Tj65sElL2WI/AAAAAAAAAYA/isytfPM5fW0/s400/%25EC%2582%25AC%25EC%25A7%2584110625_000.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;비가 많이 와도 나무가 어느 정도 막아 주었다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Y4yNnobpr9E/Tj65skTtwkI/AAAAAAAAAYE/CAv1Z4j6r38/s1600/%25EC%2582%25AC%25EC%25A7%2584110625_001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-Y4yNnobpr9E/Tj65skTtwkI/AAAAAAAAAYE/CAv1Z4j6r38/s400/%25EC%2582%25AC%25EC%25A7%2584110625_001.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;이 곳을 내려가면 산에 바짝 붙은 아담한 집이 있다. 보기엔 좋은데 왕래하는 사람이 많아져서 실상 좋은 집은 아닐꺼다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-5876544747455299372?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/5876544747455299372/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post_7505.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5876544747455299372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5876544747455299372'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post_7505.html' title='비오는 날'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-w9y6bzhGaV0/Tj65sElL2WI/AAAAAAAAAYA/isytfPM5fW0/s72-c/%25EC%2582%25AC%25EC%25A7%2584110625_000.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1504590942970895655</id><published>2011-08-07T09:10:00.000-07:00</published><updated>2011-08-07T09:10:42.450-07:00</updated><title type='text'>밤깍는 기계</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="https://lh5.googleusercontent.com/-y9BHQI7HvuI/Tj63JpPceQI/AAAAAAAAAX8/XRqQxiIIGJY/s1600/%25EB%258F%2599%25EC%2598%2581%25EC%2583%2581101103_000.mp4"&gt;&lt;param name="movie" value="http://video.google.com/googleplayer.swf?videoUrl=http://v1.nonxt4.googlevideo.com/videoplayback?id%3Dfc030e07d3450741%26itag%3D5%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1312754981%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D8C4BB5E112F663117463127063DC4D9C3E69FC3C.1D364FC13DF4DDDAA0D9CB5F22E5CC0F0AED1A21%26key%3Dlh1" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://video.google.com/googleplayer.swf?videoUrl=http://v1.nonxt4.googlevideo.com/videoplayback?id%3Dfc030e07d3450741%26itag%3D5%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1312754981%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D8C4BB5E112F663117463127063DC4D9C3E69FC3C.1D364FC13DF4DDDAA0D9CB5F22E5CC0F0AED1A21%26key%3Dlh1" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;농기계 전시회에서 구경한 것중 가장 유용한 것 아니었나 싶다. 간단하면서 가장 유용한 것이 진리다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1504590942970895655?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1504590942970895655/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post_2574.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1504590942970895655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1504590942970895655'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post_2574.html' title='밤깍는 기계'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7021423623519779031</id><published>2011-08-07T08:50:00.000-07:00</published><updated>2011-08-07T08:50:00.685-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='자전거'/><title type='text'>우기의 자전거 나들이</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&amp;nbsp;장마가 너무나도 길었다. 잠시 소강상태 일때 간만에 열대야가 시작되었을때 방구석에 있는 녀석을 데리고 나갔다. 약간 질퍽하겠거니하고 생각했다. 너무 일찍 나왔다 갯벌 수준이었다. 오자마자 분해 할 수 있는 부분은 분해하고 휠먼저 딱았다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-c9DUZSyUgZo/Tj6zF9XXu0I/AAAAAAAAAXc/IezC2ThgCHs/s1600/%25EC%2582%25AC%25EC%25A7%2584110808_004.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-c9DUZSyUgZo/Tj6zF9XXu0I/AAAAAAAAAXc/IezC2ThgCHs/s400/%25EC%2582%25AC%25EC%25A7%2584110808_004.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;그리고 사무실에 있는 크랭크 분해 공구들을 빌려서 휠 다음으로 더러워진 크랭크를 딱아 주었다.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hJ8zsL1zGGk/Tj6zGeh9JZI/AAAAAAAAAXg/Ww9Yqmk4Kls/s1600/%25EC%2582%25AC%25EC%25A7%2584110808_000.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-hJ8zsL1zGGk/Tj6zGeh9JZI/AAAAAAAAAXg/Ww9Yqmk4Kls/s400/%25EC%2582%25AC%25EC%25A7%2584110808_000.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_NosrJPRsjA/Tj6zGpI41bI/AAAAAAAAAXk/Qw7q3phLJo4/s1600/%25EC%2582%25AC%25EC%25A7%2584110808_001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-_NosrJPRsjA/Tj6zGpI41bI/AAAAAAAAAXk/Qw7q3phLJo4/s400/%25EC%2582%25AC%25EC%25A7%2584110808_001.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-dp1CU-SsGLk/Tj6zHIpGz9I/AAAAAAAAAXo/kyZAzzx-r3o/s1600/%25EC%2582%25AC%25EC%25A7%2584110808_002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-dp1CU-SsGLk/Tj6zHIpGz9I/AAAAAAAAAXo/kyZAzzx-r3o/s320/%25EC%2582%25AC%25EC%25A7%2584110808_002.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;div&gt;지금도 비가 온다. 아무래도 여름내내 이럴거 같다. 느긋하게 생각하고 기다려야지.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7021423623519779031?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7021423623519779031/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post_07.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7021423623519779031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7021423623519779031'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post_07.html' title='우기의 자전거 나들이'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-c9DUZSyUgZo/Tj6zF9XXu0I/AAAAAAAAAXc/IezC2ThgCHs/s72-c/%25EC%2582%25AC%25EC%25A7%2584110808_004.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1471130911590306630</id><published>2011-08-07T08:43:00.000-07:00</published><updated>2011-08-07T08:43:23.356-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADC2USB'/><title type='text'>메모리 이식 ㅋㅋ</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: justify;"&gt;처음엔 메모리가 필요없다고 느꼈다. 심지어는 USB 전용 칩같은건 필요없다고 생각해서 MCU에 딸려 있는 USB를 그냥 사용할 목적으로 사용했었다. 모든 게 잘못된 생각이었다. 결국은 MCU가 CPLD로 바뀌고 USB전용 칩을 달아야만 했다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-IH5NuhS_Fd0/Tj6xXuupEOI/AAAAAAAAAXU/HREOwfaVypg/s1600/%25EC%2582%25AC%25EC%25A7%2584101002_002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-IH5NuhS_Fd0/Tj6xXuupEOI/AAAAAAAAAXU/HREOwfaVypg/s400/%25EC%2582%25AC%25EC%25A7%2584101002_002.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;하지만 그래도 여전히 부족했다. 그래서 추가적으로 SRAM을 달고 CPLD에 코딩이 추가되었다. 결국은 동작하였지만, 여전히 불안하다. 도망가고 싶을 정도로 걱정 스럽다. 그래도 시간이 지나 니깐 해보아야 겠구나 하는 곳들이 생겨난다. 그냥 들여다 보고 스트레스 받지 말고 멀리서 보자. 이젠 하드웨어는 해볼데로 해보았으니 소프트웨어를 점검해 봐야 겠다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1471130911590306630?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1471130911590306630/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1471130911590306630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1471130911590306630'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/08/blog-post.html' title='메모리 이식 ㅋㅋ'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-IH5NuhS_Fd0/Tj6xXuupEOI/AAAAAAAAAXU/HREOwfaVypg/s72-c/%25EC%2582%25AC%25EC%25A7%2584101002_002.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7942771141731211556</id><published>2011-07-29T06:07:00.000-07:00</published><updated>2011-07-31T05:25:49.770-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='5 각형'/><category scheme='http://www.blogger.com/atom/ns#' term='pentagon'/><category scheme='http://www.blogger.com/atom/ns#' term='Geodesic dome'/><title type='text'>5각형으로 만든 돔 (Geodesic dome)</title><content type='html'>조명 장치와 카메라를 여러대 달려고 구상중 아크릴판을 통짜로 가공하는 방식은 너무나도 번거롭고 모양의 변형이 많다.&lt;br /&gt;&lt;br /&gt;그래서 구조적으로 견고하고 일정한 반경의 돔을 간단한 기초 작업으로 쉽게 만드는 방법을 찾던 중 pentagon(5각형)으로 암실 돔을 구성하면 어떨까? 하고 찾아 보았다. 외국에서는 과학 캠프나 실습차원에서 많이 하는 것 같다. 나도 예전에 서울 대공원에서 본 것 같은 기억이 있다. 가본지 너무 오래 되어서 아마도 거기 입장료가 좀 쎘었던거 같다.&lt;br /&gt;&lt;br /&gt;아무튼&amp;nbsp;&lt;a href="http://hilaroad.com/camp/projects/dome/domemath.html"&gt;http://hilaroad.com/camp/projects/dome/domemath.html&lt;/a&gt;&amp;nbsp;에 가보면 원하는 직경의 Geodesic 돔을 구성할 수 있는 계산을 할 수 있게 해준다. 다음에는 이것을 번역해 보아야 겠다. 위와 같은 것을 레고 처럼 구성할 수 있다면 조명과 카메라를 자유 자재로 안정적인 위치에 고정 시킬 수 있을 거 같다.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Hila Science Camp&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Dome Math&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Geodesic Domes&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZL4ct-HFZOk/TjLptYrprrI/AAAAAAAAAV8/0WEwTKWls28/s1600/trnsdm.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ZL4ct-HFZOk/TjLptYrprrI/AAAAAAAAAV8/0WEwTKWls28/s1600/trnsdm.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;돔을 만드는 사람들은 이러한 방식의 돔을&amp;nbsp;&lt;b&gt;2V Icosa Alternate&amp;nbsp;&lt;/b&gt;라고 부른다. &amp;nbsp;&lt;b&gt;icosahedron&lt;/b&gt;의 각 삼각형 표면안에 딱 맞는 4개의 삼각형에 의해서 만들어 진다.&amp;nbsp;icosahedron란 뭔가?&amp;nbsp;icosahedron는 고대 그리스인들에 의해서 만들어진 5개의 구조물(solids) 중의 하나이다. 이것이 그들 5개이다:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-E_buMiIeLOM/TjUAq8fStZI/AAAAAAAAAXA/xKY7ZZy9V4s/s1600/solids.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="69" src="http://2.bp.blogspot.com/-E_buMiIeLOM/TjUAq8fStZI/AAAAAAAAAXA/xKY7ZZy9V4s/s320/solids.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;어떻게 이름 지어졌을까? 우측 맨 끝이 icosahedron이다. 이것은 20의 삼각형 면을 가지고 있다.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;여러분이 정말로 정말로 알고 싶다면, 다음의 링크를 따라가서 어떻게 삼각형이&amp;nbsp;icosahedron의 각각의 삼각형에 맞아 떨어지는지 알아 볼 수 있다.&amp;nbsp;-&amp;nbsp;&lt;b&gt;&lt;a href="http://hilaroad.com/camp/projects/dome/dome1.html"&gt;Icosahedron Domes Explained!&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;맨 위에서 보여주는 것과 같은 돔을 만들기 위해서, 여러분은 40개의 삼각형, 30개의&amp;nbsp;isosceles 삼각형, 그리고&amp;nbsp;10 equilateral 삼각형을 만들어야 한다.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;돔을 디자인해 봅시다!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;1단계:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;여러분이 만들고자하는 돔의 직경을 결정하자. 우선 작은 30cm정도의 직경을 갖는 작은 모델을 만들어 보자.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;2단계:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;필요한 삼각형의 크기를 결정하자. 우리가 만들어야할 삼각형은 각면에 접착용 탭이 필요하다. 다음과 같이 생겼다:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ksEdBweMjVc/TjLpszC48AI/AAAAAAAAAV4/gL5Vz2J_HJI/s1600/trianglem.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" src="http://2.bp.blogspot.com/-ksEdBweMjVc/TjLpszC48AI/AAAAAAAAAV4/gL5Vz2J_HJI/s320/trianglem.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;10개의equilateral 삼각형은 각 면이 "A" 길이로 같다. "A"를 결정하기 위해서&amp;nbsp;"&lt;b&gt;Chord Factor&lt;/b&gt;" 라고 불리는&amp;nbsp;숫자를 사용한다.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;"&lt;b&gt;A&lt;/b&gt;"를 위한&amp;nbsp;chord factor는&amp;nbsp;&lt;b&gt;0.61803&lt;/b&gt;. "A"의 길이를 결정하기 위해서 여러분이 디자인한 돔의 반경에 이 chord factor를 곱하자. 반경은 직격의 1/2에 해당한다는 것을 잊지 말자. 지금 디자인하는 돔은 직경이 30cm이고 반경은 15cm이다.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;A = 돔의 반경 x 0.61803&lt;br /&gt;A = 15 cm x 0.61803&lt;br /&gt;A = 9.27045 cm&lt;br /&gt;A=9.27 cm&lt;br /&gt;&lt;/center&gt;&lt;center&gt;&lt;br /&gt;&lt;/center&gt;30 isosceles 삼각형은 한 면이 "A"이고, 두 면은 "B"이다. "A"값은 9.27cm으로 알려져 있고, "B"를 계산하기 위해서 우리는 다른 chord factor를 사용한다. "B"를 위한 chord factor는 0.54653이다.&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;B = 돔의 반경 x 0.54653&lt;br /&gt;B = 15 cm x 0.54653&lt;br /&gt;B = 8.19795 cm&lt;br /&gt;B = 8.20 cm&lt;/center&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;3단계:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;이 돔을 구성하기 위해서 "A"와 "B"값으로 구성된 삼각형 요소들을 만들어야 한다. 단단한 cardboard위에 30cm 직경의 원을 그리고 다음 링크의 내용을 따라하도록 하자.&lt;b&gt;&lt;a href="http://hilaroad.com/camp/projects/dome/dome.html"&gt;&amp;nbsp;instructions for constructing the&amp;nbsp; 50 cm dome.&lt;/a&gt;&lt;/b&gt;&lt;b&gt;어떤 크기의 돔이라도 만들 수 있다. 그저 반경에 chord factor만 곱하면 된다. 그리고 나서 조립하는 순서만 따라하면 된다.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;이 페이지는 &amp;nbsp;&lt;a href="http://hilaroad.com/"&gt;Hila Science Camp: http://hilaroad.com&lt;/a&gt;&amp;nbsp;에 의해서 만들어 졌습니다.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;출처 :&amp;nbsp;&lt;/b&gt;&lt;a href="http://hilaroad.com/camp/projects/dome/domemath.html"&gt;http://hilaroad.com/camp/projects/dome/domemath.html&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;돔 조립하기&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Geodesic dome들은 우아하고 정교한 구조물이다. 가벼운 무게와 강인함으로 인해서 재료를 아주 효율적으로 사용하도록 만든다. 북극과 같은 먼 지역에서 사용하기에 이상적인 구조다. 언젠가 달이나 covering(?) 도시에서 돔 구조물을 볼지도 모른다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;이 사이트는 종이로 geodesic dome을 만드는 과정을 차례차례로 제공한다. 그 내용은 다른 크기의 dome을 디자인할 수 있는 것도 포함한다.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;이 프로젝트는 많은 지방과 주에서의 과학과 기술 교과 과정의 구조와 매커니즘 부분을 지원한다. 교과 과정의 목표는 geodesic dome이나 shell 구조물을 구축하는 것을 종종 포함한다. geodesic dome은 독특한 구조에서 생기는 응측력과 팽창력을 보여준다. 여러분은 다양한 재질로된 geodesic dome을 구축할 수 있다. 지금의 dome은 종이로 구축될 것이다. 다른 크기의 dome을 구축하기 위해선 여기서 제시된 디자인 개념을 사용하고 Bristol 보드나 골판지, plywood 심지어는 얼음과 같은 재료로도 도전해 보자!&lt;br /&gt;&lt;br /&gt;6, 7 학년의 학생에 대해서 어떤 교사들은 활기차고 화려한 조작으로 변화 시켜서 이 같은 활동을&amp;nbsp;미술 시간과 결합하기도 한다.&lt;br /&gt;&lt;br /&gt;이 프로젝트의 수학적인 부분은 8학년과 9학년의 응용 수학에 아주 적당하다. 응용 수학과 "구조와 매커니즘"에 대한 여러분의 주와 지방의 교과 과정 문서를 확인해보자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Geodesic Dome 구축하기&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Geodesic dome은 Buckminister Fuller에 의해서 대중화 되고 삼각형들의 구조적 접목이 dome이나 shell 구조물의 고유의 강도에 더해 졌다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;다음은 50cm의 직경을 갖는 geodesic dome의 구축하는데 필요한 지시사항들이다. 여러분이 다른 크기의 dome을 만들고자 한다면 다음 링크를 따라하자.&amp;nbsp;&amp;nbsp;-&amp;nbsp;&lt;b&gt;&lt;a href="http://hilaroad.com/camp/projects/dome/domemath.html"&gt;DOME MATH&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;먼저 아래에 보여진 삼각형들의 정확한 그림을 생성해서 시작해보자. 여러분은 30개의 B-A-B 삼각형과 10개의 A-A-A 삼각형이 필요하다. 이 삼각형으로 만들어진 유닛들은 기본 구성 요소가 된다. 여러분은 이 삼각형들을 정확하기 만들어야 하기 때문에 제시된 수치들은 매우 중요하다. 콤파스와 자를 사용하자. A, B의 수치는 삼각형의 각 면의 길이가 되고 접착면을 위한 tab은 여분이 됨을 주의하자.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-EMQkLIMaSJ4/TjL0RunDdBI/AAAAAAAAAWA/ZA4K4lFIwVU/s1600/triangle.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" src="http://1.bp.blogspot.com/-EMQkLIMaSJ4/TjL0RunDdBI/AAAAAAAAAWA/ZA4K4lFIwVU/s320/triangle.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A-A-A 삼각혀은 equilateral 이라고 하고,&amp;nbsp;B-A-B 삼각형은 isosceles라고 한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;이것은 기하학에서 훌룡한 예제가 된다. 각 삼각형의 요소요소의 정확한 도면을 만들기 위해서 콤파스와 자, 연필로 작업하자.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;각 삼각형의 도면을 그린 후 photo copy만으로 dome을 만드는데 충분하다. 어떤 종류의 종이도 적당하다.&lt;br /&gt;두 가지 색상의 종이를 사용하자. 하나는 A-A-A 삼각형에, 다른 하나는 B-A-B 삼각형에 사용하자. 색상을 다르게 하는 것은 구축을 쉽게하고 여러분의 dome을 좀 더 극적이게 보이도록 만든다.&lt;br /&gt;&lt;br /&gt;나는 이 삼각형들의 도면을 그리고 싶지 않다. 그져 dome을 만들고 싶다!&lt;br /&gt;좋다. 이미 그려진 요소들을 위한 프린트 가능한 페이지에 대한 링크를 따라가라.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="http://hilaroad.com/camp/projects/dome/pdf_images/domeaaa.pdf"&gt;Link to template for A-A-A triangle:&lt;/a&gt;&amp;nbsp;(PDF File)&lt;/h3&gt;&lt;h3&gt;&lt;b&gt;&lt;a href="http://hilaroad.com/camp/projects/dome/pdf_images/domebab.pdf"&gt;Link to template for B-A-B triangle:&lt;/a&gt;&amp;nbsp;(PDF File)&lt;/b&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;주의 사항: 프린트 한후 "A"와 "B"면이 정확한 길이로 프린트 되었는지 확인하라. 모든 프린트가 동일한 해상도 이지는 않다.&lt;br /&gt;&lt;br /&gt;삼각형을 잘라내고 tab 라인을 조심스럽게 접자. 깔끔하게 접는 것이 무엇보다도 중요하다.&lt;br /&gt;다섯개의 A-B-B삼각형을 조합해서 pentagon을 만들자. "B"면을 접착면을 활용해서 접착시키자. 접착용 풀은 이 프로젝트에 아주 적당하다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0puWo0BGLAQ/TjL4d84JIKI/AAAAAAAAAWM/f4iiub4xef8/s1600/2tringle.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-0puWo0BGLAQ/TjL4d84JIKI/AAAAAAAAAWM/f4iiub4xef8/s1600/2tringle.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-q3BcJIADVig/TjL4eajMkkI/AAAAAAAAAWQ/k9654NpNsoQ/s1600/3tringle.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-q3BcJIADVig/TjL4eajMkkI/AAAAAAAAAWQ/k9654NpNsoQ/s1600/3tringle.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;pentagon의 외부 면이 삼각형의 "A" 면이 되도록하는 것을 명심하자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-VkP0o7hAxv8/TjL4ejkiORI/AAAAAAAAAWU/I_r7MxcnIhg/s1600/4apent.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-VkP0o7hAxv8/TjL4ejkiORI/AAAAAAAAAWU/I_r7MxcnIhg/s1600/4apent.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Oe7npuMP6ls/TjL4e--XAfI/AAAAAAAAAWY/R4hM9hWZ6-E/s1600/4pent.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Oe7npuMP6ls/TjL4e--XAfI/AAAAAAAAAWY/R4hM9hWZ6-E/s1600/4pent.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;완성된 pentagon은 위의 이미지와 같게 보여야 한다. 가운데가 쏫아 올라와야 한다. 다섯개의 pentagon을 더 만들자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;판지로 75cm 직경의 원은 만들어서 dome을 위한 바닥을 만들자.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;그리고 그 바닥의 중앙에 50cm 직경의 원은 그리자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;바닥의 중앙의 25cm의 원을 잘라내자. 이것은 dome의 안쪽을 접근할 수 있도록 해줄것이다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OF4oUh2yKMs/TjL6T3dR5CI/AAAAAAAAAWc/h37ftcmV9i0/s1600/1base.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-OF4oUh2yKMs/TjL6T3dR5CI/AAAAAAAAAWc/h37ftcmV9i0/s1600/1base.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3-mQMcDp4bY/TjL6UNeXFVI/AAAAAAAAAWg/MraNHghrrDw/s1600/base_chords.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-3-mQMcDp4bY/TjL6UNeXFVI/AAAAAAAAAWg/MraNHghrrDw/s1600/base_chords.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;중요: 원 주위에 chords의 나열을 조심스럽게 그리자. 각 chord의 길이는 "A"이다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;50cm dome을 위해서 A값은 15.45 cm 이다. 원 주위에 10개의 chord가 완벽하게 들어 맞도록 위치시키자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;이 라인들은 각 삼각형이 어디에 위치해야하는 지를 알려준다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;두개의 pentagon 사이에 하나의 A-A-A 삼각형을 붙여서 두개의 pentagon을 붙이자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;또 다른 삼각형은 다음과 같이 추가하자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MBV__uWK5Jk/TjL8nkDnuoI/AAAAAAAAAWk/l-wYeLWPA_w/s1600/5assembl.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-MBV__uWK5Jk/TjL8nkDnuoI/AAAAAAAAAWk/l-wYeLWPA_w/s1600/5assembl.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;이 완성된 부분의 바닥 부분에 접착제를 붙이고, chords의 한 부분에 각 삼각형의 한 면을 위치시키자.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-6RBWhlxr32w/TjL8oEbEYaI/AAAAAAAAAWo/Bpc0Hjo55iI/s1600/6assembl.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-6RBWhlxr32w/TjL8oEbEYaI/AAAAAAAAAWo/Bpc0Hjo55iI/s1600/6assembl.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-WorvEqqfbqY/TjL8oTyMdWI/AAAAAAAAAWs/_LETmBLnVow/s1600/7assembl.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-WorvEqqfbqY/TjL8oTyMdWI/AAAAAAAAAWs/_LETmBLnVow/s1600/7assembl.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;계속해서 pentagon과 삼각형을 추가하고, 접착제로 이들은 고정시키자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-B3dyOEaYz50/TjL9cm17UdI/AAAAAAAAAWw/tTrOg4ZqmXc/s1600/8assembl.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-B3dyOEaYz50/TjL9cm17UdI/AAAAAAAAAWw/tTrOg4ZqmXc/s1600/8assembl.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-KYZ4lGzra0c/TjL9c9-BHYI/AAAAAAAAAW0/WEaML-98f7w/s1600/9assembl.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-KYZ4lGzra0c/TjL9c9-BHYI/AAAAAAAAAW0/WEaML-98f7w/s1600/9assembl.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;equilateral ( A - A - A ) 삼각형은 맨 꼭대기의 pentagon 사이사이에 붙이자.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;매 꼭대기에 마지막 pentagon을 붙이자.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hg1ZpREeGmE/TjL9dJ2eIAI/AAAAAAAAAW4/jUx0xl0RUOc/s1600/10final.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-hg1ZpREeGmE/TjL9dJ2eIAI/AAAAAAAAAW4/jUx0xl0RUOc/s1600/10final.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hTaWGzc6xBc/TjL9dUnLV4I/AAAAAAAAAW8/JboPGclk2ws/s1600/11final.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-hTaWGzc6xBc/TjL9dUnLV4I/AAAAAAAAAW8/JboPGclk2ws/s1600/11final.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;여러분의 dome은 완성되었다. dome에 관한 것을 더 배우고 싶다면 다음의 링크를 따라가자.&amp;nbsp;&lt;b&gt;&lt;a href="http://hilaroad.com/camp/projects/dome/domemath.html"&gt;&amp;nbsp;Dome Math.&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;이 페이지는 &amp;nbsp;&lt;a href="http://hilaroad.com/"&gt;Hila Science Camp: http://hilaroad.com&lt;/a&gt;&amp;nbsp;에 의해서 만들어 졌습니다.&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;출처 :&amp;nbsp;&lt;/b&gt;&lt;a href="http://hilaroad.com/camp/projects/dome/dome.html"&gt;http://hilaroad.com/camp/projects/dome/dome.html&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;그리고 좀 더 복잡하고 실제적인 내용은 다음 링크를 따라가 보자. 다른 내용도 유용한 것들이 많다. -&amp;nbsp;&lt;a href="http://www.byexample.com/articles/topics/geodesic_domes"&gt;http://www.byexample.com/articles/topics/geodesic_domes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7942771141731211556?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7942771141731211556/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/5-geodesic-dome.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7942771141731211556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7942771141731211556'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/5-geodesic-dome.html' title='5각형으로 만든 돔 (Geodesic dome)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ZL4ct-HFZOk/TjLptYrprrI/AAAAAAAAAV8/0WEwTKWls28/s72-c/trnsdm.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7312572851976161606</id><published>2011-07-29T02:18:00.000-07:00</published><updated>2011-07-31T02:48:09.655-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VCC-F22V39ACL'/><category scheme='http://www.blogger.com/atom/ns#' term='Matrox Imaging'/><category scheme='http://www.blogger.com/atom/ns#' term='Solios eV-CL'/><title type='text'>Matrox Solios eV-CL + MIL-Lite 9.0 + 2 * VCC-F22V39ACL</title><content type='html'>At first, it is necessary to change the configuration from Solios Camera Link Medium to Solios Camera Link Dual Base in Solios under Boards of left tree on Milconfig during unplugged the two camera. and then, reboot system.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-XiMJ_1s9V2o/TjJ7bdXGeDI/AAAAAAAAAVs/k-PRIImov1I/s1600/Matrox+Solios0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://4.bp.blogspot.com/-XiMJ_1s9V2o/TjJ7bdXGeDI/AAAAAAAAAVs/k-PRIImov1I/s320/Matrox+Solios0.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In login time, the system detects Solios eV-CL as a new hardware named by Solios eV-CL Dual 0. And we can select the digitizer in Intellicam.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-87lFGbcG1k0/TjJ7cwVCmdI/AAAAAAAAAVw/bnNJi0JiZek/s1600/Matrox+Solios1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="317" src="http://4.bp.blogspot.com/-87lFGbcG1k0/TjJ7cwVCmdI/AAAAAAAAAVw/bnNJi0JiZek/s320/Matrox+Solios1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And the system totally detects three different new hardware like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AFix4HfGosQ/TjUDZmlNL0I/AAAAAAAAAXE/bmsQzXAXOB8/s1600/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://2.bp.blogspot.com/-AFix4HfGosQ/TjUDZmlNL0I/AAAAAAAAAXE/bmsQzXAXOB8/s320/%25EC%259C%2588%25EB%258F%2584%25EC%259A%25B0+1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In development part, for each camera a digitizer is able to allocated;&lt;br /&gt;&lt;br /&gt;MdigAlloc(MilBoard[0].MilSystem, M_DEV0, DCF_NAME, M_DEFAULT, &amp;amp;MilDigitizer0);&lt;br /&gt;MdigAlloc(MilBoard[0].MilSystem, M_DEV1, DCF_NAME, M_DEFAULT, &amp;amp;MilDigitizer1);&lt;br /&gt;&lt;br /&gt;To control Matrox Solios Camera Link Com Port 0(COM3) and Port 1 (COM4) configuring &amp;nbsp;via MsysControl is better than via Windows API.&lt;br /&gt;&lt;br /&gt;MsysControl(MilBoard[0].MilSystem, M_UART_DATA_LENGTH+M_UART_NB(M_DEV0), 8);&lt;br /&gt;MsysControl(MilBoard[0].MilSystem, M_UART_PARITY+M_UART_NB(M_DEV0), M_DISABLE);&lt;br /&gt;MsysControl(MilBoard[0].MilSystem, M_UART_STOP_BITS+M_UART_NB(M_DEV0), 1);&lt;br /&gt;MsysControl(MilBoard[0].MilSystem, M_UART_SPEED+M_UART_NB(M_DEV0), 9600);&lt;br /&gt;MsysControl(MilBoard[0].MilSystem, M_UART_TIMEOUT+M_UART_NB(M_DEV0), M_INFINITE); // ms&lt;br /&gt;&lt;br /&gt;MsysControl(MilBoard[0].MilSystem, M_UART_DATA_LENGTH+M_UART_NB(M_DEV1), 8);&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;MsysControl(MilBoard[0].MilSystem, M_UART_PARITY+M_UART_NB(M_DEV1), M_DISABLE);&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;MsysControl(MilBoard[0].MilSystem, M_UART_STOP_BITS+M_UART_NB(M_DEV1), 1);&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;MsysControl(MilBoard[0].MilSystem, M_UART_SPEED+M_UART_NB(M_DEV1), 9600);&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;MsysControl(MilBoard[0].MilSystem, M_UART_TIMEOUT+M_UART_NB(M_DEV1), M_INFINITE); // ms&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In serial-communication of VCC-F22V39ACL, the format of serial frame is:&lt;br /&gt;&lt;br /&gt;* Total 14bytes&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-NLgMd0E1-nQ/TjUjs5GDdlI/AAAAAAAAAXI/glmmYS4_4pM/s1600/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="110" src="http://3.bp.blogspot.com/-NLgMd0E1-nQ/TjUjs5GDdlI/AAAAAAAAAXI/glmmYS4_4pM/s400/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;* Function settings&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-uz9c_Ts_BKk/TjUkb0KnhzI/AAAAAAAAAXQ/P3KJzrC9Cb0/s1600/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-uz9c_Ts_BKk/TjUkb0KnhzI/AAAAAAAAAXQ/P3KJzrC9Cb0/s1600/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vw5b0Jrs4sk/TjUkbU7_2JI/AAAAAAAAAXM/H4CN0tEwgY0/s1600/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-vw5b0Jrs4sk/TjUkbU7_2JI/AAAAAAAAAXM/H4CN0tEwgY0/s1600/%25EC%2582%25AC%25EC%259A%25A9%25EC%259E%2590+%25EC%25A7%2580%25EC%25A0%2595+3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7312572851976161606?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7312572851976161606/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/matrox-solios-ev-cl-mil-lite-90-2-vcc.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7312572851976161606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7312572851976161606'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/matrox-solios-ev-cl-mil-lite-90-2-vcc.html' title='Matrox Solios eV-CL + MIL-Lite 9.0 + 2 * VCC-F22V39ACL'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-XiMJ_1s9V2o/TjJ7bdXGeDI/AAAAAAAAAVs/k-PRIImov1I/s72-c/Matrox+Solios0.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-3007363786873622586</id><published>2011-07-28T01:28:00.000-07:00</published><updated>2011-07-28T01:29:11.931-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Trilinear coordinate'/><title type='text'>Trilinear coordination 이란 ?</title><content type='html'>삼각형 ABC에 대한 주어진 어떤 점 P의 trilinear coordinates라고 표현한다. trilinear coordinate를 표현하기 위해선 하나의 삼각형과 하나의 점이 주어져야한다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그럼 trilinear coordinate는 주어진 점 P에서 삼각형의 세 변의 수직거리에 해당하는 α, β, γ의 비로 나타나게 된다. 여기서,&amp;nbsp;α 는 점 P와 변 BC의 수직거리이고,&amp;nbsp;&amp;nbsp;β는 점 P와 변 CA의 수직거리, 그리고&amp;nbsp;&amp;nbsp;γ는 점 P와 변 AB의 수직거리이다.&lt;br /&gt;&lt;br /&gt;이와 같이 α : β : γ는&amp;nbsp;homogeneous coordinates 나 "trilinears"라고 부른다. 그리고 trilinear coordinate는 1835년에 Plücker에 의해서 소개되었다. 간단히 표현해보면 삼각형 ABC의 세 꼭지점에 해당하는 A, B, C는 1:0:0, 0:1:0 그리고 0:0:1의 trilinear coordinate로 표현된다.&lt;br /&gt;&lt;br /&gt;참조 :&amp;nbsp;&lt;a href="http://mathworld.wolfram.com/TrilinearCoordinates.html"&gt;http://mathworld.wolfram.com/TrilinearCoordinates.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-3007363786873622586?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/3007363786873622586/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/trilinear-coordination.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3007363786873622586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/3007363786873622586'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/trilinear-coordination.html' title='Trilinear coordination 이란 ?'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1825983861742788031</id><published>2011-07-27T03:06:00.000-07:00</published><updated>2011-07-27T03:06:04.323-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>리눅스에서 파일 정보 캐시 만들고 빠르게 검색하기</title><content type='html'># updatedb&lt;br /&gt;&lt;br /&gt;# locate $(your_file_name)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1825983861742788031?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1825983861742788031/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/blog-post_3234.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1825983861742788031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1825983861742788031'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/blog-post_3234.html' title='리눅스에서 파일 정보 캐시 만들고 빠르게 검색하기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-1384449606378266486</id><published>2011-07-27T02:54:00.000-07:00</published><updated>2011-07-27T02:56:45.585-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Heron&apos;s formula'/><title type='text'>삼각형의 면적 구하기 (Heron's formula)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-RSq_n1R4WkU/Ti_blCwap5I/AAAAAAAAAVY/wrZcl30sMgA/s1600/area_triangle.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://1.bp.blogspot.com/-RSq_n1R4WkU/Ti_blCwap5I/AAAAAAAAAVY/wrZcl30sMgA/s320/area_triangle.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Heron's formula에 의하면&amp;nbsp;삼각형 ABC의 넓이는 다음과 같다. 단, s는 (a+b+c)/2로 정의한다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-r33feh6mg98/Ti_crwhn7SI/AAAAAAAAAVc/9YP1HFFGyi4/s1600/triangle_area.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-r33feh6mg98/Ti_crwhn7SI/AAAAAAAAAVc/9YP1HFFGyi4/s1600/triangle_area.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;위와 같은 식은 다음과 같이 유도할 수 있다.&lt;br /&gt;&lt;br /&gt;삼각형 ABC를 수직으로 분할하는 두 개의 삼각형에 대한 피타고라스의 정리는 다음과 같은 관계식을 제공한다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nw0KhQPJVW4/Ti_deiG3SGI/AAAAAAAAAVg/cWtSuFL7x0w/s1600/triangle_area1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-nw0KhQPJVW4/Ti_deiG3SGI/AAAAAAAAAVg/cWtSuFL7x0w/s1600/triangle_area1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;그리고 두 수식으로부터 다음과 같은 관계식을 유도할 수 있다.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vMW-GKcFNww/Ti_ePkQa6KI/AAAAAAAAAVk/Z4ENVX9jY6g/s1600/triangle_area2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-vMW-GKcFNww/Ti_ePkQa6KI/AAAAAAAAAVk/Z4ENVX9jY6g/s1600/triangle_area2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;그럼 삼각형 ABC의 넓이는 c*h/2이고 이 넓이의 제곱값은 다음과 같이 전개할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Y5TS1K_nozo/Ti_gCVqTMlI/AAAAAAAAAVo/wWgNE3XqQGk/s1600/triangle_area3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://3.bp.blogspot.com/-Y5TS1K_nozo/Ti_gCVqTMlI/AAAAAAAAAVo/wWgNE3XqQGk/s320/triangle_area3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;그리고 s=(a+b+c)/2로 정의하면 Heron's의 방정식은 증명된다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* By Heron's formula, the area of the triangle&lt;br /&gt;&amp;nbsp; &amp;nbsp;sqrt(s*(s-a)*(s-b)*(s-c)), s: (a+b+c)/2 */&lt;br /&gt;real_t triangle_area(triangle_t *tri)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; real_t s, a, b, c;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(tri);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; a = distance_between_points(tri-&amp;gt;b, tri-&amp;gt;c);&lt;br /&gt;&amp;nbsp; b = distance_between_points(tri-&amp;gt;c, tri-&amp;gt;a);&lt;br /&gt;&amp;nbsp; c = distance_between_points(tri-&amp;gt;a, tri-&amp;gt;b);&lt;br /&gt;&amp;nbsp; s = (a + b + c) / 2;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return sqrt(s * (s - a) * (s - b) * (s - c))&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-1384449606378266486?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/1384449606378266486/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/herons-formula.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1384449606378266486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/1384449606378266486'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/herons-formula.html' title='삼각형의 면적 구하기 (Heron&apos;s formula)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-RSq_n1R4WkU/Ti_blCwap5I/AAAAAAAAAVY/wrZcl30sMgA/s72-c/area_triangle.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-315529990254545900</id><published>2011-07-27T01:29:00.000-07:00</published><updated>2011-10-06T19:28:08.437-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='하드 디스크 딸깍 거림'/><title type='text'>랩탑 시스템에서 하드디스크 끍는 소리 제거하기</title><content type='html'>알려져 있다시피 랩탑용 하드 디스크는 저전력을 위해서 디스크 암이 아무런 작업이 없을때 수시로 초기위치로 되돌아 갔다 트랙으로 갔다를 반복하게 "틱틱틱"하는 소음이 발생한다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;윈도우즈의 경우는 하드디스크 튜닝 프로그램을 항시 상주시켜서 APM(Advanced Power Management)모드를 한단계 아래인 "254"로 설정 시키면 소음이 제거된다고 보고 되고 있다.&lt;br /&gt;&lt;br /&gt;리눅스의 경우는 hdparm이라는 명령어를 적절히 사용하면 동일한 효과를 볼 수 있다.&lt;br /&gt;&lt;br /&gt;# hdparm -B 254 /dev/hda1&lt;br /&gt;&lt;br /&gt;부팅하게 되면 하드 디스크의 APM은 128로 설정되어 있던 것이 위의 명령어 이후에는 254로 설정된다. 이것을 부팅시 254로 영구적으로 설정되도록 하기 위해서 /etc/hdparm.conf파일에 다음과 같은 내용을 추가하자.&lt;br /&gt;&lt;br /&gt;/dev/your-hard-drive {&lt;br /&gt;&amp;nbsp; &amp;nbsp;apm = 254&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;그리고 설정을 바로 적용하기 위해서 다음과 같은 명령어를 실행 시키도록 하자.&lt;br /&gt;&lt;br /&gt;# update-rc.d hdparm defaults&lt;br /&gt;&lt;br /&gt;한가지 더 손바주어야 할 부분은 랩탑의 경우 절전모드나 최대절전모드에서 되돌아 올 경우 하드디스크의 원래의 설정으로 되돌아 가버리기 때문에 /etc/pm/sleep.d/50_hdparm-pm 파일을 만들고 다음과 같은 내용을 추가하자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;if [ -n "$1" ] &amp;amp;&amp;amp; ([ "$1" = "resume" ] || [ "$1" = "thaw" ]); then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hdparm -B 254 /dev/your-hard-drive &amp;gt; /dev/null&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;그리고 실행가능하도록 다음과 같은 명령어를 실행하자.&lt;br /&gt;&lt;br /&gt;# chmod +x /etc/pm/sleep.d/50_hdparm-pm&lt;br /&gt;&lt;br /&gt;별 효과가 없다면 다음과 같은 내용을 갖는 "99-hdd-spin-fix.sh" 스크립트를 생성하자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;# Use a less aggressive hard disk power management to get rid of&lt;br /&gt;# clicking noise when the drive is parking its heads&lt;br /&gt;hdparm -B 254 /dev/sda&lt;br /&gt;&lt;br /&gt;이 스크립트를 &amp;nbsp;/etc/acpi/suspend.d/, /etc/acpi/resume.d/, /etc/acpi/start.d/ 밑에다가 복사하고 실행가능하도록 해주자.&lt;br /&gt;&lt;br /&gt;# chmod +x&amp;nbsp;/etc/acpi/?????.d/99-hdd-spin-fix.sh&lt;br /&gt;&lt;br /&gt;참조 :&amp;nbsp;&lt;a href="http://www.thinkwiki.org/wiki/Problem_with_hard_drive_clicking#Possible_solutions_.28Linux.29"&gt;http://www.thinkwiki.org/wiki/Problem_with_hard_drive_clicking#Possible_solutions_.28Linux.29&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-315529990254545900?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/315529990254545900/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/blog-post_27.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/315529990254545900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/315529990254545900'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/blog-post_27.html' title='랩탑 시스템에서 하드디스크 끍는 소리 제거하기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-8787554694127865753</id><published>2011-07-25T10:03:00.000-07:00</published><updated>2011-07-25T18:58:31.285-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='circumcircle'/><title type='text'>삼각형의 외접원 구하기</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: justify;"&gt;삼각형의 세 꼭지점 A, B, C에 대한 외접원의 반지름 r과 중심점 O는 다음과 같이 구할 수 있다.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6nYPaTAbAGQ/Ti2WW-Wq1eI/AAAAAAAAAVQ/nh-TYkFjxM4/s1600/circumcircle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-6nYPaTAbAGQ/Ti2WW-Wq1eI/AAAAAAAAAVQ/nh-TYkFjxM4/s1600/circumcircle.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;위의 수식에서는 삼각형의 꼭지점 A, B, C의 벡터와 외접원의 중심점 O의 벡터로 표현되었다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-_vVvftnZz3g/Ti2e7ROuQrI/AAAAAAAAAVU/OhIywE0KozQ/s1600/circumcircle1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="223" src="http://1.bp.blogspot.com/-_vVvftnZz3g/Ti2e7ROuQrI/AAAAAAAAAVU/OhIywE0KozQ/s320/circumcircle1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;/* tri : given triangle&lt;br /&gt;&amp;nbsp;* org : the center of circumscribed-circle&lt;br /&gt;&amp;nbsp;* return value : the radius of circumscribed-circle */&lt;br /&gt;real_t triangle_circumcircle(point_t *org, triangle_t *tri)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; real_t area, a, b, c;&lt;br /&gt;&amp;nbsp; real_t alpha, beta, gamma;&lt;br /&gt;&amp;nbsp; point_t *A, *B, *C;&lt;br /&gt;&amp;nbsp; point_t *d1, *d2, *d3;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(org);&lt;br /&gt;&amp;nbsp; assert(tri);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; A = tri-&amp;gt;a, B = tri-&amp;gt;b, C = tri-&amp;gt;c;&lt;br /&gt;&amp;nbsp; area = parallelogram_area_of_3points(A, B, C);&lt;br /&gt;&amp;nbsp; a = distance_between_points(B, C);&lt;br /&gt;&amp;nbsp; b = distance_between_points(C, A);&lt;br /&gt;&amp;nbsp; c = distance_between_points(A, B);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; d1 = point_new();&lt;br /&gt;&amp;nbsp; d2 = point_new();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; point_subtract(d1, A, B);&lt;br /&gt;&amp;nbsp; point_subtract(d2, A, C);&lt;br /&gt;&amp;nbsp; alpha = a * point_dotproduct(d1, d2) / (2 * sqr(area));&lt;br /&gt;&lt;br /&gt;&amp;nbsp; point_subtract(d1, B, A);&lt;br /&gt;&amp;nbsp; point_subtract(d2, B, C);&lt;br /&gt;&amp;nbsp; beta = b * point_dotproduct(d1, d2) / (2 * sqr(area));&lt;br /&gt;&lt;br /&gt;&amp;nbsp; point_subtract(d1, C, A);&lt;br /&gt;&amp;nbsp; point_subtract(d2, C, B);&lt;br /&gt;&amp;nbsp; gamma = c * point_dotproduct(d1, d2) / (2 * sqr(area));&lt;br /&gt;&lt;br /&gt;&amp;nbsp; point_destroy(d2);&lt;br /&gt;&amp;nbsp; point_destroy(d1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; org-&amp;gt;x = alpha * A-&amp;gt;x + beta * B-&amp;gt;x + gamma * C-&amp;gt;x;&lt;br /&gt;&amp;nbsp; org-&amp;gt;y = alpha * A-&amp;gt;y + beta * B-&amp;gt;y + gamma * C-&amp;gt;y;&lt;br /&gt;&amp;nbsp; org-&amp;gt;z = alpha * A-&amp;gt;z + beta * B-&amp;gt;z + gamma * C-&amp;gt;z;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return a*b*c/(2*area);&lt;br /&gt;}&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-8787554694127865753?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/8787554694127865753/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8787554694127865753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8787554694127865753'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/blog-post.html' title='삼각형의 외접원 구하기'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-6nYPaTAbAGQ/Ti2WW-Wq1eI/AAAAAAAAAVQ/nh-TYkFjxM4/s72-c/circumcircle.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-631505528142398020</id><published>2011-07-24T03:26:00.000-07:00</published><updated>2011-07-24T07:06:15.418-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maple'/><category scheme='http://www.blogger.com/atom/ns#' term='Maxima'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Computer Algebra System'/><title type='text'>리눅스 CAS(Computer Algebra System)설치 (Maple같은 수식 전개방식의 수학 프로그램)</title><content type='html'>삼각형의 외접원의 중심점과 반지름을 구하기 위해서 wiki를 검색해 보았다. circumscribed circle, 혹은 circumcenter등으로 너무나도 친절하게도 잘되어 있다. 그런데 하는 김에 3차원으로 되어 있는 것으로 프로그램을 작성해 보고 싶어 직접 수식을 구성해서 해보기로 했다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-LlZguute6PQ/TiwPADwZDsI/AAAAAAAAAUw/NX9W8-ns7_Y/s1600/circumcircle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" src="http://4.bp.blogspot.com/-LlZguute6PQ/TiwPADwZDsI/AAAAAAAAAUw/NX9W8-ns7_Y/s320/circumcircle.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;이와 같이 간혹 수식을 종이에 전개해야할 일들이 종종 있다. 머리와 종이도 아낄겸 예전에 windows에서 사용하던 Maple을 리눅스에서 사용하기 위해서 찾아 보았다.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;두개의 CAS(Computer Algebra System)이 검색되었다. MuPAD와 MAXIMA라는 프로그램이다. 우선은 MuPAD를 설치하기위해서 데비안 리눅스 패키지를 찾아 보았으나 없었다. 보아하니 상용으로 전환하는 수순이가 보다 Mathworks에 넘어가 MATLAB에서 툴박스로 사용할 수 있게 되어 있다. 예전부터 MATLAB에서 수식 전개와 같은 범용 계산이 가능했으면 했는데 이미 사들였던 것이다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그래서 MAXIMA로 눈을 돌렸다. 텍스트 버전도 있고 GUI버전에다가 emacs에서 사용할 수도 있게 제공하는것같다. 무엇보다도 데비안 리눅스 배포본을 착실하게 제공하는 것같다. 우선은 설치해봤다.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Maxima Algebra System&lt;/li&gt;&lt;li&gt;Maxima backend for Cantor&lt;/li&gt;&lt;li&gt;A computer algebra system -- documentation&lt;/li&gt;&lt;li&gt;A computer algebra system -- emacs interface&lt;/li&gt;&lt;li&gt;A computer algebra system -- source code&lt;/li&gt;&lt;li&gt;A computer algebra system -- test suite&lt;/li&gt;&lt;li&gt;A computer algebra system -- base system&lt;/li&gt;&lt;li&gt;A computer algebra system -- extra code&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;여러 개가 다수 존재한다. 우선 Maxima Algebra System만 선택해서 설치하도록 하고 도움 문서와 base system 정도만 선택해서 설치해 보기로 했다. 그랬더니 documentation, source code, test suite, base system, extra code가 같이 설치 되어 버렸다. 우선은 써봐야 겠다.&lt;br /&gt;&lt;br /&gt;프로그램의 교육에 설치가 되어있다. 우선은 삼각형의 외접원의 원점을 구하는 방정식으로 시험해 보기로 했다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jteFdCq8SI8/TiwSmWOWYzI/AAAAAAAAAU0/or9Sst4j5Ww/s1600/circumcircle1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://1.bp.blogspot.com/-jteFdCq8SI8/TiwSmWOWYzI/AAAAAAAAAU0/or9Sst4j5Ww/s320/circumcircle1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;결과는 보았으나 가져다 쓰기가 영 좋지가 못하다. 이것도 감지덕지이긴 하지만.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-631505528142398020?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/631505528142398020/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/cascomputer-algebra-system-maple.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/631505528142398020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/631505528142398020'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/cascomputer-algebra-system-maple.html' title='리눅스 CAS(Computer Algebra System)설치 (Maple같은 수식 전개방식의 수학 프로그램)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-LlZguute6PQ/TiwPADwZDsI/AAAAAAAAAUw/NX9W8-ns7_Y/s72-c/circumcircle.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-8671988430779883287</id><published>2011-07-18T10:03:00.000-07:00</published><updated>2011-08-22T19:04:39.681-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='double linked list'/><title type='text'>Double linked list in c language</title><content type='html'>* data type double linkage&lt;br /&gt;&lt;br /&gt;struct dlink {&lt;br /&gt;&amp;nbsp; void *object;&lt;br /&gt;&amp;nbsp; struct dlink *prev;&lt;br /&gt;&amp;nbsp; struct dlink *next;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;typedef struct dlink dlink_t;&lt;br /&gt;&lt;br /&gt;- object : reference pointer indicating the address for any-type user-data using casting to void type pointer.&lt;br /&gt;- prev : previous pointer for double-linked component&lt;br /&gt;- next : next pointer for double-linked component&lt;br /&gt;&lt;br /&gt;* data type double linked list&lt;br /&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;&amp;nbsp; int count;&lt;br /&gt;&amp;nbsp; dlink_t *head;&lt;br /&gt;&amp;nbsp; dlink_t *tail;&lt;br /&gt;} dlist_t;&lt;br /&gt;&lt;br /&gt;- count : the number of components contained by the list.&lt;br /&gt;- head, tail : the start and end linkage for data- inport and outport.&lt;br /&gt;&lt;br /&gt;----------------------------------- dlink.h -------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;/* Double linked list&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;Copyright 2011 Hoyoung Yi.&lt;hoyoung.yi@gmail.com&gt;&lt;/hoyoung.yi@gmail.com&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;This program is free software; you can redistribute it and/or modify it&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;under the terms of the GNU Lesser General Public License as published by&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;the Free Software Foundation; either version 2 of the License, or&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;(at your option) any later version.&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;This program is distributed in the hope that it will be useful, but&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU Lesser General Public&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;License for more details.&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;You should have received a copy of the GNU Lesser General Public License&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;along with this program; if not, please visit www.gnu.org.&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;*/&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;#ifndef __DLINK_H__&lt;br /&gt;#define __DLINK_H__&lt;br /&gt;&lt;br /&gt;struct dlink {&lt;br /&gt;&amp;nbsp; void *object;&lt;br /&gt;&amp;nbsp; void *private;&lt;br /&gt;&amp;nbsp; struct dlink *prev;&lt;br /&gt;&amp;nbsp; struct dlink *next;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;typedef struct dlink dlink_t;&lt;br /&gt;&lt;br /&gt;dlink_t *dlink_new(void);&lt;br /&gt;void dlink_prepend(dlink_t *obj, dlink_t *at);&lt;br /&gt;void dlink_append(dlink_t *obj, dlink_t *at);&lt;br /&gt;void dlink_cutoff(dlink_t *obj);&lt;br /&gt;void dlink_substitute(dlink_t *dummy, dlink_t *at);&lt;br /&gt;void dlink_exchange(dlink_t *a, dlink_t *b);&lt;br /&gt;void dlink_destroy(dlink_t *dlink);&lt;br /&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;&amp;nbsp; int reference;&lt;br /&gt;&amp;nbsp; int count;&lt;br /&gt;&amp;nbsp; void *private;&lt;br /&gt;&amp;nbsp; dlink_t *head;&lt;br /&gt;&amp;nbsp; dlink_t *tail;&lt;br /&gt;} dlist_t;&lt;br /&gt;&lt;br /&gt;dlist_t *dlist_new(void);&lt;br /&gt;void dlist_push(dlink_t *link, dlist_t *list);&lt;br /&gt;dlink_t *dlist_pop(dlist_t *list);&lt;br /&gt;void dlist_insert(dlink_t *link, dlist_t *list);&lt;br /&gt;dlink_t *dlist_extract(dlist_t *list);&lt;br /&gt;dlink_t *dlist_glimpse(int index, dlist_t *list);&lt;br /&gt;dlink_t *dlist_pick(int index, dlist_t *list);&lt;br /&gt;void dlist_put(dlink_t *link, int i, dlist_t *list);&lt;br /&gt;void dlist_exchange(int i, int j, dlist_t *list);&lt;br /&gt;void dlist_destroy(dlist_t *list);&lt;br /&gt;&lt;br /&gt;#endif /* __DLINK_H__ */&lt;br /&gt;----------------------------------- dlink.c -------------------------------------------&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;/* Double linked list&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;Copyright 2011 Hoyoung Yi.&lt;hoyoung.yi@gmail.com&gt;&lt;/hoyoung.yi@gmail.com&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;This program is free software; you can redistribute it and/or modify it&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;under the terms of the GNU Lesser General Public License as published by&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;the Free Software Foundation; either version 2 of the License, or&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;(at your option) any later version.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;This program is distributed in the hope that it will be useful, but&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU Lesser General Public&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;License for more details.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;You should have received a copy of the GNU Lesser General Public License&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;along with this program; if not, please visit www.gnu.org.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;*/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;br /&gt;#include &lt;malloc.h&gt;&lt;/malloc.h&gt;&lt;br /&gt;#include &lt;assert.h&gt;&lt;/assert.h&gt;&lt;br /&gt;#include "dlink.h"&lt;br /&gt;&lt;br /&gt;dlink_t *dlink_new(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *dlink;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; dlink = malloc(sizeof(dlink_t));&lt;br /&gt;&amp;nbsp; assert(dlink);&lt;br /&gt;&amp;nbsp; memset(dlink, 0, sizeof(dlink_t));&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return dlink;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlink_prepend(dlink_t *obj, dlink_t *at)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; assert(obj);&lt;br /&gt;&amp;nbsp; assert(at);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; obj-&amp;gt;prev = at-&amp;gt;prev;&lt;br /&gt;&amp;nbsp; obj-&amp;gt;next = at;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; at-&amp;gt;prev-&amp;gt;next = obj;&lt;br /&gt;&amp;nbsp; at-&amp;gt;prev = obj;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlink_append(dlink_t *obj, dlink_t *at)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; assert(obj);&lt;br /&gt;&amp;nbsp; assert(at);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; obj-&amp;gt;prev = at;&lt;br /&gt;&amp;nbsp; obj-&amp;gt;next = at-&amp;gt;next;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; at-&amp;gt;next-&amp;gt;prev = obj;&lt;br /&gt;&amp;nbsp; at-&amp;gt;next = obj;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlink_cutoff(dlink_t *obj)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; assert(obj);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; obj-&amp;gt;prev-&amp;gt;next = obj-&amp;gt;next;&lt;br /&gt;&amp;nbsp; obj-&amp;gt;next-&amp;gt;prev = obj-&amp;gt;prev;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlink_substitute(dlink_t *dummy, dlink_t *at)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; assert(dummy);&lt;br /&gt;&amp;nbsp; assert(at);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; at-&amp;gt;prev-&amp;gt;next = dummy;&lt;br /&gt;&amp;nbsp; at-&amp;gt;next-&amp;gt;prev = dummy;&lt;br /&gt;&amp;nbsp; dummy-&amp;gt;prev = at-&amp;gt;prev;&lt;br /&gt;&amp;nbsp; dummy-&amp;gt;next = at-&amp;gt;next;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlink_exchange(dlink_t *a, dlink_t *b)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *dummy;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(a);&lt;br /&gt;&amp;nbsp; assert(b);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dummy = dlink_new();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dlink_substitute(dummy, a);&lt;br /&gt;&amp;nbsp; dlink_substitute(a, b);&lt;br /&gt;&amp;nbsp; dlink_substitute(b, dummy);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; dlink_destroy(dummy);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlink_destroy(dlink_t *dlink)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; assert(dlink);&lt;br /&gt;&amp;nbsp; free(dlink);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dlist_t *dlist_new(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlist_t *dlist;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dlist = malloc(sizeof(dlist_t)+2*sizeof(dlink_t));&lt;br /&gt;&amp;nbsp; assert(dlist);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; memset(dlist, 0, sizeof(dlist_t)+2*sizeof(dlink_t));&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dlist-&amp;gt;head = (dlink_t *)(dlist+1);&lt;br /&gt;&amp;nbsp; dlist-&amp;gt;tail = dlist-&amp;gt;head+1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dlist-&amp;gt;head-&amp;gt;next = NULL;&lt;br /&gt;&amp;nbsp; dlist-&amp;gt;head-&amp;gt;prev = dlist-&amp;gt;tail;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dlist-&amp;gt;tail-&amp;gt;next = dlist-&amp;gt;head;&lt;br /&gt;&amp;nbsp; dlist-&amp;gt;tail-&amp;gt;prev = NULL;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return dlist;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlist_push(dlink_t *link, dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&amp;nbsp; assert(link);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dlink_append(link, list-&amp;gt;tail);&lt;br /&gt;&amp;nbsp; //dlink_prepend(link, list-&amp;gt;head);&lt;br /&gt;&amp;nbsp; list-&amp;gt;count++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dlink_t *dlist_pop(dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *link;&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; //link = list-&amp;gt;head-&amp;gt;prev;&lt;br /&gt;&amp;nbsp; link = list-&amp;gt;tail-&amp;gt;next;&lt;br /&gt;&amp;nbsp; dlink_cutoff(link);&lt;br /&gt;&amp;nbsp; list-&amp;gt;count--;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return link;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlist_insert(dlink_t *link, dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&amp;nbsp; assert(link);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dlink_prepend(link, list-&amp;gt;head);&lt;br /&gt;&amp;nbsp; list-&amp;gt;count++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dlink_t *dlist_extract(dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *link;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (list-&amp;gt;count == 0) return NULL;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; //link = list-&amp;gt;tail-&amp;gt;next;&lt;br /&gt;&amp;nbsp; link = list-&amp;gt;head-&amp;gt;prev;&lt;br /&gt;&amp;nbsp; dlink_cutoff(link);&lt;br /&gt;&amp;nbsp; list-&amp;gt;count--;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return link;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dlink_t *dlist_glimpse(int index, dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *link;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&amp;nbsp; assert(index &amp;gt;= 0 &amp;amp;&amp;amp; index &amp;lt; list-&amp;gt;count);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; link = list-&amp;gt;tail-&amp;gt;next;&lt;br /&gt;&amp;nbsp; while (index--) link = link-&amp;gt;next;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return link;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dlink_t *dlist_pick(int index, dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *link;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&amp;nbsp; assert(index &amp;gt;= 0 &amp;amp;&amp;amp; index &amp;lt; list-&amp;gt;count);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; link = list-&amp;gt;tail-&amp;gt;next;&lt;br /&gt;&amp;nbsp; while (index--) link = link-&amp;gt;next;&lt;br /&gt;&amp;nbsp; dlink_cutoff(link);&lt;br /&gt;&amp;nbsp; list-&amp;gt;count--;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return link;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlist_put(dlink_t *link, int i, dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *ilink;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(link);&lt;br /&gt;&amp;nbsp; assert(i &amp;gt;= 0 &amp;amp;&amp;amp; i &amp;lt; list-&amp;gt;count);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ilink = list-&amp;gt;tail-&amp;gt;next;&lt;br /&gt;&amp;nbsp; while (i--) ilink = ilink-&amp;gt;next;&lt;br /&gt;&amp;nbsp; dlink_prepend(link, ilink);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlist_exchange(int i, int j, dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *ilink, *jlink;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&amp;nbsp; assert(i &amp;gt;= 0 &amp;amp;&amp;amp; i &amp;lt; list-&amp;gt;count);&lt;br /&gt;&amp;nbsp; assert(j &amp;gt;= 0 &amp;amp;&amp;amp; j &amp;lt; list-&amp;gt;count);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ilink = list-&amp;gt;tail-&amp;gt;next;&lt;br /&gt;&amp;nbsp; while (i--) ilink = ilink-&amp;gt;next;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; jlink = list-&amp;gt;tail-&amp;gt;next;&lt;br /&gt;&amp;nbsp; while (j--) jlink = jlink-&amp;gt;next;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; dlink_exchange(ilink, jlink);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dlist_destroy(dlist_t *list)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; dlink_t *link;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; assert(list);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (list-&amp;gt;reference == 0) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; while (list-&amp;gt;count &amp;gt; 0) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; link = dlist_extract(list);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dlink_destroy(link);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; free(list);&lt;br /&gt;&amp;nbsp; } else list-&amp;gt;reference--;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-8671988430779883287?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/8671988430779883287/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/double-linked-list-in-c-language.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8671988430779883287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/8671988430779883287'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/double-linked-list-in-c-language.html' title='Double linked list in c language'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-5175695061070243479</id><published>2011-07-16T09:32:00.000-07:00</published><updated>2011-07-16T09:42:33.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GTK'/><title type='text'>Use GdkPixbuf in GTK+</title><content type='html'>At first it needs to create GtkImage on GtkViewport. Then, we can use GdkPixbuf-embedded GtkImage.&lt;br /&gt;&lt;br /&gt;static void gdk_pixbuf_clear(GdkPixbuf *pixbuf)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;int x, y;&lt;br /&gt;&amp;nbsp; &amp;nbsp;int width, height, rowstride, n_channels;&lt;br /&gt;&amp;nbsp; &amp;nbsp;guchar *pixels, *p;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;n_channels = gdk_pixbuf_get_n_channels(pixbuf);&lt;br /&gt;&amp;nbsp; &amp;nbsp;g_assert(gdk_pixbuf_get_colorspace(pixbuf) == GDK_COLORSPACE_RGB);&lt;br /&gt;&amp;nbsp; &amp;nbsp;g_assert(gdk_pixbuf_get_bits_per_sample(pixbuf) == 8);&lt;br /&gt;&amp;nbsp; &amp;nbsp;g_assert(gdk_pixbuf_get_has_alpha(pixbuf));&lt;br /&gt;&amp;nbsp; &amp;nbsp;g_assert(n_channels == 4);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;width = gdk_pixbuf_get_width(pixbuf);&lt;br /&gt;&amp;nbsp; &amp;nbsp;height = gdk_pixbuf_get_height(pixbuf);&lt;br /&gt;&amp;nbsp; &amp;nbsp;rowstride = gdk_pixbuf_get_rowstride(pixbuf);&lt;br /&gt;&amp;nbsp; &amp;nbsp;pixels = gdk_pixbuf_get_pixels(pixbuf);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;for (y = 0; y &amp;lt; height; y++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (x = 0; x &amp;lt; width; x++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = pixels + y*rowstride + x*n_channels;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*(p+0) = 255; // red channel&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*(p+1) = 0; // green channel&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*(p+2) = 0; // blue channel&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*(p+3) = 255; // alpha channel&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;image = gtk_image_new();&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480);&lt;br /&gt;g_assert(pixbuf);&lt;br /&gt;&lt;br /&gt;gdk_pixbuf_clear(pixbuf);&lt;br /&gt;&lt;br /&gt;gtk_image_set_from_pixbuf(image, pixbuf);&lt;br /&gt;&lt;br /&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-5175695061070243479?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/5175695061070243479/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/use-gdkpixbuf-in-gtk.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5175695061070243479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/5175695061070243479'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/use-gdkpixbuf-in-gtk.html' title='Use GdkPixbuf in GTK+'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-7402060102364177268</id><published>2011-07-14T19:57:00.000-07:00</published><updated>2011-07-14T19:59:13.275-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wirless network'/><category scheme='http://www.blogger.com/atom/ns#' term='FabFi'/><title type='text'>FabFi - 무료, 공개된 오픈 소스 장거리 wireless ethernet 전송 시스템(Reflector + Router)</title><content type='html'>[출처]&amp;nbsp;http://fabfi.fablab.af&lt;br /&gt;&lt;br /&gt;FabLab의 공용으로 성장중인 시스템이다. 제목에서 보듯이 장거리 wireless ethernet 신호를 전송해 줄 목적으로 된 소스가 공개된 시스템이다. 서울에서는 필요없을 수도 있겠지만 wireless 네트워크가 미약한 지방의 경우 활용 용도가 분명히 있을 것이다. 그래도 reflector는 충분히 wireless 전파가 미약한 곳에서 RF 전파를 포집하는데 많은 도움이 될 수 있는 안테나 증폭기로 사용될 수 있을 듯 싶다. 찾아 보면 reflector의 도면 파일이 있다. 현재 케냐와 아프가니스탄 같은 기반시설이잘 갖추어 지지 않은 곳에서 구현되고 있다.&lt;br /&gt;&lt;br /&gt;현제 wiki에서 제공하는 내용은 맨 처음으로 구성된 아프가니 스탄의 Jalalabad의 FabFi를 기반으로 설명하고 있다. 이 시스템은 uplink와 Open courseware 미러링을 제공하고 링크할 수 있는 거리는 3,880m이다.&lt;br /&gt;&lt;br /&gt;FabFi의 안테나는 reflector와 router로 구성된다. reflector는 직접 개개인이 만들어야 하고, router는 수정된 기존 상품이다. reflector 디자인은 4인치에서 18인치까지로 범위가 다양한다. (plywood, signboard, 아크릴로 만든다.) radio frequency(RF)에 대한 반사 재료로 chicken wire(?),&amp;nbsp; 스텐레스 짠 그물망, 그리고 강철로 된 윈도우 스크린를 사용한다. 특히 똑똑한 아프가니스탄 사람들은 오래된 USAID 쿠킹 오일 캔을 reflector로 사용하기 시작했다.&lt;br /&gt;&lt;br /&gt;router는 쉽게 판매되는 가정용 wireless AP에 수정된 router-radio-antenna를 사용한다. 버전 3.0에서는 FabFi는 공식적으로 Linksys WRT54GL과 ASUS WL-520GU를 지원한다. 비록 다른 많은 router들도 그에 걸맞는 image를 생성하면 쉽게 사용할 수 도 있다. FabFi는 OpenWRT&lt;a class="external text" href="http://www.openwrt.org/" rel="nofollow" title="http://www.openwrt.org"&gt;OpenWRT 8.09.2&lt;/a&gt; (Kamikaze) firmware가 구동되는 상황에서 구동된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="head1"&gt;FabFi 기술 요약&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="head3"&gt;개요&lt;/span&gt;&lt;br /&gt;&lt;span class="head3"&gt;&amp;nbsp;&lt;/span&gt;                     &lt;br /&gt;FabFi은 확장가능한 장거리 P2P 시스템이고 mesh hybrid-wireless broadband transmission 기반시설이다. 개념은 간단하다. 간단하고 지능적이고 서로 연결가능한 network가 불안정한 상황에서도 믿을 수 있는 network 환경을 만들어 낼 수 있다는 개념이다. FabFi는 low-cost 장치를 아주 먼거리에 대해서 직접적으로 통신할 수 있도록 하는 간단한 물리 개념과 아주 다양한 상황들에 적용할 수 있는 탄력적인 구성을 활용한다.&lt;br /&gt;&lt;br /&gt;극한의 상황에 대해서 RF(Radio Frequency) 에너지를 방향 전환시킬 수 있는 wire mesh surface를 갖는 제작된 RF reflector위에 상용 wireless routers를 장착하여 사용한다. Reflector의 증폭율은 reflector의 크기와 사용된 재료에 의존한다. 그러나 현재의 디자인에서는 15dBi정도로 높게 측정되어진다. &lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; border: solid thin black; margin: 0px 0px 0px 0px; padding: 0px; text-align: center;"&gt;&lt;img alt="A Single FabFi Link" src="http://fablab.af/fabfi/images/singlelink.png" /&gt;&lt;/div&gt;&lt;br /&gt;FabFi 시스템에서 단일 wireless link는 wireless router가 장착된 두 대의 reflector로 구성된다. 이와 유사하게, 두 대의 router도 wired 연결로 link될 수 있다. 단일 router는&amp;nbsp; 동시에 wireless 연결과 wired연결 둘 다로 link될 수도 있다. 이 시스템은 수많은 방법으로 구성된 개개의 link에 대한 구성도 가능하다. (매우 먼 거리나 작은 지역에 많은 사용자를 수용할수 있는 링크 같은 것들 말이다. 이 링크의 중요한 요소는 "meshing"이라는 것이다. mesh network는 구조화 되지 않는 ad-hoc같은 방식으로 하나 이상의 다른 근방의 디바이스에 접속할 수 있도록 허용하는 시스템이다. Mesh network는 소프트웨어가 network의 topology(구조)를 감지해서 실시간으로 자동적으로 데이터의 흐름을 결정하기 때문에 강인하고 단순하다. 전통적인 mesh network들은 단일 라디오와 wireless 만으로된 연결과 모든 방향을 커버할 수 있는 안테나에 의존하기 때문에 구조적으로 제한되어져 있다. 가능한 상황에 따라서 직접적인 wireless link나 유선 전송을 이용해서 Fabfi 시스템은 매우 큰 규모의 한곳에 고정되서 사용하는 mesh network를 구성할 수 있도록 최적화 되어 있다. 높은 데역폭의 좁은 영역의 uplink에 의존하지 않고 지역내에서 강인한 디지털 통신이 가능한 규모에서는 가격이 비싸고 많은 지역에서 사용 불가능하다. 좀 더 자세한 설명을 해주는 에니매이션을 확인해보자. (2MB의 용량으로 다소 시간이 걸릴수 있다.)&lt;br /&gt;&lt;div style="background-color: #eeeeee; border: solid thin black; margin: 15px 8px 15px 8px; padding: 0px 0px 0px 0px; text-align: center;"&gt;&lt;img alt="Meshing 101..." src="http://fablab.af/fabfi/images/mesh101.gif" /&gt;&lt;/div&gt;&lt;span class="head3"&gt;Reflector의 작동 방식&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; border: solid thin black; float: right; margin: 15px 0px 10px 15px; padding: 5px; text-align: center;"&gt;&lt;img alt="A FabFi Parabolic Reflector" src="http://fablab.af/fabfi/images/parabolicex.png" /&gt;&lt;/div&gt;FabFi의 reflector는 포물선의 준선에 수직한 전파가 포물선의 표면에 접촉할 때 이 전파들을 포물선의 초점에 모이게 하는 포물선 모양(Y=cX^2)의 구조를 사용한다.(이것에 대한 좀더 자세한 것은 &lt;a href="http://mathworld.wolfram.com/Parabola.html"&gt;Mathworld&lt;/a&gt;&amp;nbsp;를 보라...) RF 전파를 반사 시킬 수 있는 window screen, chicken wire같은 것을 3차원 의 포물선 모양을 이루는 frame에 붙이고 정확하게 계산된 추점에 wireless router를 붙인다. 그럼 전송 지점의 router에서 오는 RF 에너지가 수신부의 router에서 RF 에너지가 효율적으로 모아진다.&lt;br /&gt;&lt;br /&gt;&lt;span class="head3"&gt;Reflector 만들기&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="head3"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; border: solid thin black; float: right; margin: 15px 0px 15px 15px; padding: 5px; text-align: center;"&gt;&lt;img alt="Cutting a Reflector From Acrylic" src="http://fablab.af/fabfi/images/lasercutting.jpg" /&gt;&lt;/div&gt;FabFi 시스템의 본질적인 부분은 지역특색에 따라 사용가능한 어떤 재료로도 구현할 수 있는 유연성이 있다는 것이다. 필요한 모든 것들은 2D 디자인 파일을 프린트하고 여러분이 찾을 수 있는 재료를 조각으로 만들 수 있는 능력이면 된다. 여러분이 Fab Lab을 가지고 있다면. 나무나 금속, 아크릴로 직접 reflector를 만들기 위해서 CNC 나무 제단기나 레이져 커터를 사용할 수 있다. 그러나 진흙으로 빚거나 돌을 깍거나 얼음 블럭을 끌로 파거나 해서 만들지 못할 이유는 없다. 2009년 1월에 초기 배치시 Jalalabad에서는 세 가지의 다른 reflector 디자인이 구현되었다: 큰 4인치의 나무로 된것과 2인치의 나무 버전 그리고 18인치의 아크릴 버전이 구현되었다. 반사면의 재질은 chicken wire와 스테인레스 강철로 짜여진 그물망과 window screen이 될 수 있다.&lt;br /&gt;&lt;div style="background-color: #eeeeee; border: solid thin black; margin: 15px 15px 15px 15px; padding: 5px; text-align: center;"&gt;&lt;img alt="Three reflector Versions" src="http://fablab.af/fabfi/images/reflectoroptions.jpg" /&gt;&lt;/div&gt;다음으로 실제 현장에서 필요한 것들은 봉합된 방수가 가능한 뺏다 낄 수 있는 조립품의 수정된 reflector 디자인을 개발하는 것이다. 이 새로운 디자인 2010년 여름에 개시 되었다.&lt;br /&gt;&lt;div style="background-color: #eeeeee; border: solid thin black; margin: 15px 15px 15px 15px; padding: 5px; text-align: center;"&gt;&lt;img alt="Reflector with integrated weatherproofing" src="http://fablab.af/fabfi/images/routerbox.jpg" /&gt;&lt;/div&gt;그러나 멀리 볼 것도 없이 network 사용자들은 이미 지역적으로 구할 수 있는 고철 더미로 만든 reflector를 디자인하고 만들고 있다. 아직 중요한 부분에 정교한 장업이 필요하지만, 이 reflector들은 기술적인 면에서 지역 인력이 자체적으로 개발되는 기술이 전파되고 있다는 분명한 신호이다. 이것들은 모두 $3달러 이하의 가격이다.!    &lt;br /&gt;&lt;div style="background-color: #eeeeee; border: solid thin black; margin: 15px 15px 15px 15px; padding: 5px; text-align: center;"&gt;&lt;img alt="Reflector with integrated weatherproofing" src="http://fablab.af/fabfi/images/jbad-made.jpg" /&gt;&lt;/div&gt;&lt;span class="head3"&gt;Router와 FabFi 펌웨어는&amp;nbsp;&lt;/span&gt;&lt;a href="http://fabfi.fablab.af/www.openwrt.org"&gt;OpenWRT&lt;/a&gt;&lt;span class="head3"&gt;라 불리는 open source 3rd party 펌웨어를 사용한다. OpenWRT는 &amp;nbsp;리눅스 기반의 유연성을 장점으로 가지고 있어 FabFi 장치들은 다양한 범위의 모니터링과 자가 진단 도구들을 운용할 수 있다. 현재의 시스템은 실시간 network 모니터링과 local web을 저장해 집중된 접근을 제어하는 기능과 사용자 관리, 요금 부과를 위한 사용량 추적을 지원한다. 이 모든 것들은 $50에서 $100 달러의 장치에서 구현된다. 자동 구성 기능은 FabFi 1.0이 발표된 이후로 지속적으로 개선되어 왔다. 지금은 다중 fabfi상에서 다중 router를 지원하고 있다. 그리고 802.11n의 속도로 network를 구성할 수 있는 능력이 있다. 개발 부서에서 사용하는 전원인 안정적인 전원은 계속적인 도전거리다. 편리하게도 지금 지원하는 모든 장치들은 12VDC에서 동작하고 자동차나 작은 엔진 베터리에서 직접 전원으로 사용 될 수 있다. 자동차 배터리와 두 대의 비싸지 않은 충전기는 Jalalbad network에서 두 개의 큰 distribution &amp;nbsp;허브에서 작동하는 믿을 만한 UPS 장치로 작동한다. 도시의 전원없이 거의 이틀동안 router 를 동작시킬수 있는 전원이다. 케냐에서 주 전원과 태양열 전원을 모두 지원하는 network에 어느 node에나 부착할 수 있고 방수 기능이 있는 UPS를 지원하는 "node in a box"를 고안했다. 다음 개발 버전은 router에 연결된 일반 UPS나 제작된 UPS에 장착하는 100-240VAC switching power를 이용해서 설치할 수 있도록 하는 bare-bone 타입의 12V-12V UPS가 될 것이다. 바람이나 다른 그 지역에서 생산되는 전력으로 동작하는 충전회로들은 동시에 진행되는 FabLab의 프로젝트이다.&lt;/span&gt;&lt;br /&gt;&lt;span class="head3"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Fab Future는 미적인 부분도 고려되었을 뿐만 아니라, Fabfi는 일상적으로 모래 폭퐁이 부는 여름의 Jalalabad에서 130F의기온인 혹독한 아프가니스탄 기후에서도 놀랄정도로 안정적인 것이 증명되어 왔다. 2010년도 초여름에 fabfi 시스템을 client 장치에 직접 wireless 접속하도록 제공하고 통신망 규모의 wifi ISP업체를 운영해 왔다. 2년 이상의 운영하는 동안 한편으로는 여전히 하드웨어적인 실폐가 발견되기도 한다. 앞으로의 가장 큰 과제는 uplink 대역폭 문제이다. 많은 나라들은 범용적인 접속 문제의 해결방안으로써&amp;nbsp;"mobile broadband"를 밀고 있지만, 대부분의 지역에서의 실제적인 현실은 mobile 장치들만으로는 어떤 보조없이 감당할만한 충분한 가격이나 충분한 효율을 제공하지 못한다. 케냐에서 fabfi는 mobile 연결이 사용자당 데이타 허용량이 감소해서 단지 접속의 도구로 전락한 상황에서 통신하는데 가치있는 서비스를 제공한다.&lt;br /&gt;&lt;br /&gt;이것에 관한것이다 기타 다른 프로젝트의 진행 과정은 여기&amp;nbsp;&lt;a href="http://fabfiblog.fabfolk.com/"&gt;FabFi Blog&lt;/a&gt;에서 살펴 볼 수 있다.&lt;br /&gt;&lt;br /&gt;reflectror 만들기&lt;br /&gt;&lt;br /&gt;http://fabfi.fablab.af/distribution.html에 가서 알맞은 크기의 디자인을  다운로드 받아서 나무를 자르고 조립한다. 원하면 페인트를 칠하거나 실링을 할 수 도 있다. 그리고 조립된 프레임에 철로된  그물망이나 스크린을 고정시킨다. 고정면이 구부러지거나 주름이 생기지 않도록 단단하게 해야한다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;라우터 구성하기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;안테나 설치하기&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;reflector에 router를 고정시킨다. 비가 올 경우를 대비해서 router주변을 비닐 봉다리로 둘러 싸거나  방수가 되는 플라스틱 박스를 사용한다. router에 전원을 인가하고 LAN포트에 인터넷이 연결될 수 있는 ethernet  케이블을 연결시킨다. 다른 FabFi의 방향으로 안테나를 조절한다. 컴퓨터의 LAN포트에 연결해서 연결상태를 점검한다. 안테나를  끈을 이용해서 단단히 고정한다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/605533256599376414-7402060102364177268?l=hoyoung2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hoyoung2.blogspot.com/feeds/7402060102364177268/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/fabfi-wireless-ethernet-reflector.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7402060102364177268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/605533256599376414/posts/default/7402060102364177268'/><link rel='alternate' type='text/html' href='http://hoyoung2.blogspot.com/2011/07/fabfi-wireless-ethernet-reflector.html' title='FabFi - 무료, 공개된 오픈 소스 장거리 wireless ethernet 전송 시스템(Reflector + Router)'/><author><name>zzZz</name><uri>http://www.blogger.com/profile/10681095313053713047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-605533256599376414.post-349379134304105535</id><published>2011-07-07T19:59:00.000-07:00</published><updated>2011-07-09T23:41:32.692-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USB Camera'/><category scheme='http://www.blogger.com/atom/ns#' term='OV9121'/><title type='text'>Experimental USB Camera</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&amp;nbsp;To test single CMOS Image sensor module, I combined CPLD, SRAM, and USB FIFO module. In the below pictures, these blocks are connected by jumping wire. To operate circuit, it is required three pieces of software; for CPLD, verilog HDL code to interfacing with SRAM, USB FIFO, and CMOS sensor. And for USB FIFO, 8051 based firmware code to operate as Slave FIFO. At final, PC based application and USB device driver.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-48PeE6ntnK8/TgAlw3bK0hI/AAAAAAAAAUU/HHyEToZ8fpU/s1600/IMG_7856.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-48PeE6ntnK8/TgAlw3bK0hI/AAAAAAAAAUU/HHyEToZ8fpU/s320/IMG_7856.JPG" style="cursor: move;" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-wCTjQmaj7uE/TgAlvlQ7hBI/AAAAAAAAAUM/-6B1-L7y3mQ/s1600/IMG_7854.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-wCTjQmaj7uE/TgAlvlQ7hBI/AAAAAAAAAUM/-6B1-L7y3mQ/s320/IMG_7854.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-SrKHGi12gK0/TgAlssZvyQI/AAAAAAAAAT4/TzCq6LsF8AM/s1600/IMG_7849.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-SrKHGi12gK0/TgAlssZvyQI/AAAAAAAAAT4/TzCq6LsF8AM/s320/IMG_7849.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;CMOS Image Sensor Module&lt;br /&gt;&lt;br /&gt;It is composed of Omnivision's OV9121, powering components and PCB. OV9121 is setting as Master mode; provided MCLK, it distributes PCLK, VSYNC, HREF and digital data signals to CPLD module. The provided MCLK is 10Mhz for stable operation despite of regular MCLK 24Mhz.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;SRAM&lt;br /&gt;&lt;br /&gt;It has asynchronous operation, 16bit data bus width and 10ns maximum operation time for both reading and writing. The purpose of SRAM is buffering between CMOS Module and USB FIFO.&lt;br /&gt;&lt;br /&gt;CPLD Module&lt;br /&gt;&lt;br /&gt;It is Dr.Kim CPLD Module(MCA128-10) from&amp;nbsp;&lt;a href="http://www.devicemart.co.kr/mart7/mall.php?cat=004010000&amp;amp;query=view&amp;amp;no=18796"&gt;http://www.devicemart.co.kr/mart7/mall.php?cat=004010000&amp;amp;query=view&amp;amp;no=18796&lt;/a&gt;.&lt;br /&gt;Because of poor performance CPLD, CMOS Sensor has to be operated under 10Mhz MCLK. Its functionalities are CMOS Image Sensor Data Interfacing (based on PCLK, VSYNC, HREF and Pixel Data Bus), Pixel Data Gathering (two 8bits pixel data merge to 16bits data to be able to save on SRAM), USB FIFO Interfacing (based on nFLAGB, nSLWR, 16bits FD). Here is verilog HDL code.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;`timescale 1ns / 1ps&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;`define USE_FULL_FLAG&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;module cam2usb(RESET, TRIG,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;VSYNC, HREF, /* MCLK, */ PCLK, D,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;nWE, nOE, A, IO,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IFCLK, nFLAGB, nSLWR, FD/*, LED*/);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 정의 되지 않은 내부 reg값을 정해진 초기값으로 설정할때 사용 하는 Reset Pin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;input wire RESET;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 이미지 센서로 부터의 영상획득 시점을 알려주는 영상회득 개시용 pin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;input wire TRIG;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 이미지 센서로 부터 전달되는 한 화면 혹은 한 라인의 동기화 신호&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;input wire VSYNC;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;input wire HREF;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 이미지 센서의 동작 클럭&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//output wire MCLK;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 이미지 센서의 한 화소의 전송 속도를 나타내는 동기화 클럭&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;input wire PCLK;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 이미지 센서의 한 화소의 디지털화된 데이터&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;input wire [7:0] D;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// USB 인터 페이스 칩와 FPGA 사이의 데이터 전송시 병목 현상을 차단하기 위한 메모리 인터페이스&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;output reg nWE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;output reg nOE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;parameter ADDR_SIZE = 18;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;output wire [ADDR_SIZE-1:0] A;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;inout wire [15:0] IO;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// USB 인터페이스 칩의 동기화된 전송을 위한 인터페이스 클럭&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;output wire IFCLK;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// USB 인터페이스 내부 메모리의 FULL상태를 지시하는 플래그&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;input wire nFLAGB;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// USB 인터페이스로의 데이터 전송을 지시하는 인터페이스 Pin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;output reg nSLWR;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// USB 인터페이스로 전송할 데이터 버스&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;output reg [15:0] FD;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;output wire [3:0] LED;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* 외부 메모리를 FIFO로 사용할 수 있게 해주는 인터페이스&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;실제 외부로 노출되는 어트레스는 상위 한비트를 제외한 나머지 부분이다.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;상위 한바이트는 FIFO의 FULL과 EMPTY상태를 구분하기 위해서 사용된다. */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;reg [ADDR_SIZE:0] read_addr;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge PCLK) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (RESET) read_addr &amp;lt;= 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;else if (~nOE) read_addr &amp;lt;= read_addr+1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge nOE) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (RESET) read_addr &amp;lt;= 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;else read_addr &amp;lt;= read_addr+1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;reg [ADDR_SIZE:0] write_addr;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge PCLK) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (RESET) write_addr &amp;lt;= 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;else if (~nWE) write_addr &amp;lt;= write_addr+1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge nWE) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (RESET) write_addr &amp;lt;= 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;else write_addr &amp;lt;= write_addr+1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;`ifdef USE_FULL_FLAG&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;reg empty_flag;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;reg full_flag;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(write_addr or read_addr) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (~|(write_addr[ADDR_SIZE-1:0]^read_addr[ADDR_SIZE-1:0])) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;if (~|(write_addr[ADDR_SIZE]^read_addr[ADDR_SIZE])) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;empty_flag &amp;lt;= 1'b1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;full_flag &amp;lt;= 1'b0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;end else begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;empty_flag &amp;lt;= 1'b0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;full_flag &amp;lt;= 1'b1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;end else begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;empty_flag &amp;lt;= 1'b0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;full_flag &amp;lt;= 1'b0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;`else&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;reg empty_flag;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(write_addr or read_addr) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (~|(write_addr[ADDR_SIZE:0]^read_addr[ADDR_SIZE:0])) empty_flag &amp;lt;= 1'b1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;else empty_flag &amp;lt;= 1'b0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;`endif&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 이미지 센서의 신호선의 상태를 제어하는 State Machine&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 픽셀 데이터를 2 byte단위로 포집해서 FIFO에 주기적으로 저장한다.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;parameter CAMERA_HDLR_STATE_SIZE = 6;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;parameter CAMERA_HDLR_IDLE &amp;nbsp; &amp;nbsp; &amp;nbsp; = 6'b000001;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;parameter CAMERA_HDLR_WAIT_VSYNC = 6'b000010;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;parameter CAMERA_HDLR_VSYNC &amp;nbsp; &amp;nbsp; &amp;nbsp;= 6'b000100;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;parameter CAMERA_HDLR_WAIT_HREF &amp;nbsp;= 6'b001000;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;parameter CAMERA_HDLR_HREF0 &amp;nbsp; &amp;nbsp; &amp;nbsp;= 6'b010000;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;parameter CAMERA_HDLR_HREF1 &amp;nbsp; &amp;nbsp; &amp;nbsp;= 6'b100000;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;reg [7:0] lower_byte;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;reg [7:0] higher_byte;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;reg [CAMERA_HDLR_STATE_SIZE-1:0] camera_hdlr_state;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge PCLK) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (RESET) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;camera_hdlr_state &amp;lt;= CAMERA_HDLR_IDLE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;nWE &amp;lt;= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;end else begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;case (camera_hdlr_state)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;CAMERA_HDLR_IDLE: begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;if (TRIG) camera_hdlr_state &amp;lt;= CAMERA_HDLR_WAIT_VSYNC;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;nWE &amp;lt;= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;CAMERA_HDLR_WAIT_VSYNC: begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;if (VSYNC) camera_hdlr_state &amp;lt;= CAMERA_HDLR_VSYNC;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;nWE &amp;lt;= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;CAMERA_HDLR_VSYNC: begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;if (~VSYNC) camera_hdlr_state &amp;lt;= CAMERA_HDLR_WAIT_HREF;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;nWE &amp;lt;= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;CAMERA_HDLR_WAIT_HREF: begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;if (HREF) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;camera_hdlr_state &amp;lt;= CAMERA_HDLR_HREF0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;lower_byte &amp;lt;= D;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;end else if (VSYNC) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;camera_hdlr_state &amp;lt;= CAMERA_HDLR_IDLE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;nWE &amp;lt;= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;CAMERA_HDLR_HREF0: begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;camera_hdlr_state &amp;lt;= CAMERA_HDLR_HREF1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;higher_byte &amp;lt;= D;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;nWE &amp;lt;= 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;CAMERA_HDLR_HREF1: begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;if (HREF) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;camera_hdlr_state &amp;lt;= CAMERA_HDLR_HREF0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;lower_byte &amp;lt;= D;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;end else begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;camera_hdlr_state &amp;lt;= CAMERA_HDLR_WAIT_HREF;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;nWE &amp;lt;= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;default: begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;camera_hdlr_state &amp;lt;= CAMERA_HDLR_IDLE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;nWE &amp;lt;= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;endcase&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// FIFO의 상태와 USB 인터페이스의 상태, 이미지 센서 State Machine의&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 상태에 따라서 저장되있던 픽셀 데이터를 읽어 온다.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge PCLK) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (nOE &amp;amp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 최소 두 클럭당 한번의 읽기가 가능하다.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;(|(camera_hdlr_state^CAMERA_HDLR_HREF0)) &amp;amp; // 메모리 Write단계일 때는 read 금지&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;(~empty_flag) &amp;amp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 메모리가 비워져 있을때는 읽기 금지&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;nFLAGB) begin &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// USB 인터페이스가 꽉 찼을때는 읽기 금지&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;nOE &amp;lt;= 1'b0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;end else begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;nOE &amp;lt;= 1'b1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;assign A = (nOE ? write_addr[ADDR_SIZE-1:0] : read_addr[ADDR_SIZE-1:0]);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;assign IO = (nOE ? {higher_byte, lower_byte} : 16'hz);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// FIFO에서 읽어온 데이터를 USB 인터페이스에 전송한다.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge PCLK) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (nOE) nSLWR &amp;lt;= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;else nSLWR &amp;lt;= 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge PCLK) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (~nOE) FD &amp;lt;= IO;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;always @(posedge nOE) begin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;FD &amp;lt;= IO;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;assign IFCLK = PCLK;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;assign LED[0] = ~|(camera_hdlr_state^CAMERA_HDLR_IDLE);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;assign LED[1] = empty_flag;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;assign LED[2] = full_flag;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//assign LED[3] =&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;endmodule&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;USB FIFO Module&lt;br /&gt;&lt;br /&gt;Cypress FX2LP USB FIFO has several operation modes. In here, Slave FIFO mode is proper to interface with CPLD. It's scheme is informing internal status of 2k bytes fifo ram on FX2LP, allowing data transferring via CPLD under not-FULL internal status (nFLAGB's high state) and transferring via USB.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;#pragma NOIV &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Do not generate interrupt vectors&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;#include &lt;fx2.h&gt;&lt;/fx2.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;#include &lt;fx2regs.h&gt;&lt;/fx2regs.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;#include &lt;fx2sdly.h&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// SYNCDELAY macro&lt;/fx2sdly.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;#include "counter0.h"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;#include "binary.h"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;typedef enum {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IDLE_STATE &amp;nbsp; &amp;nbsp; = 0x00,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;ON_STATE &amp;nbsp; &amp;nbsp; &amp;nbsp; = 0x01,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;OFF_STATE &amp;nbsp; &amp;nbsp; &amp;nbsp;= 0x02,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;AUTO_INV_STATE = 0x04&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;} state_t;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//#define BLINK_COUNT 2000 // 500us&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;#define BLINK_COUNT 4000 // 1ms&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;state_t state_PA0 = IDLE_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;unsigned short count_PA0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;state_t state_PA1 = IDLE_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;unsigned short count_PA1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;state_t state_PA3 = IDLE_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;unsigned short count_PA3;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;state_t state_PA7 = IDLE_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;unsigned short count_PA7;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;extern BOOL &amp;nbsp; GotSUD; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Received setup data flag&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;extern BOOL &amp;nbsp; Sleep;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;extern BOOL &amp;nbsp; Rwuen;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;extern BOOL &amp;nbsp; Selfpwr;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;enum {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; High_Alt0_BulkIN = 0,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; High_Alt1_IsocTripleIN,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; High_Alt2_IsocIN&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;enum {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; Full_Alt0_BulkIN = 0,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; Full_Alt1_IsocIN&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;BYTE &amp;nbsp; &amp;nbsp;Configuration; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Current configuration&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;BYTE &amp;nbsp; &amp;nbsp;AlternateSetting = High_Alt0_BulkIN; &amp;nbsp; // Alternate settings&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;void Slave_Fifo_Init(void)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA0 = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA1 = 0; // TRIG (active high)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA3 = 0; // PWDN (active high)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA7 = 0; // FSIN (active high)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* 1. Configure bits IFCONFIG[7:4] to define the behavior of the interface clock. */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// IFCONFIG&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit7 : IFCLKSRC(0 -&amp;gt; exernal clock, 1 -&amp;gt; internal clock)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit6 : 3048MHZ(0 -&amp;gt; 30Mhz, 1 -&amp;gt; 48Mhz)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit5 : IFCLKOE(0 -&amp;gt; disable, 1-&amp;gt; enable internal clock output)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit4 : IFCLKPOL(invert external or internal clock)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit3 : ASYNC(0 -&amp;gt; synchronous, 1 -&amp;gt; asynchronous)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit2 : GSTATE(0 -&amp;gt; disable GSTATE, 1-&amp;gt; enable GSTATE)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit1 : IFCFG[1:0] (0b00: ports, 0b01: reserved, 0b10: GPIF, 0b11: Slave fifo)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit0 :&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IFCONFIG = b01010000; // ext, 48Mhz, disable OE, invert, synchronous, disable GSTATE, ports&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//IFCONFIG = b11110000; // int, 48Mhz, enable OE, invert, synchronous, disable GSTATE, ports&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* 2. Set bits IFCFG1:0=11. */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IFCONFIG |= b00000011;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* 3. Set REVCTL.0 and REVCTL.1 to 1. */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;REVCTL = 0x03;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* 4. Configure EPxCFG. */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// Default interface uses endpoint 2, zero the valid bit on all others&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// Just using endpoint 2, zero the valid bit on all others&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP1OUTCFG = 0xA0; //bmVALID | bmBULK;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP1INCFG = 0xA0; //bmVALID | bmBULK;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// EPxCFG&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP2CFG = 0xE0; &amp;nbsp;//bmVALID | bmIN | bmBULK; //EP2 is DIR=IN, TYPE=BULK, SIZE=512, BUF=4x&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP4CFG = (EP4CFG &amp;amp; 0x7F); //non-valid&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP6CFG = (EP6CFG &amp;amp; 0x7F); //non-valid&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP8CFG = (EP8CFG &amp;amp; 0x7F); //non-valid&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// EPxFIFOCFG&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit7 : reserved&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit6 : INFM1(IN Full Minus One)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit5 : OEP2(OUT Empty Plus One)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit4 : AUTOOUT&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit3 : AUTOIN&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit2 : ZEROLENIN(Enable Zero-length IN Packets)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit1 : reserved&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit0 : WORDWIDE(Select Byte/Word FIFOs on PORTB/D Pins)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP2FIFOCFG = 0x01;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//EP2FIFOCFG = 0x00; // 8bit FD&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP4FIFOCFG = 0x00;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP6FIFOCFG = 0x00;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP8FIFOCFG = 0x00;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PINFLAGSAB = 0x00; &amp;nbsp; // defines FLAGA as prog-level flag, pointed to by FIFOADR[1:0]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // FLAGB as full flag, as pointed to by FIFOADR[1:0]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PINFLAGSCD = 0x00; &amp;nbsp; // FLAGC as empty flag, as pointed to by FIFOADR[1:0]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // won't generally need FLAGD&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* 5. Reset the FIFOs. */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;FIFORESET = 0x80; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // activate NAK-ALL to avoid race conditions&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;FIFORESET = 0x02; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // reset, FIFO 2&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;FIFORESET = 0x00; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // deactivate NAK-ALL&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* 6. Set bit EPxFIFOCFG.3=1. */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP2FIFOCFG |= 0x08; // AUTOIN&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;/* 7. Set the size via the EPxAUTOINLENH:L registers. */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// this is the length for high speed&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP2AUTOINLENH = MSB(512);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP2AUTOINLENL = LSB(512);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// FLAGA asserts when current fifo is at or less than 3pkts+508&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP2FIFOPFH = 0x19; // DECIS=0, PKTSTAT=0, PKTS[2]=0, PKTS[1]=1, PKTS[0]=1, 0, 0, PFC[8]=1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP2FIFOPFL = 0xfc; // PFC[7:0] = 0b11111100&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// Reset data toggle to 0&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;TOGCTL = 0x12; &amp;nbsp;// EP2 IN&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;TOGCTL = 0x32; &amp;nbsp;// EP2 IN Reset&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// We want to get SOF interrupts&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;USBIE |= bmSOF;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//-----------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;// Task Dispatcher hooks&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;// &amp;nbsp; The following hooks are called by the task dispatcher.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//-----------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;void TD_Init(void) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Called once at startup&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;WORD i;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// when IFCFG[1:0] = 0b11,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// FIFOADR[1:0], PKTEND, and SLOE are automatically configured&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// for PORTA(IO PORTA Alternate Configuration)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// PA.7(PORTACFG.7=0, PORTACFG.6=0) as FSIN pin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// PA.1(PORTACFG.1=0) as TRIG pin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// PA.0(PORTACFG.0=0) as RESET pin&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PORTACFG = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// PA.3(WU2EN=0) as PWDN pin&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;WAKEUPCS &amp;amp;= ~0x02; // WU2EN=0&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;OEA = 0x08b; // Input FIFOADR[0:1], PKTEND, SLOE, OUTPUT(PA0, PA1, PA3)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//OEA = 0x03; // Input FIFOADR[0:1], PKTEND, PA3, OUTPUT(PA0, PA1)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IOA = 0x00; // pull up off&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA0 = 1; // RESET (active high)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;for (i = 0; i &amp;lt; 200; i++);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA0 = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA1 = 0; // TRIG (active high)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA3 = 0; // PWDN (active high)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PA7 = 0; // FSIN (active high)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// When IFCFG.1 = 1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// PB[0:7] is configured as FD[0:7]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;OEB = 0; // Input as FD[0:7]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IOB = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// When IFCFG.1 = 1 and any WORDWIDE bit = 1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// PD[0:7] is configured as FD[8:15]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;OED = 0; // Input as FD[8:15]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IOD = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;PORTECFG = 0x03; // needs to be set GSTATE to zero&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;OEE = 0x03; // IFCLK, CLKOUT&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IOE = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// set the CPU clock to 48MHz&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// CPUCS&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit7 :&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit6 :&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit5 : PORTCSTB (0 -&amp;gt; disable, 1-&amp;gt; enable RD#/WR# strobes of PORTC)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit4 : CLKSPD1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit3 : CLKSPD0 (00 -&amp;gt; 12Mhz, 01 -&amp;gt; 24Mhz, 10 -&amp;gt; 48Mhz, 11 -&amp;gt; x)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit2 : CLKINV (0 -&amp;gt; disable, 1 -&amp;gt; enable inverting CLKOUT)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit1 : CLKOE (0 -&amp;gt; disable, 1 -&amp;gt; enable CLKOUT signal)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// bit0 : 8051RES (1 -&amp;gt; reset 8051)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//CPUCS = ((CPUCS &amp;amp; ~bmCLKSPD) | bmCLKSPD1 | bmCLKOE);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;CPUCS = 0x12;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Slave_Fifo_Init();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EZUSB_InitI2C();&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// Initialize EZ-USB I2C controller&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;counter0_init();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;void TD_Poll(void) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Called repeatedly while the device is idle&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;switch (state_PA0) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case IDLE_STATE: break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case ON_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;PA0 = 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count_PA0 = counter0_get();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;state_PA0 = AUTO_INV_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case OFF_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;PA0 = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count_PA0 = counter0_get();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;state_PA0 = AUTO_INV_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case AUTO_INV_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if ((((DWORD)counter0_get() - (DWORD)count_PA0 + 0x10000) % 0x10000) &amp;gt;= BLINK_COUNT) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;PA0 ^= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;state_PA0 = IDLE_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;Slave_Fifo_Init();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;switch (state_PA1) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case IDLE_STATE: break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case ON_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;PA1 = 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count_PA1 = counter0_get();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;state_PA1 = AUTO_INV_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case OFF_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;PA1 = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count_PA1 = counter0_get();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;state_PA1 = AUTO_INV_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case AUTO_INV_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if ((((DWORD)counter0_get() - (DWORD)count_PA1 + 0x10000) % 0x10000) &amp;gt;= BLINK_COUNT) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;PA1 ^= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;state_PA1 = IDLE_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;switch (state_PA3) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case IDLE_STATE: break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case ON_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;PA3 = 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count_PA3 = counter0_get();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;state_PA3 = AUTO_INV_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case OFF_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;PA3 = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count_PA3 = counter0_get();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;state_PA3 = AUTO_INV_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case AUTO_INV_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if ((((DWORD)counter0_get() - (DWORD)count_PA3 + 0x10000) % 0x10000) &amp;gt;= BLINK_COUNT) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;PA3 ^= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;state_PA3 = IDLE_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;switch (state_PA7) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case IDLE_STATE: break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case ON_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;PA7 = 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count_PA7 = counter0_get();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;state_PA7 = AUTO_INV_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case OFF_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;PA7 = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;count_PA7 = counter0_get();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;state_PA7 = AUTO_INV_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;case AUTO_INV_STATE:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if ((((DWORD)counter0_get() - (DWORD)count_PA7 + 0x10000) % 0x10000) &amp;gt;= BLINK_COUNT) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;PA7 ^= 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;state_PA7 = IDLE_STATE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;BOOL TD_Suspend(void) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Called before the device goes into suspend mode&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return(TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;BOOL TD_Resume(void) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Called after the device resumes&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return(TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//-----------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;// Device Request hooks&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;// &amp;nbsp; The following hooks are called by the end point 0 device request parser.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;//-----------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;BOOL DR_GetDescriptor(void)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return(TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;BOOL DR_SetConfiguration(void) &amp;nbsp; // Called when a Set Configuration command is received&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Configuration = SETUPDAT[2];&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return(TRUE); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Handled by user code&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;BOOL DR_GetConfiguration(void) &amp;nbsp; // Called when a Get Configuration command is received&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP0BUF[0] = Configuration;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP0BCH = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;EP0BCL = 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return(TRUE); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Handled by user code&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;BOOL DR_SetInterface(void) &amp;nbsp; &amp;nbsp; &amp;nbsp; // Called when a Set Interface command is received&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;BYTE&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;updateDisplay = TRUE;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;AlternateSetting = SETUPDAT[2];&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// ...FX2 in high speed mode&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (EZUSB_HIGHSPEED()) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;// Change configuration based upon the Alt. Interface selected&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;switch (AlternateSetting) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;case High_Alt0_BulkIN:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2CFG = 0xE0; //bmVALID | bmIN | bmBULK; // EP2 is DIR=IN, TYPE=BULK, SIZE=512, BUF=4x&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// Clear out any committed packets&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x80;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x02;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x00;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// this is the length for high speed&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2AUTOINLENH = MSB(512);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2AUTOINLENL = LSB(512);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// Reset data toggle to 0&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;TOGCTL = 0x12; &amp;nbsp;// EP2 IN&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;TOGCTL = 0x32; &amp;nbsp;// EP2 IN Reset&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;case High_Alt1_IsocTripleIN:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// Only using endpoint 2, zero the valid bit on all others&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2CFG = 0xD8; //bmVALID | bmIN | bmISOC | bm1024 | bmQUAD // EP2 is DIR=IN, TYPE=ISOC, SIZE=1024, BUF=4x&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// Clear out any committed packets&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x80;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x02;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x00;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// this is the length for high speed&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2AUTOINLENH = MSB(1024);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2AUTOINLENL = LSB(1024);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// This register sets the number of Isoc packets to send per&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// uFrame. &amp;nbsp;This register is only valid in high speed.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2ISOINPKTS = 0x03;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case High_Alt2_IsocIN:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2CFG = 0xD8; //bmVALID | bmIN | bmISOC | bm1024 | bmQUAD // EP2 is DIR=IN, TYPE=ISOC, SIZE=1024, BUF=4x&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// Clear out any committed packets&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x80;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x02;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;FIFORESET = 0x00;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// this is the length for high speed&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2AUTOINLENH = MSB(1024);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2AUTOINLENL = LSB(1024);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;SYNCDELAY;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// This register sets the number of Isoc packets to send per&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// uFrame. &amp;nbsp;This register is only valid in high speed.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;EP2ISOINPKTS = 0x01;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"&gt
