Node.js 커뮤니티의 복잡한 사정을 떠나서 


Node.js는 장점이 많다.


1. 간결하고 심플한 로직의 웹서버를 빠르게 구현하기에 좋다.

2. 언어의 통일 프론트 엔드 개발과 같은 언어로 진행.

3. 나름 뛰어난 성능, 커뮤니티, 모듈 활성화


하지만 정말 단 한가지 답이 안나오는 문제가 있다. 


노드에 성능을 주고 가져간 가독성.


콜백 문제를 해결할 방법이 없어 보인다.


ES6에 기본으로 들어간 Promise? 해결 책 아니다. 가독성 문제와. 중첩 될 경우 보기 불편한건 매 한가지.


TJ/Co ? Generator.? 그 중에 가장 기대 되는 대안이기는 하다. 가독성 문제도 상당부분 해결되는 부분이기는 하다. 하지만 Go Lang을 접해본 사람이라면 Generator도 절망 적이다. 이미 다른언어에는 기본적으로 존재하는 부분이고. 콜백 가독성 문제를 근원적으로 해결 못한다는 것을 알고 있으니..


Node.js 개발자가 Go language를 접하면 빠져 나올 수 없게되는 부분은 고루틴과 채널이다.


정말 TJ가 왜 Go 진영으로 떠났는지 잠깐만 봐도 알게 된다.


package main
 
import (
    "fmt"
    "time"
)
 
func pinger(c chan string) {
    for i := 0; ; i++ {
        c <- "ping"
    }
}
func printer(c chan string) {
    for {
        msg := <- c
        fmt.Println(msg)
        time.Sleep(time.Second * 1)
    }
}
func main() {
    var chan string = make(chan string)
 
    go pinger(c)
    go printer(c)
 
    var input string
    fmt.Scanln(&input)
}


위에 예제 보이는가 얼마나 간단하게 두개의 코루틴이 실행되고 채널을 통해 데이터를 얼마나 쉽게 전달 받는지.


노드로 비즈니스 로직 짜본 사람이라면 느끼는 절망이 한순간에 사라진다.


노드는 정말 제한적으로 사용해야 되나 보다..


미안 나도 이제 Go Lang으로 갈께... 아닌건 아니니까..











저작자 표시 비영리 변경 금지
신고


https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html


  • Localization and Keyboard settings (including 3rd party keyboards) are not correctly honored by Safari, Maps, and developer apps in the iOS 8.1 Simulator. [NSLocale currentLocale] returns en_US and only the English and Emoji keyboards are available. (18418630, 18512161)


[NSLocale currentLocale] 이 메소드를 런타임 Swizzling하면 해결.


NSLocale 카테고리 파일을 만들어서

appnema-Prefix.pch에 아래와 같이 추가


#import "NSLocale+ios8_1.h"


----------------------------------

//

//  NSLocale+ios8_1.h

//

//  Created by Uzysjung on 2014. 11. 11..

//  Copyright (c) 2014 SKPlanet. All rights reserved.

//


#import <Foundation/Foundation.h>

#if TARGET_IPHONE_SIMULATOR

@interface NSLocale (iOS8_1)

@end

#endif



----------------------------------


//

//  NSLocale+ios8_1.m

//

//  Created by Uzysjung on 2014. 11. 11..

//  Copyright (c) 2014 SKPlanet. All rights reserved.

//


#if TARGET_IPHONE_SIMULATOR

#import "NSLocale+ios8.1.h"

#import <objc/runtime.h>


@implementation NSLocale (iOS8_1)


+ (void)load

{

    Method originalMethod = class_getClassMethod(self, @selector(currentLocale));

    Method swizzledMethod = class_getClassMethod(self, @selector(swizzle_currentLocale));

    method_exchangeImplementations(originalMethod, swizzledMethod);

}


+ (NSLocale*)swizzle_currentLocale

{

    return [NSLocale localeWithLocaleIdentifier:@"ko_KR"];

}


@end


#endif



저작자 표시 비영리 변경 금지
신고

instancetype을 써야되는 이유

1. 코드 명확성 init은 무조건 instancetype으로.

init 에서 return type을 id로 쓰면 컴파일러가 알아서 instancetype으로 변경한다.

실제 동작은 intancetype으로 진행된다. 따라서 명시적으로 사용할 필요가 있다.


2. id와 인스턴스

intancetype은 자신과 동일한 클래스타입을 리턴할 때 사용한다.

id는 Generic형이다. 해당클래스 안에서 다른 클래스 타입을 리턴할 때 사용한다.


자세한 내용은 생략.



저작자 표시 비영리 변경 금지
신고

Marion -

 + Marion-Italic

 + Marion-Bold

 + Marion-Regular

Copperplate -

 + Copperplate-Light

 + Copperplate

 + Copperplate-Bold

Heiti SC -

 + STHeitiSC-Medium

 + STHeitiSC-Light

Iowan Old Style -

 + IowanOldStyle-Italic

 + IowanOldStyle-Roman

 + IowanOldStyle-BoldItalic

 + IowanOldStyle-Bold

Courier New -

 + CourierNewPS-BoldMT

 + CourierNewPS-ItalicMT

 + CourierNewPSMT

 + CourierNewPS-BoldItalicMT

Apple SD Gothic Neo -

 + AppleSDGothicNeo-Bold

 + AppleSDGothicNeo-Thin

 + AppleSDGothicNeo-Regular

 + AppleSDGothicNeo-Light

 + AppleSDGothicNeo-Medium

 + AppleSDGothicNeo-SemiBold

Heiti TC -

 + STHeitiTC-Medium

 + STHeitiTC-Light

Gill Sans -

 + GillSans-Italic

 + GillSans-Bold

 + GillSans-BoldItalic

 + GillSans-LightItalic

 + GillSans

 + GillSans-Light

Thonburi -

 + Thonburi

 + Thonburi-Bold

 + Thonburi-Light

Marker Felt -

 + MarkerFelt-Thin

 + MarkerFelt-Wide

Avenir Next Condensed -

 + AvenirNextCondensed-BoldItalic

 + AvenirNextCondensed-Heavy

 + AvenirNextCondensed-Medium

 + AvenirNextCondensed-Regular

 + AvenirNextCondensed-HeavyItalic

 + AvenirNextCondensed-MediumItalic

 + AvenirNextCondensed-Italic

 + AvenirNextCondensed-UltraLightItalic

 + AvenirNextCondensed-UltraLight

 + AvenirNextCondensed-DemiBold

 + AvenirNextCondensed-Bold

 + AvenirNextCondensed-DemiBoldItalic

Tamil Sangam MN -

 + TamilSangamMN

 + TamilSangamMN-Bold

Helvetica Neue -

 + HelveticaNeue-Bold

 + HelveticaNeue-UltraLight

 + HelveticaNeue-CondensedBlack

 + HelveticaNeue-BoldItalic

 + HelveticaNeue-CondensedBold

 + HelveticaNeue-Medium

 + HelveticaNeue-Light

 + HelveticaNeue-Thin

 + HelveticaNeue-ThinItalic

 + HelveticaNeue-LightItalic

 + HelveticaNeue-UltraLightItalic

 + HelveticaNeue-MediumItalic

 + HelveticaNeue

Gurmukhi MN -

 + GurmukhiMN-Bold

 + GurmukhiMN

Times New Roman -

 + TimesNewRomanPSMT

 + TimesNewRomanPS-BoldItalicMT

 + TimesNewRomanPS-ItalicMT

 + TimesNewRomanPS-BoldMT

Georgia -

 + Georgia-BoldItalic

 + Georgia

 + Georgia-Italic

 + Georgia-Bold

Apple Color Emoji -

 + AppleColorEmoji

Arial Rounded MT Bold -

 + ArialRoundedMTBold

Kailasa -

 + Kailasa-Bold

 + Kailasa

Sinhala Sangam MN -

 + SinhalaSangamMN-Bold

 + SinhalaSangamMN

Chalkboard SE -

 + ChalkboardSE-Bold

 + ChalkboardSE-Light

 + ChalkboardSE-Regular

Superclarendon -

 + Superclarendon-Italic

 + Superclarendon-Black

 + Superclarendon-LightItalic

 + Superclarendon-BlackItalic

 + Superclarendon-BoldItalic

 + Superclarendon-Light

 + Superclarendon-Regular

 + Superclarendon-Bold

Gujarati Sangam MN -

 + GujaratiSangamMN-Bold

 + GujaratiSangamMN

Geeza Pro -

 + GeezaPro-Light

 + GeezaPro

 + GeezaPro-Bold

Noteworthy -

 + Noteworthy-Light

 + Noteworthy-Bold

Damascus -

 + DamascusBold

 + DamascusSemiBold

 + DamascusMedium

 + Damascus

Avenir -

 + Avenir-Medium

 + Avenir-HeavyOblique

 + Avenir-Book

 + Avenir-Light

 + Avenir-Roman

 + Avenir-BookOblique

 + Avenir-Black

 + Avenir-MediumOblique

 + Avenir-BlackOblique

 + Avenir-Heavy

 + Avenir-LightOblique

 + Avenir-Oblique

Academy Engraved LET -

 + AcademyEngravedLetPlain

Mishafi -

 + DiwanMishafi

Futura -

 + Futura-CondensedMedium

 + Futura-CondensedExtraBold

 + Futura-Medium

 + Futura-MediumItalic

Farah -

 + Farah

Kannada Sangam MN -

 + KannadaSangamMN

 + KannadaSangamMN-Bold

Arial Hebrew -

 + ArialHebrew-Bold

 + ArialHebrew-Light

 + ArialHebrew

Arial -

 + ArialMT

 + Arial-BoldItalicMT

 + Arial-BoldMT

 + Arial-ItalicMT

Party LET -

 + PartyLetPlain

Chalkduster -

 + Chalkduster

Hiragino Kaku Gothic ProN -

 + HiraKakuProN-W6

 + HiraKakuProN-W3

Hoefler Text -

 + HoeflerText-Italic

 + HoeflerText-Regular

 + HoeflerText-Black

 + HoeflerText-BlackItalic

Optima -

 + Optima-Regular

 + Optima-ExtraBlack

 + Optima-BoldItalic

 + Optima-Italic

 + Optima-Bold

Palatino -

 + Palatino-Bold

 + Palatino-Roman

 + Palatino-BoldItalic

 + Palatino-Italic

Malayalam Sangam MN -

 + MalayalamSangamMN-Bold

 + MalayalamSangamMN

Al Nile -

 + AlNile-Bold

 + AlNile

Bradley Hand -

 + BradleyHandITCTT-Bold

Hiragino Mincho ProN -

 + HiraMinProN-W6

 + HiraMinProN-W3

