• 145 2020.04.06
  • 144 2020.04.06
  • 143 2020.04.06
  • 142 2020.04.06
  • 141 2020.04.06
  • 140 2020.04.06
  • 139 2020.04.06
  • 138 2020.04.06
  • 137 2020.04.06
  • 136 2020.04.06
  • 135 2020.03.31
  • 182 2020.03.29
  • 134 2020.03.29
  • 133 2020.03.29
  • 132 2020.03.29
  • 131 2020.03.28
  • 130 2020.03.27
  • 129 2020.03.26
  • 128 2020.03.24
  • 127 2020.03.23
  • 126 2020.03.23
  • 125 2020.03.23
  • 124 2020.03.23
  • 123 2020.03.22
  • 122 2020.03.22
  • 121 2020.03.22
  • 120 2020.03.22
  • 119 2020.03.21
  • 118 2020.03.21
  • 117 2020.03.21

 

HAJUNHOJun 20. 2019

https://ioswift.tistory.com/12?category=788259 에서만 업데이트 합니다.

 

 

xcode 단축키

deprecated

byHAJUNHOSep 07. 2018

⏎: Enter Key

⌘: Command Key

⌥ 혹은 @ : Alt/Option key

^ : Control key

⇧ : Shift key

⇢ / ⇠ : 우측 화살표키 / 좌측 화살표키

cmd : Command key

(키) : ()안의 키를 해도 되고 안해도 되고. 

 

1. 찾기

단어 선택 방법 : touchPAD 더블 클릭, 혹은 ⇢ / ⇠ 가 단어 이동이니 ⇧ 를 함께 눌러서 이동하면 단어 선택

⌘, 눌러서 Key Bindings 탭 열고 select word 로 찾으면 키가 없다. @W는 거의 안쓰니 해당 키(⌥ w)로 등록해서 쓰면 편하다. -> 업뎃이후 컨트롤 옵션 E 에 지정.

이렇게 키 단어를 선택한 후  ⌘E 하면 ,선택된 단어를 find 창에 복사

⌥E 하면, 바로 찾기 실행

 

 - ⌘F 혹은  // 찾기

 - ⌘⇧F // 전역 찾기

 - ⌘G //다음

 - ⌘⇧G //이전

 - ⌘F //바꾸기

 - ⌘' //다음 이슈로, 이전 이슈는 ⇧까지 함께 누름 

 

위의 것들도 유용하지만,

⌘^E 로 해당 파일 내 단어 수정을 열면, highlight 가 진하게 되어서 좋다. 단어를 바꾸는 것은 Refactor메뉴의 Rename 을 쓰기 때문에 사실상 이 키는 하일라이트 할 때 빼고 쓸 일이 많지는 않다.

 

.h / .m 전환하던 ⌘^↑ 의 경우 swift에서는 interface를 한눈에 볼 수 있어서 Ctrl + 6 보다 더 편하다.

 

2. Window 선택

⌘1~9 : Left panel navigating

1~2 : Right panel navigating

⇧0 : API 문서

⇧2 : 연결된 장치 목록

⌘⇧1 : welcome to xcode 열기

⌘~: project 전환

 

   

3. File 선택

⌃1 : Recents Files, Callee 찾을 때도 씀

⌃2 / ^3 : show previous / next history

^4 :  프로젝트 선택

^5 : 같은 그룹 내 파일 선택

^6 : 클래스 내 속성, func 검색

O : 파일 이름으로 열기

J  : 이 후 한 해당 project navigator에 띄우기

 

4. 창 최대화

⌘⏎ - Assistance Editor 끄고 메인 Editor 최대화

⌘0 - 네이게이터 날리고,

⌥0 - 유티리티 에어리아 날리고,

⇧T - 상단 툴박스 날리고,

⌥D 로 하단 dock까지 날리고

Y - 디버깅 에어리아도 날린다.

⌘^F  - 전체창으로 변경하면 상단 메뉴도 없어진다.

- 스토리보딩(ㅋ), 혹은 코딩에 좀 더 집중 할 수 있다.

 

⌘(⇧) + / - Zoom + / Zoom - 창 최대화와 함께 잘 쓰게 된다.

⇧C - console 창 띄우기, watch variable 창 단축키는 없다. - 트랙패드로 ㅠㅠ

 

5. TAB & Assistance Editor 관련...

⏎ 보조창 열기/닫기

< 해당 보조창에 선택한 소스 띄우기

해당 파일로 새 탭 띄우기 ⌘T
탭 닫을 때는 ⌘W

탭 이동은 ⌘| (엔터키 위에 \와 함께있는 or 연산자, 탭이 있어야 동작함)

탭 바로 이동은 ⌘[ or ]
혹은 ⌘J 와 함께 ⌘⇢⇠ 그리고  Assistance Editor 이동은 ⇢⇠
w :탭 한방에 닫기
Z 어시스턴스 에디터 한번에 닫기

 

6. 빌드관련

⌘R 실행

⌘⇧C 콘솔창 띄우기(아래)

⌘⇧D 디버그창 띄우기(좌측)

⌘. 중지

⌘⇧K 클린

⌘⌥C 커밋

⌘Y 브레이크 포인트 일괄 정지

⌘8 브레이크 포인트 삭제를 위해 네이게이터로 이동

 

Build configuration

 

⇧,

 

- 비쥬얼 스튜디오와 메카니즘이 좀 다르다. 디버그 버전과 빌드 버전에서 include되는 헤더와 라이브러리가 빌드 버전별로 지정되는 비쥬얼 스튜디오와 다르다. Xcode가 더 좋을 수도 있지만 큰 프로젝트 할 때는 구분되어 있는게 더 좋다. 보안이나 디버깅 관련 라이브러리를 따로 넣을 수 있으니... 특히 보안 때문에 Visual Studio 메카니즘이 더 낫다.

 

그 외는 기본키가 불편해 대부분 커스터마이징해서 따로 안 쓰겠음.(예를들어 Stmp over는 걍 F6에 할당함)

 

7 빠른 수정

ESC Code snippet show/hide

⇧L Code snippet 뭉치

⇧M asset 목록 바로 띄우기(media)

 ⇠ or ⇢ : cursor moving to edit point previously / next

[ or ] 해당 줄의 코드 상/하 옮기기

⌘L 해당 라인으로 바로 이동

[ or ] 해당 줄의 코드 들여/내어 쓰기

^K 현재 커서부터 줄 끝까지 한줄 삭제

^Y 지운 내용 다시 붙여넣기(여러번 가능)

/ 주석 처리/해제

⇧/ 모듈 주석 달기

 / 해당 프로퍼티/매서드/클래스 등의 바로 위에 주석 달기(doc comment)

⌘^/ Quick Reference  ⇧0로 API 창을 새로 뛰우는 것 보다 가볍다.

 

⌘L 이 line # 로 이동하며 선택도 함께 해주기 때문에 한줄 지울 때 유용하다.

 

그리고

스토리 보딩 할 때는 다음 두 조합이 위젯을 find 창으로 바로 이동

⌃⌥2 혹은
L <- 이걸 더 많이 씀. 해당 창 숨겼다 펼쳤다 가 ⌥⌘0이니까
- 사실 스니핏은 커스터 마이징해서 썼는데, 다른 사람 컴에서 하는 경우도 많아서 걍 기본 키 바이딩 그대로 쓰게 된다. 한글 전환이랑 스포트라이트를 바꿔서 수년을 써서 습관이 되니, 다른 사람 컴에서 코딩하거나 협업할 때 아예 고쳐지질 않더라.


formatting
⌘A  로 전체 선택 후 ⌃I   <- 아이

- vim 에서 무쟈게 자주쓰는 gg=G 와 같은 기능. Eclipse는 그렇게 많이 썼는데 생각이 안나네. 정말 기록이 기억은 지배하는 것인가 ㅋㅋ 얼마전에 후임이 맥 쓰다가 인터넷에서 안 찾아지는 shortcut 기능을 묻길래 모른다고 했는데 막상 가서 눌러보니 되는... 손이 기억을 지배한다가 맞겠다.

 

https://developer.apple.com/library/archive/documentation/IDEs/Conceptual/xcode_help-command_shortcuts/MenuCommands/MenuCommands014.html

Menu Command Shortcuts (By Menu)

developer.apple.com

 

 

'Blog History' 카테고리의 다른 글

147  (0) 2020.04.06
146  (0) 2020.04.06
144  (0) 2020.04.06
143  (0) 2020.04.06
142  (0) 2020.04.06

UI 기초

0.02

byHAJUNHOSep 27. 2018

 

1. 폰트 지정

 

label.font = UIFont.init(name: "NanumSquareOTFL", size: 16)

 

폰트 이름은

       for family in UIFont.familyNames.sorted() {

            let names = UIFont.fontNames(forFamilyName: family)

            print("Family: \(family) Font names: \(names)")

        }

 

샌프란시스코 폰트 다운로드(sf compact, sf pro)

https://developer.apple.com/fonts/

Fonts - Apple Developer

developer.apple.com

 

 

나머진

 

https://brunch.co.kr/@jade/203

저작권 걱정없는 무료 한글폰트

한글날 기념 무료 한글 글꼴 포함 | 이제 매년 한글날이 되면 많은 기업들이 한글폰트를 내는 것이 좋은 홍보의 수단이 되는 듯 하다. 최근에 누구나 이용할 수 있도록 공개된 무료 한글 공개 폰트(글꼴)들을 정리해 보았다. 유료가 아니어도 예쁜 폰트가 참 많아졌다. 1. 네이버 나눔한글폰트 http://hangeul.naver.com/2016/nanum 가장 많이 사용하는 무료 한글 폰트가 아

brunch.co.kr/@jade/203

 

 

2. UINavigationBar

 

색상 바꾸기

 

internal extension UIColor {

    convenience init(red: Int, green: Int, blue: Int) {

        assert(red >= 0 && red <= 255, "Invalid red component")

        assert(green >= 0 && green <= 255, "Invalid green component")

        assert(blue >= 0 && blue <= 255, "Invalid blue component")

 

        self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)

    }

 

    convenience init(rgb: Int) {

        self.init(

            red: (rgb >> 16) & 0xFF,

            green: (rgb >> 8) & 0xFF,

            blue: rgb & 0xFF

        )

    }

}

 

override func viewDidLoad() {

        super.viewDidLoad()

        let navigationBarAppearance = UINavigationBar.appearance()

        navigationBarAppearance.tintColor = UIColor(rgb:0xffffff)

        navigationBarAppearance.barTintColor = UIColor(rgb:0x00aaee)

        navigationBarAppearance.backgroundColor = UIColor(rgb:0x00aabb)

    }

 

숨기기

 

    override func viewWillAppear(_ animated:Bool) {

        super.viewWillAppear(animated)

        UINavigationBar.appearance().isHidden = true

        self.navigationController!.isNavigationBarHidden = true

        self.navigationController?.navigationBar.isHidden = true

    }

 

  override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(animated)

        UINavigationBar.appearance().isHidden = false

    }

 

3. iPhone Screen Resolution enum

 

//Device  Native Resolution(Pixels)  UIKit Size (Points)    Native Scale factor    UIKit Scale factor

//iphone XS Max     1125 x 2436      414x896

//iphone XS         1242 x 2688      375 x 812

//iPhone XR          828 x 1792      414x896

//iPhone X          1125 x 2436      375 x 812                    3.0      3.0

//iPhone 8 Plus     1080 x 1920      414 x 736                    2.608    3.0

//iPhone 8           750 x 1334      375 x 667                    2.0      2.0

//iPhone 7 Plus     1080 x 1920      414 x 736                    2.608    3.0

//iPhone 6s Plus    1080 x 1920      375 x 667                    2.608    3.0

//iPhone 6 Plus     1080 x 1920      375 x 667                    2.608    3.0

//iPhone 7           750 x 1334      375 x 667                    2.0      2.0

//iPhone 6s          750 x 1334      375 x 667                    2.0      2.0

//iPhone 6           750 x 1334      375 x 667                    2.0      2.0

//iPhone SE          640 x 1136      320 x 568                    2.0      2.0

//iPad Pro 12.9-inch

//(2nd generation)   2048 x 2732    1024 x 1366                   2.0     2.0

//iPad Pro 10.5-inch 2224 x 1668    1112 x 834                    2.0     2.0

//iPad Pro (12.9)    2048 x 2732    1024 x 1366                   2.0     2.0

//iPad Pro (9.7-inch)1536 x 2048     768 x 1024                   2.0     2.0

//iPad Air 2         1536 x 2048     768 x 1024                   2.0     2.0

//iPad Mini 4        1536 x 2048     768 x 1024                   2.0     2.0

 

extension CGPoint : ExpressibleByStringLiteral {

    public init(stringLiteral value: String) {

        let point = CGPointFromString(value)

        self.init(x: point.x, y: point.y)

    }

}

 

 

    enum iPhoneScreen : CGPoint {

        case iPhone_X_XS = "{375, 812}"

        case iPhone_XSMax_XR = "{414, 896}"

        case iPhone_8Plus = "{414,736}"

        case iPhone_8_7_6sPlus_6s_6Plus_6 = "{375,667}"

        case iPhone_7_Plus = "{414, 736}"

        case iPhone_SE = "{320, 568}"

        case iPad_Pro_129 = "{1024, 1366}"

        case iPad_Pro_105 = "{1112, 834}"

        case iPad_Pro97_iPadAir2_iPadMini4 = "{768, 1024}"

    }

 

쓸 때는 CGPoint 자체를 써도 되고, iPhoneScreen.iPad_Pro_129.rawValue.x 이렇게 써도 된다.

 

 

4. AUTOLAYOUT 맛보기

 

다음은 각 기 다른 회사의 채용 공고에 있는 iOS 개발자 자격 사항이다.

 

1. Objective-C, Swift, Auto Layout, Storyboard, 객체지향 등의 이해도가 있으신 분

2. swift, objective-c, auto layout

3. Swift , storyboard, auto layout 사용 경험자

 

Android 개발할 때는 FrameLayout 보다 RealativeLayout를 많이 쓰니 사실상 auto layout이 맞으나, 결국 아이콘은 xhdpi, xxhdpi, xxxhdpi 뿐 아니라, sw600dp, sw720dp 등 기억나는 것만 10개 이상의 layout 폴더에 각기 다른 pixel의 아이콘을 넣었었다. 그리고 기종을 체크해서 코드로 레이아웃을 다르게 구현했었다. 왕도는 없더라. 그래야 깨끗하게 나오니까. 삼성폰의 번들 아이콘이기도 했으나...

 

스타트업이나 중소기업을 보면 Andorid 보다 iOS로 시작하는 경우가 많다. 7~8년 전 내가 알던 안드로이드 폰 종류가 7000천 가지였는데 지금은 만가 지도 더 될 것 같다. 그래서 트러블 슈팅에서 오는 비용을 줄이기 위해 screen density가 단순한 iOS 먼저 개발하고 성공하면 Android를 하는 경우가 많았다. 같이 개발하더라도 Auto layout를 선호한다.

 

Android에서 autolayout 이 relative 스타일이라면, iOS는 constratins라 하겠다.

 

Constraints를 제대로 알려면

https://developer.apple.com/documentation/uikit/nslayoutconstraint

NSLayoutConstraint - UIKit | Apple Developer Documentation

developer.apple.com

부터 보면 되겠지만

 

좀 더 쉽게 접근하려면 UITableView를 만들고 그 Cell을 코드로 구현하면 된다.

 

기초는 여기...

https://www.ioscreator.com/tutorials/prototype-cells-table-view-ios-tutorial-ios10

Prototype Cells in Table View iOS Tutorial

When using Table Views inside the Storyboard, prototype cells can be used to create some predefined or even custom layouts of the Table View Cells. In this tutorial we will create a basic Prototype cell, which includes an (optional) image and a title. This

www.ioscreator.com

 

 

트러블 슈팅 팁.

unable to dequeue a cell with identifier

스토리 보드에서 Table View Cell의 Identifier 설정이 맞지 않는 경우.

let cell = tableView.dequeueReusableCell(withIdentifier: "여기", for: indexPath)

여기와 Identifier가 일치해야 한다.

 

굳이 cell을 붙이지 않더라도 TableView만 붙인 상태에서 테스트해 볼 수 있으니,

let cell: UITableViewCell = UITableViewCell(style:UITableViewCellStyle.subtitle, reuseIdentifier: "Cell")

이 코드로 테이블 뷰가 잘 보이는지 확인할 수 있다.

 

Could not cast value of type 'UITableViewCell'

self.tableView.register(CustomTableViewCell.self, forCellReuseIdentifier: "여기")

 

 

즉, Constraints 만드는 방법은 2가지

 

contentView.addConstraint(NSLayoutConstraint(item: value, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: self.contentView, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0))

        contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[title]-[value]-|", options: [], metrics: nil, views: viewsDict))

 

다양한 옵션은

 

https://stackoverflow.com/questions/25413239/custom-uitableviewcell-programmatically-using-swift

Custom UITableViewCell programmatically using Swift

