일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 개발
- graph
- Storyboard
- Chrats
- Xcode
- UITableView
- cocoapods
- 어플리케이션
- Chart
- Python
- 개발자
- TableView
- ui
- library
- alamofire
- UIKit
- ios
- 라이브러리
- button
- 그래프
- Android
- modal
- charts
- UIButton
- kotlin
- PyQt
- Swift
- Apple
- PyQt5
- androidstudio
- Today
- Total
목록다른 개발 (40)
Jiwift
오늘은 깃 허브 오픈소스를 기여하는 방법을 알아보도록 하겠습니다. 제가 이걸 하게 된 이유는,,, 기다리는 게 답답하고 내가 기여를 하면서 다른 사람들에게 의견을 들어볼 수도 있기 때문입니다. 우선 기여하고 싶은 오픈소스 깃허브를 찾아갑니다. 여기에 들어가면 Issue와 Pull Requests(PR)들을 볼 수 있습니다. 이슈를 직접 해결하거나 내가 원하는 기능을 추가해서 PR 하게 되면 오픈소스의 Contributor가 될 수 있는 것입니다. 1. 라이브러리 Fork 2. 라이브러리 수정 + Push 3. 라이브러리 PR 단계는 크게 3단계로 생각할 수 있습니다. 이것만 알아도 깃허브를 사용하시는 분들은 이미 어떻게 해야 하는지 감이 오실 겁니다. 그래도 한번 작성하도록 하겠습니다. 캡처된 사진은 서..
아주 간단하게 javascript를 통해서 띄우는 방법입니다. 각각 환경에 맞게 변경이 필요할 것 같습니다. 위 코드를 사용하면 무조건 버튼이 하나 생성되게 됩니다. 그리고 웹페이지가 열리게되는데, 부족한 부분이 있으면 에러 코드가 발생합니다. index.html 파일 하나 생성해서 안에 코드를 붙여넣고 실행해보세요. appleid-signin-client-id 로그인 서비스를 위해 생성된 Service Identifier를 입력해야합니다. 애플 개발자 ID가 필요하며 개발자 센터에서 가능합니다. appleid-signin-scope 요청할 Scope 이름(name)과 이메일(email). 띄어쓰기를 기준으로 구별하며 필요한 것만 입력하고, 둘다 필요하면 위 코드 예제처럼 "name email"하면 됩니..
해당글은 iOS를 위한 글입니다. 서비스에서 주소 검색이 필요한 경우에 사용하기 좋은 무료 API를 소개합니다. 다음에서 제공해 주는 API를 사용하면 쉽게 웹과 앱에서 주소 검색 기능을 구현할 수 있습니다. Key를 발급받을 필요가 없습니다. 사용량에 대한 제한이 없습니다. 기업용이든 상업적 용도이든 상관없이 무료로 사용 가능합니다. 기초구역번호가 발급된 도로명 주소, 영문 주소를 확인 가능합니다. 행정안전부에서 제공하는 "도로명 주소" DB를 직접 업데이트받고 있으므로 가장 최신의 데이터를 이용하실 수 있습니다. 위에 설명만 봐도 너무나도 좋은 API란 것을 알 수 있습니다. 로고를 가리지 않고 사용한다면 문제가 생기지 않는다고 합니다. Daum Postcode Service User Guide Da..
[Node] FCM Topic(주제)을 이용한 Push Notification 메세지 전송 노드는 하나도 모릅니다. Chat GPT를 통해서 테스트한 내용을 나중에 필요한 상황에 사용하려고 작성합니다. 일단 왜 내가 Node를 통해서 테스트를해야하는지 설명하자면.. 지금 하는 프로젝트 서버팀에서 FCM 메세지를 보내주는데, 서버에서 받은 내용을 토대로 파싱해 알림 제목과 내용을 만들어 뿌려야한다. 왜냐하면?? 서버에서 내려주는 알림에는 title과 body가 없기 때문이다. 여기서 문제는 iOS에서 푸시를 받으면 title과 body를 자동으로 읽어서 사용자에게 보여주는 것으로 알고있다. 그럼 어떻게 중간 단계에서 파싱을하지? 아니.. 앱이 실행중이지 않다면 불가능한게 아닌가?? 라는 생각이 들었다. 반..
[Python] FCM Topic(주제)을 이용한 Push Notification 메세지 전송 Push Notification을 받을 수 있는 웹, 앱 환경이 필요합니다. 순서 1. 비공개 키 생성 2. 라이브러리 설치 3. 코드 작성 4. 실행 파이어베이스 프로젝트 설정에 들어갑니다. [서비스 계정 -> Python -> 새 비공개 키 생성]을 순서대로 눌러줍니다. 그럼 json 파일을 하나 다운을 받을겁니다. Python 파일과 비공개 키 json 파일을 원하는 위치에 준비시킵니다. pip install firebase_admin python 필요 라이브러리를 설치해줍니다. import firebase_admin from firebase_admin import credentials from fireb..
[Python] FCM Token을 이용한 Push Notification 메세지 전송 Push Notification을 받을 수 있는 웹, 앱 환경이 필요합니다. 순서 1. 비공개 키 생성 2. 라이브러리 설치 3. 코드 작성 4. 실행 파이어베이스 프로젝트 설정에 들어갑니다. [서비스 계정 -> Python -> 새 비공개 키 생성]을 순서대로 눌러줍니다. 그럼 json 파일을 하나 다운을 받을겁니다. Python 파일과 json 파일을 원하는 위치에 준비시킵니다. pip install firebase_admin python 필요 라이브러리를 설치해줍니다. import firebase_admin from firebase_admin import credentials from firebase_admin ..
RBPN - Recurrent Back-Projection Network for video Super-Resolution Recurrent Back-Projection Network for video Super-Resolution 논문 이해한대로 정리하기 저자 : Muhammad Haris, Greg Shakhnarovich, Norimichi Ukita 공개 : CVPR2019 논문 : rbpn_cvpr2019.pdf (alterzero.github.io) Abstract 우리는 순환적인 인코더-디코더 모듈을 사용하여 연속적인 영상 프레임으로부터 spatial(공간) context와 temporal(시간적) context를 통합한다. 이 문장에서 시간적과 공간적은 처음에는 이해가 잘 가지 않았다. 하지..
1. PyTest 설치 pip install -U pytest 2. PyTest 버전 확인 pytest --version 3. 기본 사용 3-1. 폴더 구성 . ├── PyTestdir/ ├── test_one.py 테스트 폴더 한 개와 테스트를 하기 위한 파이썬 코드를 작성 코드를 작성할 때 이름은 test_code.py, code_test.py 와 같이 언더바를 앞 뒤 기준으로 test 글씨를 넣어준다. 3-2. 테스트 생성 class TestClass: def test_first(self): assert 0 def test_second(self): a = 3 + 5 assert a == 8 def test_third(self): assert 1 class와 def는 Test_이름, Test이름과 같..
[Android/Kotlin] ImageView 모서리 둥글게 만들기 이쁜 디자인을 위해서 ImageView를 둥글게 만들어 보겠습니다. 뭐든 방법은 다양하고 정답은 없습니다. 아이디가 각각 test01, test02, test03인 ImageView가 존재합니다. 프로젝트에서 drawable - new - Drawable Resource File 을 클릭합니다. imageraius라는 이름으로 shape를 생성합니다. (radius라고 쓰려다 오타남) 생성한 drawable에 다음과 같이 입력해줍니다. private val test001: ImageView by lazy { findViewById(R.id.test01) } private val test002: ImageView by lazy { fin..
[Android/Kotlin] View 모서리 둥글게 만들기 / round 처리 / 곡선 shape 어플리케이션을 만들다 보면 곡선이 필요한 경우가 생긴다. 처음에는 파워포인트와 같이 도형 기능 같은 것을 지원 할 줄 알았다. 하지만 그정도로 친절하지는 않아서 직접 만들어야 한다고 한다. 방법은 간단하다. 원하는 View를 만들고 그 배경을 둥근 그림을 넣어주면 끝이다. 처음에 검색으로 찾아 볼 때에는 View에 적용하려는 생각이었지만 Layout에도 적용이 가능하다. 네모난 ContraintLayout과 View를 둥근 모서리로 만들어 줄 것이다. 프로젝트에서 drawable - new - Drawable Resource File 클릭 shape를 하나 생성해준다. test라는 이름으로 생성했다. 생성..
[Android/Kotlin] Toast Message 출력하기 / 알림 메시지 안드로이드 어플을 사용하다 보면 첫 화면에서 뒤로 가기를 눌렀을 때, "뒤로 가기를 한 번 더 누르면 앱이 종료됩니다." 같은 짧은 메시지를 유저에게 노출시킨 후 일정 시간이 지나면 사라지는 팝업이다. 사용방법은 간단하다. val text = "Hello toast!" val duration = Toast.LENGTH_SHORT val toast = Toast.makeText(applicationContext, text, duration) toast.show() Toast 생성하고 원하는 순간에 show를 해주면 간단하게 메세지가 출력되는 것을 확인할 수 있다. 아래와 같이 한줄로 사용해도 된다. Toast.makeText(..
스킨다운로드 에뮬레이터를 사용할 때 해상도와 램 정도만 알아도 사용 가능하지만. 스킨을 적용시켜 좀 더 실제 기기같은 느낌을 주는 테스트를 진행하기 위해서 스킨을 다운로드한다. Using a Galaxy Emulator Skin | Samsung Developers 위의 사이트로 접속 후 원하는 기종을 선택 다운로드 받은 압축을 푼다. Window C:\Program Files\Android\Android Studio\plugins\android\resources\device-art-resources Mac /Users/이름/Library/Android/sdk/Skins 압축을 풀면 각 OS환경을 확인하고 폴더로 옮긴다. Mac은 라이브러리가 숨김 폴더로 기억한다. 그래서 cp 명령어를 사용하면 쉽게 옮..
오픈소스를 이용한 ImageSlider를 구현하기 안드로이드 스튜디오 Arctic Fox 버전을 기준으로 작성 버전 확인 [Android Studio - Help - About] 라이브러리 깃 허브 denzcoskun/ImageSlideshow: Android image slider. (github.com) GitHub - denzcoskun/ImageSlideshow: Android image slider. Android image slider. Contribute to denzcoskun/ImageSlideshow development by creating an account on GitHub. github.com 사용법 유튜브 Image Slider in Android Studio | Kotlin ..
QPushButton{ border-color: rgb(255, 200, 28); border-style : solid; border-width : 5px; border-radius : 30px; } QPushButton:hover{ background-color : rgb(200, 255, 30); border-color : rgb(255, 200, 28); border-style : solid; border-width : 5px; border-radius : 30px; } QPushButton:pressed { background-color : rgb(200, 100, 30); border-color : rgb(255, 200, 28); border-style : solid; border-width ..
QPushButton{ border-color: rgb(255, 200, 28); border-style : solid; border-width : 5px; border-radius : 30px; } QPushButton:hover{ background-color : rgb(200, 255, 30); border-color : rgb(255, 200, 28); border-style : solid; border-width : 5px; border-radius : 30px; } QPushButton:hover와 같이 뒤에 hover를 붙이면 상황에 따라서 다른 디자인을 적용할 수 있다. 마찬가지로 pressed를 추가하면 눌렀을 때 상황도 스타일이 변경된다. 그건 다음 글에서
QPushButton{ border-color: rgb(255, 200, 28); border-style : solid; border-width : 10px } 'border-style : 종류;' 테두리 스타일 설정
QPushButton{ border-color: rgb(255, 134, 28); border-style : solid; border-width : 1px } 'border-width : 1px' 테두리 두께를 설정 가능
QPushButton{ border-color: rgb(255, 200, 28); border-style : solid; border-width : 5px } border-color: rgb(255, 200, 28);, border-color: #FFFFFF; 두 방법으로 테두리 색 지정 가능
QPushButton { color: rgb(255, 211, 76); } 'color'를 사용하면 내용색을 변경할 수 있다.
QPushButton { background-color: #ffffff; } background-color를 사용하면 배경색을 변경할 수 있습니다. 사진은 버튼을 변경한 예시.
위젯 디자인을 적용할 때, 부모와 자식 위젯간의 연관성을 잘 생각해야합니다. 위 사진은 프레임(부모) 속에 버튼(자식)을 넣은 예시이다. 프레임(부모) 위젯에서 단순하게 'background-color: rgb(255, 156, 158);'를 입력하는 상황. 만약 부모 위젯이 가진 속성을 하위 위젯들도 가지고 있다면 부모와 같은 속성이 하위에게도 모두 적용. 위젯마다 스타일을 주면서 나아가면 괜찮지만 혼선이 생길 수 있으니 사전에 어느 위젯에 적용할지 정의하면서 입력하는 것이 좋다. QFrame { background-color: rgb(147, 120, 255); } QPushButton { background-color: rgb(164, 255, 79); } 이렇게 각각 정의를 해주면 중복 적용이 되..
[Python/PyQt] 스타일(Style) 적용 방법 단순하게 적용 방법만을 다룹니다. 방법은 크게 3가지로 나뉩니다. 방법 1 원하는 위젯에서 우클릭 후 'styleSheet 바꾸기' 선택 원하는 스타일 적용 방법 2 오른쪽 속성 창에서 바로 입력 방법 3 self.[위젯 이름].setStyleSheet( "[위젯 종류] {color: white; background-color: rgb(58, 58, 58);}" "[위젯 종류]:[위젯 상황] { background-color:rgb(10, 10, 10); }" ) 소스 코드로 바로 디자인 적용
위와 같이 Qt Designer에서 설정 가능하다. from PyQt5.QtWidgets import QToolTip from PyQt5.QtGui import QFont self.pushButton.setToolTip("버튼입니다. 버튼22 두꺼운 글씨") QToolTip.setFont(QFont('SansSerif', 30)) 코드도 툴 팁 설정이 가능하다.
# 비활성화 self.[위젯 이름].setDisabled(True) # 활성화 self.[위젯 이름].setEnabled(True)
[Python/PyQt] 프레임과 배경을 없애기 # 배경 없애기 self.setAttribute(Qt.WA_TranslucentBackground) # 이전 글에서 배운 프레임 없애기 self.setWindowFlag(Qt.FramelessWindowHint) show() 이전에 넣으면 없어진다.
[Python/PyQt] 프레임 타이틀 바(Title Bar) 없애기 self.setWindowFlag(Qt.FramelessWindowHint) 타이틀 바를 안 보이게 하는 메서드. 타이틀 바가 없어진다기보다는 프로그램의 프레임이 없어진다. 그래서 윈도우에서 제공하는 기본 기능들을 사용할 수 없다. 닫기, 최소화, 최대화, aero snap 등은 직접 구현해야 한다. 찾으면 구현 법은 나온다.
[Python/PyQt] 위젯(Widget)을 배치할 때 레이아웃을 꼭 적용해야 하는 이유 제목은 어떻게 보면 반은 맞고 반은 아닌 이야기이다. 위젯을 배치하고 레이아웃 설정을 해주면 창의 크기가 변경되어도 그 안에 위젯들은 유연하게 변화가 생긴다. 하지만 창의 크기를 조절할 수 없는 프로그램이라면 필수는 아닐 수 있다고 본다.
from PyQt5.QtWidgets import QMessageBox QMessageBox.information(self, "타이틀입니다.", "안녕하세요. information 메세지 입력입니다.") QMessageBox.about(self, "타이틀입니다.", "안녕하세요. about 메세지 입력입니다.") QMessageBox.warning(self, "타이틀입니다.", "안녕하세요. warning 메세지 입력입니다.") QMessageBox.critical(self, "타이틀입니다.", "안녕하세요. critical 메세지 입력입니다.") QMessageBox.question(self, "타이틀입니다.", "안녕하세요. question 메세지 입력입니다.") 메세지를 표현하는 가장 기본
self.[스택위젯 이름].setCurrentIndex(스택 페이지 번호) 스택 페이지를 입력해주면 간단하게 페이지를 이동할 수 있다.
# 위젯 현재 값 self.[슬라이더, 다이얼 위젯 이름].value() # 위젯이 가질 수 있는 가장 작은 값 self.[슬라이더, 다이얼 위젯 이름].minimum() # 위젯이 가질 수 있는 가장 큰 값 self.[슬라이더, 다이얼 위젯 이름].maximum() # 위젯이 한번 움직이거나 방향키를 눌러 이동할 수 있는 최소한의 값 self.[슬라이더, 다이얼 위젯 이름].singleStep() # 위젯이 빠르게, 크게 움직이다면 이동할 수 있는 값 self.[슬라이더, 다이얼 위젯 이름].pageStep() 슬라이더에 설정된 옵션 값들을 받아온다. 설정 값들은 Qt Designer에서도 설정 가능하다. # 위젯이 움직이면 기능 수행 self.[슬라이더, 다이얼 위젯 이름].sliderMoved.co..