기본 콘텐츠로 건너뛰기

글

NeoVim + LazyVim 사용기 - 자주 쓰는 단축 포함.

주로 쓰는 컴터들이 죄다 리모트로만 연결해서 iSH나 Termux 같은 모바일 터미널에서 간단하게 개발환경을 쓰고 싶었음. 사실 vi (vim 도 아님) 으로 충분하지만 avante.nvim  이라는 녀석이 Cursor 처럼 외부 LLM 모델을 쓸 수 있다고 해서 삽질을 시작함;;; macOS 에서야 대충해도 되니 약간 삽질이 필요했던 windows 기준으로 기록. NeoVim 설치 https://winstall.app/apps/Neovim.Neovim winget 이 별도로 설치 없이 쓸 수 있는 package manager 라서 간단하게 winget install --id=Neovim.Neovim  -e 로 끝나는 점이 좋았음.  LazyVim 설치 https://www.lazyvim.org/installation  보고 Powershell 로 설치. 깔끔하다! 생각보다 빠르다! nvim-treesitter 관련 오류 수정 시작할 때 마다 nvim-treesitter 에서 오류 발생. 실행 속도도 느려지고 매우 불편! 다행스럽게도 reddit 에서 해결법을 알려줌. https://www.reddit.com/r/neovim/comments/14oozmu/neovim_cant_find_c_compiler/ choco install mingw  refreshenv   관리자모드에서 mingw 를 설치하고 (winget 으로는 설치 안되는 듯?) refreshenv 하니 해결. 필요한 외부 유틸들 설치 https://www.nerdfonts.com/font-downloads  Nerdfonts 설치. ligature를 쓰고 싶어 FiraCode Nerd Font를 선택. ripgrep ,  fd  도 설치. search & replace 를 편하게 쓸 수 있다. :, esc 눌렀을 때 모달 팝업 같은 UI가 나와서 당황. https://www.youtube.com/wat...

저지연 오디오 생성 LLVC 사용기

https://github.com/KoeAI/LLVC 써봄 CUDA 11.8 버전 쓰고 있어 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 VC 없어서 설치 https://wikidocs.net/168848 참조 FAIRSEQ 관련 오류 https://github.com/facebookresearch/fairseq/issues/2908 pip install editdistance  설치 No CUDA runtime is found, using CUDA_HOME='C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8' 오류 멀쩡하게 있는데 안됨. pip install torch==2.1.0+cu118 torchvision==0.16.0+cu118 torchaudio==2.1.0+cu118 --extra-index-url https://download.pytorch.org/whl/cu118 다시 설치 set DISTUTILS_USE_SDK=1 이게 문젠가 설정하고 재도전 Using cached ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl (118 kB) Building wheels for collected packages: fairseq   Building wheel for fairseq (pyproject.toml) ... error   error: subprocess-exited-with-error   × Building wheel for fairseq (pyproject.toml) did not run successfully.   │ exit code: 1   ╰─> [1829 lines of output]       No CUDA runtime is found, usi...

Google Daydream 소감

드디어 V30 사은품인 Daydream이 왔다. 낭랑한 벨과 함께 무심한 듯 시크하게 툭 던지고 가시는 택배느님. 수령까지 두달 걸렸다. 눈을 뜨고 꿈꿔 보세요. 여기가 눈감으면 코베어 간다는 서울인가? 주황색면으로 열면 된다. 컨트롤러의 만듦새는 아주 좋다. 기존에 나와있는 사진엔 가로 머리끈만 있어서 똥머리한 언니들도 막 쓰고 플레이하고 그랬는데 실제로 보니 이중 끈이었다. 보통 돌아다니는 착샷 Daydream 설치 - 실행 - 폰 장착 - 컨트롤러 페어링 - VR진입까지 과정을 쉽게 하려고한 노력이 보였음. NFC로 데이드림뷰어에 폰을 장착하면 자동으로 인식하여 데이드림 앱이 실행되는 경험은 꽤 괜찮았음. 컨트롤러는 크기, 그립감 면에서 매우 훌륭하고 인식률, 반응속도 모두 만족스러움. 홈버튼으로 시선을 재 조정하는 발상은 좋은데 왼쪽 오른쪽이 앱마다 조금 혼란스럽고 상하방향 캘리브레이션은 안된다. 이 부분에서 좌절했다. 누워서 넷플릭스를 보는 건 다른 방법을 찾아보아야한다는 소리. 알고보니 이런 건 Youtube이나 Netflix, Skybox player 등등에서 테스트해본 결과 자체 앱에서 지원하고 있다. Netflix는 void theater라는 것이 있는데  <출처:  https://元ボクサーの一念発起.com/2018/05/10/oculus-go/ > Netflix app에서 요렇게 눈송이 같이 생긴 아이콘을 컨트롤러로 찍고 들어가면 화면만 덩그러니 나오고 스티어링휠(자동차 핸들) 모양 아이콘을 선택하고 누으면 자연스럽게 조정이 되었다. Youtube나 Skybox앱의 경우 아예 컨트롤러에서 꾹 누르고 화면 이동하는게 가능해서 편리. 게임은 이것저것 해봤는데 Rez Infinite이 최고. 아니 이건 그냥 전 VR 기기를 통틀어서 Rez Infinite이 최고가 아닐까 싶음;;; 결론,  1. 누워서 보기 잘된다. 2. ...

