본문 바로가기
반응형

분류 전체보기26

Blender 블렌더 초보 맥에서 단축키가 잘 안되는 것 같을 때 해결방법 맥에서 블렌더 사용 시 어느 순간부터 G키와 S키 등 특정 단축키가 안 되는 현상이 있었다.검색도 하고 챗GPT에게 물어봐도 알맞은 답변이 나오지 않았다. 아무 키나 누르다가 갑자기 왼쪽 상단 툴박스에 이 녀석이 표시되어 있는 걸 보게 됐다. 원래는 이렇게 표시되어 있었던 녀석이다. 이것 때문인가 싶어서 이전 툴로 바꾸고 싶었는데, 초기 상태에 선택되어 있던 툴로 바꾸려면 T키를 눌러 툴박스를 선택 후 W를 누르면 된다고 챗GPT가 알려줬다. 그런데 뭘 눌러도 이 녀석이 원래대로 돌아가지 않았다. 한참을 아무거나 막 누르다가 갑자기 의심스러운 생각이 들었다. 모든 단축키 표시들의 알파벳이 모두 대문자로 되어 있었다.그래서 설마하고 Caps Lock 키를 눌러 대문자를 활성화한 뒤 다시 단축키들을 입력했더.. 2024. 6. 19.
스타트업의 아이폰 앱 개발자 퇴사일지 (서론) 이제 나의 짧지 않은 서비스 운영 생활이 끝나간다. 여러 이해관계가 얽혀 끝을 바라보고 있는 우리의 앱, 나의 오랜 동료들, 씁쓸함과 약간의 슬픈 마음, 그리고 묘하게 후련한 마음과 함께 지난 세월을 되새김질하는 시간을 충분히 가져보며 나 자신과 나의 동료들과 오랜 기간 함께해 준 회원님들을 위해 글을 쓰고 싶어졌다. 약 4년 전, 나는 가장 개발을 하고 싶었던 시기에 광고 회사에서 내가 원하지 않던 PM 비스름한 일을 맡게 되면서 끝이 보이지 않는 이상한 나날에 지쳐서 하던 일을 마무리 짓고 회사를 그만두었다. 그리곤 어떤 회사를 들어가서 어떤 제품을 개발할까라는 단순한 고민이 나는 왜 이 세상에 존재하는가라는 질문으로 확대되며 이제 나의 일과 삶에서 다른 목적을 찾고 싶다는 막연한 욕망이 생겨났다. .. 2024. 6. 2.
Create React App 4주차 - 클래스 & 함수 타입 컴포넌트와 라이프사이클 클래스 & 함수 타입 컴포넌트 새로운 폴더를 만들고 새 프로젝트를 만든 후 터미널에서 create-react-app을 설치한다. npx create-react-app . npm start 클래스 & 함수 방식 컴포넌트의 props 클래스 방식의 컴포넌트에서는 외부에서 전달된 props 값을 받을 때 this를 사용하지만 함수 방식의 컴포넌트에서는 파라미터를 이용하여 props 값을 받는다. 함수 방식의 인자는 아무 이름으로 정해도 된다. // App.js import React from 'react'; import './App.css'; function App() { return ( Hello World ); } // 함수 방식으로 작성한 컴포넌트 function FuncComp(props) { retu.. 2022. 7. 14.
Create React App 3주차 - Create/Update/Delete Create 구현하기 1. Control 컴포넌트를 작성하고, 이 컴포넌트가 mode를 변경할 수 있도록 onChangeMode props를 추가한다. // Control.js import { Component } from 'react'; class Control extends Component { render() { return ( create update ); } } export default Control; // App.js ... import Control from './components/Control' class App extends Component { ... ... 디버거를 추가하고 create, update, delete를 클릭하면 mode가 변경되는 것을 볼 수 있다. 2. Create.. 2022. 6. 30.
Create React App 실행해보기 - 2주차 크롬 브라우저에서 React Developer Tools 확장 프로그램 설치하기 https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi React Developer Tools Adds React debugging tools to the Chrome Developer Tools. Created from revision 7f673317f on 5/31/2022. chrome.google.com 확장 프로그램으로 설치된 Components 탭을 클릭하면 페이지의 실제 컴포넌트를 보여준다. 클릭하면 각 컴포넌트의 props와 값을 볼 수 있다. 직접 값을 변경할 수도 있다. 컴포넌트를 파일로 분.. 2022. 6. 15.
Create React App 실행해보기 - 1주차 개발환경 만들기 1. Node 설치 https://nodejs.org/en/ Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org Create React App 링크 https://github.com/facebook/create-react-app GitHub - facebook/create-react-app: Set up a modern web app by running one command. Set up a modern web app by running one command. Contribute to facebook/create-react-app development by creating an.. 2022. 6. 2.
RxSwift vs URLSession 이미지 다운로드 비교 RxSwift와 조금 더 친해지기 위해 기존 코드를 RxSwift를 이용한 코드로 변경해보는 간단한 예제를 실습해보았다. 1. Storyboard 에 다음과 같이 UIImageView와 버튼들을 Constraint와 함께 추가한다. 2. Cocoapods 필수! Podfile에 RxSwift 라이브러리를 추가한 후 install 한다. ///Podfile pod "RxSwift" 3. 메인 ViewController 상단에 import를 추가한다. ///ViewController.swift import RxSwift 4. 상단에 IBOutlet을 연결하고 url 주소를 선언한다. 다운로드받을 이미지는 구글 검색에서 찾은 1920X1080 크기의 배경화면 이미지이다. ///ViewController.swi.. 2021. 2. 28.
ReactiveX 사이트 방문해보기 reactivex.io ReactiveX CROSS-PLATFORM Available for idiomatic Java, Scala, C#, C++, Clojure, JavaScript, Python, Groovy, JRuby, and others reactivex.io RxSwift를 공부하기 위해서 ReactiveX 사이트를 방문해보았다. RxSwift는 Microsoft사의 ReactiveX의 시리즈 중 하나이고 "An API for asynchronous programming with observable streams(Observable 스트림을 이용한 비동기 프로그래밍 API)"라는 한 줄 요약으로 설명하고 있었다. 홈페이지 상단의 Introduction 버튼을 클릭하면 Reactive X에 대.. 2021. 2. 24.
Python 기초) 파일 입출력 1. 파일 쓰기 1. w모드로 open() myFile = open("file.txt", "w", encoding="utf8") print("강아지 망고는 갈색푸들", file=myFile) print("강아지 망고는 갈색푸들", file=myFile) myFile.close() 2. a모드로 open myFile = open("file.txt", "a", encoding="utf8") myFile.write("망고는 강아지 갈색푸들") myFile.write("망고는 강아지 갈색푸들") myFile.close() 2. 파일 읽기 1. read() myFile = open("file.txt", "r", encoding="utf8") print(myFile.read()) myFile.close() # 강아.. 2021. 1. 20.
알고리즘 문제풀이 - 선형검색과 보초법 & 이진탐색 (Python) 1. 선형 검색 선형 검색 알고리즘은 직선 모양으로 늘어선 요소의 배열에서 앞부터 순차적으로 검색을 수행한다. 선형 검색 알고리즘에서 종료 조건은 2가지이다. 1. 배열의 끝 2. 검색할 값을 발견 보초법은 배열의 마지막 요소로 검색 요소를 추가하여 반복문에서 종료 판단 횟수를 2회에서 1회로 줄이는 역할을 한다. # search 함수 def search(array, n, key): i=0 array.append(key) # array의 마지막에 key를 추가 while(True): if(array[i] == key): break i+=1 # 마지막 요소까지 없으면 i = n으로 while문을 빠져나오게 된다. return i if i != n else -1 # 마지막 요소까지 검색하지 않았다면 인덱스를.. 2021. 1. 8.
Python 기초) 입출력 기초 1. sep & end print문에 쉼표(,)를 사용할 때 sep키워드로 구분자를 지정할 수 있다. sep의 기본 값은 빈칸(띄어쓰기)하나이다. print("망고", "강아지") # 망고 강아지 print("망고", "강아지", sep=",") # 망고,강아지 print문의 마지막은 end키워드로 지정할 수 있다. end의 기본 값은 줄바꿈 문자(\n)이다. print("망고", "강아지", sep=",", end="?") # 망고,강아지? 2. 왼쪽 정렬, 오른쪽 정렬, 0으로 채우기 왼쪽 정렬 ljust() & 오른쪽 정렬 rjust() animals = {"망고" : 3, "초코" : 5, "레오" : 10} for name, age in animals.items(): print(name, age.. 2021. 1. 5.
Swift) 값 타입과 참조 타입 그리고 클래스와 구조체 (Value type & Reference type, Class & Struct) 값 타입과 참조 타입 값 타입 변수를 할당하면 스택 영역에 값이 저장된다. 변수를 복사한 후 복사본을 변경하더라도 원본에 영향을 주지 않는다. 힙 영역을 사용하지 않고 레퍼런스 카운팅이 필요하지 않다. 참조 타입 스택 영역에는 포인터(레퍼런스)만 할당되고 실제 데이터는 힙 영역에서 할당된다. 변수를 복사하더라도 하나의 값을 가리키고 있기 때문에 복사본과 원본이 모두 같은 값을 갖는다. 변수를 복사하더라도 레퍼런스 카운트만 +1되고 실제 값이 복사되지는 않는다. Swift의 Class와 Struct는 생김새와 사용법이 유사하다. 구조체는 1. 값 타입이다. 2. 상속이 불가능하다. 3. 생성자를 구현하지 않아도 default initializer를 사용할 수 있다. struct Car { var name .. 2021. 1. 5.
알고리즘 문제풀이 - 소수구하기 & 기수 (Python) 1. 소수구하기 자연수 n의 소수는 n의 제곱근이하의 어떤 소수로도 나누어 떨어지지 않는 수이다. #소수를 구하는 프로그램 def program(n): prime = [2, 3] # 얻은 소수 i = 5 while i 2020. 12. 23.
Python 기초) 함수 Python의 함수 형태는 def functionName(argument): 이고 타입을 명시하지 않는다. 함수의 리턴값이 여러개일 수 있다. def plusAndMinus(a, b): return a+b, a-b print(plusAndMinus(3, 5)) # (8, -2) 함수의 인자에 이름을 붙여서 사용할 수 있다. def family(name, age, position): print("이름 : {0}\t나이 : {1}\t호칭 : {2}".format(name, age, position)) family("망고", 3, "강아지") # 이름 : 망고 나이 : 3 호칭 : 강아지 family("망고", position = "강아지", age = 3) # 이름 : 망고 나이 : 3 호칭 : 강아지 인자.. 2020. 12. 22.
Python 기초) 제어문과 반복문 1. 제어문 score = int(input("점수를 입력하세요:")) if score >= 90: print("{0}점은 상위권입니다.".format(score)) elif 70 2020. 12. 22.
Python 기초) 튜플과 Set 튜플 튜플은 리스트와 달리 값 변경이나 추가가 불가능하지만 연산 속도가 리스트에 비해 빠르다.(단. 튜플의 내부에 가변요소가 있다면 그 요소를 변겅하는 것은 가능함.)리스트에 사용가능한 함수들 중 값 변경을 제외한 조회 관련 함수들(count, index 등)도 사용할 수 있다. 1. 표기 fruits = ("사과", "딸기") print(fruits[0]) # 사과 2. 활용 animal, name, age = "강아지", "망고", 3 print(animal, name, age) Set Set은 집합의 특성을 가지기 때문에 순서가 없고 중복값이 허용되지 않는다. 1. 표기 language = {"JAVA", "JAVA", "C", "Python"} print(language) # {'JAVA', 'C.. 2020. 12. 16.
Python 기초) 리스트와 딕셔너리 리스트 1. 표기 fruits = ["사과", "배", "망고", "파인애플"] 2. 추가 append fruits.append("딸기") print(fruits) # ['사과', '배', '망고', '파인애플', '딸기'] 3. 중간에 삽입 insert fruits.insert(1, "사과") print(fruits) # ['사과', '사과', '배', '망고', '파인애플', '딸기'] 4. 마지막 요소를 꺼냄 pop print(fruits.pop()) # 딸기 print(fruits) # ['사과', '사과', '배', '망고', '파인애플'] print(fruits.pop()) # 파인애플 print(fruits # ['사과', '사과', '배', '망고'] 5. 특정 요소의 개수를 체크 coun.. 2020. 12. 16.
Swift 앱의 생명주기와 헷갈리는 UI 관련 개념 정리 * 생명주기 1. ViewController 생명 주기 2. App 생명 주기 3. Scene 생명 주기 * UI 관련 개념 1. UIWindow - The backdrop for your app’s user interface and the object that dispatches events to your views. - UIView를 상속받은 객체로 유저 인터페이스의 배경으로서 UIView들에게 이벤트(터치, 드래그 등)를 전달하는 역할을 한다. 2. Frame과 Bounds - 두 가지 모두 UIView의 위치와 크기를 가진 프로퍼티이다. - 두 가지 모두 CGRect형으로 나타난다. - Frame은 SuperView내에서의 절대적인 위치 좌표를 가지고 Bounds는 상대적인 위치 좌표를 갖는다. .. 2020. 12. 14.
Swift 중요한 용어와 개념 프로그래밍 언어 공통 1. 라이브러리와 프레임워크 - 라이브러리는 재사용이 가능하도록 미리 만들어둔 최소 기능 단위이다. 보통 라이브러리는 API를 제공한다. 크게 표준 라이브러리와 사용자 라이브러리가 있는데 표준 라이브러리는 언어에서 제공해주는 것(ex. printf 함수)이고 사용자 라이브러리는 보통 표준 라이브러리를 이용하여 만들어진다. - 프레임워크란 라이브러리들과 또다른 프레임워크들을 모두 포함한다. 자바를 편하게 쓸 수 있도록 만든 스프링, 파이썬을 편하게 쓸 수 있도록 만든 장고 등을 예로 들 수 있다. - 라이브러리와 프레임워크 모두 편리하고 개발시간을 단축시키는데 도움이 되며, 재사용이 가능하다는 장점이 있다. 또 여러 사람이 사용하기 때문에 대부분 신뢰할 수 있다. - 라이브러리의 경우.. 2020. 12. 14.
Python 기초) 문자열 포맷 1. 기본 포맷 print("a" + "b") # ab print("a", "b") # ab print("망고는 %d살입니다." % 3) # 망고는 3살입니다. print("망고는 %s을 좋아합니다." % "간식") # 망고는 간식을 좋아합니다. print("알파벳은 %c %c %c ..." % ('A', 'B', 'C')) # 알파벳은 A B C ... 2. format print("망고는 {}과 {}를 좋아합니다.".format("형", "누나")) # 망고는 형과 누나를 좋아합니다. print("망고는 {age}살이고 {favorite}을 좋아합니다.".format(age = 3, favorite = "간식")) # 망고는 3살이고 간식을 좋아합니다. 3. f-string age = 3 favori.. 2020. 12. 14.
Python 기초) 연산자 Python도 일반적인 연산자(+, *, -, =, % 등)들을 사용할 수 있다. 익숙하지 않은 연산자는 다음과 같다. 제곱 연산자 ** print(3**2) # 9 몫 연산자 // print(10//2) # 5 & 연산자와 | 연산자는 각각 and와 or로도 사용가능하다. 일반적인 수학 함수 예제 print(abs(-10)) # 10 print(pow(4, 2)) # 4 ^ 2 = 16 print(max(5, 12)) # 12 print(min(10, 6, 13)) # 6 print(round(3.14)) # 3 print(round(8.9)) # 9 math 라이브러리를 import하면 아래 함수도 사용가능하다. from math import * print(floor(3.99)) # 3 print(c.. 2020. 12. 9.
Python 기초) 요소들 1. 숫자와 문자 print(3.14) #3.14 print(10000000000000000000) #10000000000000000000 print(3*(3+5)) #24 print("풍선") #풍선 print('T' * 8) #TTTTTTTT print('풍' + '선') #풍선 2. 참과 거짓 print(5 > 10) #False print(5 10) #True 3. 변수 name = '망고' category = '강아지' age = 3 favorite = '간식' is_dog = category == '강아지' print(name + "는" + category + "입니다.") print("나이는 " + str.. 2020. 12. 9.
피그마 컴포넌트 피그마의 가장 큰 특장점 : 컴포넌트 컴포넌트는 재사용이 가능한 최소의 단위라고 정의할 수 있다. 컴포넌트라는 개념은 개발 / 디자인 분야에서 많이 사용하는데, 처음에는 이해하기 어려울 수 있다. UI/UX를 구성하다 보면, 복사 + 붙여넣기를 많이 이용하게 된다. 이 때 복사 + 붙여넣기가 필요한 부분이 아주 작은 부분(ex. 일반 텍스트, 도형, 단순 글꼴이나 색상)일 수도 있고, 앱 또는 웹의 한 페이지 정도의 많은 요소들로 이루어진 복잡한 부분일 수도 있다. 목차 - 간단한 텍스트 추가하기 - 간단한 텍스트를 컴포넌트로 만들기 - 컴포넌트를 변경하여 인스턴스에 함께 적용하기 - 컴포넌트화 되돌리기(Undo) - Tip 간단한 텍스트 추가하기 피그마 프로젝트를 하나 만들고, 간단한 텍스트를 추가한다.. 2020. 5. 12.
객체지향과 상속 흔히 객체지향 언어라고 하면 클래스를 떠올리지만, 객체지향 언어는 크게 클래스 기반 언어(ex: java, swift)와 프로토타입 기반 언어(ex : javascript)로 분류할 수 있다. 다음은 클래스 기반 객체지향 언어의 클래스와 객체 개념에 대한 글이다. 클래스는 '틀', 객체는 '실체' 자동차를 예로 들면 클래스는 자동차를 만드는 틀, 객체는 실제로 만들어진 자동차를 의미한다. 클래스는 속성(property)과 메소드로 구성된다. 아래 Car 클래스로 만들어진 자동차는 엔진, 바퀴, 차체 등의 속성을 가지고 있고 시동을 거는 기능, 브레이크를 밟는 기능을 메소드로 가지고 있다. Car 클래스 class Car { var engines : String //엔진 var wheels : String.. 2019. 9. 10.
Swift 클로저와 일급 함수 일급 시민(함수 or 객체) 1. 변수나 데이터 구조(컬렉션) 안에 담을 수 있다. 2. 파라미터로 전달할 수 있다. 3. 리턴값으로 사용할 수 있다. Swift 클로저 let add: (Int, Int) -> Int = { (a: Int, b: Int) in return a + b } let res: Int = add(1, 2) print(res) // 3 swift의 함수는 일급함수가 아니다. swift의 클로저는 일급함수이다. 함수가 일급함수인 경우 : javascript, kotlin, python .. javascript는 함수를 변수 안에 담고, 리턴값으로 사용할 수 있다. function calculator(mode){ var options = { '+' : function(left, rig.. 2019. 9. 9.
웹 크롤링 PHP html dom parser 웹 상에서 다른 사이트의 정보를 그대로 복사하여 쓰고 싶을 때, XML/HTML의 형식을 파싱하여 원하는 정보를 가져올 수 있다. 아래 라이브러리를 사용하면 간단하게 원하는 정보를 크롤링할 수 있다. 영어 문서지만 사용 방법이 간단하고 익숙해지면 유용하게 사용할 수 있다. 다운로드 및 링크 : https://simplehtmldom.sourceforge.io PHP Simple HTML DOM Parser $html = str_get_html(' Hello World '); $html->find('div', 1)->class = 'bar'; $html->find('div[id=hello]', 0)->innertext = 'foo'; echo $html; $html = file_get_html('http:.. 2019. 9. 6.