Trebuchet MS -

 + Trebuchet-BoldItalic

 + TrebuchetMS

 + TrebuchetMS-Bold

 + TrebuchetMS-Italic

Helvetica -

 + Helvetica-Bold

 + Helvetica

 + Helvetica-LightOblique

 + Helvetica-Oblique

 + Helvetica-BoldOblique

 + Helvetica-Light

Courier -

 + Courier-BoldOblique

 + Courier

 + Courier-Bold

 + Courier-Oblique

Cochin -

 + Cochin-Bold

 + Cochin

 + Cochin-Italic

 + Cochin-BoldItalic

Devanagari Sangam MN -

 + DevanagariSangamMN

 + DevanagariSangamMN-Bold

Oriya Sangam MN -

 + OriyaSangamMN

 + OriyaSangamMN-Bold

Snell Roundhand -

 + SnellRoundhand-Bold

 + SnellRoundhand

 + SnellRoundhand-Black

Zapf Dingbats -

 + ZapfDingbatsITC

Bodoni 72 -

 + BodoniSvtyTwoITCTT-Bold

 + BodoniSvtyTwoITCTT-Book

 + BodoniSvtyTwoITCTT-BookIta

Verdana -

 + Verdana-Italic

 + Verdana-BoldItalic

 + Verdana

 + Verdana-Bold

American Typewriter -

 + AmericanTypewriter-CondensedLight

 + AmericanTypewriter

 + AmericanTypewriter-CondensedBold

 + AmericanTypewriter-Light

 + AmericanTypewriter-Bold

 + AmericanTypewriter-Condensed

Avenir Next -

 + AvenirNext-UltraLight

 + AvenirNext-UltraLightItalic

 + AvenirNext-Bold

 + AvenirNext-BoldItalic

 + AvenirNext-DemiBold

 + AvenirNext-DemiBoldItalic

 + AvenirNext-Medium

 + AvenirNext-HeavyItalic

 + AvenirNext-Heavy

 + AvenirNext-Italic

 + AvenirNext-Regular

 + AvenirNext-MediumItalic

Baskerville -

 + Baskerville-Italic

 + Baskerville-SemiBold

 + Baskerville-BoldItalic

 + Baskerville-SemiBoldItalic

 + Baskerville-Bold

 + Baskerville

Didot -

 + Didot-Italic

 + Didot-Bold

 + Didot

Savoye LET -

 + SavoyeLetPlain

Bodoni Ornaments -

 + BodoniOrnamentsITCTT

Symbol -

 + Symbol

Menlo -

 + Menlo-Italic

 + Menlo-Bold

 + Menlo-Regular

 + Menlo-BoldItalic

Bodoni 72 Smallcaps -

 + BodoniSvtyTwoSCITCTT-Book

DIN Alternate -

 + DINAlternate-Bold

Papyrus -

 + Papyrus

 + Papyrus-Condensed

Euphemia UCAS -

 + EuphemiaUCAS-Italic

 + EuphemiaUCAS

 + EuphemiaUCAS-Bold

Telugu Sangam MN -

 + TeluguSangamMN

 + TeluguSangamMN-Bold

Bangla Sangam MN -

 + BanglaSangamMN-Bold

 + BanglaSangamMN

Zapfino -

 + Zapfino

Bodoni 72 Oldstyle -

 + BodoniSvtyTwoOSITCTT-Book

 + BodoniSvtyTwoOSITCTT-Bold

 + BodoniSvtyTwoOSITCTT-BookIt

DIN Condensed -

 + DINCondensed-Bold

저작자 표시 비영리 변경 금지
신고


iOS개발을 하다보면 특정 그림을 키워서 쓰기도하고 줄여서 쓰기도 해야 되는 경우가 자주 발생한다. (예를들면 로고?)


보통은 큰이미지 가지고 리사이징해서 많이들 사용하는데. 그림이 디테일이 쩔어서 리사이징 할때  우그러진다든지해서 일일히 각 사이즈별로 다 디자이너가 리사이징해줘야 될때..

이미지로 해결하려다 보면 메모리 이슈가 당근발생한다. UIImage Cache를 Purge할까? 싶을때도 생긴다. 물론 해본적은 없음.


하여튼 개발자라면 아~ 이건아닌데란 생각 많이 한다.


간단한 그림은 iOS CoreGraphic으로 직접그려서 사용하기도 하는데 복잡한 그림은 ....3살짜리도 형님으로 모셔야할 내 그림실력으로는 생각보다 쉽지가 않다.


다시 본론으로 돌아와서 일러스트레이터 그림을 코드상으로 가져오는 방법을 설명하겠다.



1. SVGKit https://github.com/SVGKit/SVGKit


오픈소스이고 iOS & OSX상에서  svg파일을 로드할 수 있다.

.ai 파일을 svg파일로 바꿔야 되는 부분이 있긴하지만.

UIImage 나 UIImageView로 변환해서 쉽게 사용할 수 있는 장점이 있다.


2. PaintCode http://www.paintcodeapp.com/

벡터그래픽툴이고 실시간으로 코드가 생성되는게 보이는 장점

PSD , SVG Import 기능있음 

99.99$라는게 함정.



3. drawscrip.pt http://drawscri.pt  

Adobe Illustrator에서 바로 코드로 변환이 가능하다. 그러나 현재는 베타버전이라는 거..


4. Qwarkee

이역시 SVG to Coregraphic 앱이다. 제한적이기는 하나 잘된다.

함정은 역시 39.99$라는거..


iOS개발자는 돈 많은니 99.99$정도는 그냥살거라 믿기에 PaintCode만 소개 하려 했지만.

선택의 폭을 넓혀드립니다.~


난 돈없으니깐 막 베타 쓰고 그래야지~


 PS. 검색하다가 좋은거 찾았는데 유료 ㅜㅜ

 코드 컴플리션 'Accesorizer' - https://itunes.apple.com/us/app/accessorizer/id402866670?mt=12



저작자 표시 비영리 변경 금지
신고



심리학자가 바라본 UX 디자인

코끼리에 대한 아래 이야기 들어본 적 있으시죠?

한 왕이 여섯 남자를 어두운 건물 안에 불러들인다. 그들은 아무것도 볼 수 없다. 왕이 그들에게, “짐이 동쪽의 야생의 땅에서 이 동물을 가져 왔는데, 코끼리라 불리는 동물이다."라고 물었다. “코끼리란 무엇입니까?” 라고 남자들이 질문했다. “코끼리를 만져보고 나에게 설명해 보아라.”라고 왕이 말했다. 다리를 만져 본 남자는 코끼리는 기둥 같다 말하였고, 꼬리를 만진 남자는 코끼리는 동아줄 같다 말하였고, 코를 만진 남자는 코끼리는 나뭇가지 같다 말하였고, 귀를 만진 남자는 코끼리는 부채 같다고 하였고, 배를 만진 남자는 코끼리는 벽 같다 하였고, 상아를 만진 남자는 코끼리는 딱딱한 관 같다고 했다. “너희들 말은 전부 맞다" 라고 왕이 말했다, “너희들은 각각 코끼리의 한 부분을 만지고 있는 것이다.”

이 코끼리 이야기를 들으면, 다양한 배경, 교육, 경험을 가진 사람들이 디자인에 대해 다양하게 바라본다는 점을 떠올리게 됩니다. 시각 디자이너와 상호작용 디자이너, 프로그래머가 바라보는 UX 디자인은 서로 다릅니다. 서로 경험하고 있는 UX 디자인은 어떤 부분인지, 서로가 어떻게 느끼는 지를 이해하면 도움이 될 것입니다.

저는 심리학자로 교육을 받았고, 훈련을 받았습니다. 위에서 한 이야기에서, 코끼리에 대해 제가 경험한 것에 해당하는 것은, 인간에 대해 우리가 아는 것과 그 지식을 UX 디자인에 적용시키는 방식인 셈입니다. 저는두뇌와 시각체계, 기억, 동기에 대한 연구결과와 지식을 사용해서, 이것들로부터 UX 디자인의 원리를 알아냅니다.

이 글은 코끼리를 심리학자의 관점에서 본 스냅샷입니다.

1. 사람들은 필요 이상으로 생각하거나 일하고 싶어하지 않습니다.

  • 사람들은 작업을 완료하기 위해 필요한 최소한의 일만 하려 합니다.
  • 사람들에게는 최소한의 정보만 보여주고, 그들이 원한다면 자세한 정보를 볼 수 있도록 해주세요. 이 방법은 단계적 공개(progressive disclosure)라는 멋진 이름이 있습니다. 최근에 관련된 블로그 글도 올렸지요.
  • 설명하는 대신에, 사람들에게 예제를 보여주세요.
  • 화면이나 페이지, 모바일 기기에서 환경이 부여한 의미(affordance)에 주목하세요. ‘클릭이 가능한 것’은, 반드시 ‘클릭이 가능한 것 처럼’ 보여야 합니다.
  • 필수 기능만 제공하세요. 필요할 것 같다는 당신의 견해는 믿지 마세요. 설문조사로 실제로 확인하세요. 사람들에게 필요 이상으로 기능들을 제공하면 경험이 어수선하게 됩니다.
  • 기본값을 제공하세요. 기본값은 일을 할 때 수고를 덜어줍니다.

2. 사람들은 저마다 한계가 있습니다.

  • 사람들은 흥미를 잃지 않을 때에만 스크린상에서 많은 양의 정보와 텍스트를 볼 수 있습니다. 지금 순간에 딱 필요한 정보만 제시하세요. (위에 나온 progressive disclosure를 참고하세요.)
  • 정보를 훑어보기 쉽게 제시하세요.
  • 헤더나 짤막한 글을 사용하세요.
  • 사람들은 멀티태스킹을 할 수 없습니다. 연구결과를 보면 명확합니다. 그러니 사람들이 멀티태스킹을 하기를 기대하지 마세요.
  • 사람들은 길이가 짧은 편을 선호합니다. 하지만 길이가 긴 경우에 더 잘 읽을 수 있습니다! 수수께끼같죠. 그러니 자신의 경우는 선호도가 중요한지, 사람들이 잘 읽을 수 있는 것이 중요한지 선택을 하세요. 하지만 이것 만은 기억하세요. 사람들이 요구한다고 해서, 그것이 그들에게 반드시 좋지는 않다는 것을요.