세상 간단한 https(+secured websocket): Caddy

nginx, apache2 같은 걸로 매번 certbot 연동을 통해 https 하는게 지겨워서 알아보니 Caddy라는게 있더라. 설치법은 강하게 크기 위해 알아서 해본다. # cat /etc/caddy/Caddyfile your.shitty.site:8123 {   proxy / localhost:9123 {     websocket     transparent   } } 이건 외부에서 8123으로 들어오는 걸 내부적으로 9123로 맞춰서 https 맞춰주는 reverse proxy. 만일 port를 생략하면 # cat /etc/caddy/Caddyfile your.shitty.site {   proxy / localhost:9123 {     websocket     transparent   } } 기본포트인 443으로 되어 https://your.shitty.site 로 접속이 된다. 요새 말썽이던 cloudflare 버리고 netlify domain이랑 caddy를 쓰니까 앓던 이가 빠진 느낌. 이 조합은 당분간 계속 써야겠다 싶다.

cloudatcost 에서 외부 인터넷 연결이 안될 때

전원 한번 껐다 켰더니 모든 linux 서버들이 다 안된다. https://panel.cloudatcost.com/index.php  에서 해당 서버의 console 버튼 눌러서 보니 ifconfig 해본 결과 실제 panel의 IP정보와 다르게 설정이 되있더라. (덧. 여기서 console 이라고 함은 ssh 터미널 같은 게 아니라 cloudatcost에서 VMWare로 관리하는 웹스크린캐스트 같은 거라고 보면 됨) 근데 windows server는 멀쩡하고 linux 서버만 안되는게 이상해서 ticket 넣었더니  VMWare console로 진입한 뒤 network configuration 을 맞춰보라고 하더라. Fabio P Hello, In the case of the VM with IP 64.137.182.39, you have to go inside the configuration file and edit it. Make sure that all the network configuration is the same as the information shown to you on panel. You will have to do the same for the other two VMs. Let us know if further assistance is required. Have a great day. 음. network configuration 이라니 VMWare의 configuration이 있나? 이것저것 뒤져보다가 도저히 모르겠어서 GG 리붓하고 났더니 이번엔 console 자체도 진입이 안됨. ticket 또 쓰고 reboot 했더니 다시 돌아와서 어떤 거 수정하면 되냐 하고 또 물어봄. 내가 어느정도 알고 있을지를 모르니 첨 부터 자세하게 얘기를 안해주는구나. 얘들 스타일인갑다. 결국 Fabio P Hello, For your Ubuntu machine, you can use this lin...

django REST API practice like a boss