Hey all I am trying to create a custom UITableViewCell, but I see nothing on the simulator. Can you help me please. I can see the label only if I var labUserName = UILabel(frame: CGRectMake(0.0, 0...

stackoverflow.com

 

를 참고하고 xcode의 autofix 기능을 이용하면 최신 코드로 변경이 가능하다.

 

 

 

맛을 봤다면, 이제 스냅킷을 쓰자.

 

https://github.com/SnapKit/SnapKit

SnapKit/SnapKit

A Swift Autolayout DSL for iOS & OS X. Contribute to SnapKit/SnapKit development by creating an account on GitHub.

github.com

 

 

'Blog History' 카테고리의 다른 글

146  (0) 2020.04.06
145  (0) 2020.04.06
143  (0) 2020.04.06
142  (0) 2020.04.06
141  (0) 2020.04.06

더블 클로저를 이용한 프로그레스바

스바스바 프로그레스바

byHAJUNHODec 03. 2018

+ 원리, 그래픽 소스까지 넣으면 복잡.

클로저는 간단하다.

 

import UIKit

 

func textT(_ first : ()-> (), _ second : ()-> ()) {

    first()

    second()

}

 

textT( { print("first") }, { print("second") })

 

 

 

보통 클로저는 하나만 쓰기 때문에 ()를 닫아 버리고 {} 로 대체 가능하다.

 

import UIKit

 

func textT(_ first : ()-> (), _ second : ()-> ()) {

    first()

    second()

}

 

textT( { print("first") }) { print("second") }

 

REST API를 쓴다면 필시 Alamofire를 이용하리라 생각된다.

클로저를 이용하면, DispatchQueue를 이용하지 않고 동기화를 할 수 있다.

 

make func getJSON() to func getJSON(_ whatUwant2execute : @escaping () -> () )

 

and use your function

 

getJSON { ... codes ... }

 

and choose the location you want to execute in Alamofire

 

getJSON(_ whatUwant2execute : @escaping () -> () ) { Alamofire.request(.GET, "http://announcement.vassy.net/api/AnnouncementAPI/Get/").responseJSON {

 (Response) -> Void in     // checking if result has value    

   if let value = Response.result.value {         

    let json = JSON(value)         

    whatUwant2execute()        

    .        

    .        

    .

then ... codes ... will be executed on that point.


결국 클로저는 함수 포인터고 함수를 실행할 때 쓰는 ()를 이용해서 트리거 시킨다가 요점.

 

내가 말하고 싶은 더블 클로저는 파라미터 2개인 클로저가 아니라 2차 포인터 처럼 클로저 안에 클로저를 말한다. 포인터를 C의 함수 포인터로 이해하면 쉽지만 이론 설명은 생략. 바로 코드로... 위 소스에서 두번째 클로저는 지웠다. 이름을 바꾸고 클로저 안에 클로저를 넣으면 된다. 흔적 따라오라며 다 바꾸진 않음

 

import UIKit

 

func progressBar(_ first : ((Int)->())-> ()) {

    first() { (s) in

        print(s, " %")

    }

}

 

progressBar() { (closure) -> () in

    print("hello msg")

    closure(10)

    print("checking new version of software")

    closure(20)

    print("connect to the updating server")

    closure(50)

    print("download loop")

    closure(100)

}

 

핵심은 progress를 담고 있는 var 를 없애는 함수형 프로그래밍을 한다는데 있다. 내가 생각하는 함수형 프로그래밍은 메모리를 삭제 과정 없이 계속 리니어하게 써서 속도를 향상 시키는데 있다고 믿지만, 어느 순간 변질 된 듯. 리눅스 커널 분석하며 어려운 함수 포인터를 typedef 로 무한적 래핑할 수 있는 제자들은 이해가 쉬울 듯.

 

트리블 클로저를 이용하면 updating 되고 있는 프로그레스바를 더욱 스무스하게 만들 수 있다.

 

하드웨어 발전 속도만 믿고 뱅글 뱅글 도는 기다림표로 점철되어진 안타까운 소프트웨어에 활력을!

 

그리고 팁...

 

FYI 1

Plz remember () is used 2 ways "make something in memory" or "executing"

In swift world {} is the meaning of one of the (), executing.

This is the reason why you don't need to write like a below

getJSON ({ ... codes ... })

and {} is the meaning of the definition of functions body.

Both () and {} have two meanings we have to know.

망할 스택 오버플로우에 앞으로 답변하나 봐라. 대한민국 프로그래머 만세

 

FYI 2

@escaping 은 Objective-C 에서는 당연한 것이었지...

[dbsql selectList:mArray];

 

- (void) selectlist:(NSMutableArray *)pArray {

 

 [pArray removeAllObjects];

.

.

.

 

 [pArray addObject:data];   

}

 

이렇게 파라미터로 넘긴 객체의 수정이 자유로웠었다. 당연히 gcc 기반이고 객체는 함수 포인터니까 ^^

'Blog History' 카테고리의 다른 글

145  (0) 2020.04.06
144  (0) 2020.04.06
142  (0) 2020.04.06
141  (0) 2020.04.06
140  (0) 2020.04.06

인기 있던 글이라도 티스토리로 옮기고 브런치는 좀 더 단순하게 운영하려고 한다.

UI 기초, SnapKit

0.01

byHAJUNHOOct 16. 2018

Android에서 Androidmanifest.xml이 설계도 이 듯, iOS에서는 info.plist 가 비슷한 역할을 한다.

info.plist의 Launch screen interface file base name은 런치 스크린을

Main storyboard file base name은 처음 실행할 스토리 보드 이름을 지정한다.

 

스토리 보드도 xml 파일이다. 

 

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">

 

처음 실행되는 스토리 보드는 initialViewController 체크박스에 체크를 해야 한다. 물론, GUI로 보여주지만 결국, 다음과 같이  XML이 바뀌는 것이다.

 

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="QfJ-J6-o4q">

 

스토리 보드에서는 ViewController를 지정할 수 있다. 이제 어떻게 코드가 흐르는지 알 수 있다.

 

autolayout을 위해 스토리 보드에서 constraints를 지정할 수 있지만, 왜 굳이 코드로 해야 하는지는 깊게 설명하지 않고 싶지만 굳이 말하자면, 큰 프로그램이 되는 환경 속에서 UI 작업을 지속적으로 경험해보면 코드로 할 필요성을 느낄 수밖에 없다. 애플이 편하게 MVC로 만들어주긴 했지만 말이다.(안드로이드는 무조건 xml이지...)

개발자는 항상 플랫폼 테스터도 되기 때문에 (본디 디버깅은 재미있지만) 이후 재미없는 디버깅을 하게 될 가능성이 크다. 서버와의 싱크를 맞추려니 콜백 지옥에 빠지고 그 지옥에서 나로려니  MVC를  MVVM으로 바꿔야 한다. 결론은 코드라는 이야기.

 

초유의 관심사 AutoLayout, 1편에서 snapkit을 쓰자고 했다.

 

snapkit은 pod으로 설치하고

  pod 'SnapKit', '~> 4.0.0'

import SnapKit 만 하면 UIView와 그 하위 친구들에게 바로 쓸 수 있다.

 

var firstGroup : UIView 던

var btnVarious : UIButton이던

var iqr : UILabel이던

 

쉽게 constraints를 지정할 수 있다.

 

firstGroup.snp.makeConstraints { (make) in

            make.width.equalToSuperview()

            make.height.equalTo(29)

            make.left.equalTo(0)

        }

 

btnVarious.snp.makeConstraints { (make) in

            make.width.equalTo(29)

            make.height.equalTo(29)

            make.right.equalTo(btnQuestionMark.snp.left).offset(-1)

        }

 

iqr.snp.makeConstraints { (make) in

            make.width.equalTo(110)

            make.height.equalTo(28)

            make.left.equalToSuperview().offset(22)

        }

 

storyboard에서 만드는 것처럼 원하는 view에 add를 먼저 하고 제약사항을 만든다. 붙인 view가 바로 superview다. offset은 + 값과 -값이 있고 둘은 서로 반대 방향이다. 좌표계를 바꿀 수 있지만 보통은 좌측 상단이 0,0이니 어디가 + 방향 인지는 쉽게 알 수 있다.

 

     labelAmount.snp.makeConstraints { (make) in

            make.width.equalTo(52)

            make.height.equalTo(17)

            make.left.equalTo(amount.snp.left)

            make.top.equalTo(amount.snp.bottom)

        }

값을 직접 지정할 수동 있고, 다른 view의 snp를 얻어와서 맞춰줄 수도 있다.

 

그럼 어떤 값 지정이 가능할까? public class ConstraintMaker를 보면

    public var left: ConstraintMakerExtendable {

    public var top: ConstraintMakerExtendable {

    public var bottom: ConstraintMakerExtendable {

    public var right: ConstraintMakerExtendable {

    public var leading: ConstraintMakerExtendable {

    public var trailing: ConstraintMakerExtendable {

    public var width: ConstraintMakerExtendable {

    public var height: ConstraintMakerExtendable {

    public var centerX: ConstraintMakerExtendable {

    public var centerY: ConstraintMakerExtendable {

    public var baseline: ConstraintMakerExtendable {

    public var lastBaseline: ConstraintMakerExtendable {

    public var firstBaseline: ConstraintMakerExtendable {

    public var leftMargin: ConstraintMakerExtendable {

    public var rightMargin: ConstraintMakerExtendable {

    public var topMargin: ConstraintMakerExtendable {

    public var bottomMargin: ConstraintMakerExtendable {

    public var leadingMargin: ConstraintMakerExtendable {

    public var trailingMargin: ConstraintMakerExtendable {

    public var centerXWithinMargins: ConstraintMakerExtendable {

    public var centerYWithinMargins: ConstraintMakerExtendable {

    public var edges: ConstraintMakerExtendable {

    public var size: ConstraintMakerExtendable {

    public var center: ConstraintMakerExtendable {

    public var margins: ConstraintMakerExtendable {

    public var centerWithinMargins: ConstraintMakerExtendable {

 

이런 값들이 있고 스토리 보드를 쓰다 보면 거의 대부분 알 수 있는 것들이다. 주의할 점은 제약 사항 충돌이다. left와 right 제약 사항을 동시 지정해보면 쉽게 알 수 있을 것이다.

 

SnapKit의 원리는 간단하다. 다음과 같이 Int Values를 array에 넣고 나중에 for 문을 돌면서 UIKit의 API를 이용(1편 참조)하여 제약 사항을 지정하는 것이다.

 

    internal static var none: ConstraintAttributes { return 0 }

    internal static var left: ConstraintAttributes { return 1 }

    internal static var top: ConstraintAttributes {  return 2 }

    internal static var right: ConstraintAttributes { return 4 }

    internal static var bottom: ConstraintAttributes { return 8 }

 

10진수로 더해도 되지만, 본디 2진수의 각 자릿수가 더 편하다.

1, 2, 4, 8 이 각각 2진수에서 1, 10, 100, 1000이다. 그래서 2진수로 1111인 15의 값은

    internal static var edges: ConstraintAttributes { return 15 }

에 대입되어 있다.

 

size는 width, height다. 

 internal static var size: ConstraintAttributes { return 192 }

 

   internal static var width: ConstraintAttributes { return 64 }

   internal static var height: ConstraintAttributes { return 128 }

 

최고수는 

  internal static var centerWithinMargins: ConstraintAttributes { return 786432 }

라서 UInt(32비트에서만 2,147,483,647 64비트에서는 18,446,744,073,709,551,615... 믓튼 충분)에 담겨있다. 모든 수를 보려면(internal struct ConstraintAttributes : OptionSet... 참조)

 

이런 속성들을 

 

internal static func makeConstraints...

internal static func remakeConstraints...

internal static func updateConstraints...

internal static func removeConstraints(item: LayoutConstraintItem) {

        let constraints = item.constraints

        for constraint in constraints {

            constraint.deactivateIfNeeded()

        }

    }

 

를 이용하여 적용한다.

 

 internal func activateIfNeeded(updatingExisting: Bool = false) {

        guard let item = self.from.layoutConstraintItem else {

            print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.")

            return

        }

        let layoutConstraints = self.layoutConstraints

 

        if updatingExisting {

            var existingLayoutConstraints: [LayoutConstraint] = []

            for constraint in item.constraints {

                existingLayoutConstraints += constraint.layoutConstraints

            }

 

            for layoutConstraint in layoutConstraints {

                let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint }

                guard let updateLayoutConstraint = existingLayoutConstraint else {

                    fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)")

                }

 

                let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute

                updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute)

            }

        } else {

            NSLayoutConstraint.activate(layoutConstraints)

            item.add(constraints: [self])

        }

    }

 

UI기초 전편의 링크를 보면 constratins를 적용하는 것이 번거로웠다.

 

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[image(10)]", options: [], metrics: nil, views: viewsDict))

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[labTime]-|", options: [], metrics: nil, views: viewsDict))

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[username]-[message]-|", options: [], metrics: nil, views: viewsDict))

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[username]-[image(10)]-|", options: [], metrics: nil, views: viewsDict))

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[message]-[labTime]-|", options: [], metrics: nil, views: viewsDict))

 

혹은, 

 

        NSLayoutConstraint.deactivate([self])

        let newConstraint = NSLayoutConstraint(

            item: firstItem,

            attribute: firstAttribute,

            relatedBy: relation,

            toItem: secondItem,

            attribute: secondAttribute,

            multiplier: multiplier,

            constant: constant)

.

.

.

이런 식의...

 

그래서 쉬운 문법으로 AutoLayout을 위한 constraints를 쓸 수 있다는 점이 참 매력적인 SnapKit이다. , .snp.makeConstraints { (make) in ... 

'Blog History' 카테고리의 다른 글

144  (0) 2020.04.06
143  (0) 2020.04.06
141  (0) 2020.04.06
140  (0) 2020.04.06
139  (0) 2020.04.06

namedtuple

python APIs

byHAJUNHO12분전

from collections import namedtuple
# or
import collections

param4tuple = ['name', 'age', 'sex', 'address', 'phoneNumber']
personcardskim = namedtuple('whatever1', param4tuple, defaults=(None,) * len(param4tuple))
person001 = personcardskim('Eddie')
print('person001 =', person001)

personcardskim2 = namedtuple('whatever2', 'name age sex address phoneNumber')
person002 = personcardskim2('joe', '34', 'male', 'korea', '01022223333')

print('person002 =',  person002)

difficultTuple = namedtuple('whatever3', ['name', 'age', 'sex'])
person003 = difficultTuple('helloman', '18', 'male')
print('person003 = ', person003)

importTuple = collections.namedtuple('whatever4', 'name age sex', defaults=(None,) * 3)
person004 = importTuple('haha')
print('person004 = ', person004)

 

 

 

 


 

person001.name

Out[3]: 'Eddie'

person002.name

Out[4]: 'joe'

person003.name

Out[5]: 'helloman'

person004.name

Out[6]: 'haha'

 

'Blog History' 카테고리의 다른 글

143  (0) 2020.04.06
142  (0) 2020.04.06
140  (0) 2020.04.06
139  (0) 2020.04.06
138  (0) 2020.04.06

optionsTableView.backgroundColor = UIColor(white: 0, alpha: 0.9)

 

CONOPS CONOPs ConOps

StRS

business requirements specifications

 

1의 경우 동작 확인에 큰 지장은 없으나, 2의 문제로 구현 후 내일 오전 릴리즈 가능할 것 같습니다.

 

 

var pan = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture))

        self.addGestureRecognizer(pan)

 

    @objc

    func handlePanGesture(gestureRecognizer: UIPanGestureRecognizer) {

        //        var touchLocation = recognizer.locationInView(self.view)

        //        self.redView.center = touchLocation

 

        

        guard gestureRecognizer.view != nil else {return}

        extractedFunc(gestureRecognizer.location(in: gestureRecognizer.view!))

    }

 

 

 

IEEE 830-1998 - IEEE Recommended Practice for Software Requirements Specifications

 

    /// Makes it available to set properties with closures just after initializing and copying the value types.

    ///

    ///     let frame = CGRect().with {

    ///       $0.origin.x = 10

    ///       $0.size.width = 100

    ///     }

 

 

    /// Makes it available to execute something with closures.

    ///

    ///     UserDefaults.standard.do {

    ///       $0.set("devxoul", forKey: "username")

    ///       $0.set("devxoul@gmail.com", forKey: "email")

    ///       $0.synchronize()

    ///     }

 

    /// Makes it available to set properties with closures just after initializing.

    ///

    ///     let label = UILabel().then {

    ///       $0.textAlignment = .Center

    ///       $0.textColor = UIColor.blackColor()

    ///       $0.text = "Hello, World!"

    ///     }

 

extension Make where Self: Any {

    

    public func with(_ block: (inout Self) throws -> Void) rethrows -> Self {

        var copy = self

        try block(&copy)

        return copy

    }

    

    public func `do`(_ block: (Self) throws -> Void) rethrows {

        try block(self)

    }

    

}

 

 

 

import CoreGraphics

#if os(iOS) || os(tvOS)

import UIKit.UIGeometry

#endif

 

 

 

        let dateFormatter = DateFormatter()

        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.sss'Z'"

        dateFormatter.locale = Locale(identifier: "en_US_POSIX")

        let now = Date()

 

 

        let curTime = dateFormatter.string(from: now)

        let startDate = dateFormatter.date(from:curTime)!

        let endDate = dateFormatter.date(from: preValue)

 

 

        let interval = endDate!.timeIntervalSince(startDate)

        let days = Int(interval / 60)

 

\

 

extension CGPoint: Make {}

extension CGRect: Make {}

extension CGSize: Make {}

extension CGVector: Make {}

 

 

 

 

 

#if os(iOS) || os(tvOS)

extension UIEdgeInsets: Make {}

extension UIOffset: Make {}

extension UIRectEdge: Make {}

#endif

 

Extensions must not contain stored properties

Contextual type for closure argument list expects 1 argument, which cannot be implicitly 

 

 

 

 

 

ko_KR

 

ro

 

 

 

<unknown>:0: error: input file 'TendencyPeriodBar.swift' was modified during the build

 

Command CompileSwiftSources failed with a nonzero exit code

 

'?' must be followed by a call, member lookup, or subscript

 

 

 

timeIntervalSince1970

 

 



NSString *query = [NSString stringWithFormat:@"WITH T_CTYP AS \
                       ( \
                       SELECT ID_DFCT_CTYP, NM_DFCT_CTYP, ODER_MKAR \
                       FROM DDTBT_RGON_DFCT_CTYP \
                       GROUP BY ID_DFCT_CTYP, NM_DFCT_CTYP \
                       ) \
                       SELECT DISTINCT A.ID_DFCT_CTYP, B.NM_DFCT_CTYP \
                       FROM DDTBT_STATUS A \
                       INNER JOIN T_CTYP B \
                       ON       B.ID_DFCT_CTYP  = A.ID_DFCT_CTYP \
                       WHERE CD_DONG = '%@' \
                       ORDER BY B.ODER_MKAR;",
                       [GlobalVar loadFromUserDefaults:@"current_cd_dong"]];
    //FROM DDTBT_CPNY_NOHS_QOTA A


 \
                               with t_dfct as ( \
                               select a.cd_dong, a.cd_flor, a.ho, \
                               sum(case b.cd_hndl_stat when 'B' then 1 else 0 end ) as cnt_b, \
                               sum(case b.cd_hndl_stat when 'E' then 1 else 0 end ) as cnt_e, \
                               sum(case b.cd_hndl_stat when 'X' then 1 else 0 end ) as cnt_x from ddtbt_hosh a \
                               left outer join ddtbt_dfct b \
                               on b.cd_dong = a.cd_dong \
                               and b.nohs = a.nohs \
                               and b.id_dfct_ctyp like '%@' \
                               where a.cd_dong = '%@' \
                               group by a.cd_dong, a.cd_flor, a.ho \
                               ) \
                               select cd_dong, cd_flor, ho, \
                               case when (cnt_b + cnt_e) > 0 \
                               then case cnt_x when 0 then 'R' else 'Y' end \
                               else 'G' \
                               end cl_stat \
                               from t_dfct \
                               order by cd_flor desc, ho asc;"

 

 

전문가를 위한 파이썬.

 


Card = collections.namedtuple('Card', ['rank', 'suit'])

 

보다는

 

Card = collections.namedtuple('Card', 'rank suit')  

 

이게 더 직관적이다.

'Blog History' 카테고리의 다른 글

142  (0) 2020.04.06
141  (0) 2020.04.06
139  (0) 2020.04.06
138  (0) 2020.04.06
137  (0) 2020.04.06

[Web발신]

삼성7748승인 하*호

3,500원 일시불

03/26 13:20 파스쿠찌KBS본관

누적25,618,044원

 

 

간만에 또 길게 쓰고 조만간 또 지우는 글 - 수십년 전부터 좋아하던 만화 "총몽"이 영화화 되었다고 해서 보려고 했는데 이미 내려갔다. 총몽에서는 자렘을 꿈꾸는 아이가 있는데 유고. 주인공이 그 아이를 좋아한다. 자렘은 높은 곳의 도시고 그쪽에서 최고의 닥터였던 사람은 먼지나는 도시의 삶에 만족하며 살아간다. 돈을 벌면 자렘으로 올려 보내겠다는 말은 믿은 유고, 사실 그 방법이 없다는 것은 닥터가 알고 있었는데 말해줄 시간이 없었다. 주인공은 유고만 있으면 된다는 생각이었는데 최고의 닥터가 고쳐준 사이보그라 최고의 전투력을 가지고 있다. 지금 내가 사는 현실 세계에 비춰보면 최고의 실력을 가진 사람들이 그냥 자신의 삶에 만족하고 주변 사람을 지키는 것을 본다. 큰 욕심없이. 그에 반하는 사람들이 윗 도시의 공기를 마시면서 고급차를 타고 생명 연장에 별 도움 안되는 고급 음식을 먹기 위해 사기를 치는 것을 보았다. 만화 하나가 내가 많은 것을 버릴 수 있게 하고 과감한 결단을 할 수 있게 해 준 것이다. 나는 몇군데 출판사 수장과 이야기를 했지만 그들의 주변에 가짜 개발자가 있는 것을 본 이유. 그리고 해외 개발자라고 높은 자리 꿰차고 개발 못하면서 이상한 지식으로 또, 알고리즘 테스트로 개발자 괴롭히는 것을 보며 SNS 통해 직접적으로 싸워왔는데 결국 그들의 책은 잘 팔리고 사람들은 여전히 속고 결국 나쁜짓을 하는 단체로 다시 돌아가는 것을 보며 일반인과 책을 내고 비화를 쓰고 방송에 출연하고 기업에 있으면서 많은 기업의 면접을 보고 또 면접 갔다가 입사를 거절하며 경쟁사의 더러운 행태를 고발하기도 했다. 실제로 그래서 서비스랑 기업이 망하는 것도 보고 있다. 뒷구녕에서 더러운 짓 하는 그들의 플레이를 본다. 그래서 더 더러움을 각오했고 그 행동은 나쁜 놈들에게 극약 처방을 하고 또 그게 암암리에 알려지기를 바라기도 한다. 왜냐면 나쁜 놈들이 공포를 느끼기 원하기 때문이다. 가족 포함해서 나를 아는 사람은 나를 태양 가까이 날고 있다고 생각하지 않는다. 어떤 기준과 방법으로 사람을 괴롭히는지 알기 때문에. 이제 그것도 슬슬 알려지는 것 같다. 삼성에서 내가 고발했다고 생각하는데 왜 삼성 사람(내가 고발한 부서에서 나랑 같이 일했던)과 계속 연락하는지 의아해 하는 것 같다. 난 기술인이다. 내가 자료를 뺄 수 있었던 것은 내가 삼성 보안 자체를 무력화할 힘이 있었기 때문이다. 그런데 굳이 그렇게 하지 않아도 카톡 다니던 서버 필터링 담당 학교 후배가 카톡 메세지 다 볼 수 있다고 말해줬는데 텔레그램 안 쓰고 카톡으로 자료를 교환하는데. 그리고 메일로. 메일은 삼성 SDS에서 다 보는데 꼭 내가 아니더라도 어차피 밖으로 돌 자료들이었다. 내가 무슨 대단한 폭로를 한 것처럼 생각하는데 대부분 합법이고 부적절 하긴 해도 이윤 추구하는 기업이 사는 방식이다. 그러나 내 기준에는 맞지 않기 때문에 잘못되었다고 생각하는 것이다. 출판업계도 모임이 있을테니 물어보라. 나에게 출판 제의가 들어왔을 때 난 돈 안된다는 말을 제일 처음 했다. 그럼에도 돈을 더 써서 출판을 했을 때는 그만한 이유가 있을텐데 ... 초고 관련해서 말이 많은 것을 감지 했다. ㅂㅅ 들... 내가 직접 쓴 몇 부분을 빼고는 니들이 쓴 책을 읽고 일반인 입장에서 풀이해서 쓴 글인데 그걸 공개적으로 욕할 수는 없으니 뒷구녕으로 욕한다. 그런 프레임을 짰던 것이다. 어차피 책 쓴 놈이 개발자로 남지는 않는다. 어차피 능력이 없어서 공부하면서 책을 쓴 것인데 개발자로 남을 이유가 없다. 그래서 내가 책을 내었고 난 손해를 많이 봤지만 십년이 지나면 돌아올 돈이고 변화되는 개발자 문화를 보면서, 또 자리 꿰차고 살아보려고 외부 활동하는 삼성 임원을 보면서 참으로 흡족하다. 그런데... 내가 왜 이 글을 쓰는가? 지금 정부 보니까... 그냥... 뭐랄까... 그냥 텄다는 생각이 들어서 그렇다. 정말. 나는 이명박 정부 때, 박근혜 정부 때 잘 살았다. 그 때 나온 정책으로 1790으로 태어나 인큐베이터 들어간 아이 때문에 보험료랑 정부 지원금도 수천만원 받았다. 노무현? 노무현 연설하면 눈물 흘리는 아버지가 어머니를 수십년간 폭행해서 정신병 생긴 어머니가 불을 질러 3대 범죄자가 되셨다. 살인이랑 같은 범죄다. 다세대 주택 방화는. 그래도 문재인 정부 지지했었다. 그런데 문재인 정부 들어서고 ㅅㅂ 무슨 빨간당 정부 있을 때 쓰던 줄자로 자기들도 재려고 하는거 보고... 그냥 다음 정권은 사람도 안보고 자유 한국당 뽑으려고 생각중이다. 곪아 터져야 김재규 장군이 나온다. 제대로된 수술법도 아닌데 어설프게 위로 하면 힘든 사람들 혁명으로 바뀌어 당장 잘살지는 못해도 인간답게 살며 결국엔 잘살수 있는데 어설프게 위로하며 자리 꿰차는 ㅅㄲ들 때문에 제대로 안 돌아간다. 김구라 황봉알 노숙자 좋아했지만 김구라 ... 지금 김어준 정도 되었나? 김어준 좋아하는데 청년 강의 부터 TBS 사용자 몰이, 프로젝트부 5만원만 넣어도 되는데 15만원 넣었는데 제대로 된 리워드 내가 받았을까? 그 뒤로도 계속 돈 얘기. 김어준이 롤스로이스 끌던 롯데타워 제일 끝층에 살아도 된다. 그런데 서민 팔아서 돈이야기 하고 계속 방송에서 욕해서 어린 친구들이 따라하면 말년에 내가 직접 죽여버릴 수도 있을 것 같다는 생각이 든다. 어머니를 낫게 하기 위해 회유책이 안 통하자 눈 앞에서 팔을 그어 병원장이 1mm만 더 들어 갔어도 평생 팔 못 쓸뻔 했다는 소리 들었던 나이고 중간에 난 계속 실명으로 활동하고 대놓고 책을 내어도 처벌 안 받는 이유도 나름 프레임을 짤 수 있었기 때문이다. 열심히 각 자 자리에서 애국하는 사람들 팔아서 방송하지는 말자. 그것을 너무 흥미로 몰지는 말자. 그런 샊들 올라가면 배신하는 거 작은 아버지, 삼촌, 학교 선배를 겪으면서 내 분노는 극에 달했다. - 이상 내 소설의 일부였다. 공포를 느껴라. 그래야 한 걸음 한 걸음 제대로 걸을테니.

 

 

 

내가 가끔 스타트업 한킴 욕하는 이유를 모르는 사람이 있는 같다. 회사에 맞지 않다면 마음대로 해고 하라고 놈이다. 뒤로 한킴이랑 공모해서 공모전 나갔던 사람 뽑아서 같은 시키고 개발한거 가지고 ….

 

 

https://www.youtube.com/watch?v=I5mFvWunEx0

 

'Blog History' 카테고리의 다른 글

141  (0) 2020.04.06
140  (0) 2020.04.06
138  (0) 2020.04.06
137  (0) 2020.04.06
136  (0) 2020.04.06

 

 

 

HA소율튜브

2일 전

 

그래서 나를 감시하는 감사가 필요하다. 그 감사를 도와주는 비서도 생기고, 감사와 비서에게 공정하게 밥이나 우유, 의료 혜택이 돌아가도록 인사/총무도 생긴다. 그런게 물물 교환되는 비율을 명확히 하기 위한 금융 기관이 생긴다(여기서 부터 논리적 비약 심함) 그런 금융 기관의 사람들이 일할 수 있는 건물을 거래하는 사람, 관리하는 사람, 제대로 비율을 만들기 위해 물가지수를 조사하는 기관, 그런 기관에게 제대로 된 정보를 제공하기 위한 통계청... 등... 결국 우리 사회의 모습과 같게 되는 것이다. 그나마 우리 통화는 그것을 위해 공부한 금융 기관 사람들이 운영하므로 나름 효율적이다. 지금 사회가 만들어지면서 많은 진통을 겪었다. 금융 사고도 많았다. 그런 과정을 또 겪어야 한다는 것이다. 그러나 비트 코인의 미래는 재벌 2세를 사회에서 빼버릴 수 있다. 그러나 이 보다 더 큰 국가만이 할 수 있는 일이 있다. 바로 국방과 국제적 수준에서의 무역이다. 재벌 2세를 빼버릴 수 있어서 좋긴 하지만 수수료를 이익 단체만 가지고 국가가 세금을 못 걷는다면 국방비가 줄어든다. 물론, 그 국방비의 반 이상은 비리에 쓰이겠지만 그나마 반이라도 있어야 국가와 국민을 지킬 수 있게 된다.

 

 

HA소율튜브

2일 전

 

그리고 코빗 대표가 말한 조금 어려운 시스템 관련 문제는 IBM에서 이미 해결을 한 문제다. 전 세계 통화 거래 사용되는 메인 프레임(조금 큰 컴퓨터)은 대부분 IBM이 가지고 있다. 그래서 IBM이 블록 체인 기술이 나오자 마자 본격적으로 연구해서 연구 결과를 퍼뜨렸다. 이 시장에서 선두가 되기 위해서. 금융 기관들을 안심 시키기 위해서는 IBM이 블록 체인 기술의 정수를 가지고 있어야 한다는 것이다. 그것을 지금 통화 거래에 적용하면 되는 것이다. 그것을 코빗 대표이 이미 초반부에 말했다. 암호 화폐라고. 코빗 대표가 말하는 것은 이것을 일반도 발행할 수 있어서 부를 나눌 수 있다는 점에 집중했고 본인이 원하는대로 되었다. 아쉬운 것은 그래서 어린 친구가 자살했고, 발표 되지 않은 수많은 사람이 자살을 했을 것이다. 아마 코빗 대표는 이 과정도 암화 화폐가 세상으로 나오는 진통이라고 생각할 것이고 나도 그 부분은 동감한다. 그리고 나도 주식을 했었지만 착실히 일하지 않고 돈 놀이 하는 그런 사람들이 자살을 하는 것과 송파구 세 모녀가 자살한 것과는 완전히 다르다. 사람 목숨에 경중은 없겠으나 뭐 조금은. 그리고 어른이 죽는 것과 아이가 죽는 것도 다르다.

 

HA소율튜브

2일 전

 

나도 양비론을 싫어하는 사람이었는데 이 점에서 양쪽 진영 4사람 모두 맞는 말을 하고 있다. 내로남불이라고 독재 정권 하에서는 암호화폐를 권장하고, 그게 아닌 경우 일반 통화를 권장한다. 그리고 비트 코인은 망할 수가 없다. 거래소 없는 암호화폐는 마약이나 매춘, 불법 거래에 너무도 좋은 통화기 때문이기 때문이다. 내가 만들고 있는 것은 것은 사회 주의 국가에서 자금 세탁을 위한 기술로서 암호 기술과 현재 암호 화폐의 기술을 이용하나 같지는 않다. 초기에는 private이고 통화 이름은 같지만 public 화폐는 지정된 노드에서 선 채굴을 한다. 이 정도 말하면 SK에서 사기쳤던 도토리(300억 치 도토리 환불 안해주려고 싸이월드를 분사하고 살리라고 모금 운동한)나 okcashbag(돈 주기 싫어서 연말이면 오일 할인권(그것도 기간 제한 있어서 대부분 못쓰는))을 뿌리는 이유를 알 것이다. 이런 기업 놈들하고 같이 살기 싫어서 소규모 암호 화폐 모임에서는 그들끼리 결제되도록 하고 있다. 왜냐면 특정 가게 사장들도(유작가님이 "들" 싫어하는데 버릴 수 없음) 더러운 나라꼴이나 기업의 횡포에 진저리가 났기 때문이다.

 

 

HA소율튜브

2일 전(수정됨)

 

이상 소설 - 바트 코인 - 이었습니다. 모두 제가 지어낸 이야기 입니다. 참, 참고로 시청자 의견을 드리면  네 분 중 가장 설득력 있는 분은 한교수님. 그리고 양쪽 다 모른다는 것은 사실 유작가님만 아는 것인데... 비트 코인 시스템에 들어 올, 다른 몰로 하면 채굴 기능을 넣은(내가 만드는) 전자 지갑을 지꺼이 깔 그 다른 동기 중에 가장 근접한 것 중 하나가 바로 음주가무. 19금으로 이야기 하면 매춘이다. 조금 더 생각해보면 매춘도 합법화 시킬 수 있는게 암호 화폐인데... 잠이 와서 여기까지 쓰려고 한다.

 

 

 

HA소율튜브

2일 전

 

참, 자기 전에 코빗 대표님께 적어두면... 유작가님 나온다고 논리 오류 조금 보고 나오신거 너무 티납니다 ㅠㅠ 우물에 독 뿌리는 오류나 원천 봉쇄 오류성 말 좀 그만하세요. 님 말이 맞아도 이질감이 듭니다. 유작가님 책도 좋긴 한데 김우진 논리학 추천드려요.

 

 

 



- (NSString *)dropdownMenu:(MKDropdownMenu *)dropdownMenu titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    //    NSLog(@"arrDropdown[%d] = %@", row, arrDropdown[row]);
    DDTBT_RGON_DFCT_CTYP *data = [[DDTBT_RGON_DFCT_CTYP alloc] init];
    data = arrDropdown[row];
    return data.nm_dfct_ctyp;
}


- (void)dropdownMenu:(MKDropdownMenu *)dropdownMenu didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    //    NSString *colorString = self.colors[row];
    //    self.textLabel.text = colorString;
    //
    //    UIColor *color = UIColorWithHexString(colorString);
    //    self.view.backgroundColor = color;
    //    self.childViewController.shapeView.strokeColor = color;
    //
    
    //    [_mBtnCheck setUserInteractionEnabled:YES];
    [mainPanel removeFromSuperview];
//    [self initializeData];
    [_mTexxtField setText:@""];
    
    NSLog(@"Selected Row is %d", row);
    selectedData = [[DDTBT_RGON_DFCT_CTYP alloc] init];
    selectedData = arrDropdown[row];
    dropdownTitle = selectedData.nm_dfct_ctyp;
    NSLog(@"Selected Row is %d %d", row, selectedData.id_dfct_ctyp);
    self->id_dfct_ctyp = selectedData.id_dfct_ctyp;
    [dropdownMenu reloadAllComponents];
    
    [self viewDidLoadExtracted];
    
    delay(0.15, ^{
        [dropdownMenu closeAllComponentsAnimated:YES];
    });
}

static inline void delay(NSTimeInterval delay, dispatch_block_t block) {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), block);
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    oldOne(self);
    [self viewDidLoadExtracted];
    
    NSString *query = [NSString stringWithFormat:@"WITH T_CTYP AS \
                       ( \
                       SELECT ID_DFCT_CTYP, NM_DFCT_CTYP, ODER_MKAR \
                       FROM DDTBT_RGON_DFCT_CTYP \
                       GROUP BY ID_DFCT_CTYP, NM_DFCT_CTYP \
                       ) \
                       SELECT DISTINCT A.ID_DFCT_CTYP, B.NM_DFCT_CTYP \
                       FROM DDTBT_CPNY_NOHS_QOTA A \
                       INNER JOIN T_CTYP B \
                       ON       B.ID_DFCT_CTYP  = A.ID_DFCT_CTYP \
                       WHERE CD_DONG = '%@' \
                       ORDER BY B.ODER_MKAR;", [GlobalVar loadFromUserDefaults:@"current_cd_dong"]];
    
    SqlUtils *db = [[SqlUtils alloc] init];
    arrDropdown = [NSMutableArray arrayWithCapacity:0];
    [db hjhSqlQuery2_seeUlater:query toArray:arrDropdown];
    
    DDTBT_RGON_DFCT_CTYP *data111 = [[DDTBT_RGON_DFCT_CTYP alloc] init];
    data111.nm_dfct_ctyp = @"전체선택";
    data111.id_dfct_ctyp = 65535;
    [arrDropdown insertObject:data111 atIndex:0];

    
    dropdownMenu = [[MKDropdownMenu alloc] initWithFrame:CGRectMake(_mTexxtField .frame.origin.x, self.view.frame.origin.y + _mTexxtField .frame.origin.y + 6, 164, 20)];
    dropdownMenu.dataSource = self;
    dropdownMenu.delegate = self;
    [self.view addSubview:dropdownMenu];
    
//    NSLog(@"%d %d componet count", [dropdownMenu selectedComponent], [dropdownMenu selectedRowsInComponent:[dropdownMenu selectedComponent]]);
    
//    [dropdownMenu selectRow:1 inComponent:[dropdownMenu selectedComponent]];
    
    
    
//=======================first launching
    
        [mainPanel removeFromSuperview];
    //    [self initializeData];
        [_mTexxtField setText:@""];
    int trow = 0;
        NSLog(@"Selected Row is %d", trow);
        selectedData = [[DDTBT_RGON_DFCT_CTYP alloc] init];
        selectedData = arrDropdown[trow];
        dropdownTitle = selectedData.nm_dfct_ctyp;
        NSLog(@"Selected Row is %d %d", trow, selectedData.id_dfct_ctyp);
        self->id_dfct_ctyp = selectedData.id_dfct_ctyp;
        [dropdownMenu reloadAllComponents];
        
        [self viewDidLoadExtracted];
        
        delay(0.15, ^{
            [dropdownMenu closeAllComponentsAnimated:YES];
        });

}

-(void) refreshStatistics {
    
    NSString *ynn = @"";
    if (YES == [mFlag isSelected]) ynn = @"Y";
    
    db = [[SqlUtils alloc] init];
    
    [db hjhSearchingDefect:mList4calculatingStat withDongCd:mDongCd nohs:mNohs ynReClsfRqst:ynn idLoc:mIDLoc no_cd:[db hjhSearchingSelectNoCd:mNmCd]
                      ctyp:[db finderCTYP:mCTYP] dateFrom:mDate1 dateTo:mDate2 isDatesAreSet:mIsDatesAreSet
                 hndl_stat:@""
                enterprise:[db selectCD_CPNY:mEnterprise]
                 search001:mSearch001
                 search002:mSearch002
                 search003:mSearch003
             sortingMethod:mSqlsortMethod
                 publicOrH:mDokkaebi
     ];
    
    [_mBtnStatAll setTitle:[NSString stringWithFormat:@" 📚%@세대", self->stc8.cl_all]
                  forState:UIControlStateNormal];
    
    [_mBtnStatB setTitle:[NSString stringWithFormat:@"📕%@세대", self->stc8.cl_r]
                forState:UIControlStateNormal];
    
    [_mBtnStatE setTitle:[NSString stringWithFormat:@"📙%@세대", self->stc8.cl_y]
                forState:UIControlStateNormal];
    
    [_mBtnStatX setTitle:[NSString stringWithFormat:@"📗%@세대", self->stc8.cl_g]
                forState:UIControlStateNormal];
    
    //    NSLog(@"098506738478: %d %d %d %d", total, b, e, d);
    
    //      if(total != 0) {
    //          double calc = ((double)((double)total - (double)b) / (double)total) * 100;
    //          //        [self.lblCalc setText:[NSString stringWithFormat:@"[ 조치율 : %.1f%% ]", calc]];
    //          [self.lblCalc setText:[NSString stringWithFormat:@" 조치율 : %.1f%% ", calc]];
    //      }
}

- (void)dealloc
{
    //ARC [super dealloc];
    
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)initializeControls
{
    //    UIBarButtonItem *btnNew = [[UIBarButtonItem alloc] initWithTitle:@"추가접수" style:UIBarButtonItemStyleDone target:self action:@selector(onNew:)];
    self.navigationItem.rightBarButtonItem = GlobalVar.globalVar.globalHamberger;
    
    //    NSArray *arrBtns = [[NSArray alloc]initWithObjects:btnNew, nil];
    
    //    self.navigationItem.rightBarButtonItems = arrBtns;
    
    if (nil == mListSearchingResult) {
        mListSearchingResult = [NSMutableArray arrayWithCapacity:0];
    }
    
    if (nil == mList4calculatingStat) {
        mList4calculatingStat = [NSMutableArray arrayWithCapacity:0];
    }
}

- (void)initializeData
{
    NSLog(@"SerchingResult : initializeData mDongCD %@, hosu %@ mNmCD %@", mDongCd, mNohs, mNmCd);
    [mChkAll setSelected:NO];
    
    NSString *yn = @"";
    if (YES == [mFlag isSelected])
        yn = @"Y";
    
    SqlUtils *db = [[SqlUtils alloc] init];
    [db hjhSearchingDefect:mListSearchingResult withDongCd:mDongCd nohs:mNohs ynReClsfRqst:yn idLoc:mIDLoc no_cd:[db hjhSearchingSelectNoCd:mNmCd]
                      ctyp:[db finderCTYP:mCTYP] dateFrom:mDate1 dateTo:mDate2 isDatesAreSet:mIsDatesAreSet
                 hndl_stat:mAmode
                enterprise:[db selectCD_CPNY:mEnterprise]
                 search001:mSearch001
                 search002:mSearch002
                 search003:mSearch003
                sortingMethod:mSqlsortMethod
                 publicOrH:mDokkaebi
     ];
    
    //    for(DFCT_LIST *i in mListSearchingResult) {
    //        NSLog(@"i cd clsf 3893 %@", i.cd_loc_clsf);
    //    }
    
    NSLog(@"[db selectNoCd:mNmCd] = %@", [db hjhSearchingSelectNoCd:mNmCd]);
    
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithCapacity:0];
    [db selectHosh:dic withDongCd:mDongCd nohs:mNohs];
    
    NSString *dongNm = [dic valueForKey:@"nm_dong"];
    
    NSString *florNm = @"";
    NSString *ho = @"전체";
    if (YES == [mDongCd isEqualToString:@""]) {
        dongNm = @"전체동";
    }
    
    if (YES == [mNohs isEqualToString:@""]) {
        florNm = @"전체";
        //        [mLblHosh setText:[NSString stringWithFormat:@"→%@→%@층→%@호", dongNm, florNm, ho]];
        
    }
    else {
        
        if (2 < [mNohs length]) {
            // 동층호 다 선택
            [mLblHosh setText:[NSString stringWithFormat:@"→%@→%@호", dongNm, mNohs]];
        }
        else {
            florNm = mNohs;
            [mLblHosh setText:[NSString stringWithFormat:@"→%@→%@층→%@호", dongNm, florNm, ho]];
        }
    }
    
    
    if(_nflagRefreshStat) [self refreshStatistics];
    _nflagRefreshStat = true;
    
    [mTableView reloadData];
}

'Blog History' 카테고리의 다른 글

140  (0) 2020.04.06
139  (0) 2020.04.06
137  (0) 2020.04.06
136  (0) 2020.04.06
135  (0) 2020.03.31

 

HA소율튜브

2일 전

 

중국은 본디 비트코인을 지지하는 편이었다. 미국은 달러가 기축통화기 때문에 국제 기준이고 나라가 망해도 화폐 기능을 할 수 있는 애인데, 위안화는 아니었다. 그게 싫어서 비트 코인을 지지했고 그 여파로 아시아에 비트코인 열풍이 분 것이다. 이것을 제대로 본 국제 사회가 위안화를 기축 통화로 인정해 봤다. 그래서 중국은 굳이 비트 코인을 지지해서 세금을 제대로 못 걷는 것보다. 기존 자국 통화를 지지하게 된 것이다. 중국이 문을 닫으니 한국에서 비트 코인으로 계산을 할 수 있게 해 주려는 상점과 이미 서비스를 제공한 상점도 문을 닫게 되었던 것이다. 국내 전문가란 사람들을 다 모았는데 이 부분을 간과해서 긴 글을 쓰며 내 생각도 말하게 되었다. 그리고 유시민 작가가 명확하게 보고 있는 것은 "사기" 왜냐면 나 역시 다른 국가의 암호 화폐를 만들면서 이 부분을 고려했다. 그러나 반대편도 생각은 해야 한다. 국가가 빠지고 거래소 없이 P2P 거래가 활성화 되었다고 하자. 그리고 그 P2P 거래에 지금처럼 비트 코인 가지고 말을 하는 사람이나 손석희 진행자나 세금을 매기는 사람이나 변호사 등을 다 빼고,

 

 

HA소율튜브

2일 전

 

밥을 만드는 사람과 우유를 만드는 사람 그리고 사람의 병을 고쳐주는 의사, 글이나 말, 수학 과학을 가르쳐 주는 선생님만 모여서 살기로 한다. 그러면 다른 사람에게 세금을 낼 필요도 없고 그들끼리만 보여서 잘 살면 된다. 왜냐면 그들끼리 물물 교환을 하기 위해 선사시대처럼 조개 대신 암호화폐를 쓰면 되기 때문이다. 그래서 우리를 지켜줄 군인, 암호 화폐의 기술을 계속 발전 시켜줄 개발자 등을 더 넣고 이재용이나 이건희 같은 사람을 빼버리면 된다. 그러면 부자 2세대 3세대 라고 하는 애들과 같은 나라에 살지만 아예 좋은 사람끼리 모여 살기 "체인"에서 빼버릴 수 있다. 그래서 비트 코인은 희망이 있는 것이다. 미래의 화폐가 될 가능성이 충분하다. 매일 주식으로 놀고 먹거나 혹은 힘든... 혹은 돈 벌어서 매일 술만 마시고 여자와 노는 사람들과 따로 살 수가 있는 것이다. 그러나 문제가 생긴다. 비트코인의 초창기 화폐는 이런 좋은 의도로 시작할 수 있겠으나 문제가 생기게 된다.

 

 

HA소율튜브

2일 전

 

우선, 비트 코인 기술 자체가 조개 교환하는 것처럼 쉬운 기술이 아니다. 이게 암호 화폐라고 좋은거라고 속이고 그냥 쓰기에는 한눈에 바로 보이는 것이 아니기 때문이다. 그래서 전제가 필요하다. 모든 구성원이 암호 화폐의 암호 기술, 그리고 전자 지갑에 대한 충분한 이해가 필요하다는 것이다. 그러나 이것이 불가능 하기 때문에 나같은 놈이 생긴다. "사기꾼" 말이다. 전자 지갑 소스를 수정할 있는 개발자. 나는 왠지 안하고 비트코인을 많이 가지고 싶다. 그래서 전자 지갑을 해킹해서 뿌린다. 비트코인 같이 이미 널리 퍼진 암호 화폐라면 어렵겠지만 내가 직접 만드는 아류작 바트코인은 아직 채굴도 되지 않은 상태고 다른 사람들에게 공통된 기능이 동작하는 전자지갑을 배포하지 않은 상태다. 트렌젝션에 대한 로그(일명 장부) 클라이언트 단에서 조작할 있고, 그것을 감출 수도 있다.

 

 



// -(IBAction)methodCalledOnClickingUIButton:(id)sender
//{
//    if(sender==zoomInButton)
//     {
//       scaleValue++;
//     }
//    else if(sender==zoomOutButton)
//     {
//       scaleValue--;
//     }
//     CGAffineTransform transform = CGAffineTransformMakeScale(scaleValue,scaleValue);
//     self.view.transform = transform;
//}


- (void)handleTapGesture:(UITapGestureRecognizer *)sender {
    
    NSLog(@"handleTapGesture");
    
    
    [mainPanel removeFromSuperview];
    
    CGAffineTransform transform = CGAffineTransformMakeScale(1, 1);
    mainPanel.transform = transform;
    
    //    mainPanel.layer.anchorPoint = CGPointMake(0, 0);
    [_scrollview addSubview:mainPanel];
    [_scrollview setContentSize:mainPanel.bounds.size];
    
    if (sender.state == UIGestureRecognizerStateRecognized) {
        
        
    }
}

-(UILabel *) uilabelSubViews:(NSString *)pString {
    UILabel *tDrawText = [[UILabel alloc] initWithFrame:CGRectMake(0.5, 0.5, 20, 10)];
    tDrawText.textAlignment = UITextAlignmentCenter;
    [tDrawText setText:pString];
    tDrawText.backgroundColor = [UIColor clearColor];
    tDrawText.textColor = [UIColor whiteColor];
    tDrawText.font = [UIFont boldSystemFontOfSize:8];
    [tDrawText setAdjustsFontSizeToFitWidth:YES];
    return tDrawText;
}

- (void)viewDidLoadExtracted {
    
    NSString *paramPass = @"";
    if(self->id_dfct_ctyp == 65535) paramPass = @"%%";
    else paramPass = [NSString stringWithFormat:@"%d", self->id_dfct_ctyp];
    
    SqlUtils *db = [[SqlUtils alloc] init];
    self->listOfTheRect = [[NSMutableArray alloc] initWithCapacity:0];
    [db c828ListOfStatistics:self->listOfTheRect withDongCd:@"" ctyp:paramPass];
    for (statisticsCheckingCondition *s in self->listOfTheRect) {
        NSLog(@"statisticsCheckingCondition %@ %@ %@ %@"
              , s.dong
              , s.floor
              , s.hosu
              , s.color);
    }
    
    self->nsm = [[NSMutableArray alloc] initWithCapacity:0];
    [db c828ListOfStatisticsTotal:self->nsm withDongCd:@"" ctyp:paramPass];
    self->stc8 = [self->nsm objectAtIndex:0];
    
    NSMutableArray *personsArray = [[NSMutableArray alloc] initWithCapacity:0];
    
    self->column = [[db hjhHoshMaxValue:[GlobalVar loadFromUserDefaults:@"current_cd_dong"]] intValue];
    
    self->row = (int)[db selectCountOfMaxFloor:[GlobalVar loadFromUserDefaults:@"current_cd_dong"]];
    
    if(self->column == 0) {
      [GlobalVar alertMsgOKWithTitle:@"mBASS" message:@"점검현황은 전유만 조회 가능합니다."];
        [self.navigationController popViewControllerAnimated:NO];
        return;
    }

    mainPanel = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self->column * 42, self->row * 18)];
    UIImageView *backgroundImage = [[UIImageView alloc] initWithFrame:CGRectMake(mainPanel.bounds.origin.x, mainPanel.bounds.origin.y, mainPanel.bounds.size.width, mainPanel.bounds.size.height)];
    [backgroundImage setImage:[UIImage imageNamed:@"pc_bg.png"]];
    [mainPanel addSubview:backgroundImage];
    mainPanel.backgroundColor = [UIColor whiteColor];
    
    
    NSLog(@"PresentCondition rows, columns = %d, %d", self->row, self->column);
    
    CGFloat leftMargin = 50.f;
    CGFloat topMargin = 50.f;
    CGFloat rectangleWidth = 20.0;
    CGFloat rectangleHeight = 10.0;
    CGFloat gapOfColumn = 3.0;
    CGFloat gapOfRow = 3.0;
    
    NSArray *items = @[@"R", @"Y", @"G"];
    
    for(int loop4floor=0;loop4floor<=self->column;loop4floor++) {
        for(int j=0;j<=self->row;j++) {
            
            UIView *myBox2  = [[UIView alloc] initWithFrame:CGRectMake((rectangleWidth+gapOfColumn)*loop4floor + leftMargin , (rectangleHeight+gapOfRow) * j + topMargin, rectangleWidth, rectangleHeight)];
            [myBox2 setAlpha:0.85]; //talpha
            
            //BASIC COLOR
            if(loop4floor == 0) {
                myBox2.backgroundColor = [UIColor blueColor];
//                [UIColor colorWithRed:0.701960784313 green:1.0 blue:1.0 alpha:1.0];
                
                NSString *tFloorStringsAre = [NSString stringWithFormat:@"%d층", (self->row - j)];
                if([tFloorStringsAre isEqualToString:@"0층"]) tFloorStringsAre = @"층";
                
                [myBox2 addSubview:[self uilabelSubViews:tFloorStringsAre]];
            }
            else if(j== self->row) {
                myBox2.backgroundColor = [UIColor blueColor];
//                [UIColor colorWithRed:0.701960784313 green:1.0 blue:1.0 alpha:1.0];
                
                NSString *tFloorStringsAre = [NSString stringWithFormat:@"%d호", loop4floor];
                if([tFloorStringsAre isEqualToString:@"0호"]) tFloorStringsAre = @"층";
                
                [myBox2 addSubview:[self uilabelSubViews:tFloorStringsAre]];
            }
            else myBox2.backgroundColor = [UIColor lightGrayColor];
            
            for (statisticsCheckingCondition *s in self->listOfTheRect) {
                if((self->row - [s.floor intValue]) == j && [s.hosu intValue] == loop4floor) {
                    //                    NSLog(@"floor %d s.hosu %d", [s.floor intValue], [s.hosu intValue]);
                    int item = [items indexOfObject:s.color];
                    switch (item) {
                        case 0:
                            myBox2.backgroundColor = [UIColor colorWithRed:0.86275 green:0.27451 blue:0.27451 alpha:1.0]; //red
//                            myBox2.backgroundColor = [UIColor colorWithRed:0.71372549 green:0.21568627 blue:0.2 alpha:1.0]; //red
                            break;
                        case 1:
                            myBox2.backgroundColor = [UIColor colorWithRed:0.97255 green:0.80392 blue:0.46667 alpha:1.0];
//                            myBox2.backgroundColor = [UIColor colorWithRed:0.792156 green:0.5607843 blue:0.3098039 alpha:0.9];
                            break; //yellow
                        case 2:
                            myBox2.backgroundColor = [UIColor colorWithRed:0.4 green:0.6 blue:0.2 alpha:1.0]; //green likes
//                            myBox2.backgroundColor = [UIColor colorWithRed:0.49411764 green:0.6196078 blue:0.30196078 alpha:1.0]; //green likes
                            break;
                        default:
                            break;
                    }
                }
            }
            
//            [self drawHosuText:myBox2.layer.position];
            
//            [tDrawText setTag:1]
            
            
            [personsArray addObject:myBox2];
        }
    }
    
    UIPinchGestureRecognizer *pointerPinchZoom = [[UIPinchGestureRecognizer alloc]
                                                  initWithTarget:self
                                                  action:@selector(pinchZoom:)];
    
    [mainPanel addGestureRecognizer:pointerPinchZoom];
    
    for(UIView *v in personsArray) {
        [mainPanel addSubview:v];
    }
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    
    tapGesture.numberOfTapsRequired = 2;
    
    [mainPanel addGestureRecognizer:tapGesture];
    [mainPanel removeFromSuperview];
    
    
    [_scrollview addSubview:mainPanel];
//    [_scrollview setContentSize:CGSizeMake(mainPanel.bounds.size.width / 2.7, mainPanel.bounds.size.height / 2.7)];
//
    CGAffineTransform transform = CGAffineTransformMakeScale(1.338158, 1.338158);
    mainPanel.transform = transform;
    
    CGRect transformedBounds = CGRectApplyAffineTransform(mainPanel.bounds, mainPanel.transform);
    [_scrollview setContentSize:CGSizeMake(transformedBounds.size.width, transformedBounds.size.height)];
    
    [self onClickStatAll:nil];
}

- (void)drawHosuText:(CGPoint)pPoint
{
    UIFont* font = [UIFont fontWithName:@"Arial" size:12];
    UIColor* textColor = [UIColor redColor];
    
    NSDictionary* stringAttrs = @{ NSFontAttributeName : font, NSForegroundColorAttributeName : textColor };

    NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:@"Hwfewefelwefwfelo" attributes:stringAttrs];

//    UIGraphicsBeginImageContext([_scrollview contentSize]);
//    CGContextRef context = UIGraphicsGetCurrentContext();
    [attrStr drawAtPoint:pPoint];
//    UIGraphicsEndImageContext();
}

- (NSInteger)dropdownMenu:(MKDropdownMenu *)dropdownMenu numberOfRowsInComponent:(NSInteger)component; {
    return [arrDropdown count];
}

- (NSString *)dropdownMenu:(MKDropdownMenu *)dropdownMenu titleForComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"공종 : %@", dropdownTitle];
}


- (NSInteger)numberOfComponentsInDropdownMenu:(MKDropdownMenu *)dropdownMenu {
    return 1;
}

'Blog History' 카테고리의 다른 글

139  (0) 2020.04.06
138  (0) 2020.04.06
136  (0) 2020.04.06
135  (0) 2020.03.31
182  (0) 2020.03.29

HA소율튜브

2일 전

 

코빗 만들어지기 수년 부터 비트 코인 채굴을 했던 사람으로 마디. 드립니다. . 양쪽 진영 모두 모르는 부분이 있음. 유시민 작가, 한호현 교수가 걱정하는 부분은 사회적 합의하에 통용이 되는 부분에 집중하고 있고, 김진화 대표, 정재승 교수는 물물 교환의 수단인 화폐 기능을 하기에 충분한 기술력을 가지고 있다고 말하고 있다. 그리고 사실 비트 코인은 가격 안정화가 있다. 지금보다 훨씬 비싸지고 사용하는 사람이 많아지면 말이다. 화폐가 안정된 이유는 금본위제 때문이 아니라 사실소수가 마음대로 없기 때문이다. 거래소의 삼성전자 주식을 마음대로 좌지우지 하고 싶지만 적은 돈으로 장난 치기가 힘들다. 연합으로 해도 쉽지는 않다. 그러나 비트코인은 그것이 가능하다. 비트 코인 개발 문의가 들어와서 기획을 공유해 보면, 비트 코인은 okcashbag 이나 상품권과 다름이 없다. , 돈은 아니지만 돈의 기능으로 찍어낼 있다는 것이다. 사토시의 생각은 P2P 기초하고 있었다. 거래소를 생각하지 않았다. 암호화폐의 신뢰성은 P2P 거래에서 나오는 것인데 거래소가 끼면서 수수료가 붙게 되어 비트코인의 철학이 깨졌고/거래소가 끼면서 해킹 당할 있는 암호화폐의 기능이 깨졌다. , 코빗 대표는 암호 화폐란 말을 없다. 본인이 기능을 깨버렸기 때문에. 정재승 교수가 말한 것이 틀린 점을 말해보겠다. 사실, 중국이 비트코인을 통제한 이유는 따로 있다.

 


Delete
Clone
Download model
Submit to virtual race
TrainingInfo Completed
EvaluationInfo
Stop evaluation
Start evaluation
Training complete. You can now evaluate your model's performance.
Evaluate the trained model by having the agent race against the clock along a chosen track in simulation.
See how your model performs in any environment.
Training configuration
Environment simulation
re:Invent 2018
Reward function
Show
Action space
Show
Framework
Tensorflow
Reinforcement learning algorithm
PPO
Hyperparameter
Value
Gradient descent batch size 64
Entropy 0.01
Discount factor 0.999
Loss type Huber
Learning rate 0.0003
Number of experience episodes between each policy-updating iteration 20
Number of epochs 10

의견
한국어
이용 약관개인 정보 보호 정책© 2008 - 2020, Amazon Web Services, Inc. 또는 계열사. All rights reserved.



//    [UIView transitionWithView:mainPanel duration:1.0 options:UIViewAnimationOptionTransitionCurlUp animations:^{
    //                            mainPanel.hidden = YES;
    ////                mainPanel.hidden = NO;
    //    } completion:^(BOOL finished) {
    ////                                mainPanel.hidden = YES;
    //                                        mainPanel.hidden = NO;
    //
    //    }];
    //
    //    [UIView transitionFromView:(nonnull UIView *) toView:(nonnull UIView *) duration:(NSTimeInterval) options:(UIViewAnimationOptions) completion:^(BOOL finished) {
    //
    //
    //    }]
    //    [UIView transitionWithView:(nonnull UIView *) duration:(NSTimeInterval) options:(UIViewAnimationOptions) animations:^{
    //
    //    } completion:^(BOOL finished) {
    //        <#code#>
    //    }]
    //    [UIView trans]
    
    //                            completion:^(BOOL finished){
    //                            // Save the old text and then swap the views.
    //                            // 스왑을 통해 이동한 뷰나 교체한 뷰를 표시합니다.
    //                            UIView*    temp = mainPanel;
    //                            mainPanel = mainPanel;
    //                            mainPanel = temp;
    //    }
    //        ];


{
                         NSLog(@"hjhURLERROR Opened url");
//                [GlobalVar alertMsgOKWithTitle:@"mBASS" message:@"BIM을 먼저 설치 해 주세요."];

                               
                               UIAlertController *AlertView = [UIAlertController alertControllerWithTitle:@"DAELIM" message:@"하자 위치정보 입력 앱 설치가 필요합니다. 다운로드 페이지로 이동하시겠습니까?"    preferredStyle:UIAlertControllerStyleActionSheet];
                                   
                                   UIAlertAction *ok = [UIAlertAction actionWithTitle:@"확인" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
                                                        {
                //쉐일즈비에스salesbstest
                                       
                                       
                                       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://salesbs.daelim.co.kr/app/download_bim.html"]];
                                       
                                       
                                       [AlertView dismissViewControllerAnimated:NO completion:nil];
                                   }];
                                   
                                   UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"취소" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
                                                            {
                                       [AlertView dismissViewControllerAnimated:NO completion:nil];
                                   }];
                                   
                                   [AlertView addAction:ok];
                                   [AlertView addAction:cancel];
                                   [self presentViewController:AlertView animated:NO completion:nil];
                                   
            }
            


//                            myBox2.backgroundColor = [UIColor colorWithRed:0.792156 green:0.5607843 blue:0.3098039 alpha:0.9];


//                            myBox2.backgroundColor = [UIColor colorWithRed:0.49411764 green:0.6196078 blue:0.30196078 alpha:1.0]; //green likes

            
//            [self drawHosuText:myBox2.layer.position];
            
//            [tDrawText setTag:1]
            
//                            myBox2.backgroundColor = [UIColor colorWithRed:0.71372549 green:0.21568627 blue:0.2 alpha:1.0]; //red

if (nil == mListDong)
        mListDong = [NSMutableArray arrayWithCapacity:0];
    
 SqlUtils *db = [[SqlUtils alloc] init];
    [db superSelectDong:mListDong isAll:NO clsf:mCanYouSeeThisSword];

[GlobalVar saveToUserDefaults:@"0301" forKey:@"current_cd_dong"];
[GlobalVar loadFromUserDefaults:@"current_cd_dong"]] intValue];

     
//            [FileManager clearDirImages];


#import "RCEasyTipView.h"
#import "ConfirmationEditor.h"
#import "QualityControl.h"
#import "PresentCondition.h"
#import <QuartzCore/QuartzCore.h>

#import "GlobalVar.h"

#import "Entity.h"

#import "SqlUtils.h"

#import "SuperAddressSelector.h"
#import "DCH_BsQtChkEdtg.h"
#import "DCH_BsQtChk.h"

@implementation PresentCondition

@synthesize mTableView, mLblHosh, mlblStatstics, mFlag, mChkAll;
@synthesize mListSearchingResult, mainPanel;

//@synthesize mDate1, mDate2;

/*
 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
 {
 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
 if (self) {
 // Custom initialization
 }
 return self;
 }
 */

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

static void oldOne(PresentCondition *object) {
    [[object->_btnSort layer] setBorderColor:[UIColor colorWithRed:177/255 green:137/255 blue:167/255 alpha:1].CGColor];
    [[object->_btnSort layer] setBorderWidth:0.0];
    
    [[object.btnSiteInfo layer] setBorderWidth:1.0f];
    [[object.btnSiteInfo layer] setCornerRadius:8.0f];
    [[object.btnSiteInfo layer] setMasksToBounds:YES];
    //    [[self.btnSiteInfo layer] setBorderColor:[UIColor colorWithRed:246/255 green:135/255 blue:38/255 alpha:1].CGColor];
    [[object.btnSiteInfo layer] setBorderColor:UIColor.orangeColor.CGColor];
    
    [object->mLblHosh setText:GlobalVar.globalVar.userSelectionSiteInformation.nm_site];
    //    NSLog(@"btnSiteInfo %@", GlobalVar.globalVar.userSelectionSiteInformation.nm_prgs_phs);
    
    
    sqlite3 *database;
    NSString *databaseName = @"mbass.db";;;;;;;;;;;;;;;;;;;;
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);;;;;;;;;;;;;;
    NSString *documentsDir = [documentPaths objectAtIndex:0];;;;;;;;;;;;;;;;;;;;
    NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];;;;;;;;;;;;
    NSString *currentProgressString = @"";
    
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        NSString *query = @"select nm_prgs_phs \
        from ddtbt_site;";
        const char *sqlStatement = [query cStringUsingEncoding:NSASCIIStringEncoding];
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            // Loop through the results and add them to the feeds array
            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
                currentProgressString = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
                break;
            }
        }
        sqlite3_finalize(compiledStatement);;;;;;;;;;;;;;;;;;;;;;;;;;
    }
    sqlite3_close(database);;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    [object.btnSiteInfo setTitle:currentProgressString forState:UIControlStateNormal ];
    
    object->_nflagRefreshStat = true;
    [object initializeControls];
    [object initActivityIndicator];
    [object initializeData];
    
}

- (void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view {
    // sanity check - x and y MUST be between 0 and 1
    if (anchorPoint.x < 0 || anchorPoint.x > 1 ||
        anchorPoint.y < 0 || anchorPoint.y > 1) {
        return;
    }
    
    CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x,
                                   view.bounds.size.height * anchorPoint.y);
    CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x,
                                   view.bounds.size.height * view.layer.anchorPoint.y);
    
    newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);
    
    CGPoint position = view.layer.position;
    
    position.x -= oldPoint.x;
    position.x += newPoint.x;
    
    position.y -= oldPoint.y;
    position.y += newPoint.y;
    
    view.layer.position = CGPointMake(0, 0);
    view.layer.anchorPoint = CGPointMake(0, 0);
}

- (void)pinchZoom:(UIPinchGestureRecognizer *)recognizer
{
    NSLog(@"Pinch scale: %f", recognizer.scale);
    
    if(recognizer.scale < 1) recognizer.scale = 1;
    
    CGAffineTransform transform = CGAffineTransformMakeScale(recognizer.scale, recognizer.scale);
    //                                       you can implement any int/float value in context of what scale you want to zoom in or out
    mainPanel.transform = transform;
    
    // make these static so they can be used across gesture states
    static CGAffineTransform initialTransform;
    static CGPoint initialAnchor;
    
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        // save these for later states
        initialTransform = recognizer.view.transform;
        initialAnchor = recognizer.view.layer.anchorPoint;
        
        // get the center point of the pinch
        CGPoint touch = [recognizer locationInView:mainPanel];
        
        // anchor point is relative to the view bounds:  0 ... up to 1.0, for both x and y
        CGFloat anchorX = touch.x / recognizer.view.bounds.size.width;
        CGFloat anchorY = touch.y / recognizer.view.bounds.size.height;
        
        // set the layer anchor point AND position, to where the view was initially pinched
        [self setAnchorPoint:CGPointMake(anchorX,anchorY) forView:mainPanel];
        
    } else if (recognizer.state == UIGestureRecognizerStateChanged) {
        // perform the pinch zoom
        mainPanel.transform = CGAffineTransformScale(initialTransform,recognizer.scale,recognizer.scale);
        
    } else if (recognizer.state == UIGestureRecognizerStateEnded) {
        // reset the scale when it's done
        recognizer.scale = 1;
        
        // restore the original anchor point
        [self setAnchorPoint:initialAnchor forView:mainPanel];
    }

    CGRect transformedBounds = CGRectApplyAffineTransform(mainPanel.bounds, mainPanel.transform);
    
    [_scrollview setContentSize:CGSizeMake(transformedBounds.size.width, transformedBounds.size.height)];
//    [_scrollview setContentSize:CGSizeMake(transformedBounds.size.width / 2.7, transformedBounds.size.height / 2.7)];
    
}

'Blog History' 카테고리의 다른 글

138  (0) 2020.04.06
137  (0) 2020.04.06
135  (0) 2020.03.31
182  (0) 2020.03.29
134  (0) 2020.03.29

big decimal


import java.math.*;

class Solution {
    public int solution(int[] A, int[] B) {
        int size = A.length;
        
        BigDecimal C[] = new BigDecimal[size];
        
        for(int i=0; i< size; i++) {
            C[i] = BigDecimal.valueOf(A[i]).add(BigDecimal.valueOf((double)B[i]/1_000_000));
        }
        
        int count =0;
        
        for (int i=0; i<size; i++) {
            for(int j = i+1; j<size; j++) {
                if(C[i].multiply(C[j]).compareTo(C[i].add(C[j])) >= 0)
                count ++;                
                if (count > 1000_000_000) return 1000_000_000;
            }
        }
        
        return count;
    }

}


            NSLog(@"cd_dong ascending:YES");

            cd = @"동/호수 오름차순";
            NSLog(@"cd_dong ascending:NO");
            cd = @"동/호수 내림차순";


            NSLog(@"cd_dong ascending:NO");
            cd = @"등록일자 오름차순";


            NSLog(@"cd_dong ascending:NO");
            cd = @"등록일자 내림차순";



    NSMutableArray *sortedArray = [NSMutableArray arrayWithCapacity:[mList count]];
    

//    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"TEST" message:@"subview" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
//    [av setValue:v  forKey:@"accessoryView"];
//    [av show];

NSDictionary* stringAttrs = @{ UITextAttributeFont : font, UITextAttributeTextColor : textColor };
NSDictionary* stringAttrs = @{ UITextAttributeFont : font, NSForegroundColorAttributeName : textColor };

NSDictionary* stringAttrs = @{ NSFontAttributeName : font, NSForegroundColorAttributeName : textColor };

//    CGContextRef context = UIGraphicsGetCurrentContext();
    //    CGContextSetLineWidth(context, 4.0);
    //    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    //    self.view.backgroundColor = [UIColor redColor];
    //    CGRect r = CGRectMake(0, image.size.height - 80, image.size.width, image.size.height - 50);

B
[UIColor colorWithRed:0.71372549 green:0.21568627 blue:0.2 alpha:1.0];

E
[UIColor colorWithRed:0.792156 green:0.5607843 blue:0.3098039 alpha:1.0];

X
[UIColor colorWithRed:0.49411764 green:0.6196078 blue:0.30196078 alpha:1.0];




    //    UIView *myBox  = [[UIView alloc] initWithFrame:CGRectMake(180, 35, 200, 100)];
    //    myBox.backgroundColor = [UIColor lightGrayColor];
    //    [personsArray addObject:myBox];
    ////    [mainPanel addSubview:myBox];
    //
    //
    //    UIView *myBox2  = [[UIView alloc] initWithFrame:CGRectMake(380, 35, 200, 100)];
    //    myBox2.backgroundColor = [UIColor lightGrayColor];
    //    [personsArray addObject:myBox2];
    //
    
    //background Image
    //    UIGraphicsBeginImageContext(self.view.frame.size);
    //    [[UIImage imageNamed:@"apartment.jpg"] drawInRect:self.view.bounds];
    //    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    //    UIGraphicsEndImageContext();
    //    mainPanel.backgroundColor = [UIColor colorWithPatternImage:image];
    













- (void)saveToAlbum:(UIImage *)image {
    NSString *albumName = @"MBASS";

    void (^saveBlock)(PHAssetCollection *assetCollection) = ^void(PHAssetCollection *assetCollection) {
        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
            PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
            [assetCollectionChangeRequest addAssets:@[[assetChangeRequest placeholderForCreatedAsset]]];

        } completionHandler:^(BOOL success, NSError *error) {
            if (!success) {
                NSLog(@"Error creating asset: %@", error);
            }
        }];
    };

    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
    fetchOptions.predicate = [NSPredicate predicateWithFormat:@"localizedTitle = %@", albumName];
    PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions];
    if (fetchResult.count > 0) {
        saveBlock(fetchResult.firstObject);
    } else {
        __block PHObjectPlaceholder *albumPlaceholder;
        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            PHAssetCollectionChangeRequest *changeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:albumName];
            albumPlaceholder = changeRequest.placeholderForCreatedAssetCollection;

        } completionHandler:^(BOOL success, NSError *error) {
            if (success) {
                PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[albumPlaceholder.localIdentifier] options:nil];
                if (fetchResult.count > 0) {
                    saveBlock(fetchResult.firstObject);
                }
            } else {
                NSLog(@"Error creating album: %@", error);
            }
        }];
    }
}