3. 사람들은 실수를 합니다.

  • 사람들이 실수를 할 거라고 가정을 하세요. 사람들이 어떤 실수를 할 지 예상을 하고, 이 실수를 예방하도록 하세요.
  • 사용자가 잘못 선택하면 심각한 결과가 나오는 경우에는, 사용자가 선택한 대로 실행시키기 전에 사용자에게 확인을 받으세요.
  • “**취소**”하기 쉽게 만드세요.
  • 사람들이 이미 실수를 한 후에 고치도록 돕는 것 보다는, 애초에 실수를 하지 않도록 돕는 것이 훨씬 낫습니다. 최고의 에러 메세지요? 아예 에러 메세지가 안 뜨는 게 최고죠.
  • 사람들이 해야 하는 과제가 실수하기 쉬운 것이라면, 그 과제를 작은 단위의 과제로 쪼개세요.
  • 사용자가 뭔가 실수를 했을 때, 사이트에서 그 실수를 교정해줄 수 있다면, 교정해준 후에, 무엇을 어떻게 교정하였는지 사용자에게 알려주세요.
  • 누가 UX를 디자인 하든 간에, UX 디자이너도 실수를 합니다. 그러니 사용자에게서 피드백을 받는 사이클을 돌리고 테스트를 하는데, 즉 이터레이션을 하는 데에 시간과 노력을 쓰세요.

4. 인간의 기억이 작동하는 방식은 매우 복잡합니다.

  • 인간은 기억을 재구성합니다, 즉 인간의 기억은 계속 바뀝니다. 사용자가 말한 것을 그대로 다 신뢰하기 보다는, 사용자의 행동을 관찰하는 편이 더 낫습니다.
  • 인간의 기억은 깨지거나 바뀌기 쉽습니다. 기억은 쉽게 사라지고 에러가 발생하는 경우도 많습니다. 사용자가 어떤 과제를 기억하기를 기대하지 마세요. 또는 어떤 페이지를 기억하리라고 기대하지 마세요.
  • 인간은 한 번에 3-4개의 항목만 기억할 수 있습니다. "제 7 더하기 빼기 2"의 법칙은 전설이라고 할 수 있습니다. 연구 결과를 보면, 인간이 기억하는 실제 숫자는 3-4 정도입니다.

5. 사람들은 사회적입니다.

  • 사람들은 항상 사회적이기 위해서 테크놀로지를 사용하려고 합니다. 이건 지난 몇 천 년간 사실이었지요.
  • 사람들은 특히나 불확실한 상황에서 무엇을 해야 하는지에 대해 참고하기 위해 다른 사람들을 항상 의식합니다. 이것을 가리켜 사회적 확인이라고 합니다. 예컨대 평가라든가 리뷰라든가 하는 것이 웹사이트에서 꽤 강력한 이유는 바로 이 사회적 확인 때문이라고 할 수 있겠지요.
  • 만약 사람들이 무언가를 동시에 함께 한다면 (동시 행동) 그것은 그들을 서로 끈끈하게 엮어줍니다 - 실제로 두뇌에서 어떤 화학작용이 일어난다는 거죠. 사람들이 동시에 함께 웃는 것도 사람들 사이를 끈끈하게 이어줍니다.
  • 만약 당신이 나에 대해 호의를 베풀어 준다면, 난 무언가 다시 호의를 되돌려주어야 할 마음의 빚을 느낄 것입니다. (상호주의). 여러 연구 결과들을 바탕으로 볼 때, 만약 당신이 사람들에게 어떤 양식을 작성하게 하려고 한다면, 그들이 원하는 무언가를 해 주고 나서 양식을 작성하게끔 요청하는 것이 좋습니다. 그 반대의 경우는 아니더라구요.
  • 당신이 누군가 무엇을 하는 것을 볼 때, 마치 당신이 스스로 그 일을 하는 것처럼 당신의 두뇌 내 같은 곳이 자극을 받습니다. (거울 신경회로 라고 부른다네요) 우리는 생물학적으로 모방을 하게끔 프로그래밍이 되어 있습니다. 만약 당신이 사람들에게 무언가를 하기를 바란다면, 누군가에게 당신이 그것을 하는 것을 보여주세요.
  • 당신은 오로지 150명의 사람들과 강력한 유대관계를 가질 수 있습니다. 강력한 유대관계란 당신의 물리적으로 가깝게 지낼 수 있는 사람들을 의미합니다. 하지만 느슨한 유대관계로는 수천명이 될 수 있고, 꽤 영향력을 행사할 수 있기도 합니다 (마치 페이스북처럼요)

6. 주의

  • 저는 점점 주의라는 것이 UI를 디자인하는데에 있어 전부다라고 생각하기 시작했습니다. 이 주제에 대해서는 앞으로 글을 더 쓸 거에요. 누군가의 주의를 끌고, 이를 유지하는 것, 그리고 무언가에 주의를 쏟고 있을 때 그 주의를 분산시키는 것, 이런 것이 가장 중요한 것 같습니다.
  • 사람들은 뭔가 다르고 새로운 것에 주의를 쏟도록 프로그램되어 있습니다. 뭔가 다른 것을 만들면, 눈에 띌 것입니다. 위에서 이런 이야기를 했었죠. 사람들은 시야에서 일어난 변화를 놓칠 수도 있습니다. 이런 현상을 가리켜서 변화를 놓치는 것(change blindness)이라고 부릅니다. 이런 현상에 관한 재미있는 비디오가 좀 있습니다. 거리에서 어떤 사람이 몇몇 사람에게 길을 묻는 거에요. 그래서 이 사람들이 말을 하기 시작하는데요, 사람들이 이 길을 물은 사람이 실제로 변하는데, 알아차리지를 못해요!
  • 주의를 끌기 위해 오감을 사용할 수 있습니다. 밝은 색상, 큼직한 글씨, 삑 하는 소리, 톤 등을 사용하면 주의를 끌 수 있습니다.
  • 사람들은 쉽게 주의가 분산됩니다. 사람들의 주의가 분산되지 않게 하려면, 페이지에서 뭔가를 번쩍거리게 하거나, 동영상을 재생시키거나 하지 마세요. 그런데, 주의를 끌고 싶으시면, 뭔가를 번쩍거리게 하거나, 동영상을 재생시키세요.

7. 사람들은 정보를 원합니다.

  • 도파민이란 화학물질은 사람들이 음식이나, 섹스나, 정보를 찾도록 뇌에 신호를 보닙니다. 배우고자 하는 욕망은 도파민으로 활성화됩니다. - 그래서 우리는 어쩔 수 없이 더 많은 정보를 갈망합니다.
  • 사람들은 실제로 자기가 소화할 수 있는 양보다 더 많은 양의 정보를 원합니다. 사람들은 정보를 더 많이 얻으면, 선택의 여지를 더 많이 가지고 있다고 느낍니다. 선택의 여지가 더 많다고 느끼면, 상황에 대한 통제하고 있다고 느낍니다. 통제하고 있다고 느낄 때 사람들은 더 잘 살아남을 수 있다고 느낍니다.
  • 사람들에게는 피드백이 필요합니다. 컴퓨터가 사람에게 파일을 로딩하고 있다고 이야기해야 하기 때문에, 파일을 로딩한다는 메세지를 보여주는 것이 아닙니다. 뭐가 어떻게 돌아가고 있는지 사람들이 알고 싶어하기 때문에 이런 메세지를 보여주는 것입니다.

8. 정신적 처리과정은 무의식적으로 일어납니다.

  • 인간의 정신적인 처리과정은 대부분 무의식적으로 일어납니다.
  • 무료 회원가입을 하게 만드는 등, 사용자가 작은 행동을 하게 만들 수 있다면, 그 사람들이 더 큰 행동을 할 가능성은 훨씬 높아집니다. (예를 들면, 프리미엄 계정으로 업그레이드 하게 하는 것)
  • old 두뇌는 어떤 판단을 내리거나 의사결정을 할 때, 입력된 정보를 사용합니다. old 두뇌는 생존과 번식 : 음식, 섹스, 위험 을 중요하게 여깁니다. 그래서 이런 것과 관련된 메세지는 사람의 관심을 쉽게 끕니다.
  • 감정적인 두되는 그림에 영향을 받습니다. 이야기에도 영향을 받지만, 특히 사람 그림에 영향을 받아요. 사람들이 판단을 내리거나 결정을 할 때에 이 감정적인 두되가 엄청난 영향을 미칩니다.
  • 사람들은 자신이 인지하지도 않는 것들에 엄청나게 영향을 받아서 행동을 합니다. "은퇴했다", "플로리다", "피곤하다"라는 말을 들은 것 만으로, 젊은 사람들은 더 천천히 걷습니다. (이런 것을 프레이밍)이라고 합니다.
  • old brain과 감정적인 두뇌 둘다 의식적인 지식과 상관없이 작동합니다. 우리는 어떤 판단을 내린 이유가 의식적인 두뇌가 이성적으로 판단했기 때문일 것이라고 생각할 것입니다. 하지만 우리가 어떤 행동을 하는 이유는, 이성적인 이유만은 아닙니다. 오히려, 이성적인 사고가 전혀 역할을 하지 않는 경우가 자주 있습니다.

9. 사람들은 정신적 모델(멘탈모델)을 만듭니다.

  • **>사람들은 언제나 정신적으로 어떤 공간에서 어느 물체나 아니면 해야할 일들(공과금을 낸다든 지, 책을 읽는다든 지, 아니면 리모콘을 쓴다던 지)에 대한 모델멘탈모델(mental model)을 만들어냅니다.
  • 어떤 특정한 임무에 대한 멘탈모델은 디자인한 인터페이스의 사용을 더 쉽게 또는 더 어렵게 할 수도 있습니다.
  • 더 나은 UX를 만들기 위해서는, 어떤 상품의 컨셉트 모델이나 웹사이트 사용자의 멘탈모델에 매치시키거나, 어떻게 유저들이 다른 멘탈모델을 만들 수 있도록 유도할 수 있느냐를 알아내야 합니다.
  • 은유법은 사용자들이 컨셉트모델을 "이해"할 수 있도록 도와줍니다. 예) “이건 책을 읽는 것과도 같다…”
  • 유저 리서치를 하는 가장 중요한 이유는 유저들의 멘탈모델에 대한 정보를 얻기 위해서입니다.

10. 시각 체계

  • 페이지들이 많이 뭉쳐 있으면, 사람들은 정보를 찾을 수 없습니다. 사람들이 봐야 하는 곳에는 그룹으로 묶어서 사람들이 시선을 한 곳에 던질 수 있도록 하세요.
  • 서로 비슷비슷한 것은 근처에 있는 것이 좋습니다.
  • 폰트를 큼직하게 하세요. 폰트를 예쁘게 한다고 너무 화려하게 하지 않는 편이 좋아요. 읽기에 편한 폰트로 하세요ㅣ
  • 연구결과를 보면 사람들은 자신이 보고 있는 것의 “핵심”을 얻는 데에, 주변시야(peripheral vision)를 사용합니다. 시선의 움직임을 연구한 결과가 참 흥미로운데요, 무언가를 똑바로 바라보고 있다고 해서, 그곳에 주의를 기울이고 있다는 의미는 아니라고 합니다.
  • 붉은색과 청색은 가장 같이 보기 힘든 색입니다. 푸른 바탕의 붉은 글씨나 그 반대의 경우는 가급적 사용하지 마세요. 사람들은 화면에서 정면이 아닌 비스듬한 위에서 볼때 물체를 식별를 가장 잘 식별합니다.(canonical perspective)
  • 색상은 어울림의 정도를 표시하는데 사용할 수도 있어요. 하지만 색맹인 사람도 있으니 색으로 표시한 정보는 다른 방식으로도 표현해야 합니다.

