Powerpoint ์—์„œ ๋ฐฉํ–ฅํ‚ค ์ด๋™์ด ๋„ˆ๋ฌด ๋Š๋ฆด ๋•Œ

๊ฐ์ฒด๋ฅผ ์›€์ง์ผ ๋•Œ ๋ฐฉํ–ฅํ‚ค๋กœ ์ด๋™ํ•˜๋ฉด, ์˜ˆ์ „์—๋Š” ํ•œ ์นธ์”ฉ ์›€์ง์ด๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋Š๊ปด์กŒ๋Š”๋ฐ ์ตœ๊ทผ์— ๋“ค์–ด์„œ๋Š” ์ •๋ง 1ํ”ฝ์…€ ๋งŒํผ๋งŒ ์ด๋™ํ•ด์„œ ๊ท€์ฐฎ์Œ์„ ์œ ๋ฐœํ•˜๊ณค ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋‹ต๋‹ตํ•˜๊ฒŒ ์›€์ง์ด๋Š” ๊ฑธ ๋˜๋Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ณ„ ๊ฑด ์—†์ง€๋งŒโ€ฆ ๋ณด๊ธฐ ํƒญ์œผ๋กœ ํ‘œ์‹œ ํ•ญ๋ชฉ์—์„œ โ€˜ํ™•์žฅ ์•„์ด์ฝ˜โ€™์ด ์•„์ฃผ ์ž‘๊ฒŒ ๋ณด์ธ๋‹ค. โ€˜๋ˆˆ๊ธˆ ๋ฐ ์•ˆ๋‚ด์„ โ€™ ์ด๋ž€ ์ œ๋ชฉ์˜ ์ฐฝ์ด ๋œจ๋ฉฐ, ์—ฌ๊ธฐ์„œ โ€˜๊ฐœ์ฒด๋ฅผ ๋ˆˆ๊ธˆ์— ๋งž์ถฐ ์ด๋™โ€™ ์„ ํด๋ฆญํ•œ๋‹ค. ๋์ด๋‹ค. ์ฐธ๊ณ ๋กœ ๊ฐœ์ฒด ์ด๋™ ๊ฐ„๊ฒฉ์„ ์ œ์–ดํ•˜๋ ค๋ฉด (3) ๋ฒˆ์—์„œ ๋ˆˆ๊ธˆ ๊ฐ„๊ฒฉ์„ ์กฐ์ •ํ•˜๋ฉด ๋œ๋‹ค!...

2018๋…„ 08์›” 12์ผ ยท 1 ๋ถ„

Atomic Operation ์œผ๋กœ ํ•˜๋Š” ๋™์‹œ์„ฑ ์ œ์–ด