NSUserDomainMask
// 선택한 로우가 몇번째인지

       
            NSString *query = [NSString stringWithFormat:@" \
                               with t_dfct as ( \
                               select a.cd_dong, a.cd_flor, a.ho, \
                               sum(case b.cd_hndl_stat when 'B' then 1 else 0 end ) as cnt_b, \
                               sum(case b.cd_hndl_stat when 'E' then 1 else 0 end ) as cnt_e, \
                               sum(case b.cd_hndl_stat when 'X' then 1 else 0 end ) as cnt_x from ddtbt_hosh a \
                               left outer join ddtbt_dfct b \
                               on b.cd_dong = a.cd_dong \
                               and b.nohs = a.nohs \
                               and b.id_dfct_ctyp like '%@' \
                               where a.cd_dong = '%@' \
                               group by a.cd_dong, a.cd_flor, a.ho \
                               ) \
                               select cd_dong, cd_flor, ho, \
                               case when (cnt_b + cnt_e) > 0 \
                               then case cnt_x when 0 then 'R' else 'Y' end \
                               else 'G' \
                               end cl_stat \
                               from t_dfct \
                               order by cd_flor desc, ho asc;"



'Blog History' 카테고리의 다른 글

137  (0) 2020.04.06
136  (0) 2020.04.06
182  (0) 2020.03.29
134  (0) 2020.03.29
133  (0) 2020.03.29

출처 https://www.instiz.net/pt/88019?frompc=1

가수 비, 정지훈 사실 확인용

옛날 글 알림 l 이 글은 9년 전에 쓰여졌습니다

1. 저도 예전에 나쁜남자야 ~할때는 비 팬이었긔 ㅋ이게 전제에요 ㅋ
무튼
비 주식먹튀 사건은 좀 레알 알면 알수록 놀랍더라구요 아래는 모두 기사발췌 정리에요
야심한 새벽에 좀 끄적이면요
쉽게 쓸께요
비가 제왑을 나오고 세이텍이라는 휴대폰부품회사를 인수했어요 뜬금없죠 ㅋ
이회사를 본인 영문 이름하에 제이튠이라는 엔터테인먼트 회사로 개명하고 투자자들이 몰렸죠

회사에 연예인은 비 하나 당연히 비를 보고 이 회사에 개미들은 투자를 한거죠
비를 보고 투자 .그가 월드스타라고도 주장하기도 하고
제이튠측은 회사의 모든 비용은 비의 활동비라고 명시 즉 투자자들은 회사를 더욱더 비의 회사라고 생각했겠죠


2. 제이튠 회사의 최대주주는 비였어요
그런데 2010년 6월경
제이튠 최대주주 비가 주식을 전량 매각했어요
쉽게 최대주주인 비가 본인 회사를 본인이 손턴거에요
비의 회사인데 비가 주인이 아닌상황
제이튠은 4년계약으로 비에게 150억원을 줬어요
이부분을 투자자들에게 공시하지 않았어요
놀랍지 않으세요 ?
신생회사가 해당연예인 한명에게 4년계약으로 150억원을 줬다는게?
이부분을 개미투자자들이 1년후에 감사보고서를 통해 알게됬긔
저 150억원이라는 돈은 개미투자자들의 돈이겠죠
비는 제이튠에서 활동비.용역비 라는 이름으로 40억을 추가로 받아가요
놀랍게도 제이튠 회사는 적자의 상황


3. 어떤 미친회사가 수입은 적자인데 해당연예인에게 150억원의 계약금과 그외 활동비 지급을 추가로 합니까??
지금 이회사는 원가가 매출보다 높은 기형적인 상태에요 ㅋ
여기서 일단 눈치가 있다면 다 알죠 ㅋㅋ
제이튠 회사 자체는 지금 제대로된 회사가 아니에요
애시당초 이상한 구조의 회사긔
여기서 더 놀라운건
제이튠 회사의 사장은 조동원 즉 비의 매니저
비 매니저가 사장 ,최대주주는 비
감이 오지 않나요 ?
이회사는 애초의 비가 만든 유령회사나 다름없는거에요
비가 지회사에서 지한테 계약금주고 지가 활동비를 지한테준거긔
총 300억 정도를 챙겼다고 하긔



4. 47억을 들여서 회사를 매입했어요
비가 지가 계약한 계약이 끝나는 시점 헐값이 된 주식 22억에 매도한거에요
쉽게 비가 47억을 들여서 회사를 사고 22억에 팔았긔
어머 그럼 비가 손해봤네?
20억정도 ??? 47억에 사고 22억에 팔았다매?
외형상은 그렇죠 ㅋㅋ이부분이 비팬들이 주장하는 부분
그런데 ㅋㅋ실질적으로는 막대한 이익을 봤죠
4년동안 계약금 150억원을 받고 추가 활동비까지 총 300억정도를 번거에요 ㅋ

회사의 최대주주됨 투자가 들어옴 자기한테 돈주고 회사가 빵꾸난다 싶으니까 도망감 ㅋ
비는 자기가 자기한테 돈주고 추가로 배분목적 댄서비.뱅기값 등등으로 회삿돈 주무른거긔


5. 내용 더있긔 ㅋㅋ
최대주주가 회사를 운영해? 불법이다 개미들은 항의하죠
제이튠측은 비는 회사를 운영하지 않았다
그런데 ㅋㅋ
공개된 공문에 비가 회사 운영에 참여한다고 명시되있음 ㅋ
제이튠 회사 자체는 사기에요 유령회사에요
자기 이름 내세우고 돈끌어모으고 그거 맘대로 쓰다 계약때쯤
팔아버린거긔
최대주주 5프로를 넘기지 않을려고 분명 4.몇프로만 취득했구요
원래 이런 연예주들은 투자자가 잘 안몰려요
근데 제이튠은 최대주주가 비였기 때문에 신뢰가 간거죠
믿은 개미들 뒷통수를 친거에요

그런데

여기서 끝난게 아니에요

제이튠엔터테인먼트 / 제이튠캠프/ 제이튠크리에이티브??



6. 제이튠 엔터는 비의 매니저가 사장 그러니 비회사
??????????????
제이튠이라는 본인회사가 있는데 왜 자회사를 만들긔??????
제이튠 캠프 사장은 비의 또다른 매니저 구태원 즉 비회사
쉽게 비가 제이튠으로 유령회사 하나 만들고 모인 투자금을 제이튠 캠프로 흘린거에요
제이튠 크리에이트브 사장은 조동원 즉 비의 회사
비가 만든 패션브랜드 식스투 어쩌고 였죠 최근 폐업 시킴
기본자금 27억원 본인회사 본인이 모델로 한다고 20억원 가져감 + 모델활동비 더가져감
그런데 모델활동안함
생각해보세요ㅋ
브랜드 런칭한다고 투자자들 모임


7. 연매출 100억보장한다 나 월드스타 비다 ^^ 해외에서도 문의 많을꺼다 그런데 해외문의건수 단한건도 없음 이건 밝혀졌죠
1년만에 돈만 끌어쓰고 폐업 시킴
현재 투자했던 회사들 비 고소상태
제이튠 엔터 4년만에 주식전량 매각
제이튠 크리에이티브 1년만에 폐업
감이 오지 않으시긔????
딱 요약하면요
상장사를 헐값에 인수 비테마 띄우고 주가상승시킨후에 투자금이 몰림 배당한다고 회삿돈 챙기고

타이밍이 되면 지분 전량 매각하고 회사개털되고
상장폐지되면 개미투자자들 나가죽고 ;;;

더 쉽게 말하면요 ㅋㅋㅋ

나월드스타 비다 투자해라 투자금 몰리면 그거 다쓰고 굿베이 ~ 개미들 니들이 바보지 ~



8. 비의 주식먹튀사건은 철저하게 계획하라고 설명되겠죠
작적주까지 철저했고
패션브랜드 론칭까지 먹튀사건에 가담시킨거 보면 대규모 사기행각이 아닐까 싶은
제이튠이랑 제이튠 크리에이티브
여기는 애초 작전주 계획하에 비테마를 이용한 유령회사에요
비 매니저 조동원 이분이 엠블랙 멤버 매형인가? 그렇죠
그래서 엠블랙의 투입시킨거같아요
무튼 얘네 완젼 사기집단 수준 ;;;;;;;
뭐 이번 비사건은
배임죄가 사실 명확해요
그런데
아무래도 월드스타 비군은 앨범 탱스투에도 나와있듯이
줄줄히 나열한 대기업 사모님들 명목하게
묻힐 가능성이 농노하죠 ㅎㅎ




최대주주가 아니라 2대주주라 하는 분들 계시는데.....


http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=073&aid=0002033427


비가 제이튠엔터의 경영권을 확보한 시기는 지난 2007년 10월12일. 금융감독원 전자공시시스템에 따르면

바는 이날 전 대표이사였던 홍재화씨로부터 경영권을 인수받았다.


이후 비는 장내매수를 통해 제이튠엔터의 최대주주로 올라섰다. 보유주식수는 당시 1대주주였던

'소프트뱅크벤처스기업구조조정펀드'(이하 소프트뱅크)에 휠씬 못미쳤지만, 소프트뱅크가 재무적

투자자로 경영에 참여하지 않았기때문에 비는 제이튠엔터의 실질적인 최대주주로 평가됐다.


이후 지난해 6월 아시아기업구조조정펀드1호조합(이하 아시아조합)이 전환청구권을 행사하면서

사정이 달라졌다. 소프트뱅크의 펀드기간 만료로 제이튠엔터의 최대주주가 됐던 비는 아시아조합의

권리행사로 2대주주로 밀려났다. 그리고 이때를 시작으로 정지훈씨는 보유주식을 매각하기 시작했다.


하지만 그것도 잠시. 같은 해 10월16일 아시아조합이 기간만료로 해산하면서 비는 다시 제이튠엔터의 최대주주가 됐다.



소프트뱅크와 아시아구조조정펀드는 경영에 참여하지 않았기때문에 실질적인 최대주주는 비였죠



Q. 비는 사장도 아니고 딴 사람이 사장이다?



http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=073&aid=0002033425



제이튠엔터의 현 대표이사인 조동원 씨는 과거 비의 매니저였다는 사실에 주목하고 있다.
소액주주들은 "조동원은 비가 지난 2007년 10월 홍 전 대표로부터 경영권 인수계약을 체결한 뒤 대표이사에

취임했다"면서 "비가 직접 이사로 이름을 올리진 않았지만, 경영권 확보를 위해 조 대표를 이사로 선임했던 것 아니냐"고 반박하고 있다.


경영진에 이름을 올리진 않았지만, 조동원 대표를 통해 충분히 경영권을 행사할 수 있었을 것이란 주장이다.


기사를 검색해보니 조동원은 오래전부터 비의 매니지먼트를 담당해온 매니저.


과연 비가 제이튠의 경영권과 무관하다고 할 수 있을까요?



Q. 경영권 참여안했어요


http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=073&aid=0002033425


제이튠엔터는 '경영과 무관'하다는 입장을 밝히고 있다. 제이튠엔터 측은 "정지훈 씨는 단지 소속 연예인일 뿐, 경영에는 일절 참여하지 않았다"는 답변을 반복하고 있다. 이는 경영에 참여하지 않았던 만큼 배임 혐의 자체가 성립되지 않는다는 의미다.


비 주식 먹튀 총정리 ㄷㄷㄷㄷㄷㄷ (하지원이 커피면 비는 TOP 1.5L 구랴...) | 인스티즈

◆ 비의 '경영 참여', 공시자료로 확인돼


그렇다면 비는 정말로 경영에 참여하지 않았을까.


확인결과 제이튠엔터의 해명은 거짓으로 확인됐다. 제이튠엔터의 공시자료를 살펴본 결과, '비가 경영에 참여했던 것'으로 드러났기 때문이다.


지난 5월26일 제이튠엔터의 소액공모공시서류에 따르면 '정지훈은 엔터테인먼트 사업의 전문적인

측면과 관련하여 일정 부분 경영권 행사에 참여하고 있습니다'라고 명시돼 있다.


또한 2008년 10월 조동원씨의 대표이사 선임 문제와 제이튠캠프와의 외주용역계약에 대해서도 '정지훈과 협의'를 했다는 내용도 있다.


공시상의 내용을 액면 그대로 해석하면 '비=경영'을 읽을 수 있다. 실제로 제이튠엔터의 공시 담당자는

23일 스포츠서울닷컴과의 전화통화에서 공시내용을 일부 인정했다.


담당자는 "주식을 5% 이상 취득하면 공시에 기재해야할 사항이 있다. 해당 공시내용은 보유목적을

경영참여로 둔 것이다"면서 "하지만 보유 목적이란 주식 취득 전 서류상으로 명시한 것일 뿐이다.

경영에 참여하겠다는 의사를 전한 것은 맞으나 실제로는 경영에 관여했는지는 모르겠다"고 답했다.


배임 논란의 핵심은 비의 경영 참여 여부다. 공시 상의 의미를 그대로 해석하면 비는

애초 주식을 취득하면서 경영 참여의 의지를 보인 것은 명백한 사실이다.


그럼에도 불구 제이튠엔터 관계자는 경영과 무관하다며 오리발을 내밀고 있다.

만약 제이튠엔터의 기존 입장대로 비가 경영에 참가하지 않았다면 이는 허위공시가 되는 셈이다.

공시 내용을 참고로 주식을 매입한 소액주주를 의도적으로 속였다 봐도 무방하다.



경영권 참여했다고 밝히면 배임이 성립하고


안 참여했다고 계속 우기면 허위 공시를 의도한 셈.


허위 공시는 실제로 처벌을 받습니다





이것도 정리 잘된 파코즈 글


http://www.parkoz.com/zboard/view.php?id=express_freeboard&page=2&sn1=&divpage=117&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=486305



가수 "비"가 제이튠 엔터테인먼트 말아먹은걸로 말이 많은데..


이거파보니까 완전시궁창이..


현재 "제이튠"이라는 이름을 쓰고있는 회사가


제이튠 엔터테인먼트

제이튠 캠프

제이튠 크리에이티브


3개가 있습니다.


일단 제이튠 엔터테인먼트.


제이튠엔터는 핸드폰부품 제조사(세이텍)를 인수합병과 함께

3자배정 증자로 비/조동원 제이튠 대표가 최대주주로 코스닥 우회상장을 하게되고

비 150억 전속계약을맺으면서주가 급등.그뒤 유상증자, 회사채등으로 200억원 투자유치를 하지만

대부분의투자금과제이튠 매출액, 300억원에 가까운 돈이비의 주머니로 그냥 들어가고

제이튠엔터는 거의 껍데기만 남은 회사가 되버렸고, 결국 비는 자신의 주식까지 싹 털어버리면서 손을 떼버리죠.



그다음제이튠 크리에이티브.


제이튠 엔터가출자하고 비가 9억원을 투자한 "의류" 회사. 역시 비가 9억원을 투자하면서 2대주주가 되었고,

그와 동시에 비와 20억짜리 CF계약을 맺음.

그리고 "코어포올" 이라는 회사가 40억을 투자했다고 발표했으나 얼마뒤 코어포올의 임원진은 횡령혐의로 구속;

비 또한 횡령혐의로 소송중.




마지막제이튠 캠프. 이 회사가 실질적인 비의 소속사인데.


비의 아버지가 대표명의로 되어있고, 최대주주입니다.

제이튠 엔터와 계약을 맺고 비의 모든 매니지먼트를 도맡은 회사죠.

매니지먼트 계약으로 제이튠 엔터매출의 상당부분을 회사가 빨아들였습니다. 회사직원들도

대부분 제이튠엔터에서퇴직한 사람들이죠. 또한 비가 키운다던 엠블랙도 캠프 소속.

제이튠 엔터는껍데기고 알맹이는 이 회사라는 거죠.



제이튠엔터에서 빼먹고, 크리에이티브에서 빼먹고, 마지막으로아버지 이름으로제이튠캠프 설립.

빼먹은 돈으로 회사 사장노릇하면서 잘 살겠죠..?




외형상으로 20억대 손해라지만 실질적으론 애초에 회사 인수할때 들인 돈이 없으니 300억대 이익이라고 봐야죠



논란이 가열되고 있는 와중에도 비는 아무런 해명도 없이 조용히 있는 상태죠

'Blog History' 카테고리의 다른 글

136  (0) 2020.04.06
135  (0) 2020.03.31
134  (0) 2020.03.29
133  (0) 2020.03.29
132  (0) 2020.03.29

Apache License 2.0

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


Apple MIT License

Copyright: Copyright (c) 2006 by Apple Computer, Inc., All Rights Reserved.

IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software.

In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated.

The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.

IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


Boost Software License 1.0

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:

The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


BSD 3-Clause "New" or "Revised" License

Copyright (c) <year> <owner> . All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


Facebook Platform License

Copyright (c) 2014-present, Facebook, Inc. All rights reserved.

You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
copy, modify, and distribute this software in source code or binary form for use
in connection with the web services and APIs provided by Facebook.

As with any software that integrates with the Facebook platform, your use of
this software is subject to the Facebook Developer Principles and Policies
[http://developers.facebook.com/policy/]. This copyright notice shall be
included in all copies or substantial portions of the software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Freetype Project License

The FreeType Project LICENSE

2006-Jan-27 Copyright 1996-2002, 2006 by David Turner, Robert Wilhelm, and Werner Lemberg

Introduction

The FreeType Project is distributed in several archive packages; some of them may contain, in addition to the FreeType font engine, various tools and contributions which rely on, or relate to, the FreeType Project.

This license applies to all files found in such packages, and which do not fall under their own explicit license. The license affects thus the FreeType font engine, the test programs, documentation and makefiles, at the very least.

This license was inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses, which all encourage inclusion and use of free software in commercial and freeware products alike. As a consequence, its main points are that:

o We don't promise that this software works. However, we will be interested in any kind of bug reports. (`as is' distribution)

o You can use this software for whatever you want, in parts or full form, without having to pay us. (`royalty-free' usage)

o You may not pretend that you wrote this software. If you use it, or only parts of it, in a program, you must acknowledge somewhere in your documentation that you have used the FreeType code. (`credits')

We specifically permit and encourage the inclusion of this software, with or without modifications, in commercial products. We disclaim all warranties covering The FreeType Project and assume no liability related to The FreeType Project.

Finally, many people asked us for a preferred form for a credit/disclaimer to use in compliance with this license. We thus encourage you to use the following text:

""" Portions of this software are copyright © <year> The FreeType Project (www.freetype.org). All rights reserved. """

Please replace <year> with the value from the FreeType version you actually use.

Legal Terms

0. Definitions

Throughout this license, the terms `package', `FreeType Project', and `FreeType archive' refer to the set of files originally distributed by the authors (David Turner, Robert Wilhelm, and Werner Lemberg) as the `FreeType Project', be they named as alpha, beta or final release.

`You' refers to the licensee, or person using the project, where `using' is a generic term including compiling the project's source code as well as linking it to form a `program' or `executable'. This program is referred to as `a program using the FreeType engine'.

This license applies to all files distributed in the original FreeType Project, including all source code, binaries and documentation, unless otherwise stated in the file in its original, unmodified form as distributed in the original archive. If you are unsure whether or not a particular file is covered by this license, you must contact us to verify this.

The FreeType Project is copyright (C) 1996-2000 by David Turner, Robert Wilhelm, and Werner Lemberg. All rights reserved except as specified below.

1. No Warranty

THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO USE, OF THE FREETYPE PROJECT.

2. Redistribution

This license grants a worldwide, royalty-free, perpetual and irrevocable right and license to use, execute, perform, compile, display, copy, create derivative works of, distribute and sublicense the FreeType Project (in both source and object code forms) and derivative works thereof for any purpose; and to authorize others to exercise some or all of the rights granted herein, subject to the following conditions:

o Redistribution of source code must retain this license file (`FTL.TXT') unaltered; any additions, deletions or changes to the original files must be clearly indicated in accompanying documentation. The copyright notices of the unaltered, original files must be preserved in all copies of source files.

o Redistribution in binary form must provide a disclaimer that states that the software is based in part of the work of the FreeType Team, in the distribution documentation. We also encourage you to put an URL to the FreeType web page in your documentation, though this isn't mandatory.

These conditions apply to any software derived from or based on the FreeType Project, not just the unmodified files. If you use our work, you must acknowledge us. However, no fee need be paid to us.

3. Advertising

Neither the FreeType authors and contributors nor you shall use the name of the other for commercial, advertising, or promotional purposes without specific prior written permission.

We suggest, but do not require, that you use one or more of the following phrases to refer to this software in your documentation or advertising materials: `FreeType Project', `FreeType Engine', `FreeType library', or `FreeType Distribution'.

As you have not signed this license, you are not required to accept it. However, as the FreeType Project is copyrighted material, only this license, or another one contracted with the authors, grants you the right to use, distribute, and modify it. Therefore, by using, distributing, or modifying the FreeType Project, you indicate that you understand and accept all the terms of this license.

4. Contacts

There are two mailing lists related to FreeType:

o freetype@nongnu.org

Discusses general use and applications of FreeType, as well as future and wanted additions to the library and distribution. If you are looking for support, start in this list if you haven't found anything to help you in the documentation.

o freetype-devel@nongnu.org

Discusses bugs, as well as engine internals, design issues, specific licenses, porting, etc.

Our home page can be found at

http://www.freetype.org --- end of FTL.TXT ---


libpng License

This copy of the libpng notices is provided for your convenience. In case of any discrepancy between this copy and the notices in the file png.h that is included in the libpng distribution, the latter shall prevail.

COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:

If you modify libpng you may insert additional notices immediately following this sentence.

This code is released under the libpng license.

libpng versions 1.2.6, August 15, 2004, through 1.4.5, December 9, 2010, are Copyright (c) 2004, 2006-2010 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.2.5 with the following individual added to the list of Contributing Authors

Cosmin Truta

libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are

Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.0.6 with the following individuals added to the list of Contributing Authors

Simon-Pierre Cadieux

Eric S. Raymond

Gilles Vollant

and with the following additions to the disclaimer:

There is no warranty against interference with your enjoyment of the library or against infringement. There is no warranty that our efforts or the library will fulfill any of your particular purposes or needs. This library is provided with all faults, and the entire risk of satisfactory quality, performance, accuracy, and effort is with the user.

libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are

Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-0.96, with the following individuals added to the list of Contributing Authors:

Tom Lane

Glenn Randers-Pehrson

Willem van Schaik

libpng versions 0.89, June 1996, through 0.96, May 1997, are

Copyright (c) 1996, 1997 Andreas Digger

Distributed according to the same disclaimer and license as libpng-0.88, with the following individuals added to the list of Contributing Authors:

John Bowler

Kevin Bracey

Sam Bushell

Magnus Holmgren

Greg Roelofs

Tom Tanner

libpng versions 0.5, May 1995, through 0.88, January 1996, are

Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.

For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals:

Andreas Dilger

Dave Martindale

Guy Eric Schalnat

Paul Schmidt

Tim Wegner

The PNG Reference Library is supplied "AS IS". The Contributing Authors and Group 42, Inc. disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors and Group 42, Inc. assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the PNG Reference Library, even if advised of the possibility of such damage.

Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions:

1. The origin of this source code must not be misrepresented.

2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source.

3. This Copyright notice may not be removed or altered from any source or altered source distribution.

The Contributing Authors and Group 42, Inc. specifically permit, without fee, and encourage the use of this source code as a component to supporting the PNG file format in commercial products. If you use this source code in a product, acknowledgment is not required but would be appreciated.

A "png_get_copyright" function is available, for convenient use in "about" boxes and the like:

printf("%s",png_get_copyright(NULL));

Also, the PNG logo (in PNG format, of course) is supplied in the files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).

Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a certification mark of the Open Source Initiative.

Glenn Randers-Pehrson

glennrp at users.sourceforge.net

December 9, 2010


MIT License

MIT License

Copyright (c) <year> <copyright holders>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Mozilla Public License 1.1

Mozilla Public License Version 1.1

1. Definitions.

1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party.

1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications.

1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.

1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.

1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data.

1.5. "Executable" means Covered Code in any form other than Source Code.

1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.

1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.

1.8. "License" means this document.

1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.

1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:

Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.

Any new file that contains any part of the Original Code or previous Modifications.

1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.

1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.

1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.

1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.

2. Source Code License.

2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:

a. under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and

b. under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).

c. the licenses granted in this Section 2.1 (a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.

d. Notwithstanding Section 2.1 (b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices.

2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license

a. under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and

b. under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).

c. the licenses granted in Sections 2.2 (a) and 2.2 (b) are effective on the date Contributor first makes Commercial Use of the Covered Code.

d. Notwithstanding Section 2.2 (b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor.

3. Distribution Obligations.

3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.

3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.

3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.

3.4. Intellectual Property Matters

(a) Third Party Claims

If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.

(b) Contributor APIs

If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file.

(c) Representations.

Contributor represents that, except as disclosed pursuant to Section 3.4 (a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.

3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.

3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Sections 3.1, 3.2, 3.3, 3.4 and 3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.

3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.

4. Inability to Comply Due to Statute or Regulation.

If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.

5. Application of this License.

This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.

6. Versions of the License.

6.1. New Versions

Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.

6.2. Effect of New Versions

Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License.

6.3. Derivative Works

If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)

7. DISCLAIMER OF WARRANTY

COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.

8. Termination

8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.

8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that:

a. such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above.

b. any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant.

8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.

8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.

9. LIMITATION OF LIABILITY

UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.

10. U.S. government end users

The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.

11. Miscellaneous

This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.

12. Responsibility for claims

As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.

13. Multiple-licensed code

Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the MPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. Exhibit A - Mozilla Public License.

" The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/

Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.

The Original Code is ______________________________________ .

The Initial Developer of the Original Code is ________________________ .

Portions created by ______________________ are Copyright (C) ______ . All Rights Reserved.

Contributor(s): ______________________________________ .

Alternatively, the contents of this file may be used under the terms of the _____ license (the " [___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License. "

NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.


OpenSSL License

OpenSSL License

Copyright (c) 1998-2008 The OpenSSL Project. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. All advertising materials mentioning features or use of this software must display the following acknowledgment: "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)"

4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact openssl-core@openssl.org.

5. Products derived from this software may not be called "OpenSSL" nor may "OpenSSL" appear in their names without prior written permission of the OpenSSL Project.

6. Redistributions of any form whatsoever must retain the following acknowledgment: "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/)"

THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). This product includes software written by Tim Hudson (tjh@cryptsoft.com). Original SSLeay License

Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)

All rights reserved.

This package is an SSL implementation written by Eric Young (eay@cryptsoft.com). The implementation was written so as to conform with Netscapes SSL.

This library is free for commercial and non-commercial use as long as the following conditions are aheared to. The following conditions apply to all code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; not just the SSL code. The SSL documentation included with this distribution is covered by the same copyright terms except that the holder is Tim Hudson (tjh@cryptsoft.com).

Copyright remains Eric Young's, and as such any Copyright notices in the code are not to be removed. If this package is used in a product, Eric Young should be given attribution as the author of the parts of the library used. This can be in the form of a textual message at program startup or in documentation (online or textual) provided with the package.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. All advertising materials mentioning features or use of this software must display the following acknowledgement:

"This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)"

The word 'cryptographic' can be left out if the rouines from the library being used are not cryptographic related :-).

4. If you include any Windows specific code (or a derivative thereof) from the apps directory (application code) you must include an acknowledgement: "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"

THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The licence and distribution terms for any publically available version or derivative of this code cannot be changed. i.e. this code cannot simply be copied and put under another distribution licence [including the GNU Public Licence.]


zlib License

zlib License Copyright (c) <year> <copyright holders>

This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.

2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.

3. This notice may not be removed or altered from any source distribution.

'Blog History' 카테고리의 다른 글

135  (0) 2020.03.31
182  (0) 2020.03.29
133  (0) 2020.03.29
132  (0) 2020.03.29
131  (0) 2020.03.28

This application is Copyright © Hasys Corp. All rights reserved.

The following sets forth attribution notices for third party software that may be contained in this application.

If you have any questions or concerns, please contact us at opensource@kakaocorp.com

Alamofire
https://github.com/Alamofire/Alamofire
Copyright 2014-2018 Alamofire Software Foundation (http://alamofire.org/)
MIT License
AMScrollingNavbar
https://github.com/andreamazz/AMScrollingNavbar
Copyright 2013 Andrea Mazzini
MIT License
Apple Frameworks
https://developer.apple.com/documentation
Copyright 2018 Apple Inc.
Apple MIT License
Apple iOS Developer - Sample Code
https://developer.apple.com/library/archive/navigation/#section=Resource%20Types&topic=Sample%20Code
Copyright 2016 Apple Inc
Apple MIT License
Asio C++ Library
https://github.com/chriskohlhoff/asio
Copyright 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
Boost Software License 1.0
clip2tri
https://github.com/raptor/clip2tri
Copyright 2014 Bitfighter developers
MIT License
Crashlytics for iOS
https://fabric.io/kits/ios/crashlytics
Copyright 2016 Twitter Inc.
Facebook SDK for iOS
https://github.com/facebook/facebook-ios-sdk/
Copyright 2014-present, Facebook, Inc
Facebook Platform License
FreeType
http://www.freetype.org/
Copyright 2013-2015 by David Turner, Robert Wilhelm, and Werner Lemberg.
Freetype Project License
GBDeviceInfo
https://github.com/lmirosevic/GBDeviceInfo
Copyright 2015 Goonbee
Apache License 2.0
Geohash
https://github.com/nh7a/Geohash
Copyright 2016 Naoki Hiroshima
MIT License
Google Firebase for iOS
https://firebase.google.com/docs/ios/setup
Copyright 2015 Google Inc.
Apache License 2.0
INTULocationManager
https://github.com/intuit/LocationManager
Copyright 2014-2015 Intuit Inc.
MIT License
JsonCpp
https://github.com/open-source-parsers/jsoncpp
Copyright 2007-2010 Baptiste Lepilleur
MIT License
Kakao Open SDK
https://developers.kakao.com/docs/sdk
Copyright Kakao Corp
Apache License 2.0
libjpeg-turbo
https://github.com/libjpeg-turbo/libjpeg-turbo
Copyright 2009-2018 D. R. Commander
BSD 3-Clause "New" or "Revised" License
LIBPNG: PNG reference library
https://libpng.sourceforge.io/index.html
Copyright 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson
libpng License
MBProgressHUD
https://github.com/matej/MBProgressHUD
Copyright 2009-2016 Matej Bukovinski
MIT License
OpenSSL
https://github.com/openssl/openssl
Copyright 1998-2016 The OpenSSL Project.
OpenSSL License
psimpl
http://psimpl.sourceforge.net/
Copyright 2010-2011 Elmar de Koning, edekoning@gmail.com
Mozilla Public License 1.1
Qt glExtension Example
http://doc.qt.io/qt-5/qtwidgets-graphicsview-boxes-example.html
Copyright 2016 The Qt Company Ltd.
Copyright ** Contact: https://www.qt.io/licensing/
BSD 3-Clause "New" or "Revised" License
SDWebImage
https://github.com/rs/SDWebImage
Copyright 2009-2017 Olivier Poitrey rs@dailymotion.com
MIT License
SwiftSVG
https://github.com/mchoe/SwiftSVG
Copyright 2015 Michael Choe, Strauss LLC
MIT License
Toast-Swift
https://github.com/scalessec/Toast-Swift
Copyright 2016 Charles Scalesse
MIT License
WebP codec
https://chromium.googlesource.com/webm/libwebp
Copyright 2010, Google Inc.
BSD 3-Clause "New" or "Revised" License
zlib
http://www.zlib.net/
Copyright 1995-2017 Jean-loup Gailly and Mark Adler.
zlib License

카카오 헤어샾

'Blog History' 카테고리의 다른 글

182  (0) 2020.03.29
134  (0) 2020.03.29
132  (0) 2020.03.29
131  (0) 2020.03.28
130  (0) 2020.03.27

            NSLog(@"cd_dong ascending:YES");

            cd = @"동/호수 오름차순";
            NSLog(@"cd_dong ascending:NO");
            cd = @"동/호수 내림차순";


            NSLog(@"cd_dong ascending:NO");
            cd = @"등록일자 오름차순";


            NSLog(@"cd_dong ascending:NO");
            cd = @"등록일자 내림차순";



    NSMutableArray *sortedArray = [NSMutableArray arrayWithCapacity:[mList count]];
    

//    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"TEST" message:@"subview" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
//    [av setValue:v  forKey:@"accessoryView"];
//    [av show];


ads.txt를 사용하여 수입을 보호하세요
게시자님, 안녕하세요.
보유하신 애드센스 계정의 '내 사이트' 탭에 나열된 하나 이상의 사이트에 ads.txt 파일이 없는 것으로 확인되었습니다.
ads.txt는 승인받은 판매자(예: 애드센스)를 통해서만 광고 공간이 판매되도록 해 줍니다. 이를 통해 게시자님은 게시자님의 사이트에서 광고를 판매할 수 있는 판매자를 관리할 수 있고 승인받지 않은 판매자가 게시자님의 도메인을 조작하여 잠재 광고주에게 인벤토리를 판매하는 것을 방지할 수 있습니다. ads.txt에 대한 자세한 내용은 고객센터에서 확인하실 수 있습니다.
Google의 광고 제품을 사용하여 게시자 사이트의 광고 공간을 구입하는 광고주에게는 이제 ads.txt를 통해 승인받은 것으로 분류된 판매자의 인벤토리에 대해서만 입찰하는 옵션이 제공됩니다. 잠재 광고주가 게시자님의 광고 공간에 계속 입찰할 수 있도록 ads.txt 파일을 만들어 모든 사이트에 게시하는 것이 중요합니다.
사이트에 ads.txt 파일을 만들려면 다음 단계를 따르세요.
1. 애드센스 계정에 로그인합니다.
2. 홈페이지의 알림에서 '지금 해결하기'를 클릭합니다.
3. 아래쪽 화살표를 클릭하여 'ads.txt 파일 만들기...' 메시지를 엽니다.
4. '다운로드'를 클릭합니다. ads.txt 파일이 자동으로 다운로드됩니다.
5. 사이트의 루트 수준 도메인(예: https://example.com/ads.txt)에 파일을 업로드합니다.
루트 수준은 공개 접미사 목록에 나열된 도메인의 한 단계 아래 수준입니다. 예를 들어 'google.co.uk'는 'co.uk'의 루트 도메인이지만 'maps.google.co.uk'는 아닙니다. IAB ads.txt 사양을 참고하세요.
게시자 ID를 ads.txt 파일에 추가하려면 다음 단계를 따르세요.
1. 애드센스 계정에 로그인합니다.
2. 홈페이지의 알림에서 '지금 해결하기'를 클릭합니다.
3. 아래쪽 화살표를 클릭하여 'ads.txt 파일에 게시자 ID를 추가하기' 메시지를 엽니다.
4. '복사'를 클릭합니다.
5. 각 ads.txt 파일에 행을 붙여넣습니다.
ads.txt 파일이 이제 다음과 같이 표시됩니다. 여기서 pub-0000000000000000은 게시자님의 게시자 ID입니다.
google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0

'Blog History' 카테고리의 다른 글

134  (0) 2020.03.29
133  (0) 2020.03.29
131  (0) 2020.03.28
130  (0) 2020.03.27
129  (0) 2020.03.26

/Users/junhoha/PycharmProjects/002/venv/bin/python /Users/junhoha/PycharmProjects/002/002.py
[nltk_data] Downloading collection u'book'
[nltk_data]    | 
[nltk_data]    | Downloading package abc to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Package abc is already up-to-date!
[nltk_data]    | Downloading package brown to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Package brown is already up-to-date!
[nltk_data]    | Downloading package chat80 to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Package chat80 is already up-to-date!
[nltk_data]    | Downloading package cmudict to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Package cmudict is already up-to-date!
[nltk_data]    | Downloading package conll2000 to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Package conll2000 is already up-to-date!
[nltk_data]    | Downloading package conll2002 to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/conll2002.zip.
[nltk_data]    | Downloading package dependency_treebank to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/dependency_treebank.zip.
[nltk_data]    | Downloading package genesis to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/genesis.zip.
[nltk_data]    | Downloading package gutenberg to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/gutenberg.zip.
[nltk_data]    | Downloading package ieer to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/ieer.zip.
[nltk_data]    | Downloading package inaugural to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/inaugural.zip.
[nltk_data]    | Downloading package movie_reviews to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/movie_reviews.zip.
[nltk_data]    | Downloading package nps_chat to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/nps_chat.zip.
[nltk_data]    | Downloading package names to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/names.zip.
[nltk_data]    | Downloading package ppattach to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/ppattach.zip.
[nltk_data]    | Downloading package reuters to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    | Downloading package senseval to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/senseval.zip.
[nltk_data]    | Downloading package state_union to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/state_union.zip.
[nltk_data]    | Downloading package stopwords to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/stopwords.zip.
[nltk_data]    | Downloading package swadesh to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/swadesh.zip.
[nltk_data]    | Downloading package timit to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/timit.zip.
[nltk_data]    | Downloading package treebank to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/treebank.zip.
[nltk_data]    | Downloading package toolbox to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/toolbox.zip.
[nltk_data]    | Downloading package udhr to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/udhr.zip.
[nltk_data]    | Downloading package udhr2 to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/udhr2.zip.
[nltk_data]    | Downloading package unicode_samples to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/unicode_samples.zip.
[nltk_data]    | Downloading package webtext to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/webtext.zip.
[nltk_data]    | Downloading package wordnet to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/wordnet.zip.
[nltk_data]    | Downloading package wordnet_ic to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/wordnet_ic.zip.
[nltk_data]    | Downloading package words to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/words.zip.
[nltk_data]    | Downloading package maxent_treebank_pos_tagger to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping taggers/maxent_treebank_pos_tagger.zip.
[nltk_data]    | Downloading package maxent_ne_chunker to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping chunkers/maxent_ne_chunker.zip.
[nltk_data]    | Downloading package universal_tagset to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping taggers/universal_tagset.zip.
[nltk_data]    | Downloading package punkt to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping tokenizers/punkt.zip.
[nltk_data]    | Downloading package book_grammars to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping grammars/book_grammars.zip.
[nltk_data]    | Downloading package city_database to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping corpora/city_database.zip.
[nltk_data]    | Downloading package tagsets to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping help/tagsets.zip.
[nltk_data]    | Downloading package panlex_swadesh to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    | Downloading package averaged_perceptron_tagger to
[nltk_data]    |     /Users/junhoha/nltk_data...
[nltk_data]    |   Unzipping taggers/averaged_perceptron_tagger.zip.
[nltk_data]    | 
[nltk_data]  Done downloading collection book
*** Introductory Examples for the NLTK Book ***
Loading text1, ..., text9 and sent1, ..., sent9
Type the name of the text or sentence to view it.
Type: 'texts()' or 'sents()' to list the materials.
text1: Moby Dick by Herman Melville 1851
text2: Sense and Sensibility by Jane Austen 1811
text3: The Book of Genesis
text4: Inaugural Address Corpus
text5: Chat Corpus
text6: Monty Python and the Holy Grail
text7: Wall Street Journal
text8: Personals Corpus
text9: The Man Who Was Thursday by G . K . Chesterton 1908
[Emma by Jane Austen 1816]

VOLUME I

CHAPTER I


Emma Woodhouse, handsome, clever, and rich, with a comfortable home
and happy disposition, seemed to unite some of the best blessings
of existence; and had lived nearly twenty-one years in the world
with very little to distress or vex her.

She was the youngest of the two daughters of a most affectionate,
indulgent father; and had, in consequence of her sister's marriage,
been mistress of his house from a very early period.  Her mother
had died too long ago for her to have more than an indistinct
remembrance of her caresses; and her place had been supplied
by an excellent woman as governess, who had fallen little short
of a mother in affection.

Sixteen years had Miss Taylor been in Mr. Woodhouse's family,
less as a governess than a friend, very fond of both daughters,
but particularly of Emma.  Between _them_ it was more the intimacy
of sisters.  Even before Miss Taylor had ceased to hold the nominal
office of governess, the mildness of her temper had hardly allowed
her to impose any restraint; and the shadow of authority being
now long passed away, they had been living together as friend and
friend very mutually attached, and Emma doing just what she liked;
highly esteeming Miss Taylor's judgment, but directed chiefly by
her own.


Process finished with exit code 0

'Blog History' 카테고리의 다른 글

133  (0) 2020.03.29
132  (0) 2020.03.29
130  (0) 2020.03.27
129  (0) 2020.03.26
128  (0) 2020.03.24

I've got time with Xcode past five years. Before then, I had used Eclipse, Android Studio, Visual Studio &, etc. What I focus on is that what's new things in it, and It's valuable to upgrade without stability. Aka, The stability will be broken when new features in it. But we have to move on for the next step. So the new feature is mandatory. I was a big fan of Borland company, but Apple is the best friend. I hope the Xcode update isn't getting similar to the Windows(compulsory) & Linux(totally different S/W after update).


CompileXIB /Users/junhoha/github/mBASS/searching/PresentCondition.xib (in target 'MBASS' from project 'MBASS')
    cd /Users/junhoha/github/mBASS
    export XCODE_DEVELOPER_USR_PATH=/Applications/Xcode.app/Contents/Developer/usr/bin/..
    /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool --errors --warnings --notices --module MBASS --output-partial-info-plist /Users/junhoha/Library/Developer/Xcode/DerivedData/MBASS-hgrodfjhpjsntbcwuymdgxzjyqyn/Build/Intermediates.noindex/MBASS.build/Release-iphoneos/MBASS.build/PresentCondition-PartialInfo.plist --auto-activate-custom-fonts --target-device iphone --minimum-deployment-target 10.3 --output-format human-readable-text --compile /Users/junhoha/Library/Developer/Xcode/DerivedData/MBASS-hgrodfjhpjsntbcwuymdgxzjyqyn/Build/Products/Release-iphoneos/MBASS.app/PresentCondition.nib /Users/junhoha/github/mBASS/searching/PresentCondition.xib

/* com.apple.ibtool.document.errors */
/Users/junhoha/github/mBASS/searching/PresentCondition.xib:VEL-fh-SdQ: error: Content and frame layout guides before iOS 11.0 [6]


Property attributes 'assign' and 'strong' are mutually exclusive

//    UITableViewCell *cell;
//    UITableView *tv;
    
//    cell = (UITableViewCell*)[[sender superview] superview];
//    tv = (UITableView*)cell.superview;
//    NSIndexPath *path=[tv indexPathForCell:cell];
//    NSLog(@"clickCheck4 in BsVrfChkInfoDwIdList %ld"  , (long)[path row]);
//
//    BOOL chk = NO;
//    if (tv == mTableViewFlor) {
//
//        //        DDTBT_FLOR *data2 = nil;
//        //            BOOL ret = NO;
//        //            for (int i=0; i<[mListFlor count]; i++) {
//        //                data2 = [mListFlor objectAtIndex:i];
//        //                [data2 setIsCheck:NO];
//        //            }
//        //        [mTableViewFlor reloadData];
//
//        DDTBT_FLOR *data = [mListFlor objectAtIndex:path.row];
//        data.isCheck = !data.isCheck;
//        chk = data.isCheck;
//        //               [self checkAllChkBoxFlor];
//
//    }
//    else if (tv == mTableViewHosh) {
//        DDTBT_HOSH *data = [mListHosh objectAtIndex:path.row];
//        NSLog(@"data.isCheck %@", (data.isCheck ? @"YES" : @"NO"));
//        if(data.isCheck) data.isCheck = NO;
//        else data.isCheck = YES;
//        chk = data.isCheck;
//    }
//
//    UIButton *btn = sender;
//    [btn setSelected:chk];
//    [self checkAllCheckButton];


    // Releases the view if it doesn't have a superview.

    // Release any cached data, images, etc that aren't in use.

select a.id_mbil                                ,a.cd_dong                                ,a.nohs                                ,c.nm_loc                                ,d.nm_rgon                                ,e.nm_dfct_type                                ,a.dfct_cnts                                ,a.cd_hndl_stat                                ,a.yn_re_clsf_rqst                                ,a.id_wrk_fmer_pic_atch_file                                ,a.id_wrk_aftr_pic_atch_file                                ,f.nm_dong                                ,f.cd_loc_clsf                                ,a.id_dfct_cl                                from ddtbt_dfct a                                inner join ddtbt_hosh b on b.cd_dong=a.cd_dong and b.nohs=a.nohs                                inner join ddtbt_site_tppg_loc c on c.cd_tppg=b.cd_tppg and c.id_loc=a.id_loc                                inner join ddtbt_site_loc_rgon d on d.id_loc=a.id_loc and d.id_rgon=a.id_rgon                                inner join ddtbt_rgon_dfct_type e on e.id_rgon=a.id_rgon and e.id_dfct_type=a.id_dfct_type                                inner join ddtbt_dong f on f.cd_dong=a.cd_dong                                where a.cd_dong like '%' and a.nohs like '%' and a.yn_re_clsf_rqst like '%'                                and a.yn_svr_trsm<>'Y' and a.mode like 'I%' and a.cd_hndl_stat like '%'                                order by a.cd_dong, a.nohs desc, a.id_loc, a.id_rgon;

        //    NSMutableArray *sortedArray2 = [mList sortedArrayUsingDescriptors:@[sortDescriptor]];
        //        while([mList count])
        //         {
        //                 id groupLead = [mList objectAtIndex:0];
        //                 NSPredicate *groupPredicate = [NSPredicate predicateWithFormat:@"cd_dong = %@",
        //                                                [groupLead name]];
        //
        //                 NSArray *group = [mList filteredArrayUsingPredicate: groupPredicate];
        //
        //                 [sortedArray addObjectsFromArray:group];
        //                 [mList removeObjectsInArray:group];
        //         }
        //        mList = sortedArray;


        //    sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"nohs" ascending:NO];
        //    NSMutableArray *sortedArray2 = [mList sortedArrayUsingDescriptors:@[sortDescriptor]];
        //        mList = sortedArray2;

//    [mTableView refreshControl];

//    mList = nil;
//    [mTableView reloadData];
//    if (nil == mList) {
//        mList = [NSMutableArray arrayWithCapacity:0];
//    }
//


#pragma mark -
#pragma mark AlertView Delegate

//    NSSortDescriptor *sortDescriptor;
//    NSInteger killbill = 0;


//            killbill = 1;

//            sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cd_dong"
//                                                         ascending:YES];


//            killbill = 2;
//            sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cd_dong"
//                                                         ascending:NO];


//            killbill = 2;

//            sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dnt_rgst" ascending:YES];


//            killbill = 2;

//            sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dnt_rgst" ascending:NO];
//    NSMutableArray *sortedArray2 = [mList sortedArrayUsingDescriptors:@[sortDescriptor]];
//    mList = sortedArray2;


//    if(killbill == 1) {
//        NSLog(@"ascending:YES");
//        sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"nohs" ascending:YES];
//    } else if ( killbill == 2)  {
//        NSLog(@"ascending:NO");
//    }

//    [mTableView reloadData];
//    NSLog(@"%@", cd);


동영상 강의 추천?

사람마다 공부 방법이 다르겠지만 전, 사이드 잡으로 강의를 하고 있어서 책과 동영상 강의는 유료라도 거의 다 삽니다. 작년에는 https://www.hackingwithswift.com/store/swift-power-pack 샀구요. 스택 소셜 강의도 샀었고... 한 달 전에는 패스트 캠퍼스 강의도 샀습니다. 뭐 다 보지는 않고 여유 될 때 몰아서 한방에 봅니다. 회사에 꽂혀있는 책은 objective-C 책 2권과 Swift 책 2점 대부터 5점대까지 iOS 책은 6부터 다 있구요(원서포함) 전 책은 거의 낙서용으로 써서 하루에 조금씩은 보게 됩니다. 물론, 다 보면 한 권 더 사요. 

 

  • Project Clean
  • Rm -rf ~/Library/Developer/Xcode/DerivedData 
  • Build Phase - Compile Sources, Copy Bundle Resources
  • Delete *.xcodeproj/xcuserdata/YOUR_FOLDER
  • The unrecognized selector is because of the function body.

 

77, 57, 17

 

 

동층호 미리 선택되어 있어야 함.

사진 전송 후 사진 보기 아이콘이 유지됨

동호수 필터 -> 체크

 

 

 

'Blog History' 카테고리의 다른 글

132  (0) 2020.03.29
131  (0) 2020.03.28
129  (0) 2020.03.26
128  (0) 2020.03.24
127  (0) 2020.03.23




@interface statisticsTotalChecking : NSObject {}
@property   (nonatomic, strong) NSString    *cl_all;
@property   (nonatomic, strong) NSString    *cl_r;
@property   (nonatomic, strong) NSString    *cl_y;
@property   (nonatomic, strong) NSString    *cl_g;
@end


@implementation statisticsTotalChecking
@end


SqlUtils *db = [[SqlUtils alloc] init];
    
    object->listOf = [[NSMutableArray alloc] initWithCapacity:0];
    [db c828ListOfStatistics:object->listOf withDongCd:@"" ctyp:@""];
        
    object->nsm = [[NSMutableArray alloc] initWithCapacity:0];
    [db c828ListOfStatisticsTotal:object->nsm withDongCd:@"" ctyp:@""];
    statisticsTotalChecking *stc8 = [object->nsm objectAtIndex:0];
    NSLog(@"cl_all = %@",  stc8.cl_all);
    NSLog(@"cl_r = %@",  stc8.cl_r);
    NSLog(@"cl_y = %@", stc8.cl_y);
    NSLog(@"cl_g = %@", stc8.cl_g);


//      int total = 0;
//      int e = 0;
//      int b = 0;
//      int d = 0;
//
//      for(int i=0; i<[mList4calculatingStat count];i++) {
//          DFCT_LIST *data = [mList4calculatingStat objectAtIndex:i];
//          if (YES == [data.cd_hndl_stat isEqualToString:@"E"]) {
//              //            [img setTitle:@"처리" forState:UIControlStateDisabled];
//              e++;
//          }
//          else if (YES == [data.cd_hndl_stat isEqualToString:@"B"]) {
//              //            [img setTitle:@"접수" forState:UIControlStateDisabled];
//              b++;
//          }
//          else {
//              //            [img setTitle:@"완료" forState:UIControlStateDisabled];
//              d++;
//          }
//      }
//
//      total = e + b + d;
    


  SqlUtils *db = [[SqlUtils alloc] init];
    
    maxho = [[db hjhHoshMaxValue:mDongCd] intValue];
    

  if ([mListDong count] > 0) {
        DDTBT_DONG *data = [mListDong objectAtIndex:0];
        [db selectFlorrrr:mListFlor withDongCd:mDongCd isAll:mIsAll];
        [mTableViewFlor reloadData];
    }

- (NSInteger) selectCountOfMaxFloor:(NSString *)dongCd;


// 하자 상태별 건수
//    [self setDfctCount];

- (void) setDfctCount {

        // 하자 상태별 건수
//        [self setDfctCount];


    //    NSInteger cntE = 0;
    //    NSInteger cntX = 0;
    
    //    SqlUtils *db = [[SqlUtils alloc] init];
    //    cntE = [db selectDfctCount:@"E"];
    //    cntX = [db selectDfctCount:@"X"];
    //    cntX += [db selectDfctCount:@"B"];
    //
    //    [mlblStat+stics setText:[NSString stringWithFormat:@" 전체 : 0건| 접수 : 0건 | 처리 : 0건 | 완료 : 0건"]];
}

//        CGRect transformedBounds = CGRectApplyAffineTransform(mainPanel.bounds, mainPanel.transform);
    ////    mainPanel.layer.anchorPoint = CGPointMake(0.5, 0.5);
    //    mainPanel.layer.position = CGPointMake(200,200);
    ////                                           _scrollview.bounds.size.width, _scrollview.bounds.size.height);
//        [_scrollview setContentSize:transformedBounds.size];
        


//    [self->_scrollview setContentSize:CGSizeMake(1000*recognizer.scale, 1000*recognizer.scale)];
//    CGPoint pointToScaleTo = CGPointMake(0, 0); //Just enter the coordinates you
                                                //want to scale your view towards
//    CGFloat viewWidth = mainPanel.bounds.size.width;
//    CGFloat viewHeight = mainPanel.bounds.size.height;

//    CGFloat scaleFactorX = recognizer.scale;
//    CGFloat scaleFactorY = recognizer.scale;

//    CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scaleFactorX, scaleFactorY);

//    [UIView animateWithDuration:0.1f delay:0.0f options:0 animations:^{
//        //I divide the x and y coordinates by the view width and height
//        //because the anchor point coordinates are normalized to the range
//        //0.0-1.0.


//        //Now that the anchor point has been changed, apply the scale transform
//        self.mainPanel.transform = scaleTransform;
//
//    } completion:^(BOOL finished) {}];

//    [self.mainPanel removeFromSuperview];
//    [self->_scrollview addSubview:self.mainPanel];
    
//    CGFloat s = recognizer.scale;
//    CGAffineTransform tr = CGAffineTransformScale(mainPanel.transform, s, s);
//
//    CGFloat h = mainPanel.frame.size.height;
//    CGFloat w = mainPanel.frame.size.width;
//
//    [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
//        self.mainPanel.transform = tr;
//        self.mainPanel.center = CGPointMake(w*s , h*s );
//        int temp = 1==1;
//        if([temp is])
//    } completion:^(BOOL finished) {}];
//

//    
//    NSInteger   id_mbil;
//    
//    
//    
//    NSString    *mode;
//    NSInteger   id_dfct;
//    NSString    *cd_site;
//    NSString    *cd_hndl_stat;
//    NSString    *cd_rcpt_phs;
//    NSString    *yn_re_rcpt;
//    NSInteger   notm_re_rcpt;
//    NSString    *dt_rcpt;
//    NSString    *id_rcpt_prsn;
//    NSString    *cd_dong;
//    NSString    *nohs;
//    NSString    *cd_loc_clsf;
//    NSString    *yn_hosh_comn;
//    NSInteger   id_loc;
//    NSInteger   id_rgon;
//    NSInteger   id_dfct_ctyp;
//    NSInteger   id_dfct_type;
//    NSInteger   id_dfct_caus;
//    NSInteger   id_dfct_cl;
//    NSString    *dfct_cnts;
//    NSString    *id_wrk_fmer_pic_atch_file;
//    NSString    *id_wrk_aftr_pic_atch_file;
//    NSString    *yn_re_clsf_rqst;
//    NSString    *id_cplt_prsn;
//    NSString    *dt_cplt;
//    NSInteger   notm_vrf_chk;
//    NSString    *dnt_rgst;
//    NSString    *id_rgst;
//    NSString    *dnt_chg;
//    NSString    *id_chg;
//    NSString    *cd_re_rcpt_resn;
//    NSString    *nm_re_rcpt_resn;
//    NSString    *yn_svr_trsm;
//    
//    NSMutableArray  *atchListFmer;
//    NSMutableArray  *atchListAftr;
//    
//    
//    //평형정보 추가하자
//    //조회용으로만...
//    NSString    *cd_tppg;
//    //공종명,원인명,구분명
//    NSString    *nm_dfct_ctyp;
//    NSString    *nm_dfct_caus;
//    NSString    *nm_dfct_cl;
//    
//    NSString    *nm_loc;
//    NSString    *nm_rgon;
//    NSString    *nm_dfct_type;
//    
//    NSString    *nm_dong;
//    
//    
//    NSInteger   search001;
//    NSInteger   search002;
//    NSInteger   search003;
//    NSString   *cd_cpny;
//    NSString    *nm_cpny;
//    
//    //nipt
//    NSString    *seq_nipt;
//    
//    
//    //    NSString    *nm_nipt;
//    //    NSString    *cnst_vrf_rqst;
//    //    NSString    *dnt_vrf_rqst;
//    //    NSString    *yn_vrf_cplt;
//    //    NSString    *dnt_vrf_cplt;
//    //    NSString    *cnts_req_vrf;

PRAGMA foreign_keys = off;

BEGIN;

ALTER TABLE "DDTBT_DFCT" RENAME TO "_DDTBT_DFCT_old";

CREATE TABLE "DDTBT_DFCT" (
   "id_mbil" number PRIMARY KEY ASC
 , "mode" varchar(2)
 , "id_dfct" number
 , "cd_site" vharchar(6)
 , "cd_hndl_stat" varchar(20)
 , "cd_rcpt_phs" varchar(20)
 , "yn_re_rcpt" varchar(1)
 , "notm_re_rcpt" varchar(6)
 , "dt_rcpt" varchar(8)
 , "id_rcpt_prsn" varchar(20)
 , "cd_dong" varchar(4)
 , "nohs" varchar(5)
 , "cd_loc_clsf" varchar(20)
 , "yn_hosh_comn" varchar(1)
 , "id_loc" number
 , "id_rgon" number
 , "id_dfct_ctyp" number
 , "id_dfct_type" number
 , "id_dfct_caus" number
 , "id_dfct_cl" number
 , "dfct_cnts" varchar(200)
 , "id_wrk_fmer_pic_atch_file" varchar(50)
 , "id_wrk_aftr_pic_atch_file" varchar(50)
 , "yn_re_clsf_rqst" varchar(1)
 , "id_cplt_prsn" varchar(20)
 , "dt_cplt" varchar(8)
 , "notm_vrf_chk" number
 , "dnt_rgst" varchar(8)
 , "id_rgst" varchar(10)
 , "dnt_chg" varchar(8)
 , "id_chg" varchar(10)
 , "cd_re_rcpt_resn" varchar(20)
 , "nm_re_rcpt_resn" varchar(200)
 , "yn_svr_trsm" varchar(1)
 , "search001" number
 , "search002" number
 , "search003" number
 , "cd_cpny" varchar(10)
 , "seq_nipt" varchar(10)
 , "yn_cmpx_ctyp" varchar(1)
 , "id_flwg_ctyp" number
 , "cnts_dfct_mgt" varchar(1000)
 , "cd_stat_prev" varchar(2)
 , "ds_hname" varchar(300)
);

INSERT INTO "DDTBT_DFCT" (
   "id_mbil"
 , "mode"
 , "id_dfct"
 , "cd_site"
 , "cd_hndl_stat"
 , "cd_rcpt_phs"
 , "yn_re_rcpt"
 , "notm_re_rcpt"
 , "dt_rcpt"
 , "id_rcpt_prsn"
 , "cd_dong"
 , "nohs"
 , "cd_loc_clsf"
 , "yn_hosh_comn"
 , "id_loc"
 , "id_rgon"
 , "id_dfct_ctyp"
 , "id_dfct_type"
 , "id_dfct_caus"
 , "id_dfct_cl"
 , "dfct_cnts"
 , "id_wrk_fmer_pic_atch_file"
 , "id_wrk_aftr_pic_atch_file"
 , "yn_re_clsf_rqst"
 , "id_cplt_prsn"
 , "dt_cplt"
 , "notm_vrf_chk"
 , "dnt_rgst"
 , "id_rgst"
 , "dnt_chg"
 , "id_chg"
 , "cd_re_rcpt_resn"
 , "nm_re_rcpt_resn"
 , "yn_svr_trsm"
 , "search001"
 , "search002"
 , "search003"
 , "cd_cpny"
 , "seq_nipt"
 , "yn_cmpx_ctyp"
 , "id_flwg_ctyp"
 , "cnts_dfct_mgt"
 , "cd_stat_prev"
)
SELECT
   "id_mbil"
 , "mode"
 , "id_dfct"
 , "cd_site"
 , "cd_hndl_stat"
 , "cd_rcpt_phs"
 , "yn_re_rcpt"
 , "notm_re_rcpt"
 , "dt_rcpt"
 , "id_rcpt_prsn"
 , "cd_dong"
 , "nohs"
 , "cd_loc_clsf"
 , "yn_hosh_comn"
 , "id_loc"
 , "id_rgon"
 , "id_dfct_ctyp"
 , "id_dfct_type"
 , "id_dfct_caus"
 , "id_dfct_cl"
 , "dfct_cnts"
 , "id_wrk_fmer_pic_atch_file"
 , "id_wrk_aftr_pic_atch_file"
 , "yn_re_clsf_rqst"
 , "id_cplt_prsn"
 , "dt_cplt"
 , "notm_vrf_chk"
 , "dnt_rgst"
 , "id_rgst"
 , "dnt_chg"
 , "id_chg"
 , "cd_re_rcpt_resn"
 , "nm_re_rcpt_resn"
 , "yn_svr_trsm"
 , "search001"
 , "search002"
 , "search003"
 , "cd_cpny"
 , "seq_nipt"
 , "yn_cmpx_ctyp"
 , "id_flwg_ctyp"
 , "cnts_dfct_mgt"
 , "cd_stat_prev"
FROM "_DDTBT_DFCT_old";

DROP TABLE "_DDTBT_DFCT_old";

COMMIT;

PRAGMA foreign_keys = ON;
try catch  모두 제
      @try {

                } @catch (NSException *exception) {
                } @finally {
                }

                if(sqlite3_column_text(compiledStatement, 27))

@try {
} @catch (NSException *exception) {
                    NSLog(@"There's no cd_cpny");
                    //                     sqlite3_finalize(compiledStatement);
                    //                    sqlite3_close(database);
                } @finally {
                }
                


                NSLog(@"edtgSelectDfct data.nm_dfct_ctyp %@", data.nm_dfct_ctyp);
                
          @try {
                              NSLog(@"ds_hname = %@", data.ds_hname);
                                       } @catch (NSException *exception) {
                                       } @finally {
                                       }
//            UITextField *resn = [alertView textFieldAtIndex:0];
    //            nm = resn.text;
    //
    //            /*
    //            NSString *sss = [cd stringByAppendingString:nm];
    //            [GlobalVar alertMsgOKWithTitle:@"mBASS" message:sss];
    //            return;
    //            */
    //
    //            SqlUtils *db = [[SqlUtils alloc] init];
    //            NSMutableArray *arr = [NSMutableArray arrayWithCapacity:0];
    //
    //            // 재접수정보 저장
    //            for (int i=0; i<[mList count]; i++) {
    //                DFCT_LIST *data = [mList objectAtIndex:i];
    //
    //                if (YES == data.isCheck && YES == [data.cd_hndl_stat isEqualToString:@"E"]) {
    //                    // 체크된거만 재접수 사유 저장
    //                    data.cd_hndl_stat = @"B";
    //
    //                    //[db updateDfct:data.id_mbil reRcptResnCd:cd nm:nm];
    //
    //                    [arr addObject:data];
    //                }
    //
    //                data.isCheck = NO;
    //            }
    //
    //            [db updateDfctArr:arr reRcptResnCd:cd nm:nm];
    //
    //            [mChkAll setSelected:NO];
    //            [self checkAllList:NO];
    //
    //            [mTableView reloadData];
    //        }
    //    }

'Blog History' 카테고리의 다른 글

131  (0) 2020.03.28
130  (0) 2020.03.27
128  (0) 2020.03.24
127  (0) 2020.03.23
126  (0) 2020.03.23

< Mac Address Authentication의 취약성에 대하여 > 

작성자 : 이무열 (Prescott)

http://debug.so 

  1. 개요

요즘에 위 사진과 같이 공유기에서 클라이언트를 인증하는 방식으로 무선 Key Authentication와 Mac Address Authentication를 주로 사용한다.

사설 Access Point가 아닌 공용 Access Point의 경우, 별도의 Key Authentication이 아닌 Mac Address Authentication만을 사용하는 경우가 있는데, 이 인증방식의 취약성에 대해 이야기하고자 한다. 

이 인증방식은 Mac Address Spoofing에 매우 취약하다. Linux나 Unix(Mac) 환경의 경우, 터미널에서 고작 한 줄의 명령어만 입력하면 Mac Address Spoofing이 가능하다. 

Windows 환경의 경우 다양한 유틸리티를 통해 손쉽게 변경할 수 있지만, Microsoft에서 변조 가능한 Mac Address의 범위를 제한해 두었다.

X2-XX-XX-XX-XX-XX

X6-XX-XX-XX-XX-XX

XA-XX-XX-XX-XX-XX

XE-XX-XX-XX-XX-XX

출처 : Change MAC Address in Windows 7 (from http://lizardsystems.com) 

위와 같이 극히 제한된 범위로 변조가 가능하므로, Windows 환경에서 제대로 Mac Address Spoofing을 시도하려면, VMWare와 같은 가상 데스크톱 환경을 구성하여 Mac Address Spoofing을 시도하면 손쉽고 간단하게 변조가 가능하다.

  1. 실습

 

  서술자의 경우에는, Mac OS X (Snow Leopard) 환경에서 Mac Address Spoofing을 시도하였다. 

공격의 대상으로 ‘T wifi zone’ SSID를 사용하는 SKTelecom의 와이파이존을 테스트 대상으로 지정하였다.

<그림 1> Mac Address Authentication에 실패하여 인터넷 접속이 차단된 화면 

먼저, Mac Address Spoofing이 이루어지지 않았을 때에 인터넷에 접속하는 경우 위와 같이 클라이언트 인증에 실패하여 접속이 차단된다. 

 

다음은, 차단을 우회하기 위해 Mac Address Spoofing을 시도하여 성공한 화면이다.

<그림 2> Mac Address Spoofing을 시도하고 성공된 화면 

다음은, 변조된 Mac Address를 통해 대상 Access Point에 접속한 화면이다.

<그림 3> 변조된 Mac Address를 통해 대상 액세스포인트에 성공적으로 접속환 화면

  1. 결론

더 이상 Mac Address를 통한 인증방법은 안전하지 않다. 너무나도 쉽게 인증이 되어버리기 때문에 Mac Address Spoofing을 통한 인증 우회 뿐만 아니라 해킹 전 해커가 자신의 흔적을 지우기 위해서 변조하는 경우에는 해커를 추적하기 힘들어진다는 것이다. Mac Address 인증방식으로 클라이언트를 인증하는 관리자의 경우 보다 더 강력한 보안을 요구하는 바이다. 

 

출처: <http://webcache.googleusercontent.com/search?q=cache:xc5C9kCjz5cJ:debug.so/wp7/mac_address_spoofing.docx+&cd=1&hl=ko&ct=clnk&gl=kr>

불러오는 중입니다...

1. 박사방, 알아보니 "박사"랑 연관 된 것은 없다. 뉴스 마케팅 용어. 2. 26살 조주빈은 학점 4점이 넘고 교우 관계 별 이상 없는데다 학보사 일했다. 3. 26만명이라는데 텔레그램 단톡방 능력이 이 정도였나? 4. 그 동안 안 잡혔던 것이 가상화폐로 돈을 받았다. 5. 피해 여성들을 협박해서 영상을 받았다. --- 내 생각 : 텔레그램 단톡방 기능 좀 살펴봐야 겠다.&& 가상화폐는 결국 화폐가 걸었던 길을 걷네. &&텔레그램에 가상화폐, 집에 쌓인 현금으로 볼 때 국내 거래소랑 공조해서 잡았겠네. &&이 시국에 텔레그램 탈퇴하는 사람들은 일단 의심이 간다. 뭐 텔레그램 해킹 당했을 수도 있겠지만. 굳이 지금 지울 이유가 있을까? && 이 시국에 떠들어 대는 여성 단체 많은데, 왜 그들이 안심하고 연락할 수 있었던 단체 하나 없어 보일까. && 번화가에서 쉽게 만날 수 있는 퇴폐 업소 뿌리 뽑지도 못하는데 과연 국민 청원수로 없어질까? && 국민청원 1위 시키는 파급력 있는 뉴스 설계는 과연 누가?

 

Dear Junho,

Thanks to the creativity and innovation of developers like you, the App Store has become much more than the world’s safest marketplace. It's grown into a vibrant platform with great apps that influence culture and change lives, with over half a billion visitors each week. This wide-reaching platform has helped generate over $155 billion in developer earnings — just from sales of apps and in-app purchases. Today, the App Store gives you the opportunity to connect with users in 155 countries or regions. We’re pleased to announce that the App Store will expand even farther this year with upcoming support for 20 new countries, allowing you to increase your impact and grow your business in new markets.

To allow your app to appear in these new countries, your membership Account Holder first needs to accept the updated Program License Agreement by signing in to their account on the Apple Developer website. If you have a Paid Applications Agreement, the Account Holder will also need to accept this updated agreement in App Store Connect. You can then select the “New Countries or Regions” checkbox in the Pricing and Availability section of your app information page to automatically make your app available in all new countries. Completing these steps by April 10, 2020 will help make sure your app is ready to be published as content initially becomes available across new locations. We’ll let you know when you can choose from specific new countries and update the default subscription pricing for these locations.

Sign in to your account



Best regards,
Apple Developer Relations

 

 

 

 

'Blog History' 카테고리의 다른 글

130  (0) 2020.03.27
129  (0) 2020.03.26
127  (0) 2020.03.23
126  (0) 2020.03.23
125  (0) 2020.03.23

ML 학습 결과는 늘 같을까?

 

 

아니요.

 

실험 방법은 간단하다. 인터넷에는 쉽게 구할 수 있는 개/고양이 예제가 있으니 돌려보면 된다. 다소 친절할 필요는 있어 따끈따끈하게 돌려보고 스샷를 올려 둠.

 

결과도 다르고,

 

 

물론, 모델도 다르게 나온다.

 

시간은 다음의 코드로 측정하면 된다. import 뭘 해야할지 궁금하면 자동 import 를 할 수 있는, pyCharm을 쓰면 편하다.

 

start_time = time.time()

print("interstellar :", time.strftime("%H:%M:%S", time.gmtime(time.time() - start_time)))

--------

interstellar : 00:09:08

 

 

이 매거진은 학교에서 ML 강의는 하고 있었지만, 최근 기업에서 ML 강의 요청이 있고, 개발자가 아닌 분들도 있어서 모두 같은 시작점을 같게 하고자 만든 매거진...

 

 

'Blog History' 카테고리의 다른 글

129  (0) 2020.03.26
128  (0) 2020.03.24
126  (0) 2020.03.23
125  (0) 2020.03.23
124  (0) 2020.03.23

소율튜브 8편 - 다양한 소율



* ETRI ARM Firmware 교육과정 key point

1. 8주차 : 프로젝트 2~3개
2. 9주차 : AI
3. 8/29 발표
4. 8/30 소프트웨어 검증 업체

1. segment control 



https://www.youtube.com/watch?v=BbgMEnmnM-o&feature=youtu.be

생각2) 나만 아니면 된다고 생각하다가 결국 자기 자식이 당한다. 즉, 자신에게 돌아온다. 물론, 자식을 자식으로 생각치 않는 부모에게는 해당없음. 불효자보다 이런 부모를 찾는 것이 급선무. 내 주변에도 많다.


https://charlespyo.com/2017/11/16/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%EC%9D%80-%ED%98%84%EC%9E%AC-%EC%96%B4%EB%94%94%EC%AF%A4-%EC%99%80%EC%9E%88%EB%82%98/

https://charlespyo.com/2017/10/16/%ED%91%9C%EC%B2%A0%EB%AF%BC%EC%9D%98-%ED%81%AC%EB%A6%BD%ED%86%A0%EB%B0%B8%EB%A6%AC-%ED%83%90%EB%B0%A9%EA%B8%B0-4/





CHECKING THIS ADD
CHECKING THIS
CHECKING THIS REMOVED 11
CHECKING THIS REMOVED 11
CHECKING THIS REMOVCHECKING THIS

견공자제분
KBS의 보도본부장 이화섭 - 고려대 언론학


조선,중앙,동아일보와 매일경제,한국경제




GS.s.pTendencyPeriodBar?.refresh()

If you have time to come to Korea. Could you come and join us? This is the best show in Korea economic fields. And KBS is the meaning of Korea Broadcasting System.


- (void) c828ListOfStatisticsTotal:(NSMutableArray *)array withDongCd:(NSString *)dongCd ctyp:(NSString*)ctyp {
    
    sqlite3_stmt *compiledStatement;
    
    @try {
        //TODO        array things...
        [self checkBackDB];
        if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
            
            NSString *query = [NSString stringWithFormat:@" \
                               with t_dfct as ( \
                               select a.cd_dong, a.cd_flor, a.ho, \
                               sum(case b.cd_hndl_stat when 'B' then 1 else 0 end ) as cnt_b, \
                               sum(case b.cd_hndl_stat when 'E' then 1 else 0 end ) as cnt_e, \
                               sum(case b.cd_hndl_stat when 'X' then 1 else 0 end ) as cnt_x from ddtbt_hosh a \
                               left outer join ddtbt_dfct b \
                               on b.cd_dong = a.cd_dong \
                               and b.nohs = a.nohs \
                               and b.id_dfct_ctyp like 111  \
                               where a.cd_dong = '0301' \
                               group by a.cd_dong, a.cd_flor, a.ho \
                               ) \
                               , t_stat as ( \
                               select cd_dong, cd_flor, ho, \
                               case when (cnt_b + cnt_e) > 0 \
                               then case cnt_x when 0 then 'R' else 'Y' end else 'G' \
                               end cl_stat \
                               from t_dfct \
                               ) \
                               select count(cd_dong) as cl_all, \
                               sum(case cl_stat when 'R' then 1 else 0 end) as cl_r, \
                               sum(case cl_stat when 'Y' then 1 else 0 end) as cl_y, \
                               sum(case cl_stat when 'G' then 1 else 0 end) as cl_g from t_stat;"
                               ];
            
            const char *sqlStatement = [query cStringUsingEncoding:NSASCIIStringEncoding];
            
            if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
                while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
                    NSLog(@"cl_all = %@",  [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]);
                    NSLog(@"cl_r = %@",  [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]);
                    NSLog(@"cl_y = %@", [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]);
                    NSLog(@"cl_g = %@", [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)]);
                }
            }
        }
        sqlite3_finalize(compiledStatement);
        sqlite3_close(database);
    } @catch(NSException *e) {
        sqlite3_finalize(compiledStatement);
        sqlite3_close(database);
    }
}