pycharm 안녕. django project 생성. 실행환경은 virtualenv로 3.6.x virtualenv 생성에 약간 시간 소모. setting.py와 urls.py가 반겨줌 djex1 프로젝트를 만들었음 __init__.py settings.py urls.py wsgi.py 요렇게 생김. 자, 게임을 시작해볼까? option+R 누름. 이런 애가 나옴. startapp product 라고 쳐서 product 업무를 만들어보자. 자동완성이 된다. product 아래 admin.py apps.py models.py tests.py views.py 이런 파일들이 생겼다. rails 생각이 난다. 내용물은 텅텅 비어서 실망스럽다. comment라도 있을 줄 알았는데. 여튼 텍스트로 hello world 같은 건 안찍어본다. 바로 rest API http://www.django-rest-framework.org/tutorial/quickstart/ 돌입한다. pip install djangorestframework 뭔가 설치했으니 requirements.txt로 pip freeze하여 깡통인 곳에서 설치할때 pip install -r requirements.txt로 설치할 수 있게 만들자. pip freeze > requirements.txt REST API framework는 설치했고 DB를 만들자. 먼저 migrate을 돌려주자. option+R 상태에서 migrate 엔터 Running migrations:   Applying contenttypes.0001_initial... OK   Applying auth.0001_initial... OK   Applying admin.0001_initial... OK   Applying admin.0002_logentry_remove_auto_add... OK...

firebase functions 위에 올라간 apollo server 에 apollo engine 끼얹기

이전 글에서 계속. https://www.apollographql.com/docs/engine/setup-node.html  보고 진행해보자. 미리 가입하고 키도 받아놓자. ENGINE_API_KEY 를 잘 copy 해놓자. app.use '/graphql',   bodyParser.json()   graphqlExpress {     schema     context: {}     tracing: true     cacheControl: true   } 먼저 /graphql 쪽 graphqlExpress 에 두개의 키(tracing, cacheControl)를 추가하자. npm install --save compression apollo-engine 두 패키지를 설치하고 compression = require 'compression' { Engine } = require 'apollo-engine' 압축과 엔진을 추가하고 engine을 하나 만들자. engine = new Engine   engineConfig:     apiKey: 'service:acidsound-6459:wKt62uPKS9dmxmBhFh-cZA'   endpoint: '/api/graphql'   graphqlPort: process.env.PORT or 80 engine.start() 여기서 graphqlPort를 지정하지 않으면  Error: Neither 'graphqlPort' nor process.env.PORT is set. In order for Apollo Engine to act as a proxy for your GraphQL server, it needs to know which port your GraphQL server...

firebase /w functions + graphQL backend 만들기

