분류 전체보기
하스켈 패키지 삭제하기 How to uninstall a Haskell package installed with stack?
2018. 2. 6.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 (blackbriar) root@gcloudx:~/blackbriar/blackbriar# stack --helpstack - The Haskell Tool Stack Usage: stack [--help] [--version] [--numeric-version] [--hpack-num..
cabal install 사용방법 (1) How to cabal install (1)
2018. 2. 6.cabal은 하스켈로 작성된 소프트웨어를 다운로드받고 빌딩하는 명령프로그램이다. 이를 통해 Hackage repository 에 존재하는 모든 패키지를 다운받아 설치할 수 있다. 가끔 알수없는 오류를 일으키기도 하는데 본 포스팅읉 통해 올바른 cabal 패키지 설치방법을 알아보자. cabal, Cabal, cabal-install혼동을 피하기 위해 먼저 Cabal wiki page 의 설명을 먼저 보자."Cabal 은 패키지 및 빌드 시스템이다. Cabal 은 단지 패키지의 생성과 그 컨텐츠의 빌딩에만 관여한다. 패키지를 관리하지는 않는다. Cabal-Install 은 카발 패키지를 설치한다. 그것은 빌드시스템인 Cabal 과는 구분된다. 이러한 점들은 종종 새로운 사용자들에게 혼동을 일으킨다. 게다가 ..
2018 AICPA 시험 UX 변경내용
2018. 2. 5.2018년 4울 1일부터 User Experience (UX) 이 향상된 환경에서 시험이 치러집니다. 이미 지난해 12월 15일, AICPA는 이런 내용을 담은 새로운 샘플테스트를 공개한 바 있습니다. 새로운 환경에서 시험을 앞둔 분들을 위해 보기 좋게 주요 내용을 정리하였으니 참고하시기 바랍니다. 1. Larger, High Definition Monitors at Prometric Test Centers 더욱 커진 스크린 덕분에 시뮬레이션 문제 풀이 과정에서 효율성이 높아졌습니다. 예를 들어, 시뮬레이션 인터페이스의 경우 좌우측을 나눠서 응답영역과 작업영역을 나눌 수 있게 되어 시뮬레이션 풀이에 많은 도움이 될 전망입니다. 2. Microsoft Excel이제 Microsoft Excel 이 CPA ..
Haskell Yesod의 템플릿 언어 세익스피어를 활용하여 웹페이지 만들기 (2)
2018. 2. 3.Haskell Yesod의 템플릿 언어 세익스피어를 활용하여 웹페이지 만들기 (2) 이전 포스팅에서는 헤더와 푸터 영역의 작성에 대해서 알아봤습니다. 현시점에서 샘플사이트의 모습은 대략 이런 느낌일 것입니다.이번 회차에서는 아래의 부분을 완성해보겠습니다.슬라이드쇼메인 컨텐츠템플릿 파일에 대해서 templates/default-layout-wrapper이 파일에는head태그에 포함된 meta태그와 title태그 및 닫힌 body 태그의 앞에 배치된 스크립트 등을 기술합니다. 사이트 전체의 레이아웃 헤더, 푸터, 사이드바 등의 구조)는 기술하지 않고, 해당 정보는 차후에 언급할 templates/default-layout 에 기술합니다.templates/default-layout이 파일에서는 사이트의 레이아..
Haskell Yesod의 템플릿 언어 세익스피어를 활용하여 웹페이지 만들기 (1)
2018. 2. 1.Haskell Yesod의 템플릿 언어 세익스피어를 활용하여 웹페이지 만들기 (1) 앞으로 2개의 포스팅을 통해 Yesod로 웹페이지를 구현해보겠습니다.먼저, Yesod로 Web 페이지를 구현하기 위한 템플릿 언어에는 다음이 있습니다.Hamlet들어쓰기를 활용한 네스트 표현Cassius (Lucius)Lucius 는 CSS 의 슈퍼세트로、CSS 기술Lucius 는 {} 를 통해 네스트 표현Julius들어쓰기로 네스트를 표현이상을 합쳐서 Shakespeare라고 부르고, 각각은 HTML, CSS, Javascript 에 대응합니다. HTML 이 Hamlet 에, Cassius (Lucius) 이 CSS 에, Javascript 에 Julius 가 대응하는 등 첫 글자가 동일한 것은 뭐 우연일 것입니다. W..
NASBA 새로운 Gateway and National Candidate Database 구축 작업 안내
2018. 1. 29.NASBA 시스템 마이그레이션 기간 동안 NTSs 와 Payments 가 불가합니다.Uniform CPA 시험과 관련한 응시생들의 환경 개선의 일환으로 시스템 개선 작업이 곧 런칭을 앞두고 있습니다. 새로운 버전의 Gateway and National Candidate Database 가 2018년 3월 5일(월) 런칭이 됩니다.이번 개선으로 추가적인 사용자 친화 기능 및 개인정보 보호를 위한 보안 강화 등 전반적인 기능 향상이 기대됩니다. 다만 시스템상 성공적으로 새로운 시스템을 이식하기 위해 아래 기간 동안 일부 업무가 중단됩니다. 이번 마이그레이션 기간 동안 Notices to Schedule (NTS) 출력 및 재출력, 그리고 payments를 진행하실 수 없습니다. 따라서 모든 NTS 와 pay..
Yesod의 위젯에 대해서 (1)
2018. 1. 27.Widget 이란?Yesod의 경우 위젯의 역할은 HTML, CSS, Javascript 등의 컴포넌트를 적절히 하나의 HTML로 정리하기 위한 통일된 표현을 부여하기 위한 것입니다. 예를 들면, Web 페이지를 기술하는 실제에서는 아래의 형식적인 관습을 따르는 편이 좋습니다.CSS는 페이지의 head 부분에 기술한다Javascript은 body의 마지막에 기술한다jQuery 등의 외부 파일을 여러번 회독하지 않음타이틀태그는 한 번 출현위젯 컴포넌트컴포넌트의 종류실제 태그Yesod에서 취급하기 위한 함수 또는 템플릿 언어타이틀 ... setTitle외부의 스타일시트addStylesheet계열외부의 JavascriptaddScript계열CSS 코드Cassius or LuciusJavascript 코드Jul..
2018년 7월 적용 AICPA 시험 블루프린트 발표 New CPA Exam Blueprints Released
2018. 1. 26.AICPA에서는 새로운 CPA Exam Blueprints를 발표했습니다.https://www.aicpa.org/content/dam/aicpa/becomeacpa/cpaexam/examinationcontent/downloadabledocuments/summary-of-changes-to-exam-blueprints-effective-july-2018.pdf2018년 3쿼터 이후부터 적용되기는 하지만, 주요 내용들을 미리 살펴봄으로써 응시 시기를 결정하시는데 참고하시기 바랍니다.AICPA 발표에 따르면, 변경내용은 2018년 7월 1일 시작되는 3쿼터 시험부터 유효합니다. 그럼 아래에서 수험생에게 어떤 영향을 미칠 가능성이 있는지 섹션별로 변경 내용을 살펴보겠습니다. FARFAR 섹션에는 2개의 주요한..
하스켈 익스텐션 사용법 How to Enable Extensions
2018. 1. 26.GHC extension은 적어도 3가지 방법으로 단독 또는 결합하여 사용가능합니다. ExtensionName 이라고 불리는 가상의 extension에 대해 알아봅니다. LANGUAGE Pragma개별 파일에 대해서는 파일 상단에 {-# LANGUAGE ExtensionName #-} 라는 형식으로 사용이 가능합니다 (module 헤더 이전, 또는 첫 번째 import 이전 및 module 헤더가 없다면 definition 이전에 위치). 여러 개의 LANGUAGE pragmas 를 사용함으로써 여러개의 extension 도 사용가능합니다. 예를 들면, ScopedTypeVariables, LiberalTypeSynonyms, 와 MultiWayIf 라는 3개의 extension 을 사용하려면 다음의 3..
Bitcoin - It may fail but we now know how to do it
2018. 1. 23.Bitcoin may fail; but then it will be easily reinvented as we now know how it works. In its present state, it may not be convenient for transactions, not good enough to buy your decaffeinated expresso macchiato at your local virtue-signaling coffee chain. It may be too volatile to be a currency, for now. But it is the first organic currency. [원문보기] https://medium.com/opacity/bitcoin-1537e616a074..
하스켈 Yesod 튜토리얼 - 페이지 추가하기 Minimal echo application
2018. 1. 19.아래 4개의 파일과 디렉토리에 주안점을 두고 본 튜토리얼을 진행한다. 현재 구성은 다음 이미지와 같다.config/routesHandler/templates/config/modelsconfig/routes 는 URL → Code 로 매핑하는 설정을 하는 파일이다. config/models 은 데이터베이스 테이블 같은 지속성 객체에 대한 설정을 다룬다. templates/HTML, js, 그리고 CSS 템플릿 파일을 포함한다.Handler/ 디렉토리는 URL 을 통해 접근되는 코드를 포함한 파일이 들어있다.Yesod framework의 보안성을 평가하기 위해 아래와 같이 간단한 echo 어플리케이션을 만든다. /echo/[some text]로 접속했을 때 h1 블럭 안에 있는 "some text"를 반환하..
AICPA (미국공인회계사) 시험 연도별/분기별/과목별 합격률 (2006년~2017년)
2018. 1. 19.AICPA (미국공인회계사) 시험 연도별/분기별/과목별 합격률 (2006년~2017년) 년도 섹션 Q1 Q2 Q3 Q4 전체 2017 AUD 43.47 52.00 52.15 47.69 48.59 2017 BEC 50.39 55.09 55.35 55.33 52.99 2017 FAR 43.14 43.76 47.58 42.50 44.42 2017 REG 46.10 48.32 49.31 45.89 47.24 년도섹션Q1Q2Q3Q4전체2016AUD 44.87 48.70 45.30 44.41 45.862016BEC55.40 56.33 57.55 52.87 55.41 2016FAR44.74 45.61 48.07 43.24 45.55 2016REG 47.55 49.9850.19 45.93 48.45 년도 섹션 Q1 Q..
하스켈 Yesod Illegal view pattern: fromPathPiece -> Just dyn_anHx
2018. 1. 19.1234567891011121314151617 blackbriar-0.0.0: build (lib)Preprocessing library blackbriar-0.0.0...[11 of 12] Compiling Handler.Echo ( src/Handler/Echo.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/build/Handler/Echo.o )[12 of 12] Compiling Application ( src/Application.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/build/Application.o ) /src/Application.hs:50:1: error: Illegal view pattern: f..
하스켈 Yesod Echo.hs:6:48: error: parse error on input ‘{’
2018. 1. 19.하스켈 Yesod 페이지를 추가하는 튜토리얼을 진행하는 중 다음과 같이 Echo.hs:6:48: error: parse error on input ‘{’ 을 만나는 경우 다음과 같이 처리한다. src/Echo.hs 123456module Handler.Echo where import Import getEchoR :: String -> Handler HtmlgetEchoR theText = defaultLayout [whamlet|#{theText}|]cs 상기 소스를 rebuild 하면 다음과 같은 에러 발생1234567[11 of 12] Compiling Handler.Echo ( src/Handler/Echo.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/bu..
2018 UX 변경이 반영된 새로운 샘플 테스트를 경험해보세요. NEW SAMPLE CPA EXAM WITH 2018 UX CHANGES
2017. 12. 18.AICPA는 2018년 4월부터 적용될 개선된 사용자 경험이 반영된 새로운 샘플 테스트를 공개하였습니다. 새로운 환경에 대비하여 아래의 주요내용을 숙지하시고 새로운 형태의 샘플 테스트를 직접해보실 것을 강력히 추천드립니다. 무엇이 바뀌었나? 수험생의 입장에서 좀 더 나은 테스팅 환경을 만드는 것이 이번 개선의 주요내용입니다. Larger monitors이번 업데이트의 핵심 중 하나는 프로메트릭 센터의 23인치 HD 모니터의 도입입니다. 좀 더 큰 모니터가 제공됨으로써, 더욱 넓은 화면에서 다수의 화면을 나열한 상태에서 시험이 가능하게 되었습니다. Task-based Simulation (TBS)를 좌측에 두고, Authoritative Literature 나 기타 보기 등은 우측에 두고 시험 진행이 가능..
구글 애드센스 페이지 수준 광고 구현하기
2017. 12. 16.애드센스로부터 다음의 이메일을 받았습니다. 페이지 수준 광고를 통해 광고효과를 더 높여보자는 것인데요, 페이지 수준 광고를 어떻게 구현하는지 본 포스팅에서 살펴봅니다. 먼저 애드센스 계정에 로그인한 후, 왼쪽 탐색 패널에서 내 광고를 클릭합니다. 콘텐츠를 클릭한 후 페이지 수준 광고를 클릭합니다. '페이지 수준 광고' 페이지에서 제어 기능을 사용하여 사이트에 게재할 광고 형식을 선택합니다. 다음 2가지 유형 - 앵커/오버레이 광고 및 모바일 전면광고 - 중에서 선택하실 수 있습니다. 코드 가져오기를 클릭합니다. 광고 코드를 복사하여 페이지 수준 광고를 게재하려는 각 페이지의 태그(또는 본문 상단)에 삽입합니다. 페이지당 한 번만 수행하면 됩니다. 광고 코드는 페이지 수준 광고를 게재하려는 모든 사이트의 ..
2018년 회계 및 재무 산업군 현황 State of the Accounting and Finance Industries in 2018
2017. 12. 8.2018년 회계 및 재무 산업군 현황State of the Accounting and Finance Industries in 2018 2018년이 다가오면서 새해에는 본인이 몸다고 있는 직종의 전망이 어떤지? 그리고 자신의 봉급 수준이 평균과 비교해서 또 어떤지? 2018년에는 어떤 스킬이 더 요구될지?? 등등에 대한 궁금증이 만으실 겁니다. NASBA에서는 이런 궁금증에 답하기위해, Parker + Lynch’s 2018 Salary Guide 데이터를 바탕으로 2018년 연봉, 스킬, 그리고 회계/재무 직군에 종사하는 세대 등에 대해 한눈에 쉽게 볼 수 있도록 인포그래픽을 만들었습니다. 이번 인포그래픽에서는 다음의 핵심 정보를 보실 수 있습니다. 평균 급여가 높은 직업군전망이 밝은 산업군오늘날 회계전..
핀터레스트 오늘의 이미지 2017년 12월 8일 Pintereest pin of the day
2017. 12. 8.핀터레스트 오늘의 이미지 2017년 12월 7일Pintereest pin of the day
핀터레스트 오늘의 이미지 2017년 12월 7일 Pintereest pin of the day
2017. 12. 7.핀터레스트 오늘의 이미지 2017년 12월 7일Pintereest pin of the day
구글 애널리틱스 중복 호스트 이름 - 애널리틱스 필터 적용하기
2017. 12. 7.다음과 같은 애널리스틱 알람이 떴다. 세부정보를 보면 중복 호스트 이름으로 인해서 구체적인 트래픽 유입이 실제보다 적게 나올 수 있다고 한다. 애널리스틱 찾기 및 바꾸기 도움말(https://support.google.com/analytics/answer/1034834?hl=ko) 페이지를 보면 다음과 같이 필터를 통해서 해당 문제를 수정할 수 있다고 한다. 찾기 및 바꾸기 필터를 이용해 보고서 보기의 데이터를 처리 과정에서 변경할 수 있습니다. 예를 들어 www. 프리픽스를 삭제하여 호스트 이름을 통합할 수 있으며, 코드 또는 긴 경로명을 간단하고 직관적인 버전으로 변경하여 데이터를 읽기 쉽게 만들 수 있습니다. 찾기 및 바꾸기 필터를 만드는 방법은 다음과 같다.자세한 도움말은 https://suppo..
2018년도 학점은행 학습자등록 및 학점인정 일정 공고
2017. 12. 7.2018년도 학점은행 학습자등록 및 학점인정 일정 공고2018년도 학점은행제 학습자 등록 및 학점인정신청 등의 각종 신청 및 접수 일정이 공고되었습니다. 본 포스팅에서는 학습자등록과 학점인정신청 일정 및 구비서류에 대해 알아봅니다. ■ 학습자 등록1) 세부내용 처음 학점인정을 신청하거나 그 이전에 학점은행제 학습자로 인적사항, 희망학위과정/전공 등 정보를 등록하는 절차최초 1회 신청으로 완료되며, 학점인정신청과 동시 가능수수료는 4,000원2) 신청시기 및 방법신청방법 1/4분기 2/4분기 3/4분기 4/4분기 온라인 12/15(금)~1/31(수) 4/2(월)~4/30(월) 6/15(금)~7/31(화) 10/1(월)~10/31(수) 본원/교육청 방문 1/2(화)~1/15(월) 4/2(월)~4/10(화) ..
회계사 연봉 10대 도시 (미국기준) Top 10 cities for accountants in 2017
2017. 12. 6.적절한 커리어 패스를 선택하는 것은 매우 중요한 결정입니다. 직업의 안정성, 지속적인 성장 가능성, 연봉 인상, 그리고 기타 본인의 라이프 스타일에 부합하는가 등을 따져볼 것입니다. 다행히도 회계 분야는 이러한 조건들에 상당히 부합하는 괜찮은 직종입니다. Indeed.com 에서 수행한 조사에 따르면, 급여 측면에서 회계 직종을 선택시 유리한 10개의 도시입니다. 1 ATLANTA $52,312 2 CHARLOTTE $52,214 3 SAN JOSE $51,092 4 ST. LOUIS $50,849 5 SEATTLE $49,916 6 BALTIMORE $47,983 7 BOSTON $47,938 8 SAN FRANCISCO $47,780 9 DETROIT $47,637 10 WASHINGTON, D.C...
AICPA(미국공인회계사) 합격자 이력서 작성법
2017. 12. 6.AICPA 시험을 합격 또는 준비중인 상황에서 이를 어떻게 이력서에 포함시키는 방법에 대해 알아본다. 물론 지원자가 현재 재직중이냐, 아니면 학교를 졸업하고 첫 직장을 구하는 입장이냐 등에 따라 CPA 시험 진행상황에 대한 언급 위치나 방법은 달라질 것이다. 이력서의 적절한 곳에 CPA 시험 진행상황을 기재한다.Certifications 섹션을 이력서 상단 근처에 별도로 만드는 것도 효과적인 방법이다. 이 섹션에서 지금까지 이루어낸 시험 합격 및 라이센스 절차 등을 상세히 언급하는 것도 좋다. CPA 외에 추가할 자격증이 더 있다면 Certifications 섹션은 더 빛을 발할 것이다. 더군다나 해당 기업이 CPA를 우대해주는 상황이라면, 회사측에서 절대 놓칠 수 없도록 프로필 등 이력서의 다양한 곳에..
하스켈 Starting out - (9) 타입 변수 Type variables
2017. 12. 5.head 함수의 타입이 무엇이라고 생각하는가? head 함수는 리스트를 받아 첫 번째 요소를 반환한다. 지금 확인해보자. Prelude> :t headhead :: [a] -> a여기서 a는 무엇인가? 타입을 뜻하는 것인가? 앞서 타입은 대문자로 쓴다고 말한바 있다. 그러므로 a는 타입이 아니다. 타입이 아니라 타입변수(type variable)이다.a는 어떤 타입이라도 될 수 있다는 의미이다. 다른 언어의 제너릭같은 개념이다. 타입 변수를 가지고 있는 함수는 다형함수(polymorphic functions) 라고 부른다. head 의 타입 선언은 어떤 타입의 리스트를 받아서 그 타입의 한 원소를 반환한다는 말이다. fst 함수를 기억하는가? 페어의 첫 번째 요소를 반환하는 함수이다. 타입을 확인해보자...
하스켈 Starting out - (8) 타입
2017. 12. 5.하스켈은 정적 타입 시스템이다. 모든 표현식의 타입이 컴파일 당시에 이미 알려져있다. 예를 들어 불린 타입을 어떤 숫자로 나눌려고 하면, 컴파일되지 않는다. 프로그램이 충돌하기 전에 컴파일 당시에 이런 오류가 발견되는 것이 좋다. 하스켈의 모든 것은 타입을 가지며, 따라서 컴파일러는 컴파일하기 전에 프로그램에 대해 어느 정도 판단을 할 수 있다. 자바나 파스칼과는 다르게 하스켈은 타입추론(type inference)을 가진다. 만약 숫자를 쓰면, 굳이 하스켈에게 그것이 숫자라고 말할 필요가 없다는 것이다. 하스켈에 있어 타입 시스템을 이해하는 것은 매우 중요하다.타입은 모든 표현식이 가지는 일종의 라벨이다. 표현식이 어떤 카테고리에 속하는지 말해주는 셈이다. 표현식이라는 것은 True 같은 불린이나 "h..
Error haskell: Variable not in scope
2017. 12. 4.다음과 같이 Variable not in scope 에러가 발생하는 경우Prelude> addThree :: Int -> Int -> Int -> Int :89:1: error: Variable not in scope: addThree :: Int -> Int -> Int -> Int 이 경우에는 다음과 같이 멀티플 라인 입력을 해야한다. 아니면 해당 코드를 파일로 저장하여 :load 을 이용하여 로딩할 수도 있다.Prelude> :{Prelude| addThree :: Int -> Int -> Int -> IntPrelude| addThree x y z = x + y + zPrelude| :}Prelude> addThree 3737 383839 393939393939393939781515Prelude>
하스켈 Starting out - (7) 튜플 Tuples
2017. 12. 2.하나의 값에 다수의 값을 저장한다는 측면에서 튜플은 리스트와 유사하다. 하지만 몇 가지 근본적인 차이점이 있다. 숫자의 리스트는 숫자의 리스트일 뿐이다. 그 자체가 타입이고 하나의 숫자만 갖느냐 아니면 무한개의 숫자를 갖느냐는 아무런 문제가 되지 않는다. 하지만 튜플은 결합시킬 값의 갯수를 정확히 알고 있을 때 사용할 수 있다. 얼마나 많은 요소를 포함하고 있고 그 요소의 타입이 무엇인지에 따라 타입 또한 결정된다. 튜플은 괄호로 표시되고 구성요소는 콤마로 구분된다.다른 주요한 차이점은 구성요소들이 동질(homogenous)의 것일 필요는 없다는 것이다. 리스트와 다르게 튜플은 다양한 타입의 요소를 포함할 수 있다.하스켈에서 2차원의 벡터를 어떻게 나타낼 수 있을지 생각해보자. 하나의 방법은 리스트를 사..
하스켈 Starting out - (6) list comprehension
2017. 12. 2.10보다 작은 자연수를 2배로 곱하는 리스트를 만들려면 take 10 [2,4..]와 같은 방식으로 작성할 수 있다. 이와는 달리 list comprehension 을 사용할 수 있는데, 이는 set comprehensions과 매우 유사하다. 아래에서 사용한 list comprehension 즉, [x*2 | x [x*2|x 그러면 위의 구문에 조건을 붙여보자. 이제 2배를 했을때 12보다 큰 원소만 골라내보자. 다음과 같다.Prelude> [x*2|x = 12][12,14,16,18,20]Prelude>그러면 50에서 100까지 모든 숫자에 대해서 7로 나누는 경우 나머지가 3인 원소만 골라내보자.Prelude> [x|x boomBangs xs = [ if x [ x | x [x*y | x [adje..
ghci, stack ghci 버전 확인하기
2017. 12. 2.다음과 같이 함수를 정의할 때 parse error 가 나는 것은 ghci 버전 차이에 따른 것이다. GHCi 가 7.x 또는 그 미만인 경우에는 let 을 통해 함수를 정의해야 한다. Prelude> boomBangs xs = [if x
하스켈 Starting out - (5) range, cycle, repeat, replicate 함수
2017. 12. 2.Range 함수는 숫자, 알파벳 등 셀수 있는 원소들을 산술적으로 나열할 때 유용하게 쓰인다. 예를 들어, 1에서 20까지 모든 자연수를 포함하는 리스트를 만들려면 [1..20]라고 작성하면 된다. 물론[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 와 같이 작성해도 똑같으나 이건 멍청한 방법이다. Prelude> [1..20][1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]Prelude> ['a'..'z']"abcdefghijklmnopqrstuvwxyz"Prelude> ['K'..'Z']"KLMNOPQRSTUVWXYZ"Prelude>그러면 1과 20 사이에 있는 짝수로 이루어진 리스트는 어떻게 만들 수 있는가?..