'Blog History' 카테고리의 다른 글

128  (0) 2020.03.24
127  (0) 2020.03.23
125  (0) 2020.03.23
124  (0) 2020.03.23
123  (0) 2020.03.22

홀리싯...

 

Chrome 브라우저 업데이트 후 서비스 이용이 불가합니다.

2020년 2월 4일 Chrome 브라우저가 80 버전으로 업데이트 되면서 보안 정책이 강화되었는데요.

 

업데이트 영향으로 인해 맞춤 URL(*.mydomain.com)로 접속할 시 로그인이 안되는 등의 현상이 발생할 수 있습니다.

 

맞춤 URL로 접속할 경우 실제로는 LINE WORKS 기본 URL(*.worksmobile.com)로 접속되기 때문에 Chrome 브라우저에서는 다른 웹 사이트(제 3자)로 인식하여 발생하는 문제입니다.

 

Chrome 브라우저에서는 맞춤 URL이 아닌 LINE WORKS 기본 URL로 접속해주시기 바랍니다.

 

만약 Chrome 브라우저에서 맞춤 URL로 접속을 원하는 경우 아래와 같이 보안정책 수준을 낮추면 이용하실 수 있으나 권장하고 있지 않습니다.

 

참고로 Internet Explorer 브라우저(IE10/IE11)는 설정 변경없이 이용 가능합니다.

 

