얼마전 쿠팡 로켓 프레시에서 마이셰프 갈릭비프스테이크 589g 을 6950원에 판매 !!! 지금은 가격이 올랐네여;; 개인적으로 스테이크 요리를 좋아해서 냉큼 2개 주문 했습니다. 새벽까지 놀고 있다가 로켓 프레시 답게 새벽2시에 배송 도착해서, 냉큼 받아서 바로 냉장실 입성. 다음날 바로 조리 시작! 내용물은 다음과 같아여 척아이롤(대략 200g 조금 넘는 듯), 그린빈, 적양파, 방울토마토, 올리브유, 소스, 마늘, 마늘칩, 시즈닝. 조리 방법은 척아이롤 핏기 제거후 시즈닝을 뿌리고 올리브유를 뿌려줘서 마리네이드를 하면 되지만, 배가 고팟기에 대충 핏물 빼고 시즈닝을 고루 뿌려 준 다음, 후라이팬 달구고, 올리브유 살짝 두른다음 마늘, 적양파, 그린빈, 방울토마토 넣고 5분간 구워줌, 노릇 노릇 해지..
일반 LinearLayoutManager 같은 경우는 findFirstVisibleItemPosition() 을 이용해서 바로 아이템을 가져 올수 있는데, StaggeredGridLayoutManager은 어떻게 가져 올수 있을까? StaggeredGridLayoutManager의 findFirstVisibleItemPosition의 구조는 아래와 같은데 public int[] findFirstVisibleItemPositions(int[] into) { if (into == null) { into = new int[mSpanCount]; } else if (into.length < mSpanCount) { throw new IllegalArgumentException("Provided int[]'s s..
StaggeredGridLayoutManager 를 이용해서 각 항목마다 보여지는 방식을 다르게 구성하고, 마지막 카테고리는 영상처럼 Grid 뷰로 구성하였는데, 동적으로 Span 카운트를 변경하려고 해보니, ScrollListener가 동작을 하지 않았다. stackoverflow 에서 알려주는 방식은 대충 home_rv.apply { layoutManager = StaggeredGridLayoutManager(spanCount, LinearLayoutManager.VERTICAL) adapter = this@HomeViewModel.adapter } 위와 같이 layoutManager 를 바꿔 주면서 SpanCount 를 변경해주고, adapter 또한 변경해 주라는 내용이었다. 물론 이방식도 단순하..
iOS에서 Fabric Crashlytics 를 이용하기 위해서는 dSYM 파일이 필요한데, 찾는 방법은 간단하다. 먼저 https://appstoreconnect.apple.com 에 나의 앱에 들어간후 활동 내역 탭 -> 모든 빌드 -> dSYM 다운로드를 클릭하여 dSYM zip 파일을 받아. Fabric 에 그대로 첨부해 준다.
보통 RecyclerView 에서 아이템 삭제후에 notifyItemRangeRemoved() 또는 notifyItemRemoved() 을 이용해서 아이템의 삭제 여부를 통보 해주면 별다른 이상없이 잘 작동 하지만, StaggeredGridLayoutManager 에서는 각 뷰 타입별로 Span 을 달리 하기 위해 ItemDecoration 을 사용했는데, 여기서 out of index 에러가 나는 것이다. 찾아보니 아래와 같은 순서로 제거 동작을 수행하면 더 이상 에러가 나지 않았다. val index = arrayList.indexOf(item) arrayList.removeAt(index) notifyItemRemoved(index) notifyItemRangeRemoved(index, 1) 참고 ..
pm2 를 이용해서 Node.js 를 실행할때 ecosystem.config.js 파일을 셋팅한 후 셋팅값으로 실행할수 있는데 코드는 아래와 같다. module.exports = { /** * 앱 설정 */ apps: [ { name: 'APPSERVER', script: './app.js', // 앱 실행 스크립트 instances: '1', // 앱 인스턴스의 수 exec_mode: 'cluster', // 실행 모드. env: { // 환경변수. 모든 배포 환경에서 공통으로 사용한다. PORT: 3000, NODE_ENV: 'development', }, env_production: { NODE_ENV: "production", // 배포환경시 적용될 설정 지정 }, env_staging: { //..
우리가 여러 게시물을 이용해 테스트를 해보고 싶을때 일일이 데이터를 삽입 하는 일은 피곤한 작업이다. 이럴때 원하는 양만큼 더미 데이터를 넣어줄수 있는데 워크 벤치에서 아래와 같이 코드를 입력해 준다. DELIMITER $$ DROP PROCEDURE IF EXISTS procedureName$$ CREATE PROCEDURE procedureName() BEGIN DECLARE i INT DEFAULT 1; WHILE i
일단 개발중인 App 이 웹뷰 하단에 버튼이 있고, 하단에 버튼을 누를시 자바 스크트 함수를 호출해서 input box 를 띄우는 작업을 하는데, 이상하게 input box 가 화면에 보여 진 상태 인데도 키보드가 나타나질 않았다. 그래서 focus() 대신 click() 도 호출해보고 iOS 쪽에서 직접 focus 도 호출해보고 별에 별짓을 다했는데, 처음 한번 키보드가 뜨고 다음 호출부터는 키보드가 뜨지 않는 문제가 있었다. 이문제의 해결코드는 다음과 같다. 아래 코드는 한줄이라도 빠지면 동작하지 않는다. 꼭 순서를 지켜 사용하기를 바란다. 해당 해결방법이 검색을 아무리 해도 안되서 고생을 했다. 다른 사람은 고생하지 말기를.... UIApplication.shared.sendAction(#selec..
XCode 에서 Product를 상용과 개발로 분리 시킨후 기존에 바라보던 서버 주소도 각각 빌드에 맞게 자동적으로 적용 하고 싶다면 어떻게 해야할까? 간단하게 전처리 매크로를 이용해서 분리 시킬수 있다. 먼저 상용 셋팅은 별도로 건드리지 말고, 개발쪽 셋팅을 변경해 보자! 아래처럼 프로젝트 셋팅에서 1. Beta Product를 선택한 2. 상단 메뉴에 Build Settings 를 클릭 3. custom 을 검색한다. 4. Swift Compiler - Custom Flags 를 그림 1과 같이 셋팅한다. (아마 처음 Debug 는 DEBUG 로 되어 있을 건데 DEV 를 추가하고, Release 는 아무것도 없을 건데 마찬가지로 DEV 를 추가해 준다.) 5. 분기를 태우고 싶은 코드를 아래처럼 전..
INSERT 함수 - create(values: Object, options: Object) : 레코드 생성. - findOrCreate(options: Object): 조회 시 없으면 생성. - findCreateFind(options: Object) : 조회 시 없으면 생성 후 조회. - upsert(values: Object, options: Object) : 한 레코드만 인서트하거나 업데이트 SELECT 함수 - findOne(options: Object) : 하나만 조회. find()와 같음 - findAll(options: Object) : 여러 개를 조회 - findAndCountAll(findOptions: Object) : 조회 후 레코드의 수까지 알 수 있다. - findByPk(id:..