Test-And-Set (TAS) TAS ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. testAndSet ์ด๋ผ๋Š” function ์„ ๊ฐ€์ง€๊ณ  ์•„๋ž˜์˜ do...while ๋ฌธ์„ ์“ฐ๋ ˆ๋“œ A, B ์—์„œ ๋™์‹œ์— ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด ๋ณด์ž. ์ด ๋•Œ lock ์€ ๊ฐ™์€ ๋ณ€์ˆ˜์ด๋‹ค. function TestAndSet(boolean_ref lock) { boolean initial = lock lock = true return initial } do { while(TestAndSet(&lock)) ; // do nothing // critical section lock = false; // remainder section } while(true); ์šฐ์„  TestAndSet() ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•œ๋‹ค....

2018๋…„ 04์›” 24์ผ ยท 3 ๋ถ„

Timsort

ํ•™๋ถ€์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—…์„ ๋“ค์œผ๋ฉด, ๊ฐ€์žฅ ๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ญ๋ƒ๋Š” ์งˆ๋ฌธ์— ์‰ฝ๊ฒŒ Quicksort ๋ผ๊ณ  ๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ์‹ค์ œ๋กœ ํ˜„์—…์—์„œ๋„ ์ ์šฉํ•˜๊ธฐ ๊ฐ€์žฅ ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์ฐจ์šฉ๋˜๋Š” ํŽธ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ์€ํƒ„์€ ์„ธ์ƒ์— ์กด์žฌํ•˜์ง€ ์•Š๋“ฏ, Quicksort ์—ญ์‹œ ํŠน์ • ์ผ€์ด์Šค์—์„œ๋Š” ์„ฑ๋Šฅ์ด ๋‚ฎ๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋” ์‹ฌ๊ฐํ•œ(?) ๊ฒƒ์€, ์ด ํŠน์ • ์ผ€์ด์Šค๊ฐ€ ํ˜„์‹ค์—์„œ๋Š” ๊ฝค๋‚˜ ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ์ผ€์ด์Šค๋ž€ ๋ฐ”๋กœ โ€˜๊ฑฐ์˜ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐโ€™ ์ด๋‹ค....

2018๋…„ 04์›” 23์ผ ยท 4 ๋ถ„

gdb commands ์ด์šฉํ•˜๊ธฐ

gdb/ddd ์—์„œ commands ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ breakpoint ์˜ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ๋‹ค์–‘ํ•˜๊ฒŒ ์‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒ ์ง€๋งŒ, ๋งค๋‰ด์–ผ์—์„œ ์ œ์‹œํ•œ ์ผ€์ด์Šค๊ฐ€ ๊ต‰์žฅํžˆ ํŽธํ•ด์„œ ๋”ฐ๋กœ ์ •๋ฆฌํ•œ๋‹ค. ์ฐธ๊ณ  : ๋งค๋‰ด์–ผ Breakpoint ์ƒํ™ฉ์„ ์ถœ๋ ฅํ•˜๊ธฐ 10 *sAddr = malloc(aSize); 11 if (*sAddr != NULL) 12 ... ์œ„ ์ฝ”๋“œ์—์„œ if ๋ฌธ์— breakpoint ๋ฅผ ๊ฑธ๊ณ , ํ• ๋‹น๋ฐ›์€ ์‹œ์ž‘ ์ฃผ์†Œ์™€ ๊ทธ ํฌ๊ธฐ๋ฅผ ๋ณด๊ณ ์ž ํ•œ๋‹ค. ํ•œ๋‘๋ฒˆ ๋ฐœ์ƒํ•˜๋Š” ๊ฑฐ๋ผ๋ฉด breakpoint ๋ฅผ ๊ฑธ์–ด ๋‘” ๋‹ค์Œ print ๋‚˜ graph display (ddd ์ „์šฉ) ์œผ๋กœ ๋„์›Œ์„œ ๊ด€์ฐฐํ•˜๋ฉด ๋œ๋‹ค....

2018๋…„ 02์›” 06์ผ ยท 1 ๋ถ„

Intel VTune Memory Bandwidth ๋ถ„์„ํ•˜๊ธฐ

Intel VTune ์œผ๋กœ Memory Bandwidth ๋ฅผ ๋ถ„์„ํ•˜๋ ค๋ฉด, ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋„ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋”ฉ์‹œ์ผœ์•ผ ํ•œ๋‹ค. (์ฐธ๊ณ ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„์€ ๋ฆฌ๋ˆ…์Šค์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.) ํ•ด๋‹น ์ž‘์—…์„ ํ•˜์ง€ ์•Š๊ณ  โ€˜General Exploration > Analyze memory bandwidthโ€™ ๋ฅผ ์ฒดํฌํ•˜๋ฉด ์—„ํ•œ ๊ฒฝ๊ณ ์ฐฝ์ด ๋ฐ˜๊ธธ ๊ฒƒ์ด๋‹ค. ์ด ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด๋„ ์ข‹์ง€๋งŒ, VTune ์ด ์„ค์น˜๋œ ๊ฒฝ๋กœ์—์„œ sepdk/src/README.txt ๋ฅผ ๋ณด๋Š” ๊ฒŒ ๋” ์‰ฝ๋‹ค. ์ด ๋‚ด์šฉ์„ ์š”์•ฝํ•˜๋ฉด, ์ปค๋„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ฒดํฌํ•œ๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋ชจ๋“ˆ ๋กœ๋”ฉ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค....

2018๋…„ 01์›” 22์ผ ยท 1 ๋ถ„

Office 2016 ์ปค์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„๊ธฐ

Office 2016 ๋ถ€ํ„ฐ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์ปค์„œ๊ฐ€ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์›€์ง์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ์‹ค์ œ ์ž…๋ ฅ ์†๋„๋Š” ๊ฐ™์„์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ, ๋ฌธ์„œ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์ž๋‹ˆ ์กฐ๊ธˆ ๋‹ต๋‹ตํ•œ ๋Š๋‚Œ์ด ๋“ค์—ˆ๋‹ค. ์กฐ๊ธˆ ๋Š๋ฆฌ๊ฒŒ ์ž…๋ ฅ๋˜๋Š” ๋Š๋‚Œ? ๊ทธ๋ž˜์„œ ์ด๊ฑธ ๋Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋‘ ๊ฐ€์ง€ ์ฐพ์•˜๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด๋ผ ๊ท€์ฐฎ์•˜๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ทธ ๊ฒƒ๋ณด๋‹จ ๊ฐ„๋‹จํ•˜๋‹ค. ์•„๋ž˜ ์Šคํฌ๋ฆฐ์ƒท ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ€ ์ฒดํฌ๋ฅผ ํ•ด์ œํ•˜๋ฉด ๋œ๋‹ค. ์ œ์–ดํŒ > ์‹œ์Šคํ…œ์œผ๋กœ ๋“ค์–ด๊ฐ„ ๋‹ค์Œ, ๊ณ ๊ธ‰ ์‹œ์Šคํ…œ ์„ค์ •์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค....

2018๋…„ 01์›” 16์ผ ยท 1 ๋ถ„

Java Web Application ์ž…๋ฌธ (1) ์ค€๋น„์šด๋™

Java? ์ „ํ†ต์˜ APM, Node.js ๋ชจ๋‘ ํ•œ ๊ฑธ์Œ ์ •๋„๋Š” ์ž์‹ ์žˆ๊ฒŒ ๋—„ ์ˆ˜ ์žˆ๋Š” (?) ์ˆ˜์ค€์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ๊ฐ‘์ž‘์Šค๋Ÿฐ Java Web Application ๋„์ „์ด๋ผ๋‹ˆ. ๋ฐ”๊นฅ ์„ธ์ƒ(?) ์—์„  ์•„์ง๋„ Java ๊ฐœ๋ฐœ์ž๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ํ˜„์‹ค์ด๋‹ค. ์ด์ œ ๊ทธ๊ฒƒ์„ ๋Œ€๋น„ํ•˜๋Š” ์ฐจ์›์ด๋‹ค. Java ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ๋น„๋นŒ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ธฐ๋„ ํ•˜๋‹ค. (๊ฐœ์ธ์ ์œผ๋กœ, ์ด๋Ÿฐ ๋Œ€์ค‘์„ฑ์ด Java ๊ฐœ๋ฐœ์ž์˜ ๊ฐ€์น˜๋ฅผ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค๊ณ  ์ „ํ˜€ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. Java ๊ฐœ๋ฐœ์ž๋Š” ๋งŽ์ง€๋งŒ, ์ข‹์€ Java ๊ฐœ๋ฐœ์ž๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ๊นŒ....

2018๋…„ 01์›” 09์ผ ยท 2 ๋ถ„

Gitlab ์•„๋ฐ”ํƒ€/์ฒจ๋ถ€ํŒŒ์ผ ์ƒ๋Œ€ ๊ฒฝ๋กœ ์„ค์ •

Gitlab์˜ External_Url ์„ ์‹ค์ œ ์„œ๋ฒ„ ์ฃผ์†Œ์™€ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ๋•Œ์—”, ์‹ค์ œ nginx ์—๋„ ํ•ด๋‹น ๋„๋ฉ”์ธ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒŒ ๋งž๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ์ฒจ๋ถ€ํŒŒ์ผ๊ณผ ์•„๋ฐ”ํƒ€ ์ด๋ฏธ์ง€๊ฐ€ ๋ชจ๋‘ ๊นจ์ ธ๋‚˜์˜จ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌ๊ธฐ ์ „์— Gitlab ์ฐจ์›์—์„œ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ ์•„๋ฐ”ํƒ€๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• โ€˜๋„โ€™ ์žˆ์œผ๋‹ˆ ํŽธ๋ฒ•์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค. ์•„๋ฐ”ํƒ€ ์ƒ๋Œ€ ๊ฒฝ๋กœ ์„ค์ • /opt/gitlab/embedded/service/gitlab-rails/app/models/concerns/avatarable.rb ํŒŒ์ผ์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ˆ˜์ •ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ, url_base ์— ๋ง๋ถ™์ด๋Š” ์ฝ”๋“œ๋“ค์„ ์ „๋ถ€ ์ฃผ์„์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค....

2018๋…„ 01์›” 08์ผ ยท 2 ๋ถ„

Gitlab Markdown Parser ๋ฐ”๊พธ๊ธฐ

Git ๊ธฐ๋ฐ˜ ํ”„๋กœ์„ธ์Šค ๋„๊ตฌ์ธ Gitlab ์€ ์˜คํ”ˆ์†Œ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— Community Edition ์„ ์“ฐ๊ฑด, Enterprise Edition ์„ ์“ฐ๊ฑด ์ƒ๊ด€์—†์ด ๋ง˜๋Œ€๋กœ ์ˆ˜์ •ํ•ด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฌผ๋ก  ์ ์ ˆํ•œ ๊ฐ(?)์œผ๋กœ ์ˆ˜์ •ํ•  ๊ณณ์„ ์ฐพ์•„์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์€ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” Gitlab์—์„œ ๋ฌธ์„œ ์ž‘์„ฑ์— ํ•„์š”ํ•œ Markdown ์˜ Parser ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋‘”๋‹ค. Ruby ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ์ „์ฒด ๋นŒ๋“œ ์ˆœ์„œ๊ฐ€ ์ •๊ณต๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ด์ง„ ์•Š๊ฒ ์ง€๋งŒ. Gitlab์˜ Markdown Parser๋Š” Redcarpet ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์•„๋งˆ Jekyll ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ Redcarpet ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋‹ค....

2018๋…„ 01์›” 03์ผ ยท 3 ๋ถ„

oh-my-zsh ์ƒ‰๊น” ๊ณ ๋ฅด๊ธฐ

oh-my-zsh ํ…Œ๋งˆ ์ž‘์—…์„ agnoster ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ์ณ์„œ ์‚ฌ์šฉ ์ค‘์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ฃผ์„์„ ๋ณด๋ฉด ๋‹ค์Œ ์ƒ‰๊น”๋งŒ ์ง€์›ํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋‚˜์˜จ๋‹ค. white, black, red, blue, green, yellow, cyan, magenta ์‚ฌ์ „์— ์ •์˜๋œ ๊ฒƒ ์™ธ์˜ ์ƒ‰์ƒ์„ ์„ค์ •ํ•˜๋ ค๋ฉด, ๋‹ค์Œ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ํ„ฐ๋ฏธ๋„ ์ข…๋ฅ˜๊ฐ€ xterm-256color ์—ฌ์•ผ ํ•œ๋‹ค. (xterm ์ด๋ฉด ์ƒ‰๊น”์„ ์ •ํ•ด๋„ ์ œ๋Œ€๋กœ ์ถœ๋ ฅ์ด ์•ˆ๋œ๋‹ค.) oh-my-zsh ์—์„œ, %{%K{123}%} ๋˜๋Š” %{%F{123}%} ๋ฅผ ๊ฐ€์ง€๊ณ  ์ƒ‰๊น”์„ ์ฐพ๋Š”๋‹ค....

2017๋…„ 12์›” 13์ผ ยท 1 ๋ถ„