1. Chrome 브라우저를 실행 후 주소창에 ‘chrome://flags/#cookies-without-same-site-must-be-secure’을 입력하여 접속합니다.

 

2. 검색창에 ‘SameSite’ 입력 후 ‘SameSite by default cookies’, ‘Cookies without SameSite must be secure’ 에서 설정 값을 ‘Disabled’로 변경후 ‘Relaunch’ 버튼을 클릭하여 Chrome 브라우저를 재실행합니다.

Lite 상품

Basic 또는 Premium 상품

'Blog History' 카테고리의 다른 글

127  (0) 2020.03.23
126  (0) 2020.03.23
124  (0) 2020.03.23
123  (0) 2020.03.22
122  (0) 2020.03.22

코로나 관련 안내문.

 

PC 도움방:

[Web발신]

사업장 입문 시 해당 사항을 숙지하시기 바랍니다.

joe:

안가요

PC 도움방:

[디지털시티 내방객(관계사 포함) 상시 마스크 착용 안내] | [Web발신]

코로나19 바이러스로 인한 감염병으로부터 방문객 여러분의 안전을 위해 사내 출입 및 이동 等 상시 마스크 착용에 대해 안내드립니다.

 

코로나19 감염증이 대구/청도 지역 중심으로 지역사회 전파가 급속하게 확산되고 있습니다.