당신의 코끼리는 어떤 모양인가요?



번역 : https://gist.github.com/marocchino/2715886


윗 글에 관심이 있다면 저자의 홈페이지를 방문해보세요.


http://www.theteamw.com/


그리고 저가  쓴 책들도  읽어보면 좋을 것 같네요



사람에 대한 100가지 사실

저자
수잔 웨인쉔크 지음
출판사
위키북스 | 2012-02-28 출간
카테고리
컴퓨터/IT
책소개
『사람에 대한 100가지 사실』은 무엇이 사람들로 하여금 어떤 ...
가격비교



성공 웹사이트 UX 디자인 세트

저자
수잔 웨인쉔크, 로버트 후크만 주니어 지음
출판사
에이콘출판 | 2012-11-01 출간
카테고리
컴퓨터/IT
책소개
『성공 웹사이트 UX 디자인 세트』는 인간의 뇌와 심리에 대한 ...
가격비교



심리를 꿰뚫는 UX 디자인

저자
수잔 웨인쉔크 지음
출판사
에이콘출판 | 2010-05-31 출간
카테고리
컴퓨터/IT
책소개
재미있는 UX 심리학의 원리와 클릭을 이끌어내는 성공 웹사이트의...
가격비교



저작자 표시 비영리 변경 금지
신고




디자인에 집중하라

저자
팀 브라운 지음
출판사
김영사 | 2010-04-20 출간
카테고리
경제/경영
책소개
예측가능한 디자인을 버리고, 보이지 않는 욕망을 디자인하라!애플...
가격비교 글쓴이 평점  


IDEO CEO 팀브라운씨가 쓰신 책인데.


내용은 참 좋다. 

디자인을 모든 분야에 적용하고 

통찰력으로 부터 예측가능한 것이 아닌 새로운 것을 어떻게 창출 할 것인지에 대한 내용을 담은 책이다.


다양한 디자인 방법론을 일화와 함께 소개하며 문제를 해결하는 방법을 알려주는데


번역이 잘못된 건지 저자가 정리를 잘 못하는 건지....


했던말 또하고 또하고 서술이 번잡하다.


사용자의 욕구를 수요로 변환하는 법이라던지. 


실무에서 고민이 많이 되는 부분 중 하나인...


언제 아이디어를 확산하고 어느순간 또 누가 아이디어를 수렴할지..


실질적인 내용도 다루는데... 


서문에서 팀브라운씨가 누가 권유해서 목차를 넣었는데. 자기는 목차를 넣는 것을 반대 했다고 한다. 


순서가 중요치 않다고. 책 첫표지의 마인드맵을 더 중요하게 생각한다고 했는데..


사고는 그렇게 하는게 맞는거 같은데... 독자가 디자인적 사고에 접근하는 방식은 좀 고민해서 정리 해줬으면 좋았을걸 하는 생각이 있다.


개인적인 생각은 누가 3~4번 읽고 다시 요약 정리하면 딱 좋은 책이 될듯하다. ㅋ 


근데 팀브라운씨의 의도 또한 알것 같다. 아마 책을 읽고 체계를 자기가 정리 분류하기 바라면서 쓴 것 같긴하다.


하여튼 난 좀 그래~





저작자 표시 비영리 변경 금지
신고

'Life' 카테고리의 다른 글

'Change By Design'을 3/4 읽고......  (0) 2013.06.20
지리는 클라우드 IDE Cloud9  (0) 2013.06.20
REWORK (똑바로 일하라)를 읽고  (0) 2012.03.29
쿨링오프제 시행.  (0) 2012.02.12

요즘....


통합자막생성기,자막변환기 때문에 트래픽이 터지는 사태가 발생도 했고 500원 짜리의 한계..


상황도 여유롭게(?) 바쁘고... 


홈페이지도 5년 정도 되어서 리뉴얼을 하려고 마음은 먹었는데 


집 컴터가 후지기도 하고 이것저것 깔기도 귀찮아서..... 아이맥27인치를 사려고 생각은 하였으나 돈이 없는 관계로.. 


가난해 ㅜㅡ


클라우드 IDE 괜춘한거 없나 이것 저것 뒤져보았다. 그러다 다시 찾은 Cloud9


작년인가 재작년에 cloud9 한번보고 괜찮긴 한데 아직은 사용할 정도 수준은 아니구나. 싶었는데....


와 최근에 보니깐 너무 훌륭하다...


보고 지렸음. 파일 업로드.다운로드도 너무 쉽고... 디버깅도 지원하고


조만간 코드 콤플리션도 지원할 기세..



PHP만 일단 사용하고 있긴한데 


IDE 화면 테마도 지원한다.. ㄷㄷㄷ 난 XCode...

게다가 터미널창...ㄷㄷㄷ 지린다.


여가 생활로 개발하는 거라면 강력 추천. !


짱짱맨.~


https://c9.io


저작자 표시 비영리 변경 금지
신고

'Life' 카테고리의 다른 글

'Change By Design'을 3/4 읽고......  (0) 2013.06.20
지리는 클라우드 IDE Cloud9  (0) 2013.06.20
REWORK (똑바로 일하라)를 읽고  (0) 2012.03.29
쿨링오프제 시행.  (0) 2012.02.12
Uzys YouTube Pop Player Apps 2013.06.08 21:07

Demo



Specification

  • Drag & Drop
  • Suffle
  • Music list is updated at every 4 hours
  • Smart Buffering
  • Auto Lyric Search

BugFix

  • 20100503 곡 삭제 후 마지막 곡에서 Next 누를 시 동작 안되는 거 수정
  • 20100504 Webkit 브라우저에서 곡 리스트 삭제시 스크롤이 Top으로 올라오는 것 수정
  • 20100513 빌보드 - 공식비디오 우선 검색 , KPOP - 검색 시 티저 제외

References


저작자 표시 비영리 변경 금지
신고

'Apps' 카테고리의 다른 글

Uzys YouTube Pop Player  (0) 2013.06.08
UzysProxyActivator  (0) 2013.06.08
UzysSubtitleRenamer 자막이름변경유틸  (8) 2013.06.08
Uzys SMI Merge Tool (통합자막 생성기)  (29) 2013.06.08
Uzys SRT←→ SMI Converter  (15) 2013.06.08
UzysProxyActivator Apps 2013.06.08 21:03


 

 


Download

Specification

  • Enable/Disable Proxy without restarting browser
  • excute external application when enable proxy.

To do list

  • Including tunneling function
  • setting property for HTTP,FTP,Sock Proxy URL and port

BugFix

  • Fix When you enable proxy, it can't run external program before opening setting frame.


저작자 표시 비영리 변경 금지
신고

'Apps' 카테고리의 다른 글

Uzys YouTube Pop Player  (0) 2013.06.08
UzysProxyActivator  (0) 2013.06.08
UzysSubtitleRenamer 자막이름변경유틸  (8) 2013.06.08
Uzys SMI Merge Tool (통합자막 생성기)  (29) 2013.06.08
Uzys SRT←→ SMI Converter  (15) 2013.06.08

서버 폭주로 인하여 블로그로 이동합니다.


Screenshot



변환전



변환 후

Description

1. 미드 새 에피소드가 나올 때 마다 바로 찾아보시는 분이라면 아시겠지만, 영화 따로 자막 따로 다운받아야 되는 경우가 많다. 이런 경우는 영상과 자막 이름이 달라서 파일이름을 수정해 주어야 되는 번거로움이 발생한다. 이런 일들을 쉽고 편하게 해줄 수 있도록 간단한 프로그램을 만들었다. 
2. 1-5 에피소드는 A곳에서 받고 6-10은 B곳에서 받고 하다보면 파일이름이 다 달라서 탐색기에서 이름대로 정렬 시 이쁘게 안되는 경우가 있다 그런 경우에 파일이름을 쉽게 정리 할 수 있다. 


How to use

1. 동영상은 좌측 리스트박스에 Drag & Drop을 하고 자막은 우측 리스트박스에 Drag& Drop을 한다.

2. 영상과 자막이 에피소드별로 정렬된 순서가 맞는지 1:1 매칭이 맞는지 확인한다.

3. 파일이름 변경 방법은 총 3가지가 있습니다.

   a. 동영상 파일명 따라가기 : 리스트 박스에 1:1 매칭된 순으로 우측 자막을 좌측 동영상 이름으로 변경합니다.
       ex) Chuck s1 ep1.avi - Chuck season1 episode1.smi 변환 시 --> Chuck s1 ep1.avi - Chuck s1 ep1.smi가 됩니다.

   b. 자막 파일명 따라가기 : 리스트 박스에 1:1 매칭된 순으로 좌측 동영상 이름을 우측 자막을으로 변경합니다.
      ex) Chuck s1 ep1.avi - Chuck season1 episode1.smi 변환 시 --> 
            Chuck season1 episode1.avi  - Chuck season1 episode1.smi 가 됩니다.

   c. 직접정의 : 사용자가 파일명을 직접 정의 합니다. 여기서 중요한 것은 위에 파일명 따라가기는 좌,우측 리스트의 자막과 영상이 1:1 대응만 되면 되지만 직접정의의 경우는 꼭 에피소드의 순서대로 정렬 되어 있어야 합니다.
       ex) 직접정의 TextField에 'CHUCK S1 EP' 입력 시 리스트박스에 정렬된 순서대로 영상과 자막이 아래와 같이 생성된다.
             CHUCK S1 EP1.avi, CHUCK S1 EP1.smi
             CHUCK S1 EP2.avi, CHUCK S1 EP2.smi
             CHUCK S1 EP3.avi, CHUCK S1 EP3.smi
                     ........................... 

Todo list

- 리스트 정렬 기능 추가.

Update

V0.2
- 파일이름 오름차순으로 정렬 되도록 수정.
V0.3
- 선택 삭제 버그 수정
- 완료후 결과 폴더 열기 추가.


Download


저작자 표시 비영리 변경 금지
신고

'Apps' 카테고리의 다른 글

