본문 바로가기

분류 전체보기117

너의 마음속 듣기...어떻게 원하는 것을 얻는가 만약, "그건 안돼요" 라는 말을 듣는다면 나는 어떤 말로 이어나가야 할까? 누구나 한번쯤은 겪는 고민이다. 특히, 정말 간절할때는 더욱더 그렇다. 입장을 바꿔 내가 "그건 안돼요"라는 말을 한다고 생각해 보자. 나는 왜 안된다고 말을 했을까? 모두 그렇지는 않지만 대부분은 정말 안돼서가 아니라 내가 잃을게 있거나 얻는게 없기 때문일 것이다. 그렇다. 상대방도 그래서 거절하는것이다. 즉, 상대방도 뭔가 얻게 해주면 된다. 사람들이 가지고 싶어하는것은 값비싼 금은보화만이 아니다. 외로운 사람들은 말동무가 필요할 것이고, 시간이 없는 사람은 여유를 갖고 싶을것이다. 나에겐 사소하지만 상대방에게는 필요한 그 무엇을 주면 어렵지 않다. 하지만 문제는 다른사람들이 필요로 하는것을 우리는 잘 모른다 그래서 경청이 .. 2018. 5. 15.
UIEdgeInsets 없이 UILabel에 여백 넣기 UILabel에 여백을 넣는 방법은 다양하다. 그 중 NSLayoutConstraint를 이용하는 법을 다뤄보자! class FitLabel: UILabel { //상하좌우 여백 storyboard 입력값 @IBInspectable var edge: CGSize = CGSize(width: 0, height: 0) //너비, 높이가 적용될 Constraint private var mWidthConstraint, mHeightConstraint: NSLayoutConstraint? //좌우 여백값 var edgeAllWidth: CGFloat { return edge.width * 2 } //상하 여백값 var edgeAllHeight: CGFloat { return edge.height * 2 } ove.. 2018. 5. 8.
사기 캐릭의 역설 - 사피엔스 우리에게는 태어나면서부터 주어지는 특권이 하나있다. 바로 인간이란 점이다. 지구를 지배하는 최상위 생물체.. 다른 동식물 입장에서 보면 별로 강하지 못한 몸뚱이를 가지고도 충분히 위협적이고, 모든것을 뜻대로 컨트롤할수 있는 능력은 가히 사기 캐릭급 일 것이다. 1대1이 아닌이상 인간을 이기는 동식물은 지구상에 없이니 말이다. 솔직히 그냥 그런가보다 하고 살았는데 이 책을 보고 우리의 힘을 곰곰이 돌아보게 되었다. 우리는 어떻게 이런 힘을 가지게 되었을까? 그리고 과연 앞으로도 그럴것인가? 우리가 처음부터 지구의 지배자는 아니었다. 인류가 세상에 나타난 것은 약 250만년 전.. 하지만 먹이사슬의 중간정도 되는 평범한 잡식 동물이었다. 여기서 말하는 인류는 지금의 우리를 뜻하지는 않는다. 흔히 동식물들은 .. 2018. 4. 15.
손쉽게 아이폰 앱을 새로 실행 시키는 코드 한줄 안드로이드에서는 메인 activity를 종료하고 다시 호출하면 바로 재시작이 된다. 하지만 아이폰에서는 그렇게 할수가 없었다. 혹시나 하는 마음에 재시작 시키는 함수를 찾아봤지만 이 또한 없었다. 나의 구글링 실력이 부족해서 못찾은거일수도 있지만... 좌절하고 있는 순간... 정말 우연하게 방법을 알아냈다. 사실 실수로 코드를 잘못 넣었는데... 재시작이 되는것이다... 아! 실수로 찍은 로또나 될것이지.. 어쨋든 기분은 좋다. 불로소득같은 느낌이다. 방법은 진짜 간단하다. AppDelegate 의 applicationWillEnterForeground 에서 exit(0)를 호출해주면 된다. 아마도 잠에서 깨어나기 직전에 종료를 해주면 깨어나는 작업이 중단되지 않고 계속 진행되면서 재시작되는 효과가 나오.. 2018. 3. 26.
500년이 반만년을 새기다... 고려, 북진을 꿈꾸다 고려, 현재 우리가 "코리아"로 불리게된 기원이다. 하지만 정작 우리는 고려에 대해서 잘 모르는것이 사실이다. "태조 왕건"이라는 드라마는 알아도, 고구려의 위상은 알아도, 고려가 어떤 나라였는지는 관심 밖이다. 학창시절에 역사와 관련된 교양과목을 들은적이 있었다. 교수님이 우리나라의 왕을 주제로 레포트를 내주셨는데 나는 고려 광종에 대해서 썼다. 그런데 고려 임금을 선택한 사람은 나밖에 없었다며 신기해 하셨다. 이렇듯 세계에 이름을 알렸음에도 고려가 푸대접을 받는다는것은 안타까운 일이다. 세상엔 이유없는 결과는 없다. 고려가 우리나라의 이름이 된건 결코 우연이 아니다. 우리나라 역사상 외침을 가장 많이 받고도 당당하게 이름을 남길 수 있었던 이유! 고려의 500년 전쟁사에서 그 원동력을 찾을 수 있다... 2018. 2. 10.
UIView의 원 테두리가 얇거나 작아보일때... 가끔 우리는 아주 사소한 차이로 고민할 때가 있다. 이거 왜이러니? 기분탓인가? 한번 살펴볼까? 귀찮다 이정도쯤이야 뭐.. 하고 지나친적이 있지 않은가ㅎ 나는 많다ㅎㅎ 최근에도 그랬다. UIView에서 StrokeEllipse 를 이용해 rect 크기 만큼 원 테두리를 그릴수 있다. 하지만 그려 놓고 나니 왠지 생각보다 작아보였고, 안에 색깔있는 원을 넣으니 테두리 굵기마저 얇아 보였다.. 뭐지??? 처음엔 그냥 지나쳤다가 똥싸고 손안씻은것처럼 찝찝해서 한번 살펴보았다. 바보같았다... 왜 몰랐을까? 테두리 굵기는 양쪽으로 넓어진다는 사실을... 그래서 한쪽 굵기만큼 반이 얇아지고 작게 보이는 것이었다. 아래와 같이 하면 금방 해결된다.. 혹시나 귀찮아서 그냥 지나칠 분들을 위해 글을 남긴다. @IBIn.. 2018. 1. 29.
영업에서 배우는 개발자 마켓팅 개발자가 마케팅을 할려면 보통 방법으론 힘들다. 마인드 자체를 바꿔야 한다. 그래서 "나는 인생에서 알아야 할 모든 것을 영업에서 배웠다"는 이 책으로 나의 마인드를 체크해 보기로 했다 저자가 첫머리에서 밝히고 있듯이 많은 실패를 맛보며 쌓은 노하우가 들어있다. 어떻게 보면 원론적인 명언을 풀어쓴거처럼 보이지만 명언의 의미가 실제 경험에서 맞아떨어진게 아닌가 싶다. 내가 소스코드를 짜는 프로그래머지만 소스코드를 평생 연구해도 다 알수 없다. 심지어 세상은 이거로만 이루어진것도 아니다. 마켓팅은 어떻겠냐.. 죽을때까지 배워도 모자르다. 가끔 완벽한 소스를 짰다며 더이상 여기서 나아질게 없어!! 하는 경우가 있다. 하지만 시간이 지나고 보면 왜 이딴식으로 짰지?? 한다. 참... 사람은 쉽게 자만해 진다. .. 2017. 12. 17.
NSString을 마치 UILabel인 양 사용하기 UILabel을 추가하면 간단하게 글자를 넣을 수 있다. 하지만 sub view가 많아지면 어플이 무거워 질 수 있는데 이럴때에는 NSString을 써주면 좋다. 그렇다면 NSString를 UILabel처럼 배경색을 넣어서 마치 view인듯 사용해 보자~ 먼저, NSString이 들어있는 클래스를 하나 만들자! NSString를 상속받아 확장해도 좋다. 나는 그냥 했다. TextBox라고 명명하겠다. class TextBox { //정렬키 상수 static let CENTER = 0 static let LEFT = 8 static let RIGHT = 16 static let TOP = 1 static let BOTTOM = 2 var mText: NSString var mAlign: Int var mF.. 2017. 11. 20.
이게 진짜 스마트폰 지하철 앱 지하철 노선도는 피처폰 시절부터 항상 들어있었죠 스마트폰 시대로 접어든 지금도 마찬가지에요 그런데! 똑같아요 피처에서 스마트로 시대가 바꿨는데 여전히 노선도에요 이젠 바꿔야 해요~ 스마트폰에 어울리는~ 우주 최초의 열차 인포그래픽 지하철 앱!! 노선도 말고 진짜 어플리케이션은 이거 하나뿐이죠 역을 누르면 다음 도착열차를 추적해 위치와 시간을 알려주고 열차를 누르면 다음 역과 도착시간을 단번에 볼 수 있어요 굳이 역에 들어가서 전광판을 확인할 필요가 없어요~ 우리는 어디서 내려야 화장실을 갈 수 있고, 반대편으로 넘어 갈 수 있는지 한눈에 보고 싶죠 서울에는 지하철이 넘쳐 나죠 때론 열차가 너무 많아 좁은 폰 화면으로는 클릭조차 힘들어요 하지만 걱정 마세요~ 열차 하나하나가 따로 중계되니~ 우측 하단에 지.. 2017. 10. 28.
ListView에 EditText를 넣을때 반드시 살펴봐야 할점 설정 페이지를 만들때 ListView로 EditText를 넣고 싶은 유혹에 빠진다 하지만 ListView의 특성상 사실 EditText는 적합하지 않다. ListView는 각각의 row뷰를 재사용하여 메모리를 아끼기 때문에 EditText의 변경값을 일일이 저장해 두었다가 다시 불려줘야 한다. 그리고 이때 진짜 주의할게 하나 있다. 변경 리스너의 중복을 방지하는 것이다. 반드시 재사용 뷰의 예전 리스너를 지워줘야 한다. 안그러면 예전 목록들과 뒤죽박죽 되버린다. 이해를 돕기 위해 리스너를 지우지 않았을때와 지웠을때도 비교해 보았다. public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstan.. 2017. 9. 11.