이에, 全내방객께서는 다음과 같은 상황에서 마스크를 반드시 착용해주시기 바랍니다.

 

 ① 출퇴근 버스 상시 마스크 착용

    (착용자에 한해 탑승가능)

 ② 사내 입출문時 상시 마스크착용

    (착용자에 한해 출입가능)

    ※ 차량으로 출입時에도 마스크 반드시 착용

 ③ 사내 이동(엘리베이터, 도보, 셔틀 等), 회의, 교육 等 상시 마스크 착용

 

감염병 확산이 종료되는 시점까지 운영될 예정이오니, 내방객 여러분의 적극적인 협조 부탁드립니다.

[디지털시티 내방객 입문안내] | [Web발신]

[디지털시티 내방객 입문안내]

코로나 19 심각단계 격상에 따라 임직원 및 내방객 건강을 보호하기 위한 아래 조치 사항에 대해 안내 드립니다.

 

1. 납품, A/S등 부득이한 경우 외 방문신청 자제

2. 사업장 입문시 마스크 필수 착용

    (미착용시 입문제한)

3. 버스, 엘리베이터, 사내이동, 회의시 마스크 필수 착용

4. 중국(홍콩/마카오포함), 대구/경북지역 14일 이내 방문자 출입제한

5. 체온 37.5도 이상 출입제한

 