Uzys YouTube Pop Player  (0) 2013.06.08
UzysProxyActivator  (0) 2013.06.08
UzysSubtitleRenamer 자막이름변경유틸  (8) 2013.06.08
Uzys SMI Merge Tool (통합자막 생성기)  (29) 2013.06.08
Uzys SRT←→ SMI Converter  (15) 2013.06.08

트래픽 폭주로 블로그로 이동합니다. 

Description

한영 통합 자막 생성을 돕는 유틸입니다. SRT,SMI에 상관없이 통합자막은 SMI로 출력됩니다.

SRT,SMI에 상관없이 시간과 내용만을 추출해서 한글자막 리스트에 Drop된 파일은 KRCC로 영어자막 리스트에 Drop된 파일은 ENCC로 Class를 생성 하는 것이기 때문에 다른언어 또한 모두 가능합니다. 다만, UTF-8 인코딩 되어 있어야 됩니다. ^^

파일이름은 한글자막 리스트에 Drop된 파일과 동일하게 생성합니다. 따라서, Output Folder 설정에 유념해주세요. 잘못하면 덮어 씌워 질 수 있습니다.

Drag&Drop으로 위치이동이 가능합니다.



Uzys,통합자막 생성기

Specification

- Drag & Drop.
- Select Ouput folder.
- Auto detect file type based on grammar not extensions.
- Setting up output folder automatically.
- Save Last Output Folder.
- To do list

Update

V0.1.2
 한글자막 위치 변경 추가
 광고 추가

V0.1.3
 SRT → SMI로 변환 시 SRT의 EndTime에 맞춰서 공백 자막 삽입.
 버전 오류 제거.

V0.1.4
어셈블리 버전정보 수정

V0.1.5
한글 SMI 통합 시 줄바꿈 제거되는 것 수정.

v0.2.1
SRT 줄바꿈의 경우 통합시 적용. 

v0.2.2
선택삭제 버그 수정
통합완료 후 Output Folder 열기 추가

References

Wikipedia Subrip
Understanding SAMI 1.0

Download

UzysSMIMergeTool_bin_0.2.2.zip

UzysSMIMergeTool_setup_0.2.2.zip


저작자 표시 비영리 변경 금지
신고

'Apps' 카테고리의 다른 글

Uzys YouTube Pop Player  (0) 2013.06.08
UzysProxyActivator  (0) 2013.06.08
UzysSubtitleRenamer 자막이름변경유틸  (8) 2013.06.08
Uzys SMI Merge Tool (통합자막 생성기)  (29) 2013.06.08
Uzys SRT←→ SMI Converter  (15) 2013.06.08


트래픽이 폭주해서 블로그로 이동합니다. 


2010년에 만든건데 아직도 많이들 사용해주셔서 감사합니다. 





Uzys SRTSMI Converter


Description

Very Simple SRT to SMI , SMI to SRT Converter. 

Just Drag & Drop the files you want to convert. and push the 'Run'button. 

if you drop SRT file , it will convert to SMI.

if you drop SMI file , it will convert to SRT


Update

V0.1.5

When you convert SMI to SRT, &nbsp translate to space.

When you convert SRT to SMI ,It insert blank subtitle using EndTime of SRT. 

When you convert SRT to SMI, It remove blank subtitle. 
SRT –> SMI로 변환 시 내용 없는 공백 자막의 경우 제거.

V0.1.6
You can choose Destination Folder 1. Output folder you chose. 2. Same directory of Source File

V0.1.7.
- Handling Line Separator(<br>) when srt to smi
- Fix the bug. when smi to srt, write 10:00:00,000 wrong as 10:00 

Specification

Drag & Drop.

Select Ouput folder.

Auto detect file type based on grammar not extensions.

Setting up output folder automatically.

Save Last setting values.

Bug Report

- 비규격 SMI,SRT에 대한 에러처리 및 수정 지원.

References

Download

UzysSRTSMI_ConverterV0.1.7_bin.zip


UzysSRTSMI_ConverterV0.1.7_setup.zip


저작자 표시 비영리 변경 금지
신고

'Apps' 카테고리의 다른 글

Uzys YouTube Pop Player  (0) 2013.06.08
UzysProxyActivator  (0) 2013.06.08
UzysSubtitleRenamer 자막이름변경유틸  (8) 2013.06.08
Uzys SMI Merge Tool (통합자막 생성기)  (29) 2013.06.08
Uzys SRT←→ SMI Converter  (15) 2013.06.08

오늘 술마시면서 소스코드 Commit 정책에 관한 얘기가 나와서. 이런 저런 얘기를 했는데...


일단 메인 이슈는 - 단위별 개발완료 후 빌드만 되면 Commit VS Unit Test 완료 후 Commit.


난 단위별 개발완료 후 빌드만 되면 commit을 선호하는데.. 별로 누가 옳다라고 주장하고 싶지는 않다. 


누가 옳은지는 상황에 따라 다르니깐. 


사실 난 소스코드 Commit에 대한 것은 개발자 간의 약속이라 생각해 이래도 그만 저래도 그만이라 생각하고 맞춰가는 것이 맞다고 생각한다.


하지만 지내오면서 느낀 경험에 의해서는 간단하게라도 기본적인 Commit Rule을 정하고 가는 것이 좋은 것 같다.


하여튼 그래서 개인적으로 Commit에 대한 나의 의견을 적어보고 정리를 해보려 한다. 술마셔서 잘 될까 모르겠는데. 


이런 내용은 생각날 때 아니면 잘 적기가. ㅎㅎㅎ 귀차니즘...


나는 소규모 프로젝트일 때는 작성 중인 코드는 에러없이 컴파일이 완료되면 소스코드 저장소에 테스트를 거치지 않고 바로Commit 한다. 


이런 방식에는 다음과 같은 이유가 있다.


1. 단위 테스트를 완료한 후에 Commit을 하게 되면 그 동안 발생하는 수정사항에 대한 내용을 기록하는 기회를 놓치게 된다.

2. 최소한 하루에 한번정도는 Commit을 해서 개발 진행사항을 기록하는 것이 Code Traceability를 높일 수 있다.

3. 잦은 커밋은 개발자가 개발 단위 분량을 세분화 하고 진척도를 추적하고 이해할 수 있도록 해준다. 물론 팀원간 진척도 공유의 의미도 포함된다.

4. 대형프로젝트일 경우에 유용한 부분인데. 팀원 간에 자주 Commit을 함으로 인해서 커밋간의 충돌을 사전에 확인 하고 조율 할 수 있는 부분이 있다. 간단히 얘기해서 팀원간의 개발 동기화율을 높여주고 사전 충돌을 예방한다 !.


그 외에도 이유는 꽤 많을 것 같은데......


자주 커밋하는 것을 선호한다고 해서 의미없는 Commit도 막 하자는 얘기를 하는 것은 아니다

되도록이면 Task 단위로. 완료된 항목별로 Commit을 하는 것을 선호 한다는 얘기다.


잦은 커밋을 싫어 하는 사람들도 꽤 많은데.  일단 Conflict가 나는 걸 싫어 하는 경우도 있고....(Conflict는 빨리 나느게 좋은 것 같다 .4 번이유 처럼 시간이 길어질 수록 충돌시 해야 할 일은 더 커지기 때문에..)


Unit Test 후 Commit에 대한 내 생각은 아래와 같다.

1. 일단 위에 언급한 것 처럼 수정사항을 기록하는 상황을 많이 놓치게 된다. 뭐 Git 인 경우 Local에 기록하고 있다면 할말 없음 요~.

2. Unit Test를 그렇게 자주하는게 옳은 방법이야? 에 대한 의문이 있다. 

 의미 있는 시점 Integration이 필요한 상황 전에 [시스템 V&V , 컴포넌트 별로 Unit Test + Code Review ]후에 Baseline으로 잡음으로 Code의 정리를 꽤 하는게 옳다고 생각한다.(논란의 여지가 있음을 알고 있음요)


3. 그 이유는 Commit 전 Unit Test라는 것 자체를 Burden으로 여겨 Commit을 꺼리게 된다. 그리고 버그 발생 수준과 Cost에 대해 비교했을 때 잦은 Unit Test효율성 측면에서 경쟁력이 있는지 의문이 든다. 

완벽히 분리된 컴포넌트를 만들어 Unit Test를 하는 이상적인 상황이 현실에 자주 있을지에 대한 의심과. 요구사항 변경 타 컴포넌트와의 인터페이스로 인해 Code는 계속해서 진화하고 Unit Test를 변경 될때 마다 다시하는것이 참.. 난 좀 비효율적이라 생각함.


4. 하지만 Testing 없이 막흘러가자는 얘기는 아니다. 위에 언급한 내용처럼 적절한 시점에서 Baseline을 잡음으로서 Code를 정리하는 형태를 가져가는 것이 좋겠다.


하여튼 위 얘기들은 개인적인 견해일 뿐 정답은 아님을 밝히며 여기서 마무리 해볼까 한다. 


요즘 인생에 대해 고민을 많이 하게 된다.....매사에 확실히 따지고 넘어가던 정열에 불타던 젊음이 없어졌음을 의미하는 건지. 내 주장보다는 남의 의견을 존중하는 사람이 되었다는 건지... 


소스코드 커밋에 대한 문제도 사소해 보이지만 확실히 해볼 필요가 있다.


어찌되었건 다시한번 내 행동과 인생을 돌아 보는 계기가 되었다. 인간사 쉽지가 않다. 


저작자 표시 비영리 변경 금지
신고

밑에 사용하시려는 폰트가 없으면 TTF폰트를 구하셔서 커스텀 폰트로 이용하시면 됩니다.



아래와 같이 코드를 작성하시면 확인 가능합니다..


 NSString *text =[NSString string];

    for (NSString *fName in [UIFont familyNames])

    {

        text=[text stringByAppendingFormat:@"%@ -\n",fName];

         NSLog(@"%@ -\n",fName);

        

        for(NSString *iName in [UIFont fontNamesForFamilyName:fName])

        {

            NSLog(@" + %@", iName);

            text=[text stringByAppendingFormat:@" + %@\n", iName];

        }

    }

    NSLog(@"\n%@",text);


Thonburi -

 + Thonburi-Bold

 + Thonburi

Snell Roundhand -

 + SnellRoundhand-Bold

 + SnellRoundhand-Black

 + SnellRoundhand

Academy Engraved LET -

 + AcademyEngravedLetPlain

Avenir -

 + Avenir-LightOblique

 + Avenir-MediumOblique

 + Avenir-Medium

 + Avenir-HeavyOblique

 + Avenir-BlackOblique

 + Avenir-Oblique

 + Avenir-Book

 + Avenir-Roman

 + Avenir-BookOblique

 + Avenir-Light

 + Avenir-Heavy

 + Avenir-Black