persistence 영역을 graphQL 로 일반화 하고 apollo engine 같은 cache를 사용하고 싶다. firebase의 functions를 통해 firebase를 불러오는 건 사실상 이중 작업인 것 같지만 apollo engine이 매우 맘에 들어 끌어들이고 싶다. 먼저 해볼 것은 functions에 graphql을 집어넣고 정적데이터를 읽어오는 것 먼저 로컬에서 구현해본다. 프로젝트 폴더를 생성하고 firebase init functions 부터 하자. 프로젝트를 선택(혹은 생성하고 ? What language would you like to use to write Cloud Functions? JavaScript ✔  Wrote functions/package.json ✔  Wrote functions/index.js 그냥 firebase init 하고 functions를 선택하는 것과는 달리 뭔가 기본 scaffold를 생성해줘서 좋다. {   "functions": {     "source": "functions"   } } 디폴트로 이렇게 해주자. index.coffee 로 get 테스트. exports하는 놈 이름이 functions 이름이 되고 경로도 /[exports한 놈]/ 이 되는 점이 특징이다. functions = require 'firebase-functions' admin = require 'firebase-admin' admin.initializeApp functions.config().firebase exports.addMessage = functions.https.onRequest (req, res)->   original = req.query.text?   admin.firestore()     .collection 'messages'     .add { origin...

cycle.js driver에 대한 정리.

cyclejs는 observable을 logic, subscribe를 effect로 각각 분리하고 서로 순환하는 구조인 full reactive framework 이다. 예를 들면 1초(1000ms)마다 스트림을 발산하는 text$는 매번 fold(reduce)하여 1씩 증가하고 "Second elapsed xx"로 map하는 text$=xs.periodic(1000)   .fold(prev=>prev+1,0)   .map(i=>`Second elapsed ${i}`) 를 logic. 이를 subscribe 하여 #app element의 텍스트로 넣는 것을 text$.subscrbie({   next: str => document.querySelector('#app').textContent = str }) 를 effect로 볼 수 있다. 이를 각각 함수로 구분하여 const sink = ()=> xs.periodic(1000)     .fold(prev=>prev+1,0)     .map(i=>`Second elapsed ${i}`); const domDriver = text$ => text$.subscribe({   next: str => document.querySelector('#app').textContent = str }); domDriver(sink); 이와 같이 재정의 할 수 있다. 같은  logic에 대해 DOM 렌더링과 log를 분리하려면 logDriver를 아래와 같이 추가하여 const logDriver = msg => console.log(msg); logDriver(sink); 하여도 마찬가지. subscribe한 객체의 observable만 있으면 DOM이건 console이건 canvas건 websocket이건 어느쪽이든 effect를 만들어 낼 수 있다. ...

Rasbperry Pi Zero W 에 Docker 설치함. (/w raspbian)

w3c 컨퍼 갔다왔더니 docker를 다시 잘 써보고 싶어졌다. 귀염둥이 Raspberry Pi Zero W를 꺼내서 ssh 접속하고 docker-ce를 설치해본다. $ echo "deb [arch=armhf] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list deb [arch=armhf] https://download.docker.com/linux/debian jessie stable $ sudo apt update && sudo apt install docker-ce -y --force-yes Get:1 https://download.docker.com jessie InRelease [20.2 kB]                                  Hit http://mirrordirector.raspbian.org jessie InRelease                                        Ign https://download.docker.com jessie InRelease                          Hit https://download.docker.com jessie/stable armhf Packages Hit http://archive.raspberrypi.org jessie InRel...

LG G Pro 2 Custom Rom +Rooting 기록

선 루팅 https://forum.xda-developers.com/lg-g3/general/guide-root-lg-firmwares-kitkat-lollipop-t3056951 1.2버전 스크립트 모드로. echo Looking for LG serial port.. echo. adb.exe wait-for-device 여기에서 정체 상태여서 강제로 adb kill-server 했더니 알아서 재부팅하심. 폰에선 "펌웨어 업데이트"화면이 나오고 Phone found at COM5! Rooting phone.. If you don't see the SuperSu installer script runs within about a minute, then the root failed. Author : blog.lvu.kr SPECIAL COMMAND : ENTER, LEAVE ## 이런 상황이 됨. #이 느린 속도로 하나씩 증가하고 있음. 한 시간 기다려도 성과없음. 뭐 몇번해봐도 안되고 결국 불안하긴 하지만 kingroot.net  로 설치 롤리팝이니까  https://drive.google.com/file/d/0B4kfGU1z_PClQ3AyM2lKOGR1S3M/view  이걸 받아서 압축 풀기. d838recovery.bat 만 있어서 당황스럽긴한데 실행하고 1번 하니까 리커버리 모드 진입까진 잘 되는 듯. adb sideload 라는게 있어서 해봄. Advance에서 adb sideload 선택하고 USB연결한 PC에서 adb sideload RR-N-v5.8.5-20171010-d838-Final.zip 하니까 착착 잘 진행됨. 이제 흉측한 U+LTE 가 없어짐. ㅇㅋ 군더더기 없고 깔끔한데 남은 건 gapps 를 설치해야함. http://opengapps.org/  를 권해줘서 갔는데 지옥 느림. ARM + 7.1 + stock 이 기본이...

Mac 주의 - 약간 빡치는 git 대소문자 변환 파일명 변환(renaming)하는 법

Mac에서 종종 화나는 일 중 하나가 파일 시스템이 대소문자를 구분하지 않는 점이다. 가령, A.png를 a.png로 바꿔야할 경우 HFS 기준으론 전혀 바뀐 점이 없는 걸로 인식하는데 다소 화가난다. 하지만, 방법이 없는 것은 아닌데 A.png를 임의의 다른 파일로 바꾼다. (ex. A_.png) 1에서 바꾼 상태에서 staging 한다. (git add A_.png) 1의 파일을 다시 원래 바꾸려고 했던 파일로 바꾼다. (mv A_.png a.png) 3을 다시 staging 한다. (git add a.png) commit 한다. https://stackoverflow.com/a/40307511/880991  에서 답변해준 Chris Barr 님에게 감사를. * 추가 실제로 해보니 git mv --force A.png a.png 가 더 간단하다. 이는 바로 staging 영역에 add까지 해준다.

graphql 연습 /w launchpad

https://launchpad.graphql.com/mw9wkzv99 단순 전체쿼리+조건쿼리+추가 http://graphql.org/graphql-js/passing-arguments/ 참고. random ID는 crypto 1.0.1 사용   type Query {     Members: [member]     getMember(id: ID!): member   }   type member {     id: ID!     text: String   }   input memberInput {     text: String   }   type Mutation {     addMember(member: memberInput): member   } SQL 정의. facebook 쪽은 스트링에 지지는 거 진짜 좋아하네. *.gql 파일이 있다고 하니 이해해주자. resolver는 var buffer = []; const resolvers = {   Query: {     Members: (root, args, context) => {       return buffer;     },     getMember: (id)=> {       return buffer.find(o=>o.id)     }   },   Mutation: {     addMember(_, {member}) {       const mm = { ...member, id:randomBytes(10).toString('hex') };       buffer.push...

즐거운 Online Prototyping Tool 들

jsbin, codepen, jsfiddle 이런 것들은 일단 생략. 너무 유명한 것들이라. https://launchpad.graphql.com  - node.js 기반 graphQL 연습장. 이것만으로도 충분히 훌륭한 백엔드 https://codesandbox.io/  npm 사용이 가능한 클라이언트 사이드 연습장. webpackbin이 너무 문제가 많아서 찾아본 것. https://scrimba.com  이건 codesandbox+ asciinema( https://asciinema.org/ ) 같은 느낌인데 키 녹화와 음성 녹화 기능이 추가되었다. 다 좋은데 화살표 키로 빨리감기 뒤로감기 기능이 안되고 익스포트(youtube등)으로 지원이 없는게 아쉽다. 이 둘이 만나면?  https://codesandbox.io/s/jvlrl98xw3?from-embed 뭐야 이거 무서워 하지마 ㄷㄷ;  graphql+react-native-web(부왘ㅋㅋ) https://repl.it/languages  전통을 자랑하는 REPL 도구. 지원 언어 종류가 -_-;;;;; https://tio.run/#  repl.it? 장난함? 얘는 지원 언어가 무려 386종류. J랑 아희도 있다. https://play.golang.org/  즐거운 go playground. 소스 포멧팅 넘 좋아. http://decaffeinate-project.org/repl/  최고의 coffeescript REPL. 원래 용도는 coffee를 ecma6코드로 바꾸는 것이지만... https://scaphold.io https://www.graph.cool/  graphql backend service. scaphold.io는 설치도 필요없는 클라우드. graphcool은 호스팅+클라우드 다있음. 둘 다 막상막하. 푸쉬서버도 되고 뭐 미친득. https://g...

firebase 일기(+expo)

firebase instance를 만들자. https://console.firebase.google.com/project/<YOURAPP>-90431/overview 로 들어가보면 Welcome to Firebase! Get started here. 라고 반긴다. 필요한 설정을 복사하자. Add Firebase to your web app 를 눌러 <script src="https://www.gstatic.com/firebasejs/4.6.0/firebase.js"></script> <script>   // Initialize Firebase   var config = {     apiKey: "ㅌㅌㅌㅌㅌㅌㅌㅌ",     authDomain: "ㅅㅅㅅㅅ-90431.firebaseapp.com",     databaseURL: "https://ㅅㅅㅅㅅ-90431.firebaseio.com",     projectId: "ㅅㅅㅅㅅ-90431",     storageBucket: "ㅅㅅㅅㅅ-90431.appspot.com",     messagingSenderId: "11111111111"   };   firebase.initializeApp(config); </script> 이 부분 중 config만 복사. Authentication > sign-in method 에 몇개 연결하고 Template을 한번 슥 본다. 음 다국어 처리가 되있군. 굿. Database, Storage, Hosting, Functions 죄다 켜고. Grow 에 Remote Config라는게 있어서 Software Version 같은 걸 한번 넣어봤다. 프로그래마틱하게도 설정 가능한 거 같다. 잘 모르겠다. https://firebase.g...

React-Native App 개발 시 Expo 선택 전에 고려해야할 것.

Expo는 지옥같은 React-Native 개발 환경 아래 섬광처럼 빛나는 훌륭한 도구지만 빛이 있으면 어둠이 있는 법. https://docs.expo.io/versions/latest/introduction/why-not-expo.html  에선 이런 경우에 Expo를 사용을 고려하라고 전하고 있다. 독립형 앱에 이미지 같은 정적 자원(Assets)들을 함께 묶어 배포할 수 없다. background 혹은 장치가 잠자기 모드일때 코드 실행을 지원하지 않는다. 일부 API를 미지원. Bluetooth, WebRTC 같은 건 아직. 오버헤드가 꽤 크다. iOS 25MB, Android 20MB Push Notification의 경우 OneSignal 같은 외부서비스를 활용하려면 ExpoKit을 사용하거나 Expo가 아닌 React-Native를 사용해야한다. Staging/Production같은 다양한 디플로이 환경. 하지만 이 경우  https://github.com/oliverbenns/expo-deploy  같은 선택지도 있으니 참조할 것

Firebase coffeescript snippet

firebase 단순 예제 좋은게 없어서 찾다가 문서보고 하나 짰다. 흔한 Firebase 자료구조.png https://console.firebase.google.com 에서 본 Database 구조가 위와 같을 때 config =   apiKey: '<<<<<<<<<>>>>>>>>>>'   authDomain: '<<<<<<<<<>>>>>>>>>>'   databaseURL: '<<<<<<<<<>>>>>>>>>>'   projectId: '<<<<<<<<<>>>>>>>>>>'   storageBucket: '<<<<<<<<<>>>>>>>>>>'   messagingSenderId: '<<<<<<<<<>>>>>>>>>>' firebase.initializeApp config ref = firebase.database().ref('rooms/muka/messages') # database 경로 ref.on 'child_added', (o) ->   # key:0. val();"text":"블라블라"   # key:1. val();"text":"블라블라"...

meteor로 nw.js 개발하기.

실제로 nw.js 어플리케이션을 개발하다보면 UI구현하기 막막하고 수동으로 리프레쉬 하는 것도 귀찮아서 Meteor 연동을 하려고 했더니 생각보다 간단했다. 디렉토리 구조는 먼저 이렇게 잡았다. `- app   `-client   `-public `- dist   `- 배포용 html,css,js   `- package.json `- package.json 아이디어는 이렇다. nw.js의 시작페이지를 http://localhost:3000으로 두고 배포시엔 meteor client 배포툴인 meteor-build-client를 사용하여 html,css,js 로 분리하는 계획이다. 가장 중요한 nw.js 용 package.json 파일은 아래와 같이 구성한다. {   "main": "http://localhost:3000",   "node-remote": "http://localhost:3000",   "name": "<앱이름>" } 이게 전부. 어떻게 보면 Web과 nw.js를 동시에 개발할 수도 있는 환경이기도 한 것이다. meteor create app 을 해서 meteor용 앱을 만들고 meteor 를 시작한다. 그리고, 위의 package.json이 있는 경로로 돌아가서 nw . 으로 nwjs를 실행한다. 한번 번쩍하더니 잘 된다. cordova 등에서 index.html 대신 http://localhost:3000을 하는 것도 비슷한 느낌이다. 즐겁게 개발을 일단 마구 하고 실제로 배포하기 위해서는 개발환경이 아니라 html,css,js로 구성된 배포본을 만들어야한다. npm install -g 해도 되지만 어짜피 Meteor에서만 쓸거 meteor npm install -g meteor-build-client 해버릴거다. 개발은 문제 없어 보이고 배포판을 한번 만들어보자....

Peatio 분투기

흠 요즘은 ruby 할때 puma(https://github.com/puma/puma)를? 패신저는 안쓰남. https://github.com/peatio/peatio/blob/master/doc/setup-local-osx.md 로컬 환경 먼저 잡자. brew, rbenv 설치하고 ruby를 2.2.1로 설정하자. gem install bundler을 설치 Fetching: bundler-1.15.4.gem (100%) ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory. sudo chown -R $USER /Library/Ruby/Gems/ 하고 나면 gem install bundler Fetching: bundler-1.15.4.gem (100%) ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/bin directory. 또 오류. 에잇 귀찮아 sudo install bundler 해버림. mysql 설치 brew install mysql 설치하고 mysql.server start 기동. redis 설치 brew install redis redis-server /usr/local/etc/redis.conf rabbitMQ 설치 얘는 /usr/local/sbin 여기에 설치되니 brew install rabbitmq rabbitmq-server bitcore 도 다운 받고 https://bitcoin.org/en/download mkdir -p ~/Library/Application\ Support/Bitcoin touch ~/...