위 조치 사항을 포함하여 입문시 건강상태 설문 및 체온측정 협조바랍니다.

[디지털시티 내방객 입문안내] | [Web발신]

[디지털시티 내방객 입문안내]

 

코로나 19 심각단계 격상에 따라 임직원 및 내방객 건강을 보호하기 위한 아래 조치 사항에 대해 안내 드립니다.

 

1. 납품, A/S 등 부득이한 경우 외 방문신청 자제

2. 사업장 입문 시 마스크 필수 착용

   (미 착용시 입문제한)

3. 버스, 엘리베이터, 사내이동, 회의 시 마스크 필수 착용

4. 중국, 홍콩, 마카오, 이탈리아, 이란, 대구/경북지역 14일 이내 방문자 출입제한

5. 체온 37.5도 이상 출입제한

 

위 조치 사항을 포함하여 입문 시 건강상태 설문 및 체온측정 협조바랍니다.

[Web발신]

[디지털시티 내방객 입문안내]

 

코로나 19 확산에 따라 임직원 및 내방객 건강을 보호하기 위한 아래 사항에 대해 안내 드립니다.

 

1. 해외국가 및 대구/경북 지역 14일 이내 방문자 출입제한

2. 사업장 입문 시 마스크 필수 착용 (미 착용시 입문제한)

3. 버스, 엘리베이터, 사내이동, 회의 시 마스크 착용 필수

4. 납품, A/S 등 부득이한 경우 외 방문신청 자제

5. 체온 37.5도 이상 출입 제한

 

 

/*

 ############ Korean #############

 */

 

/*** Localizable.strings 사용법 ****

 ## 변수가 있는경우 ###

 "myName" = "Sam"

 "friend" = "Tom"

 "myNum" = 10

 titleLabel.text" = String(format: NSLocalizedString("Hello %@, This is %@", comment: ""), myName, friend) // Hello Sam, This is Tom

 titleLabel.text" = String(format: NSLocalizedString("Hello %d", comment: ""), myNum) // Hello 10

 

 ## 변수가 없는 경우 ###

 editLabel.text" = "Edit".localized // extension으로 구현

 */

'Blog History' 카테고리의 다른 글

126  (0) 2020.03.23
125  (0) 2020.03.23
123  (0) 2020.03.22
122  (0) 2020.03.22
121  (0) 2020.03.22

텔레그램은 해킹 가능할까?

004

byHAJUNHO방금

GPLv3 제품을 욕하는 행동은 도저히 용납할 수 없어 글을 남긴다.

 

불가능하다.

 

의사 결정을 위해서는 다양한 지식이 필요하다. 이 매거진은 IT 분야의 의사 결정을 위해서 관련 지식을 제공하는 매거진이므로 텔레그램 n 번방에 대해서 이야기해 보려고 한다. 범죄자 입장에서 말하는 것은 여론의 뭇매를 맞을 수도 있으니 추가 범죄자들을 잡아야 하는 시각으로 써 보려고 한다.

 

이상한 안경으로 세상을 보면, 텔레그램 해킹은 매우 쉽다. 텔레그램을 쓰는 사람의 휴대폰을 뺏아 텔레그램을 열고 내용을 보면 된다. 그 외 중간에서 스니핑을 한다거나 서버의 내용을 빼는 것은 불가능하다. 

 

https://telegram.org/blog/cryptocontest

$300,000 for Cracking Telegram Encryption

$300,000 for cracking #Telegram encryption

telegram.org

 

텔레그램은 오래전부터 해킹 대회를 개최하고 있었고, 카톡뿐 아니라 전 세계 메신저들이 그들이 소스를 보고 벤치마킹하는 것으로 유명하다. 게다가 텔레그램은 푸틴이 사장(파벨 두로프)에게 열라고 지시 하자 거부하고 망명해 버린 것으로도 유명하다.

https://platum.kr/archives/27688

텔레그램 창업자, 알고보니 러시아를 떠난 정치 망명객 - 'Startup's Story Platform’

(왼쪽) 텔레그램 창업자인 파벨 두로프 몇일 새 러시아산 메신저 텔레그램(telegram)이 화제를 모으고 있습니다. 정부의 카카오톡 검열이슈에 맞물려 네티즌들이 찾은 대안입니다. 소위 ‘메신저 망명처’로도 불리우고 있습니다. 텔레그램 이야길 해보죠. 텔레그램의 창업자는 러시아의 페이스북이라 불리우는 브콘탁테(ВКонтакте, 원어식발음 ‘브깐딱쩨’, 이하 VK)의 창업자이자 최고경영자였던 파벨 …

platum.kr

 

 

그 외 텔레그램 관련 기사는 수없이 많은데,

https://news.sbs.co.kr/news/endPage.do?news_id=N1004719875

스노든 “암호 해독 키 제공 거부한 '텔레그램' 결정 지지”

러시아에 망명 중인 전 미국 정보요원 에드워드 스노든이 러시아 당국에 암호 해독 키 제공을 거부한 암호화 메신저 '텔레그램'의 결정을 지지하고 나섰습니다. 인테르팍스 통신에 따르면 스노든은 17일 자신의 트위터 계정에 올린 글에서 "나는 예전에 텔레그램 보안 모델을 비판했다.

news.sbs.co.kr

 

이번 사건으로 지난 히스토리를 아예 모르거나 의도적으로 조작을 시도하는 기자들이 보여서 기록을 남기게 되었다. 그런 의도가 컴퓨터를 잘 모르는 사람이 보기에 충분한 "가슴 덜컹"이 된다면 좋은 의도겠지만 뉴스가 그런 식으로 흘러가서는 안된다는 것은 굳이 논쟁하지 않더라도 자명한 사실이다.

 

https://biz.chosun.com/site/data/html_dir/2020/03/07/2020030701078.html

'국민앱' 카톡 10주년… 웃고 울었던 순간들

카카오톡 2010년 3월 출시부터 10년 변천사우여곡절 있었지만 이제는 카카오 최대 수익사업국민 메신저 넘어 생활 플랫폼으로 자리매김한국에서 ‘..

biz.chosun.com

 

 

http://www.mediatoday.co.kr/news/articleView.html?idxno=119312

카카오톡이 국민들에게 사과한 이유는? - 미디어오늘

www.mediatoday.co.kr

 

 

카카오톡이 다시 감청 정보를 제공하고 위기를 틈 타 서버 사용량을 확 줄인 것은 탁월한 선택이었다. 사실, 딸을 키우는 아버지의 입장에서는 범죄자를 잡는 수사협조 외엔 개인 사생활을 들여보는 것이 쉽게 다수의 동의를 얻기 힘들기 때문에 나는 감청에 찬성하는 편이다.(게다가 나는 텔레그램도 쓰니까) 내가 정말 반대였다면 조회수 10배는 더 나오던 블로거에서 티스토리로 바꿀 이유도, 브런치에 글을 쓸 이유도 없겠다. 사생활 존중하는 아이폰과 텔레그램을 선호하지만 카톡 또한 존중한다.(아이를 키우다가 사실, 생각이 변화한 케이스니 내 말은 딱히 근거도 없고, 무조건 틀렸다)

 

말하고자 하는 요지는 한국 정부보다 무서운 러시아 정부의 힘에도 굴복하지 않았던 텔레그램이라서 관련해서 협조를 받을 수 있는 길은 없다고 보면 되겠다. 그러면 텔레그램 방에서 정상적으로 나와서 사진과 텔레그램 자체를 지워버린 사람을 어떻게 추적할 수 있을까? 

 

추적할 수 없다.

 

그러나 운영 중에는 상대방 휴대폰 번호를 볼 수 있었을 테니 명단이 분명 있다.

그리고 경찰은 이런 사건이 발생했을 때 모든 사람을 잡지는 않는다. 가령 퇴폐 업소라고 하면 이용 횟수 3번 이상 + 수입 등 고려해서 잡는 것으로 알고 있다.(교소도가 무한정 있는 것은 아니니까)

 

이럴 때 국가의 수장이라면 어떤 의사 결정을 해야 할까?

 

번화가만 가도 쉽게 볼 수 있는 문제의 가게부터 잡는 게 좋지 않을까?

 

쫓겨난 그들이 앞으로 어디서 어떻게 일 할지도 함께 고민해 봐야 한다. 곤충이 먹거리가 된다면 아마 일 안 해도 굶어 죽는 국민은 없을 것 같긴 하다.

 

텔레그램은 그 어떤 메신저보다 사생활을 존중하는 메신저이다. 범죄로 악용되어 아쉽지만 살인자를 욕해야지 그 칼이나 그 칼을 만든 사람을 욕하지는 말아야겠다.

 

 

김구 음 가입자 전번을 털어서 복제하는 방법이 있을 수는 있겠으나 텔레그램은 푸틴 대통령이 공개 하라고 해도 대표가 망명을 해 버렸던 터라 방 나가서 지운거라면 아마 흔적을 못 찾을 듯 ㅠㅠ

'Blog History' 카테고리의 다른 글

125  (0) 2020.03.23
124  (0) 2020.03.23
122  (0) 2020.03.22
121  (0) 2020.03.22
120  (0) 2020.03.22
  • Caveman debugging

 

연합뉴스 https://www.yna.co.kr/view/AKR20161004057000017

조선일보 http://it.chosun.com/site/data/html_dir/2020/01/29/2020012900999.html

경향신문 http://news.khan.co.kr/kh_news/khan_art_view.html?art_id=201710121124011

동아일보 http://www.donga.com/news/article/all/20200111/99179277/1

중앙일보 https://news.joins.com/article/19464595

 

 

 

중급편은 거의 마무리 되어 간다. 막판 집중을 위해 지금 회사에도 퇴사 한다고 말했다. 쩝... 이번 편에도 자기 이야기만 안하고 비방이 많아서 그냥 모금을 할까 고민도 된다. 어차피 돈이나 커리어 때문에 쓴게 아니라서 (하루에 코드 한 줄 치지 않는 개발자가 너무 많은 현실을 탓해야지 ㅡㅡ;) 이번 편도 별 히트는 못 치겠지만 또 몇 년 간 내가 원하는대로 세상이 변하리라 생각된다. 실무 프로그래밍[중급편] 서론 : 이 책은 "더러운 변절자의 책" 임을 미리 밝혀 둔다. 또, 파이썬 보다는 C가 더 어렵다는 것을 알지만 이 책에서 또 다른 곳에서 이 시간 이 후, 그렇게 말하지 않을 것도 미리 말해둔다. 그리고 돈을 벌기 위해 이 사실 또한 잊으려고 한다. 하지만 이렇게 써 두니 부디, 용서하길 바란다. (중략...) 부품 산업에서 얻은 경쟁력으로 만든 휴대폰을 만드는 회사에 꽤 오래 있었다. 자주 보던 친구들은 들락날락한 수입에도 늘 최선을 다하고 정직하게 최대치의 보너스를 받은 것이 한 편으로는 미안하다. (중략...)상위 layer로 갈 수록 더러운 정치와 맞 닿아 있다. 최 아래 단에서는 버그 있는 API를 만들기도 힘들지만, 사실, 중간 정도 오면 윗 단에서는 절대 고칠 수 없는 작은 흠집을 낸 API를 만들어 올릴 수도 있다. SEAndroid 할 때도 말해주지 않으면 절대 모를, 그런 현상을 경험한 사람들의 고해성사를 들었다. 그래서 저수준 layer 의 심플한 설계, 정직함, 우수한 성능을 위한 꾸밈없는 커뮤니케이션은 필수불가결한 기술 요소이다.(중략...) 그러나 내가 아는 세상은 달랐다. 억대 수입이 넘어가니 억대 수입을 광고하며 아랫단 까지도 케어할 수 있는 광고가 먹힌다고 생각한다. 비록 그런 행태에 피드백을 받아도 변하지 않는다. 그래서 뇌피셜이 유튜브에 올라가고 온갖 전문 마케터나 어려운 용어에 현혹된 홍보 전문가를 영입해도 비루한 조회수에 대한 이유를 본인에게서 찾지 못한다. 머리가 하얀 한림원 출신 CTO가 내게 말했다. 한 달이라도 기술을 놓는다면 기술자가 할 수 없고 따라가기가 힘들텐데 왜 다른 생각을 가지냐고.(중략...) "모른다"는 중의적 표현이다. 당신과 더 깊은 대화를 나누고 싶다. 는 뜻과 더는 이야기 하고 싶지 않다는 뜻이 함께 있다. (중략...) 얼마나 깊게 아는지가 중요한데 쉽게 설명한 전문가의 몇 문장만 조합하다가 결국 본인이 직접 개발하게 되었을 때 자폭하는 경우를 많이 봤다. 아니, 초등학생도 보는 만화에서 두목이나 당주나 리더나 선생님이나 리더로 불리는 사람들은 결국 마지막에 자신이 싸우거나 해결하지 않는가? (중략...) IT 대기업에서 하는 모든 기술은 다시 학교로 돌려 보낼 수 있다. 아마 대기업 CTO들이 딱 2개가 걸릴게 있다고 할텐데 그걸 내가 말하기 전에 토렌트 기술과 분산된 오브젝트 DB로 가능하고 이미 여러 전문가에 의해 가능성을 입증했다고 말하고 싶다. 에트리와 에트리에 돈을 주는 정부와도 (중략...) 결론은 사실 그냥 즐기라는 것에 있다. 순수한 몰입에서 행복을 찾았으면 한다. 다만, 시끄럽게 떠드는 사람의 방송은 닫고 배움을 즐기며 신의 언어인 전기에서 비롯된 API를 정직하게 구현한 사람들과 그 모임을 기술을 쫓는 공동체에서 진정한 따스함을 느끼길 바란다. ------- 토렌트 기술에 대한 검증이 끝난 작년에 마무리한 서론인데(뭐 퇴고는 영원하니) 코로나 사건 발생해서 정말 현장 HERO들이 더 부각되는 이 시점에 또 넣고 싶은 이야기가 있다. 현업 개발자들에게 힘을 실어줄 이야기도 넣어야 겠다는 생각이다.

'Blog History' 카테고리의 다른 글

124  (0) 2020.03.23
123  (0) 2020.03.22
121  (0) 2020.03.22
120  (0) 2020.03.22
119  (0) 2020.03.21

맥북으로 머신러닝 되나요?

 

알파고가 100억 넘는 컴퓨터라는 것을 사람들이 잘 아는데도 이런 질문을 받는 경우가 있다.

답변은  됩니다. 혹은, 안됩니다.

 

라고 말한다.

 

그리고 대기업 개발 쪽 아닌, 관계자가 물어봤을 때는 그냥 안된다고 말했다.

 

노트북으로 한다면 초기엔 구글 코랩이 베스트고, 구글 클라우드가 좋다. 사실, 대형 클라우드 회사는 모두 해당 플랫폼을 가지고 있다. 오라클, IBM 도 브로셔를 보내오고 마이크로소프트의 애저, 아마존의 AWS도 ML 플랫폼이 있다.  원리는 VMWARE나 도커에 파이썬, 텐서, 케라스를 깔아 놓고 돈 받는 형태라 보인다. 가장 큰 AWS도 초창기 데이터 센터 만들 때 VMWARE 기술을 썼다는 기사가 기억난다. 불혹이라 사실 이제 가물가물하다.

 

다음과 같은 플랫폼도 있다. 

 

https://www.openml.org/home

OpenML

OpenML: exploring machine learning better, together. An open science platform for machine learning.

www.openml.org

 

 

그 외 다른 ML 클라우드 회사는 10개 넘었던 것 같은데 다 망한 것 같다.

 

페북이나 구글 하드웨어 개수가 개당 500만 원씩 잡고 30만~100만 개는 될 텐데, 1조 정도 있으면 해 볼만한 사업인 것 같다. 뭐, 국가가 쓸데없는 개 타트 업에 투자해 주는 것보다 그냥 미국 하드웨어 디립따 사서 외교 잘하고 그 하드웨어로 대학교 학생들이 만든 인공지능 모델이나 잘 돌려줘도 좋은 국가 산업이 될 거라는 생각을 해 본다.

 

서론이 길었네. 좀 더 비 개발자가 알아듣기 쉬운 답변으로는

 

맥북 에어 200만 원짜리 노트북으로 돌리면 한 3시간 걸리는 간단한 트레이닝 데이터로 모델을 만들 때, 

500만 원짜리 맥북 프로로 돌리면 한 1.5시간 걸리는 것 같고,

아이맥 프로 800만 원짜리로 돌리면 16 코어 중 5 코어 놀면서 10분 정도에 끝나는 것 같다.

 

맥은 머신러닝 하기 좋은 시스템 플랫폼이 아니다.

 

AMD는 GPU 지원이 nVidia보다 못해서 난 CPU로 돌린다. pyCharm에서 gpu 패키지가 잘 안되거든... ㅡㅡ; 4년 전 Sli나 Crossfire로 GPU 4개씩 사서 머신러닝 한다고 국가 돈 타갔던 회사들은 그걸로 신나게 게임하고 있으리라 생각한다. 혹은 구석에 처박혀 있거낰ㅋㅋㅋ 리눅스에 구축한 텐서의 경우 CPU로는 돌릴 수가 없는 상태. 그래도 아이맥 프로는 plaidbench keras mobilenet 벤치를 돌렸을 때 7초 안에 프롬프트가 뜬다.

 

2년 전이었나? 3년 전이었나... 클라우드 머신으로 돌렸을 때 기억으로는 트레이닝 비용이 월 380만 원 정도가 나왔던 것 같다. 그때 트레이닝 데이터가 지금보다 더 많지는 않았던 것 같은데...(이미지 크기가 다르긴 했으니 1:1 비교는 불가겠지만)

 

암튼, 모델 짜는 것은 종이와 연필이면 충분하고 머신 러닝 돌리는 것은 휴대용에서는 안 하는 게 좋다. 클라우드는 너무 비싸. 좋은 데이터 있으면 클라우드 업체와 딜이 되긴 한다. 걔네들도 뭐, 데이터 없으면 땡이니까.

 

요샌 나 같은 경우 모델 하나로 만들지 않고 어차피 프로그래밍이 되니 여러 모델을 거치도록 설계하기 때문에 클라우드 쓸 일도 없다. 기업 담당자 잘 꼬셔서 맥 프로 최고 사양으로 뽑는 게 좋다. 뭐... AMD GPU도 아직은 아니지만 좀 더 나아지겠지 ^^;; 그리고 어차피 VR, AR 도 하니까 그리고 그래픽 카드 내구성보다는 제온 같은 CPU가 오래 돌리는데 좀 더 안정감을 느끼긴 하다. 3년 이상씩 하드웨어 고장 났을 때만 컴퓨터 끄며 그 외엔 계속 돌려도 하드 디스크 메모리, 그래픽 카드만 뻑났었지 CPU가 죽은 적은 없었기에...

 

내가 데이터 엔지니어를 하는 이유는 이미 늙었고, 했던 분야가 모두 그쪽인 이유도 있지만. 데이터 분석가, 과학자 쪽은 의사결정 쪽과는 거리가 멀다. 의사 결정 또 한 내가 하는 것이 아니다. 잘 뽑은 모델로 한 예측을 잘 보여줄 때 큰돈을 움직이는 사람들이 의사 결정을 하는 것이다. 3D로 잘 보여 주면 더 좋고.

 

3개의 글로 이 매거진의 성격은 어느 정도 파악되었으리라 생각된다.

'Blog History' 카테고리의 다른 글

123  (0) 2020.03.22
122  (0) 2020.03.22
120  (0) 2020.03.22
119  (0) 2020.03.21
118  (0) 2020.03.21

pyCharm을 쓰는 이유

002

1

 intelliJ 쓰면서부터 jetbrain 사와 인연이 되었고, Android Studio의 기본 에디터가 되면서 또, node.js 할 때 webStorm을 쓰면서 pyCharm 도 자연스레 쓰게 되었다. 얘네들 초기 버전은 별로지만 오리지널스처럼 결국 시장을 평정하는 것을 보며, 굳이 돈을 내고도 쓰는 회사가 되어 버렸다. 최신 버전이 나와서 따라가려고 할 때 jetBrain 사는 완벽하지는 않지만 따라가려고 한다. 물론, 나중에는 버그도 없다. 개발자의 고군분투가 느껴진다고 할까.

 

2

 

아나콘다로 최신 버전의 tensor flow 패키지를 한 번에 설치하려면 에러가 발생한다. 난 30년이 넘는 IT 분야 경력 중에 제대로 패키지 관리를 해 주는 서비스는 블리자드의 battle.net 밖에 보지 못했다. 윈도는 수 없이 재 설치를 했었다. 10 이후에는 많이 나아졌다. MAC도 완전히 맛이 갔던 적이 있다. linux는 작년까지 말썽이었고, 우분투/레드헷 계열의 패지키 업데이트는 그냥 안 쓰는 게 맞다는 것은 필드에서 돈 받고 일하는 모든 분이 공감하리라 생각한다. 버전이 다르면 그냥 다른 소프트웨어라고 생각해야 한다. 에러는 low level에서의 재미와 직결되지만 상위에서만 놀아 본 사람들에게는 극심한 스트레스로 다가온다. error pool에 엮이고 싶지도 그럴 시간도 없다. 그나마 좋은 실력으로 잘 헤쳐 나가는 solution을 선택하고 싶다.

 

3.

pyCharm은 tensor flow-eigen을 제외하고 지난 1년 간 좋은 동반자가 되어 주었다.

 

MAC 기본 python은 별 진전이 없다. 

 junhoha  ~  python

WARNING: Python 2.7 is not recommended.

This version is included in macOS for compatibility with legacy software.

Future versions of macOS will not include Python 2.7.

Instead, it is recommended that you transition to using 'python3' from within Terminal.

 

지금은 3점 대를 써야 한다. (실무에서 사용하고 돈을 벌고 강의도 한다. TMI: 이걸로 일 년에 1억은 번다) 그래서 3점대 쓰라고 하고 싶은데 2점대를 고집하는 분이 많아서 그런 게 아니라. 애플을 사랑하는 개발자가 워낙 많아서 애플은 별 신경을 쓰지 않아도 된다. 그리고 한 걸음이 꽤 무거운 회사기 때문에 함부로 발걸음을 움직이기도 힘들다.

 

4.

 

새로운 iMAC 프로에 하나 더 세팅하는 겸 세팅 환경 스샷을 넣어 본다.

 

Anaconda-Navigator는 쓰지 않지만, conda 패키지 관리 툴은 쓰기에 conda의 python을 연결한다. 3.8 이상 버전 올리기도 좋기에. pyCharm도 내부 패키지 관리는 conda로 한다. conda에서 한번 더 필터링을 해줘서 좋은 것. 

그리고 나머지 패키지는 conda가 아닌 pyCharm에서 돌린다. pyTorch, tensor flow, keras 패키지 등으로 프로젝트를 수행한다.

 

5.

딱히 1~4 이유가 아니더라도 필드에서 돈을 벌고 있는 개발자의 개발 환경은 늘 궁금할 것이라 생각된다. linux의 VMWARE 설정해서 가상 머신만 배포하여 강의를 한 적이 있다. 에트리에서도 2년은 그렇게 했는데 각자 직장 가서 환경 설정도 못한다는 피드백을 받고 바꾸었다.(물론, 그렇게 질타하는 시니어는 vmware가 뭔지도 도커가 뭔지도 모를 거라 확신했지만) vmware player라는 좋은 툴이 있으니 교육 쪽에 계시는 분들은 pyCharm 이 부담스러우시면 vmware에 우분투 설치하시고 환경 세팅해도 잘 된다는 말을 하고 싶다. 나 같은 경우 제대로 된 머신러닝 플랫폼을 만드는데 우분투는 2번의 전체 삭제가 있었다. 늘 그렇지만 설치 순서가 중요하다는 dying message를 남겨본다.

 

TMI

브런치 하며 조회수 십만이 넘는 게시글도 지워본 경험이 있다. 구독자들은 알겠지만 쓰고 얼마 안 되어 지운 글도 많다. 물론, 다른 작품 활동도 많이 하기에. 그럴 때마다 느끼는 것은 정말 IT 분야만큼은 내가 생각한 대로 돌아간다는 것을 느낀다. 그만큼 나와 같은 생각을 하며 함께 호흡하는 개발자 수가 많다는 것을 느낀다. pyCharm에 돈 쓰는 것을 아끼지 말자. 그리고 그 돈을 벌기 위해 제대로 된 직장을 찾자.

 

그래서 유튜브 채널 하나 소개한다. 난 단지 구독자일 뿐이지만, 이 채널은 대한민국에서 300만은 가야 무식한 애들이 보스, 리더를 자칭하는 경우는 없어질 것이라 본다.

 

https://www.youtube.com/watch?v=gtSW1dWevgg

 

희생당한 많은 내부자들과 일전의 꿀위키,

그리고 한국에서 개발자의 고혈로 이제 정말 일하는 사람이

대접받을 수 있는 문화를 만들 시기가 왔다. 그런 대접을 할 수 있는 리더가 성공하는 시대가 왔다.

이런 시기에 나온 제대로 된 채널이니 모두 함께 힘을 실어 주자.

 

020-03-22 04:38:34.989962: I tensorflow/core/platform/cpu_feature_guard.cc:145] This TensorFlow binary is optimized with Intel(R) MKL-DNN to use the following CPU instructions in performance critical operations:  SSE4.1 SSE4.2 AVX AVX2 AVX512F FMA
To enable them in non-MKL-DNN operations, rebuild TensorFlow with the appropriate compiler flags.
2020-03-22 04:38:34.990447: I tensorflow/core/common_runtime/process_util.cc:115] Creating new thread pool with default inter op setting: 16. Tune using inter_op_parallelism_threads for best performance.

 

멘토링하는 학생들에게 말하는 투로 적어 보려고 한다. 환경 세팅은 더 이상 말로 하기 싫으니 정리 하는 것이라 ㅠㅠ. 여러 환경 지원으로 linux에 깔린 VMWARE로 배포하다가 문제는 환경이 아니라 join 되는 사람들의 플랫폼과 다양한 방식이 문제라는 것을 알고 난 그냥 하나로 통일해서 말하기로 했다. 내가 쓰는 MAC.

 

 

https://www.anaconda.com/distribution/#download-section

Anaconda Python/R Distribution - Free Download

Anaconda Distribution is the world's most popular Python data science platform. Download the free version to access over 1500 data science packages and manage libraries and dependencies with Conda.

www.anaconda.com

 

Anaconda Individual Edition The World's Most Popular Python/R Data Science Platform Download 버전을 설치한다.

 

이 후 PATH 설정을 한다.

echo "export PATH=\$PATH:$(pwd)" >> ~/.bashrc

 

iTERM을 쓰는 사람은 다음과 같이

echo "export PATH=\$PATH:$(pwd)" >> ~/.zshrc

 

python 했을 때 여전히 2.7이 뜬다면 

echo $PATH를 해서 

/usr/bin 폴더를 아나콘더 폴더 뒤 쪽으로 보내면

 

 junhoha  ~  source ~/.zshrc

 junhoha  ~  python

Python 3.7.6 (default, Jan  8 2020, 13:42:34)