Marker Felt -

 + MarkerFelt-Wide

 + MarkerFelt-Thin

Geeza Pro -

 + GeezaPro-Bold

 + GeezaPro

Arial Rounded MT Bold -

 + ArialRoundedMTBold

Trebuchet MS -

 + TrebuchetMS

 + TrebuchetMS-Bold

 + TrebuchetMS-Italic

 + Trebuchet-BoldItalic

Arial -

 + Arial-BoldMT

 + ArialMT

 + Arial-ItalicMT

 + Arial-BoldItalicMT

Marion -

 + Marion-Regular

 + Marion-Bold

 + Marion-Italic

Gurmukhi MN -

 + GurmukhiMN

 + GurmukhiMN-Bold

Malayalam Sangam MN -

 + MalayalamSangamMN-Bold

 + MalayalamSangamMN

Bradley Hand -

 + BradleyHandITCTT-Bold

Kannada Sangam MN -

 + KannadaSangamMN

 + KannadaSangamMN-Bold

Bodoni 72 Oldstyle -

 + BodoniSvtyTwoOSITCTT-Book

 + BodoniSvtyTwoOSITCTT-Bold

 + BodoniSvtyTwoOSITCTT-BookIt

Cochin -

 + Cochin

 + Cochin-BoldItalic

 + Cochin-Italic

 + Cochin-Bold

Sinhala Sangam MN -

 + SinhalaSangamMN

 + SinhalaSangamMN-Bold

Hiragino Kaku Gothic ProN -

 + HiraKakuProN-W6

 + HiraKakuProN-W3

Papyrus -

 + Papyrus-Condensed

 + Papyrus

Verdana -

 + Verdana

 + Verdana-Bold

 + Verdana-BoldItalic

 + Verdana-Italic

Zapf Dingbats -

 + ZapfDingbatsITC

Avenir Next Condensed -

 + AvenirNextCondensed-HeavyItalic

 + AvenirNextCondensed-DemiBold

 + AvenirNextCondensed-Italic

 + AvenirNextCondensed-Heavy

 + AvenirNextCondensed-DemiBoldItalic

 + AvenirNextCondensed-Medium

 + AvenirNextCondensed-BoldItalic

 + AvenirNextCondensed-Bold

 + AvenirNextCondensed-UltraLightItalic

 + AvenirNextCondensed-UltraLight

 + AvenirNextCondensed-MediumItalic

 + AvenirNextCondensed-Regular

Courier -

 + Courier-Bold

 + Courier

 + Courier-BoldOblique

 + Courier-Oblique

Hoefler Text -

 + HoeflerText-Black

 + HoeflerText-Italic

 + HoeflerText-Regular

 + HoeflerText-BlackItalic

Helvetica -

 + Helvetica-LightOblique

 + Helvetica

 + Helvetica-Oblique

 + Helvetica-BoldOblique

 + Helvetica-Bold

 + Helvetica-Light

Euphemia UCAS -

 + EuphemiaUCAS-Bold

 + EuphemiaUCAS

 + EuphemiaUCAS-Italic

Hiragino Mincho ProN -

 + HiraMinProN-W3

 + HiraMinProN-W6

Bodoni Ornaments -

 + BodoniOrnamentsITCTT

Apple Color Emoji -

 + AppleColorEmoji

Optima -

 + Optima-ExtraBlack

 + Optima-Italic

 + Optima-Regular

 + Optima-BoldItalic

 + Optima-Bold

Gujarati Sangam MN -

 + GujaratiSangamMN

 + GujaratiSangamMN-Bold

Devanagari Sangam MN -

 + DevanagariSangamMN

 + DevanagariSangamMN-Bold

Times New Roman -

 + TimesNewRomanPS-ItalicMT

 + TimesNewRomanPS-BoldMT

 + TimesNewRomanPSMT

 + TimesNewRomanPS-BoldItalicMT

Kailasa -

 + Kailasa

 + Kailasa-Bold

Telugu Sangam MN -

 + TeluguSangamMN-Bold

 + TeluguSangamMN

Heiti SC -

 + STHeitiSC-Medium

 + STHeitiSC-Light

Apple SD Gothic Neo -

 + AppleSDGothicNeo-Bold

 + AppleSDGothicNeo-Medium

Futura -

 + Futura-Medium

 + Futura-CondensedExtraBold

 + Futura-CondensedMedium

 + Futura-MediumItalic

Bodoni 72 -

 + BodoniSvtyTwoITCTT-BookIta

 + BodoniSvtyTwoITCTT-Book

 + BodoniSvtyTwoITCTT-Bold

Baskerville -

 + Baskerville-SemiBoldItalic

 + Baskerville-Bold

 + Baskerville-Italic

 + Baskerville-BoldItalic

 + Baskerville-SemiBold

 + Baskerville

Chalkboard SE -

 + ChalkboardSE-Regular

 + ChalkboardSE-Bold

 + ChalkboardSE-Light

Heiti TC -

 + STHeitiTC-Medium

 + STHeitiTC-Light

Copperplate -

 + Copperplate

 + Copperplate-Light

 + Copperplate-Bold

Party LET -

 + PartyLetPlain

American Typewriter -

 + AmericanTypewriter-CondensedLight

 + AmericanTypewriter-Light

 + AmericanTypewriter-Bold

 + AmericanTypewriter

 + AmericanTypewriter-CondensedBold

 + AmericanTypewriter-Condensed

Symbol -

 + Symbol

Avenir Next -

 + AvenirNext-Heavy

 + AvenirNext-DemiBoldItalic

 + AvenirNext-UltraLightItalic

 + AvenirNext-HeavyItalic

 + AvenirNext-MediumItalic

 + AvenirNext-UltraLight

 + AvenirNext-BoldItalic

 + AvenirNext-DemiBold

 + AvenirNext-Bold

 + AvenirNext-Regular

 + AvenirNext-Medium

 + AvenirNext-Italic

Noteworthy -

 + Noteworthy-Light

 + Noteworthy-Bold

Bangla Sangam MN -

 + BanglaSangamMN-Bold

 + BanglaSangamMN

Zapfino -

 + Zapfino

Tamil Sangam MN -

 + TamilSangamMN

 + TamilSangamMN-Bold

Chalkduster -

 + Chalkduster

Arial Hebrew -

 + ArialHebrew

 + ArialHebrew-Bold

Georgia -

 + Georgia-Italic

 + Georgia-BoldItalic

 + Georgia-Bold

 + Georgia

Helvetica Neue -

 + HelveticaNeue-Bold

 + HelveticaNeue-CondensedBlack

 + HelveticaNeue-Medium

 + HelveticaNeue

 + HelveticaNeue-Light

 + HelveticaNeue-CondensedBold

 + HelveticaNeue-LightItalic

 + HelveticaNeue-UltraLightItalic

 + HelveticaNeue-UltraLight

 + HelveticaNeue-BoldItalic

 + HelveticaNeue-Italic

Gill Sans -

 + GillSans-LightItalic

 + GillSans-BoldItalic

 + GillSans-Italic

 + GillSans

 + GillSans-Bold

 + GillSans-Light

Palatino -

 + Palatino-Roman

 + Palatino-Bold

 + Palatino-BoldItalic

 + Palatino-Italic

Courier New -

 + CourierNewPS-BoldMT

 + CourierNewPSMT

 + CourierNewPS-BoldItalicMT

 + CourierNewPS-ItalicMT

Oriya Sangam MN -

 + OriyaSangamMN-Bold

 + OriyaSangamMN

Didot -

 + Didot-Italic

 + Didot

 + Didot-Bold

Bodoni 72 Smallcaps -

 + BodoniSvtyTwoSCITCTT-Book



저작자 표시 비영리 변경 금지
신고


다양한 Singleton class template들이 있는데요. Thread Safe 하냐 부터......


Thread Safe한 것들 중에도 어떤게 성능이 더 좋은가? 까지...


일단 가장 기본 구조를 보면 아래와같다

+(MyClass *)sharedInstance{ static MyClass *shared = nil; if(shared == nil) { shared = [[MyClass alloc] init]; } return shared; }


ㅇㅇ Thread safe하지 않은 거 맞다..


+initialize나 @synchronized{}를 이용해서 Thread safe하게 만드는 법이 있지만 @synchronized{}보다는 성능이 좋은 +initialize만 간단히 설명하고 오늘의 본론으로 들어가겠다.


@implementation SomeClass

static id sharedInstance = nil;

+ (void)initialize {
    if (self == [SomeClass class]) {
        sharedInstance = [[self alloc] init];
    }
}

+ (id)sharedInstance {
    return sharedInstance}

@end


GCD를 이용해서 singleton class를 만드는 법을 소개해보도록 하겠다.

WWDC Video 보면 GCD 홍보하면서 상당히 많이 소개된 내용인데. 대충요약해보면 아래와 같다.


+(MyClass *)sharedInstance {

 static dispatch_once_t pred;

 static MyClass *shared = nil;

 

 dispatch_once(&pred, ^{

  shared = [[MyClass alloc] init];

 });

 return shared;

}


구체적인 내용은 알아서들 보기바란다. 그냥 dispatch_once가 App lifecycle동안 단한번만 실행되기 때문에 thread safe가 보장된다.


길다 싶으면 macro로 만들어두고 쓰는 방법도 있다.(참조)


#define DEFINE_SHARED_INSTANCE_USING_BLOCK(block) \
static dispatch_once_t pred = 0; \
__strong static id _sharedObject = nil; \
dispatch_once(&pred, ^{ \
_sharedObject = block(); \
}); \

  return _sharedObject; \


@implementation SomeClass

+ (id)sharedInstance
{
  DEFINE_SHARED_INSTANCE_USING_BLOCK(^{
    return [[self alloc] init];
  });
}

@end


요즘 대세는 GCD ㅎㅎ 참편해~

__block의 경우는 ARC고려해서 만든것 같은데 ARC disable상태면 무시되기 때문에 무시해도 괜찮다.


ARC 관해서는 좋은 링크가 있어서 공유한다. 


나와같이 'ARC는 안쓰는데요~' 하시는 분들도 자세히 공부해둘 필요가 있다.. 왜냐? 요즘 라이브러리 대세는 ARC지원 이거등..


오늘은 여기까지 다음에는 Library에서 ARC지원하는 법에 대해서 설명할 예정임. 

저작자 표시 비영리 변경 금지
신고

오랜만에 올리는 글이네요. ㅎㅎ


라이브러리 만들때 종류에 따라서는 이미지 파일이나 xml파일들이 포함되어야 할 때가 있는데요.


파일들이 너무 많으면 조잡해져서 소스파일과 별도로 번들로 묶고 싶을 때까 있을 겁니다.