[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin

Type "help", "copyright", "credits" or "license" for more information.

 

3.7 버전이 먼저 실행되게 된다.

 

gpu 버전 패키지 인스톨을 위해 3.8 버전으로 올려주자.

conda install -c anaconda python=3.8

 

 

 

ANACONDA NAVIGATOR 에서 Environmenets 메뉴의 Update Index... 이 후 tensorflow 로 검색하면

케라스 포함 여러 텐서플로우 관련 패키지가 있다. tensorflow-base 를 선택하면 의존성 체크해서 다른 패키지도 함께 깔아준다. 설치 후 tensorboard를 검색하면 1개 있는데 설치 해 준다.

 

 

junhoha  ~  python

Python 3.7.6 (default, Jan  8 2020, 13:42:34)

[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import tensorflow as tf

 

파이썬에서 텐서가 돌아간다.

 

 

'Blog History' 카테고리의 다른 글

122  (0) 2020.03.22
121  (0) 2020.03.22
119  (0) 2020.03.21
118  (0) 2020.03.21
117  (0) 2020.03.21

정말 오랜만에 매거진을 만들고 시리즈를 시작하게 되었다.

 

길을 걸으며 목적지까지 가다,

그 길에 여러 개의 신호등이 존재한다고 하자. 그리고 한 번은 다른 쪽 보행 도로로 넘어가야 할 때, 바로 앞 신호등과 다음 사거리 신호등이 있다면 어떤 신호등을 선택하는 것이 최적의 선택일까?

 

거리가 휘어져 있지 않고 직각이라서 어느 쪽으로 건너더라도 목적지까지의 거리가 같다면, 아마 다음과 같은 여러 생각을 하게 된다.

 

1. 우선 신호 체계와 변환 시각, 현재 신호등 상태, 내 보폭을 고려한 속도 등을 알아야 한다.

2. 바로 앞 신호등이 방금 녹색으로 바뀌었다면 바로 지금 건너는 것이 맞다.

 - 어차피 건너야 할 신호등이기 때문.

3. 바로 앞 신호등이 방금 빨간색으로 바뀌었다면 다음 신호등까지 우선 걷고, 건너는 편이 낫다.

 - 사거리 신호등까지 도착했을 때 신호등 점멸 시간과 내 보폭 등을 고려한 속도와 거리의 상관관계를 분석하기보다. 우선, 사거리까지 걸어가면 직진할 수 있는 신호등을 빨리 만날 수도 있고 길을 건널 신호등을 만날 수도 있기 때문.

4.... 

 

여러 생각을 하지만 세상의 문제는 이처럼 단순하지도 복잡하지도 않다.

 

투입 비용 대 효용가치를 따졌을 때 일일이 계산하고 있는 것 자체가 잘못된 것이기 때문이다. 물론, 개인의 경우 말고 한국 도로의 신호 체계를 따진다면 ROI가 나쁘지 않다. 

 나는 수많은 택시 기사에게서 대로의 신호등 체계가 잘못되었다는 말을 수십 년 간 들었다. 신호 바뀌어서 가면 다음 신호에서 꼭 막히는 지역이 있었다. 꼭 운전을 많이 하시는 택시 기사분들의 말씀을 빌리지 않더라도, 미국에서는 차량 감지 센서가 신호를 열어주는 경험을 했었기에 운전자이기도 한 내가 한국의 특정 도시는 큰 대로변인데도 불구하고 잘못된 신호 체계를 가지고 있음을 아주 쉽게 알 수 있다. 물론, 대로변 신호를 무조건 뚫는 것이 안전과도 직결된 문제라 쉽게 생각하지는 않다. 만약, 그렇다면 홍보를 좀 했으면 하는 생각이기에 분명 무언가 틀렸다고 말할 수는 있다.

 

개인이 길을 걷는 경우

를 다시 생각해 보자. 잘못된 신호등 알고리즘 이야 자명한 사실이라 내가 말할 수 있지만 이제 불혹의 나이에서 "카더라"로 비판을 할 수는 없기에(그 전에도 사실만으로 비판했기에 메이저 뉴스에 나갔으나) 이제 정말 개인적인 예를 들어 보려고 한다. Decision Science는 적어도 사람이 판단하는 것보다는 나은 판단을 해야 하는데 내가 신호등을 지금 건너는 게 맞는지 인공지능(Ok google이나 hey siri)에게 물었을 때 과연 신호등을 건너는 것에 대한 판단을 인공지능이 제대로 내려 줄 수 있을까?라는 것에 의문을 던져 본다.

 

우선은, 아니다.

 

라는 결론을 내어 본다. 나는 하루의 대부분을 사무실에서 햇볕을 쬐지 못하고 지낸다. 대부분 회사 근처에 숙소를 잡는 생활을 해 온 나로서는 신호등 선택으로 시간 몇 분을 줄이는 것은 내 요구사항에 거의 없다고 봐야 한다. 지각해야 한다면, 그냥 지각을 해버리는 나로서는. 아예 0으로 봐도 무방하다. 

 

그래서 적어도 내 기준에서 이 문제에 대해 제대로 된 결정을 내려줄 수 있는 인공 기능이라면, 건물 사이로 햇빛을 받을 수 있는 신호등이라는 새로운 판단 기준이 있어야 한다는 것이다. 

 

이 경우, 내가 이 사실을 알고 알고리즘을 짤 때 변수로 넣으면 그만이겠지만 트레이닝 데이터로 알고리즘을 만들어 내는 AI의 경우 관련 데이터가 없다면 절대 제대로 된 모델이 나올 수 없다. 규칙이 명확하고 단순한 문제들은 스스로 길을 찾기도 하지만 현실 문제를 풀기에는 부족하고 그 모든 정보 해결에 대한 모델을 합치기에는 하드웨어가 부족하다. 양자 컴퓨터가 나와도 어느 정도는 의사 결정을 내려 주겠으나 내 삶에 대한 포괄적인 결정을 내려주기에는 부족해 보인다.

 

​그런 점에서 Decision Science가 매력적으로 보인다. 사람의 거짓말 정도는 조금 줄여 줄 수 있을 것 같다.

 

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

 

이제 정리를 좀 할 여유가 생겨, 브런치에 글을 다시 시작하게 되었다. 브런치나 티스토리나 둘 다 카카오 산하에 있고, 연속적인 내 기록은 티스토리가 우선이기에 해당 글도 옮겨서 심어 본다. 

'Blog History' 카테고리의 다른 글

121  (0) 2020.03.22
120  (0) 2020.03.22
118  (0) 2020.03.21
117  (0) 2020.03.21
116  (0) 2020.03.19

Using TensorFlow backend.
The default version of TensorFlow in Colab will soon switch to TensorFlow 2.x.
We recommend you upgrade now or ensure your notebook will continue to use TensorFlow 1.x via the %tensorflow_version 1.x magic: more info.



1

윤지오 페이지는 페북에 없어서 운영하게 되었고, 공식 페이지가 아니라고 하일라이트를 걸었다. 사실, 난 15000명 넘는 페이지도 운영하는데 딱히 쓸게 없어서 쓰지 않는다.(개발 페이지라) 윤지오 페이지는 지금 현재 400명 정도 [좋아요]가 있는데, 처음부터 내가 보고 관심이 있고, 보고 싶은 링크를 저장해 둘 목적. 그리고 윤지오씨 본인이 아닌 다른 사람들도 스스로 움직이는 에코 시스템을 만들고 있다는 취지하에 시작하게 되었다. 물론, 언제든 달라고 하면 줄 요량으로.

 

2

윤지오씨는 현재 후원 계좌도 닫혀있고, 아프리카 방송을 통해서 생존 신고를 하고 있다. 아프리카 TV는 동접수가 나오는데 그리 많은 사람들이 보고 있지는

않은 듯 하다. 페이지 응원글도 다 올리지는 않았지만 어느 정도 선에서 멈췄다. 공식 인스타그램을 보면 악플러들도 점차 나오는 것 같다. 악플러의 논리도 어느 정도 있긴하다. 13번째 책은 yes24 집계만 9만원 가량이라 현재 10만권은 넘긴 것 같다. 개인 계좌 후원을 받지 않아서 따로 방송을 하는 것도 그렇고. 해외에서 숨어 지냈다고 하는데 해당 영상을 보면 딱히 숨어 지낸 것 같아 보이지 않는 다는 것이 그 논리.

 

우선, 윤지오씨도 적극적으로 해명을 하지만 책도 내고 여러 프로젝트를 진행했던 사람으로 몇가지 짚어볼 수 있을 것 같다.

 

3

 

인세의 경우 최소10%를 잡고 출판사 재량에 따라 %가 올락는데 일정 부수 이상이면 %가 더 올라간다. 우리나라에 책 내는 사람이 워낙 많고 인터넷에서 쉽게 찾을 수 있어, 이 부분은 굳이 말 안해도 알 것 같다. 10만권 이면 1억이 넘는 돈인데 개인 신변 보호를 위해 쓴 경호비와 수입없이 개인 경비로 처리해야 하는 부분등을 고려하면 책이 어떻게 될지도 모르는 상황이었다. 책을 낸 이유는 간단할 것 같다. 출판물에 의한 명예훼손은 우발적으로 말하는 것에 비해 보호된다고 보는 것이 옳다. 나 역시 같은 논리로 책을 내었었다. 물론, 시중에 출판하지는 못했으나 모금을 했고 모금했던 사람에게만 보냈다. 나같은 경우 일체의 경비를 모두 공개하고 수익금은 모두 함께하는 사랑밭에 기부하기로 했었는데, 사람인에서 함께하는 사랑밭에서 나를 조사하고 6만원 기부에 인세도 2만 미만이 들어오고 또 주변에서 60% 운영비로 쓰여지니 직접 찾아서 돕는게 낫다고 하여 충분히 알려진 다음에는 기부를 끊었다. 운영 내역을 공개하던 카페에 사람도 오지 않아서 이렇게 통합된 블로그에 올려야지 하고 카페 업데이트도 안하고 있다. 나 같은 경우 계속 살아가야 한다. 사람과 관계도 있고, 출판사 관계자도 내 프로젝트를 보기 때문에 인세가 겁나 많이 들어오는데 기부 내역을 공개 안하면 이상하게 생각할 것이다. 그런데 그 금액이 일정 수준 이하가 되니까 공개하기가 꺼려졌다. 부끄러움보다는 귀찮은게 더 크다.

 

윤지오씨도 같은 생각일 것이다. 신경 쓸 곳이 한두 군데가 아닌데 모든 부분에 신경 쓸 수가 없는 상태에 이미 사람들에게 알려질 대로 알려졌는데 그 사람들 중에는 금융 담당자도 있을 것이고, 인세 담당 출판사 직원이나 국세청 직원도 있을 것인데 굳이 그런 것을 위해서 제보를 했다? 그러기에는 윤지오씨가 너무도 똑똑하고 잃을게 너무 많다.

 

그리고 만약 윤지오씨가 책 팔 요량으로 했다고 해도 100만부가 팔려서 그녀가 10억을 번다고 해도 우리에게는 좋은 일이다. 왜냐면 대한민국에서 썩은 뿌리 하나를 솎아 낼 수 있으니까. 100만부까지는 힘들겠지만 국민청원처럼 64만은 넘었으면 한다.

 

4

그리고 이 글을 쓰는 나는 착한 사람이라기 보다 나쁜 사람에 가깝다. 나는 누구에게나 나쁜 친구이고 싶다. 순수한 사람이 아니라 세속적인 것을 너무 잘 알아서 오히려 도움이 되는 나쁜 친구 말이다. 이런 내 철학을 base로 논리 없는 말을 해보면, 그녀는 너무나 순수하다. 경호나 후원을 열었다가 닫는 것이나 방송이나... 말이다.

한가지 확실히 말할 수 있는 것은 내 책 비화처럼 아무도 믿지 말라는 것이다. 그리고 최종적으로 얻는 것은 결국 자신에 대한 뿌듯함일 것이라는 것. 그리고 해외에 오래 있어서 모를 수도 있지만 우리나라 누구 죽이고 그런 문화 많이 사라졌다. 나 역시 건설업자를 알고 있어 국내 조폭이나 연결연결 되면 러시아 마피아 두목 샬렘까지도 연결될 수도 있지만 많이 사라졌다. 희안하게 이희진 사건이 터지는 바람에 확실하게 말할 수는 없으니 할 수 있는 최선은 다했으면 한다.

 

5

나에게 있어 윤지오란 이름은 대한민국에서 권력형 성폭행범, 나아가서 모든 성폭행범과 싸우는 거룩한 이름이 같다. 나도 역시 남자라 무서워 해야 하는 이름. 무서우면서 숭배해야 하는 대표적 이름이다. 장자연 사건... 묻히진 않을 같다. 추가 증언자가 많이 나오길 바라는 마음이다.



https://www.facebook.com/윤지오-2380219195534504/


https://m.search.naver.com/search.naver?query=%EC%9E%A5%EC%9E%90%EC%97%B0+%ED%95%84%EC%A0%81&where=m&sm=mob_hty.idx&qdt=1

 

 

 

 

 

 

참 멋진 사람인 것 같다. 나도 고발을 했던 사람으로 심정도 어느 정도는 이해가 되고.

 

 

응원하는 사람이 정말 많다는 것을 꼭 알아 주었으면 해서 페이지를 하나 개설했다.

 

오해할 수 있으니

 

여기는 윤지오 씨가 직접 운영하는 페이지가 아님을 미리 밝혀 둡니다. 독립투사 같은 그녀와 관련된 내용을 담아두는 페이지입니다.

최상단에 이런 글을 걸고,

https://www.youtube.com/watch?v=gS_KHy4akx8

https://www1.president.go.kr/petitions/151430

https://www1.president.go.kr/petitions/553263?fbclid=IwAR2eccq63F7m4jb49EalviSPUsCxoabErh6HiNuNQ28kpw7vLQOcoGCs-v4

관련링크 달고

 

 

 

 

클리앙 사진도 걸고

 

 

광고도 시작함

 

https://research.google.com/colaboratory/local-runtimes.html

 

Colaboratory – Google

Colaboratory 로컬 런타임 Colaboratory를 사용하면 Jupyter를 통해 로컬 런타임에 연결할 수 있습니다. 이렇게 하면 로컬 하드웨어에서 코드를 실행하고 로컬 파일 시스템에 액세스할 수 있습니다. 보안 고려사항 실행하기 전에 신뢰하는 사람이 만든 노트인지 확인하세요. 로컬 연결을 사용하면 실행한 코드가 컴퓨터의 파일을 읽고, 쓰고, 삭제할 수 있습니다. 로컬 머신에서 실행되는 Jupyter 노트 서버에 연결하면 좋은 점이 많지만 잠재적

research.google.com

 

Colaboratory

로컬 런타임

Colaboratory를 사용하면 Jupyter를 통해 로컬 런타임에 연결할 수 있습니다. 이렇게 하면 로컬 하드웨어에서 코드를 실행하고 로컬 파일 시스템에 액세스할 수 있습니다.

보안 고려사항

실행하기 전에 신뢰하는 사람이 만든 노트인지 확인하세요. 로컬 연결을 사용하면 실행한 코드가 컴퓨터의 파일을 읽고, 쓰고, 삭제할 수 있습니다.

로컬 머신에서 실행되는 Jupyter 노트 서버에 연결하면 좋은 점이 많지만 잠재적인 위험도 큽니다. 로컬 런타임에 연결하면 Colaboratory 프런트엔드가 컴퓨터의 로컬 리소스를 사용하여 노트의 코드를 실행할 수 있게 됩니다. 따라서 노트가 다음 작업을 실행할 수 있습니다.

  • 임의의 명령 호출(예: 'rm -rf /')
  • 로컬 파일 시스템에 액세스
  • 컴퓨터에서 악성 콘텐츠 실행

로컬 런타임에 연결하기 전에 노트 작성자를 신뢰할 수 있는지, 어떤 코드가 실행되고 있는지 확인하세요. Jupyter 문서에서 Jupyter 노트 서버의 보안 모델에 관해 자세히 알아볼 수 있습니다.

설정 안내

Colaboratory가 로컬에서 실행되는 Jupyter 서버에 연결하도록 허용하려면 다음 단계를 따르세요.

1단계: Jupyter 설치

로컬 머신에 Jupyter를 설치합니다.

2단계: jupyter_http_over_ws jupyter 확장 프로그램 설치 및 사용 설정(처음 한 번만 실행)

Colaboratory팀에서 만든 jupyter_http_over_ws 확장 프로그램은 GitHub에서 찾아볼 수 있습니다.

pip install jupyter_http_over_ws jupyter serverextension enable --py jupyter_http_over_ws

3단계: 서버 시작 및 인증

새로운 노트 서버가 정상적으로 시작됩니다. 하지만 Colaboratory 프런트엔드의 WebSocket 연결을 명시적으로 신뢰하려면 플래그를 설정해야 합니다.

jupyter notebook \ --NotebookApp.allow_origin='https://colab.research.google.com' \ --port=8888 \ --NotebookApp.port_retries=0

서버가 시작되면 인증에 사용된 초기 백엔드 URL과 함께 메시지가 인쇄됩니다. 다음 단계에서 입력해야 하므로 이 URL을 다른 위치에 저장해 두세요.

4단계: 로컬 런타임에 연결

Colaboratory에서 '연결' 버튼을 클릭하고 '로컬 런타임에 연결...'을 선택합니다. 대화상자가 표시되면 이전 단계에서 저장한 URL을 입력하고 '연결' 버튼을 클릭합니다. 그러면 로컬 런타임에 연결됩니다.

브라우저별 설정

참고: Mozilla Firefox를 사용 중이라면 Firefox 설정 편집기에서 network.websocket.allowInsecureFromHTTPS 환경설정을 지정해야 합니다. Colaboratory는 WebSocket을 사용하여 로컬 커널에 연결합니다. Firefox는 기본적으로 표준 WebSocket을 사용한 HTTPS 도메인의 연결을 허용하지 않습니다.

공유

다른 사용자와 노트를 공유해도 로컬 머신의 런타임은 공유되지 않습니다. 다른 사용자가 공유된 노트를 열면 기본적으로 표준 클라우드 런타임에 연결됩니다.

기본적으로 모든 코드 셀 출력은 Google 드라이브에 저장됩니다. 로컬 연결에서 민감한 정보에 액세스할 때 코드 셀 출력을 생략하려면 수정 > 노트 설정 > 이 노트를 저장할 때 코드 셀 출력 생략을 선택하세요.

제거

다음을 실행하여 jupyter_http_over_ws jupyter 확장 프로그램을 사용 중지하고 삭제할 수 있습니다.

jupyter serverextension disable --py jupyter_http_over_ws pip uninstall jupyter_http_over_ws

Google Compute Engine 인스턴스에서 런타임에 연결

연결하려는 Jupyter 노트 서버가 다른 가상 머신(예: Google Compute Engine 인스턴스)에서 실행 중인 경우 Colaboratory에서 이 서버에 연결할 수 있도록 SSH 로컬 포트 전달을 설정할 수 있습니다.

참고: Google Cloud Platform은 Colaboratory 로컬 백엔드 지원 기능이 사전 설정된 딥 러닝 VM 이미지를 제공합니다. 사용 가이드를 따라 로컬 SSH 포트 전달을 통해 Google Compute Engine 인스턴스를 설정하세요. 이 이미지를 사용한다면 '4단계: 로컬 런타임에 연결(포트 8888 사용)'로 바로 건너뛰시기 바랍니다.

먼저 위의 안내에 따라 Jupyter 노트 서버를 설정합니다.

그런 다음 로컬 머신에서 원격 인스턴스(예: Google Compute Engine 인스턴스)로 SSH 연결을 구성하고 '-L' 플래그를 지정합니다. 예를 들어 로컬 머신의 포트 8888을 Google Compute Engine 인스턴스의 포트 8888로 전달하려면 다음을 실행하세요.

gcloud compute ssh --zone YOUR_ZONE YOUR_INSTANCE_NAME -- -L 8888:localhost:8888

마지막으로, 전달된 포트에 연결하여 Colaboratory 내에서 연결을 설정하세요('4단계: 로컬 런타임에 연결'의 동일한 안내 참조).

 

 

Prime Number

 

 

아틀레 셀베르크

https://ko.wikipedia.org/wiki/%EC%95%84%ED%8B%80%EB%A0%88_%EC%85%80%EB%B2%A0%EB%A5%B4%EA%B7%B8

소수 정리

https://ko.wikipedia.org/wiki/%EC%86%8C%EC%88%98_%EC%A0%95%EB%A6%AC

라마누잔

https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A6%AC%EB%8B%88%EB%B0%94%EC%82%AC_%EB%9D%BC%EB%A7%88%EB%88%84%EC%9E%94

 

https://wiki.mathnt.net/index.php?title=%EB%9D%BC%EB%A7%88%EB%88%84%EC%9E%94(1887-_1920)

다비드힐베르트

https://ko.wikipedia.org/wiki/%EB%8B%A4%EB%B9%84%ED%8A%B8_%ED%9E%90%EB%B2%A0%EB%A5%B4%ED%8A%B8

베른하르트 리만

https://ko.wikipedia.org/wiki/%EB%B2%A0%EB%A5%B8%ED%95%98%EB%A5%B4%ED%8A%B8_%EB%A6%AC%EB%A7%8C

카를 프리드리히 가우스

https://ko.wikipedia.org/wiki/%EC%B9%B4%EB%A5%BC_%ED%94%84%EB%A6%AC%EB%93%9C%EB%A6%AC%ED%9E%88_%EA%B0%80%EC%9A%B0%EC%8A%A4

https://www.instagram.com/ha_jun_ho/

 

 

[UIProgressView setProgress:animated:] must be used from main thread only

'Blog History' 카테고리의 다른 글

120  (0) 2020.03.22
119  (0) 2020.03.21
117  (0) 2020.03.21
116  (0) 2020.03.19
115  (0) 2020.03.19

deleting the codes below.


//    UIButton *btnCL = [cell.contentView.subviews objectAtIndex:4];
//    [btnCL setSelected:data.isCheck];

//- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//    return UITableViewAutomaticDimension;
//}
//
//- (CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
//    return 150.0f;
//}

   //            UITextField *resn = [alertView textFieldAtIndex:0];
    //            nm = resn.text;
    //
    //            /*
    //            NSString *sss = [cd stringByAppendingString:nm];
    //            [GlobalVar alertMsgOKWithTitle:@"mBASS" message:sss];
    //            return;
    //            */
    //
    //            SqlUtils *db = [[SqlUtils alloc] init];
    //            NSMutableArray *arr = [NSMutableArray arrayWithCapacity:0];
    //
    //            // 재접수정보 저장
    //            for (int i=0; i<[mList count]; i++) {
    //                DFCT_LIST *data = [mList objectAtIndex:i];
    //
    //                if (YES == data.isCheck && YES == [data.cd_hndl_stat isEqualToString:@"E"]) {
    //                    // 체크된거만 재접수 사유 저장
    //                    data.cd_hndl_stat = @"B";
    //
    //                    //[db updateDfct:data.id_mbil reRcptResnCd:cd nm:nm];
    //
    //                    [arr addObject:data];
    //                }
    //
    //                data.isCheck = NO;
    //            }
    //
    //            [db updateDfctArr:arr reRcptResnCd:cd nm:nm];
    //
    //            [mChkAll setSelected:NO];
    //            [self checkAllList:NO];
    //
    //            [mTableView reloadData];
    // }
    // }

// 체크된거만 재접수 사유 저장
                    //[db updateDfct:data.id_mbil reRcptResnCd:cd nm:nm];


            // 재접수정보 저장
            /*
             NSString *sss = [cd stringByAppendingString:nm];
             [GlobalVar alertMsgOKWithTitle:@"mBASS" message:sss];
             return;
             */

// 리턴값 받기 위한 델리게이트
//    v.mDongCd = mDongCd;


//    [mlblStatstics setText:[NSString stringWithFormat:@" 전체:%d건| 접수:%d건|처리:%d건|완료:%d건", total, b, e, d]];

//    NSString *prev_handleStaement = [NSString stringWithFormat:@"%@", mDfct.cd_hndl_stat];
//    otherVCparams[@"cd_stat_prev"] = prev_handleStaement;
//         [otherVCparams setObject:prev_handleStaement forKey:@"cd_stat_prev"];


 
//    NSString *prev_handleStaement = [NSString stringWithFormat:@"%@", mDfct.cd_hndl_stat];
//          [param setObject:prev_handleStaement forKey:@"cd_stat_prev"];
//    otherVCparams = [param copy];
    



    //    if (YES == isAll) {
    //        DDTBT_DONG *data = [[DDTBT_DONG alloc] init];
    //        data.nm_dong = @"전체";
    //
    //        [array addObject:data];
    //    }
    // Open the database from the users filessytem
        // Setup the SQL Statement and compile it for faster access
        

//    NSLog(@"%@", data.cd_loc_clsf);


//    NSLog(@"[cell.contentView.subviews count] = %lu", (unsigned long)[cell.contentView.subviews count]);
    

//
//                    NSLog(@"edtgSelectDfct data.seq_nipt %@", data.seq_nipt);
//                } @catch (NSException *exception) {
//
//                } @finally {
//
//                }



//        if( YES == [mDfct.cd_hndl_stat isEqualToString:@"E"]) {
//            [mBtnVrChk setTitle:@"완료" forState: normal];
//        } else if ( YES == [mDfct.cd_hndl_stat isEqualToString:@"X"]) {
//            [mBtnVrChk setTitle:@"완료취소" forState: normal];
//        }


//        NSString *timberland = [NSString stringWithFormat:@"%@ // %@", mDfct.nm_dfct_ctyp, channel.nm_cpny];

        // 공종,원인,구분
        //        DFCT_LIST *channel = [[DFCT_LIST alloc] init];
        //        NSString *t = [NSString stringWithFormat:@"%d", mDfct.id_rgon];
        //        channel =[db hjhSelectDefect_Qota:mDfct.cd_dong rgon:t][0];


//    SqlUtils *db = [[SqlUtils alloc] init];
//    NSString *cdHandle = [db c8SelectCurrentHandleStatement:mDfct.id_mbil];
//    NSLog(@"cd Handle = %@", cdHandle);
    


The application's Info.plist does not contain CFBundleShortVersionString.
Ensure your bundle contains a CFBundleShortVersionString.


Application windows are expected to have a root view controller at the end of application launch


*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navigationController.'

NSInternalInconsistencyException

 Compiling IB documents for earlier than iOS 7 is no longer supported. [12]


'UIAlertView' is deprecated: first deprecated in iOS 9.0 - UIAlertView is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerStyleAlert instead



//    [myAlertController popoverPresentationController];
//    [alert show];
//    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:message delegate:nil cancelButtonTitle:@"확인" otherButtonTitles:nil];

    
//                  [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01f]];
    


//    [window.rootViewController presentViewController:myAlertController animated:YES completion:nil];
//    dispatch_async(dispatch_get_main_queue(), ^{
//
//              });
//
//    double delayInSeconds = 2.0;
//    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
//    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//      NSLog(@"Do some work");
//    });
    //

//    while (myAlertController.view.hidden == NO)
    

//    if (YES == isWait) {
        //버튼 누르기전까지 지연.
          
//    }

python 에찬

try:
  # %tensorflow_version only exists in Colab.
  %tensorflow_version 2.x
except Exception:
  pass

    @try {
        [mTableViewDong selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionMiddle];
        
    } @catch (NSException *exception) {
        [self.navigationController popViewControllerAnimated:NO];
    } @finally {
        
    }


try{
    //에러가 발생할 수 있는 코드
    throw new Exception(); //강제 에러 출력 
}catch (Exception e){
    //에러시 수행
     e.printStackTrace(); //오류 출력(방법은 여러가지)
     throw e; //최상위 클래스가 아니라면 무조건 던져주자
}finally{
    //무조건 수행


코드가 간결하다. 
built-in 예외는

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning


'Blog History' 카테고리의 다른 글

119  (0) 2020.03.21
118  (0) 2020.03.21
116  (0) 2020.03.19
115  (0) 2020.03.19
MAC 개발자가 추천 하는 애플리케이션 - 1  (0) 2020.03.17

+ Recent posts