오늘은 그런 번들을 어떻게 만드는지 간단하게 설명해드리겠습니다.


@ Asset Bundle Package 만들기

1. Finder에서 폴더를 생성합니다.

2. 폴더안에 번들로 묶을 파일들을 집어 넣습니다.

3. 폴더명에 확장자 명 '.bundle'을 붙입니다. 그리고 엔터

변한거 보이시죠? 진짜 간단하죠. ㅋ


@ 번들 파일들 사용하기


일단 프로젝트 파일 구조는 이렇습니다.


1. 직접 사용하기


2. NSBundle이용하여 사용하기


[Sample Code 다운받기]


BundleSample.zip













저작자 표시 비영리 변경 금지
신고



똑바로 일하라

저자
제이슨 프라이드 지음
출판사
21세기북스 | 2011-01-31 출간
카테고리
자기계발
책소개
열심히만 하지 말고 제대로 일하라!『똑바로 일하라』는 업무에 대...
가격비교 글쓴이 평점  


이 책을 통해 [37Signals]의 'Getting Real' 이라는 부산물이 나왔다고 한다. 'Getting Real'이 개발에 한정된 내용을 다룬 에세이 모음집이라면 Rework는 보다 적극적으로 Start-up에 필요한 모든 내용을 다룬 에세이 모읍집이다. 37Signals의 마케팅, 고객응대, 회사 문화등을 소개한다.

아무래도 Getting Real의 내용과 많이 중복된다. 또한 그들의 사상이 워낙 간단 명료하고 내용을 풀어내는 방식에도 그들의 사상이 녹아있어 금방 요점을 잡아내어 읽기 쉽다. 

REWORK 역시 37Signals가 지금까지 상황이 오기까지 직접 체험한 내용들을 기반으로 작성하였다. 그런데 'Getting Real'과 조금 다른점이 있다면, 자신들의 사상을 너무 넓게 일반화 하고 있다는 점이다. 사실 이 부분이 조금 아쉬웠다.

일단, 37Signals에 대해 간단한 설명 없이는 이해가 안 갈 수 있는데. 이 회사는 소규모의 IT회사로서 Signal vs Noise라는 엄청난 블로그를 운영하며 팬들을 만들고 Productivity관련 어플리케이션을 만들고 있으며 그과정에서 'Ruby on Rails'를 공개해 굉장히 주목 받은 회사이다.

일단 이들의 내용 중 일반화하기 힘든 것들을 설명해보겠다.

홍보

 - ' 언론 홍보는 스팸이다' , '관객을 얻어라', '집에서 쓸만해야지'

대다수의 소비자는 올바른 제품을 판단할 수 있다는 전제하에 언론 홍보는 스팸이라고 언급을 하고 있다. 37Signal의 타겟 고객층들은 그런 사람들이 맞다. 하지만 제조업 중심의 대기업의 타겟 고객은 굉장히 넓다. 그리고 그 타겟들은 올바른 제품이 무엇인지 판단이 불가능한 사람들이 굉장히 많다 그리고 설사 알더라도 사게끔 하는 것이 바로 홍보다.

언론홍보 보다는 제품에 힘을 쓰라는 좋은 의미이지만 타겟 고객에 따라서는 무시할 수 없는 부분이라고 하고 싶다.

하지만 이런 몇가지 내용을 제외하고는 너무나도 좋은 내용들로 가득차있는 정말 좋은 책이다.

자신들의 사상을 관철시키며 살아가는 모습도 아름답다. 내용들 자체가 좀 더 세상을 좋게 만들어가기 위한 것들로 가득차있다. 비즈니스 또한 그렇게 접근해야 한다는 점을 관철하다 보니 일반화의 오류를 범한 것 같다. 아니 어쩌면 알면서도 이윤보다는 올바른 방향으로 진행되기를 바라는 마음에 그런 것인지도 모르겠다.


이책에서 가장 기억에 남는 말은

'제품 안에 내 자신을 불어넣어라', '변하지 않는 것에 집중하라' 그리고 '자신의 노하우를 외부에 공개하여 팬을 만들어라.' 제품의 기술과 성공의 노하우를 공개하더라도 다른 사람은 그것과 똑같은 것을 만들 수 없을 것이다. 모방을 통해서는 제품에 대한 철학까지는 가져가지 못하기 때문이다.

최근 나에게 가장크게 공감가는 에세이는

'이제 그만 자라', '자연스럽게 거절하라' , ' 그만하면 됐다.'

저작자 표시 비영리 변경 금지
신고

'Life' 카테고리의 다른 글

'Change By Design'을 3/4 읽고......  (0) 2013.06.20
지리는 클라우드 IDE Cloud9  (0) 2013.06.20
REWORK (똑바로 일하라)를 읽고  (0) 2012.03.29
쿨링오프제 시행.  (0) 2012.02.12

Cocos2D는 게임을 위한 라이브러리라서 UI관련 컴포넌트들이 상대적으로 부실하다. EAGLView를 지원하므로 UIKit을 함께 쓸 수 있지만. 간단한 UI만 필요한 경우에 굳이 UIKit을 함께 쓰는 것도 그다지 추천할 만한 방법은 아니다.

왜냐하면 UIKit을 함께 쓸경우 잠재적인 버그가 나타날 위험이 있기 때문이다. Cocos2D는 3rd Party 라이브러리 이므로 iOS 업데이트 후에 UIKit 연동에 문제가 생길 확률이 상당히 높다. 예를 들면 iOS5에서 iPad의 경우키보드 스플릿을 지원하게 되었는데 EAGLView에서 UITextField를 사용하고 키보드가 보일때 스플릿 해보면 프리징되면 스플릿이 동작하지 않는다.


COCOS2D에서 지원하는 메뉴 CCMenu는 Touchupinside 이벤트를 지원한다. 터치스크린에서 손이 떨어질 때 이벤트가 발생한다. 

하지만,  다양한 이유(슬라이드 버튼,확장메뉴,즉시 응답이 필요한 경우)로 인해 Touchdown이 필요한 경우가 있다.
TouchDown 이벤트를 지원하는 버튼은 CCSprite를 이용해 만들수도 있고 CCMenu를 상속받아서 CustomCCmenu를 만들 수도 있다.

그 중 CCMenu를 상속하여 TouchDown 이벤트를 지원하는 방법을 소개한다


CCTouchDownMenu.h

//
// CustomCCMenu.h
// MyName
//
// Created by Uzys on 12. 1. 31..
// Copyright 2012 Uzys. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface CCTouchDownMenu : CCMenu {
}
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
@end


CCTouchDownMenu.m

//
// CustomCCMenu.m
// MyName
//
// Created by Uzys on 12. 1. 31..
// Copyright 2012 Uzys. All rights reserved.
//
#import "CCTouchDownMenu.h"

@implementation CCTouchDownMenu

-(CCMenuItem *) itemForTouch: (UITouch *) touch
{
CGPoint touchLocation = [touch locationInView: [touch view]];
touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];

CCMenuItem* item;
CCARRAY_FOREACH(children_, item){
// ignore invisible and disabled items: issue #779, #866
if ( [item visible] && [item isEnabled] ) {
CGPoint local = [item convertToNodeSpace:touchLocation];
CGRect r = [item rect];
r.origin = CGPointZero;
if( CGRectContainsPoint( r, local ) )
return item;
}
}
return nil;
}

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
if( state_ != kCCMenuStateWaiting || !visible_ )
return NO;

for( CCNode *c = self.parent; c != nil; c = c.parent )
if( c.visible == NO )
return NO;
selectedItem_ = [self itemForTouch:touch];
[selectedItem_ selected];

if( selectedItem_ ) {

        [selectedItem_ unselected];
        [selectedItem_ activate];
        state_ = kCCMenuStateWaiting;
return NO;
}
return NO;
}
@end



CCTouchDownMenu 예제의 경우는 해당링크에서 다운로드 받을 수 있다. 
https://github.com/uzysjung/CCTouchDownMenu

저작자 표시 비영리 변경 금지
신고

NSUserDefaults 클래스는 공통으로 사용되는 Default Property를 관리한다.

CoreData,SQLite,File 저장 보다는 간단하게 사용이 가능하다.

보통 로그인,설정,Version 정보 불러오기,저장하기에 사용한다.

이 것 또한 결국에는 Plist를 이용한 것이기 때문에

저장가능한 클래스타입은. NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary 만을 지원한다.

다른 타입의 클래스 인스턴스를 저장하기를 원하면 NSKeyedArchiver/NSKeyedUnarchiver를 이용한 Serialization 과정을 거쳐야 한다. 직렬화 과정에 대한 내용은 추후에 다시 설명하기로 한다.

NSUserDefaults에서 사용하는 Property List의 경로는 아래와 같습니다.

/Users/사용자명/Library/Application Support/iPhone Simulator/4.3.2/Applications/15046BBC-D985-4097-BF7D-2B8BA0121EB4/Library/Preferences/appID.plist





Load


Save



위 코드는 Thread Safe한 코드를 구현해 두었는데 굳이 그럴 필요는 없다 간단히
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
인스턴스를 받아서 NSDictionary와 동일하게 사용하면 된다.
저장이 필요할 경우 [userDefaults synchronize] 만 호출하면 된다.


참고 예제 : http://mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/

저작자 표시 비영리 변경 금지
신고
쿨링오프제 시행. Life 2012.02.12 18:56

 

쿨링오프제 시행

일정 시간 이상 게임을 이용하면 게임 접속을 차단하는 조치

게임을 시작한 이후 2시간이 지나면 자동으로 게임 접속이 끊어진다.

게임 종료 후 10분이 지난 후 1회에 한해서 다시 접속을 할 수 있다.

 

교과부는 쿨링 오프제 이외에도 일정 시간이 지나면 게임 진행 수준이 떨어지는 시스템(ㅋㅋㅋ)

함께 도입하는 방안을 검토하겠다고 밝혔다.

 

게임산업계가 청소년 게임 중독에 대한 사회적 책임을 질 수 있도록 민간자금 출연을 확대하고,

이를 의무화하는 방안과 청소년의 PC방 이용시간을 오후 10시까지로 제한하는 청소년보호법을

어기는 업주의 벌칙규정을 강화한다는 내용도 함께 대책으로 밝혔다.

 

 

여성 가족부 : 강제 셧다운제

문화 관광부 : 선택젹 셧다운제

교육과학기술부: 쿨링오프제, 게임난이도 조절시스템

한국게임 문화재단 : 출연금 추가

 

여기까지가 현 상황.

 

쿨링오프제는 확실히 시행 될 것으로 보인다. 일단 학교 왕따 자살문제를 게임문제로 돌리면서

책임 회피하고 대선,총선 학부모들의 지지를 얻어내기에 참 좋은 카드다.

보수 언론들도 근거 없는 낚시 기사로 '게임=>폭력=>왕따=>자살' 테크라는 여론을 몰아가는 것도 그 한가지

 

이 상황에서 제일 불쌍한 건 누구일까? 게임업계? 아니다.

청소년들이다. 정치 희생양, 그들에게는 자유도 없고 소통의 창구도 없다. 또한 권리 따윈 박탈된지 오래다. 왜냐 유권자가 아니거등…

(유권자라고 지켜지는 건 아니지만 그래도 특히 심하니깐)

부모입장에서는 잘되었지 게임 못하게 국가에서 대신 해준다는데

 

여기서 이해가 가지 않는 점은 쿨링오프제를 왜 청소년에게만 시행하는걸까?

게임폐인은 청소년만 있고 청소년한테만 유해한 건가?

조선일보 얘기처럼 마약보다 위험한 이런 유해한 걸 왜~ 성인들은 규제하지 않을까.

게임 =>폭력=>왕따=>자살을 일반화 시킨데는 게임이 유해매체라는 건데

성인에게도

게임=>폭력=>범죄=>살인 테크의 가능성은 열려있는데…

사회의 안녕과 범죄율을 낮추기 위해서는 전체 게임 규제가 타당한거 아닌가?

쿨링오프제를 적용할거면 전 게임유저에게 동일하게 적용하는게 논리에 맞는데…

 

이렇게 공격적으로 돌변하는데. 성인이라고 멀쩡할까? ㅋ

대선,총선이 겁나서? 사회의 안녕을 지켜야지. 성인포함해서 쿨링오프,셧다운 시행으로 논리도 완성시키고

좀 좋아..아 그리고 외국게임은 유해매체가 아닌지 차단을 안하는 건가. 콘솔 네트워크도 차단 안하구..

외국게임업체들한테 로비 받은 건지.. 외국게임은 어찌할건지 대책을 얘기안하네…

 

그럼 국내게임업계는 셧다운, 쿨링오프 하면 휘청거릴까?

글쎄… . 국내에서는 외국게임업체들과 형평성 문제로 억울한 상황이 발생할 수는 있으나.

새롭게 내수온라인게임시장에 진입하는 신규게임업체 투자를 억제하는 효과를 불러일으킬 것으로 보인다.

 

내수수익모델이 한정된 상황에서 바로 해외시장을 타진 해볼 수 있을 만한 능력과 금전적 여유과 되는 신생업체는 손에 꼽을 테니…

(국내 유수유통사로부터 투자 받은 경우는 제외)

 

선발기업들은 후발주자들의 내수시장 진입을 막아주니 좋고.

내수시장 과포화라 해외시장 진출이 절실한 상황에서 보다 공격적인 자세를 취할 수 있도록 부스트 역할을 국가에서 해주니

위기감을 가지고 열심히 하겠네..

 

근데 너무 위기감 가지고 글로벌 컴파니가 될까 그게 걱정이네. 파나마에 법인 세우고 ㅋ.

 

 

신고

'Life' 카테고리의 다른 글

'Change By Design'을 3/4 읽고......  (0) 2013.06.20
지리는 클라우드 IDE Cloud9  (0) 2013.06.20
REWORK (똑바로 일하라)를 읽고  (0) 2012.03.29
쿨링오프제 시행.  (0) 2012.02.12

여러 곳에 개발 환경이 있던지,
원거리 협업이 필요한 경우,
프로젝트 매니지먼트,issue tracking 도구를 설치하기 귀찮을 때

Free Repository를 많이들 찾는다.

대표적으로는 SourceForge, GitHub 등이 있는데 SF는 프로젝트를 모두 오픈해야 하고 GitHub은 오픈하기 싫으면 돈을 내야한다.

Private Respository가 필요한데 돈은 내기 싫다면 아래 비교표에서 적당한 곳을 찾길 바란다.

Private Repository & Free를 원한다면 상당히 소규모 팀 혹은 단독일 거라 예상해서 Project Management Tool 은 비교항목에 넣지 않았다.


NAME

URL

Space

Commiter

Project

etc

bitbucket

https://bitbucket.org/

unlimited

5 User

unlimited

mercurial,git

assembla

http://www.assembla.com

1GB

unlimited

unlimited

svn,git

projectlocker

https://projectlocker.com

300MB

3 User

3 project

svn,git 

freepository

https://freepository.com

unlimited (?)

1 User

unlimited (?)

svn,git

Naver 개발자센터

http://dev.naver.com

unlimited

1 User

unlimited

svn,git


네이버 개발자 센터의 경우는 다 좋은데 일단 ID,프로젝트 네임 , 설명 정도는 오픈해야 되는 단점이 있다.

그럼 역시 bitbucket ? 

신고
1. UIView Transition 관련 Method 소개
 

 1.1 [UIView transitionFromView:toView:duration:options:completion:]

duration 동안  
FromView에서 toView로 장면 전환을 하며 options에서 적용한대로 트랜지션애니메이션이 불리며 끝난 후 completion 블록이 호출된다.
또한 fromView는 removeFromSuperview가 호출되고 toView는 addSubview가 알아서 호출된다.

[UIView transitionFromView:self.view1Controller.view 
                    toView:self.view2Controller.view duration:0.7 
                    options:UIViewAnimationOptionTransitionCurlUp 
                completion:^(BOOL finished){    
                    }];


 1.2 [UIView transitionWithView:duration:options:animations:completion:]


duration동안 transition이 일어날 containerView는  options에서 적용한 트랜지션애니메이션이 불리며 불리는 동안 block-based animation을 수행하고 completion 블록이 호출된다. 

 


[UIView transitionWithView:containerView
           duration:0.2
           options:UIViewAnimationOptionTransitionFlipFromLeft
           animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; }
           completion:^(BOOL finished){ // do something}];


 

 1.3 둘 간의 차이점.
    + transitionWithView의 경우는 AddSubview를 쓰든 view.hidden = YES를 주던 CAAnimation을 추가하던 block-based animation에서 다양한 상황을 제어/추가 할 수 있다.  

    + transitionFromView는 option을 주는 것외에는 화면 전환 애니메이션이 끝날 때까지는 다른 행동을 추가 하지 못한다.

 

1.4 트랜지션 옵션 (UIViewAnimationOptions)

UIViewAnimationOptionTransitionNone
No transition is specified.
Available in iOS 4.0 and later.
Declared in UIView.h.
 
UIViewAnimationOptionTransitionFlipFromLeft
A transition that flips a view around its vertical axis from left to right. The left side of the view moves toward the front and right side toward the back.
Available in iOS 4.0 and later.
Declared in UIView.h.

UIViewAnimationOptionTransitionFlipFromRight
A transition that flips a view around its vertical axis from right to left. The right side of the view moves toward the front and left side toward the back.
Available in iOS 4.0 and later.
Declared in UIView.h.

UIViewAnimationOptionTransitionCurlUp
A transition that curls a view up from the bottom.
Available in iOS 4.0 and later.
Declared in UIView.h.

UIViewAnimationOptionTransitionCurlDown
A transition that curls a view down from the top.
Available in iOS 4.0 and later.
Declared in UIView.h.

-------------------------- iOS5 and later only

UIViewAnimationOptionTransitionCrossDissolve
A transition that dissolves from one view to the next.
Available in iOS 5.0 and later.
Declared in UIView.h.
UIViewAnimationOptionTransitionFlipFromTop
A transition that flips a view around its horizontal axis from top to bottom. The top side of the view moves toward the front and the bottom side toward the back.
Available in iOS 5.0 and later.
Declared in UIView.h.
UIViewAnimationOptionTransitionFlipFromBottom
A transition that flips a view around its horizontal axis from bottom to top. The bottom side of the view moves toward the front and the top side toward the back.
Available in iOS 5.0 and later.
Declared in UIView.h.

2. iOS 4.x 에서 CrossFade 화면 전환은 어떻게 해야 할까? 
   
UIViewAnimationOptionTransitionCrossDissolve는 iOS 5.0 이상에서만 지원된다. 따라서 CAAnimation을 이용해야 한다.

 1.우선 CAAnimation 사용을 위해 QuartzCore.framework을 BuildPhases -> Link Binary With Libraries에 추가한다.
 2. CATransition 코드를 사용하기 위하여 헤더를 임포트 한다 #import <QuartzCore/CAAnimation.h>
 
<예제 1> 아래 예제는 TopView위에 curController.view가 올라가 있는 상황에서 TopView로 화면을 전환하는 상황이다.
 

     [UIView animateWithDuration:0.7 delay:0 options: UIViewAnimationOptionCurveEaseInOut  animations:^{ 
        
            CATransition *animation = [CATransition animation];
            [animation setDuration:0.7];
            [animation setType:kCATransitionFade];
            [topViewController.view.layer addAnimation:animation forKey:nil];            
            
        } completion:^(BOOL finished) {
            [curController.view removeFromSuperview];
            [curController release];
            menuController = nil;
        }];


<예제 2>  아래 예제는 TopView에 curController.view를 넣는 CrossFade 상황이다. 

[UIView animateWithDuration:1.0 delay:0 options: UIViewAnimationOptionCurveEaseInOut  animations:^{ 
        
    CATransition *animation = [CATransition animation];
    [animation setDuration:1.0];
    [animation setType:kCATransitionFade];
    [self.viewController.view.layer addAnimation:animation forKey:nil];                 
    } completion:^(BOOL finished) {
        [topViewController.view addSubview:curController.view];
}];


3. 예제  


위내용들을 포함한 예제를 공개합니다.

ViewController ___ view1stController
                    |___ view2ndController

위 구조에서 화면 전환 효과를 보여줍니다.
 
** 참고

iOS 4.xx의 경우는 nested ViewController를 지원 하지 않기 때문에
viewDidApper / viewDidDisappear 등이 호출 되지 않습니다.
 

다음 2/2에서는 UINavigationController에서 transition animation을 적용하는 법을 설명하겠습니다. 
저작자 표시 비영리 변경 금지
신고

1. Simulator 편

  1.1 Simulator에 이미지 넣기

  (1)  필요한 이미지를 Simulator에 Drag&Drop 한다


(2) Safari가 뜨면 해당 이미지를 마우스로 길게 누른다. (Long Press)


(3) Save Image를 눌르면 Photo album에 들어가 있다.

 

1.2 Simulator에 동영상 넣기

  (1)  Single View Application 프로젝트 만들기


(2) 집어넣으려는 동영상을 번들 리소스에 추가하기


(3) 아래 코드를 삽입하기


(4) 해당 어플리케이션을 시뮬레이터에서 실행

신고


티스토리 툴바