[Dev, flutter] 플러터로 iOS 앱 개발 시작하기 (4) - 서버에 이미지 업로드
·
Dev/flutter
이번 시간에는 지난 시간에 이어서 사진을 찍고, 찍은 이미지를 서버에 업로드하는 과정을 해보자. 이전 포스팅의 코드와 거의 유사하므로 참고하면 좋겠다.  [Dev, flutter] 플러터로 iOS 앱 개발 시작하기 (3) - Camera, Gallery이제 본격적으로 인터랙션을 지닌 샘플 앱을 만들어 보자. 먼저 해볼 것은 image picker의 사용이다. 사용을 하기 위해서는 main.dart 파일에서 image picker를 import 하는 것도 중요하지만 그전에 여러 가dusanbaek.tistory.com 시작하기에 앞서 간단한 서버가 필요하다. Flask로 구성해 보자.  먼저 Web이라는 디렉터리를 만들고, 그 안에 uploads 폴더와 app.py 파이썬 파일을 생성한다. uploads ..
[Dev, flutter] 플러터로 iOS 앱 개발 시작하기 (3) - Camera, Gallery
·
Dev/flutter
이제 본격적으로 인터랙션을 지닌 샘플 앱을 만들어 보자. 먼저 해볼 것은 image picker의 사용이다. 사용을 하기 위해서는 main.dart 파일에서 image picker를 import 하는 것도 중요하지만 그전에 여러 가지 설정을 해주어야 한다.  먼저 pubspec.yaml 파일에 image_picker의 dependency를 추가시켜 준다. (1.0.5 버전을 사용하였다.)  이어서 카메라와 갤러리의 접근 권한을 요청하기 위해 info.plist에 해당 코드를 추가해주어야 한다. 해당 파일은  ios/Runner/Info.plist 에 위치해 있다. 이 부분이 안드로이드에서 앱 개발을 할 때와 가장 큰 차이인데, 나도 안드로이드를 안 해봐선 모르겠지만 일단 이 설정을 해주지 않으면 에뮬레이..
[Dev, flutter] 플러터로 iOS 앱 개발 시작하기 (2) - Image
·
Dev/flutter
iOS 개발 환경에서 쓰이는 Launchscreen을 플러터로 구현해 보자. 아마 안드로이드 개발자들에게는 Splash screen이라는 말이 더욱 자연스러울 것이다.  화면 구성을 위해 필요한 그림 파일을 다운 받자.  프로젝트에 assets라는 디렉터리를 추가하고 다운로드한 이미지를 안에 업로드한다.  pubspec.yaml 파일에 들어가 uses-material-design: true라는 코드 밑에 assets 디렉터리를 추가해 준다.  그러면 화면 상단에 팝업이 뜨고 Pub get을 눌러 yaml 파일을 갱신해 준다. import 'package:flutter/cupertino.dart';void main() { runApp( SplashScreen(), );}class SplashScr..
[Dev, flutter] 플러터로 iOS 앱 개발 시작하기 (1) - Widget
·
Dev/flutter
Swift로 네이티브 앱 개발을 주력으로 하다가 팀 프로젝트에서 하이브리드 앱을 만들 필요성이 생겨 그토록 미뤄왔던 flutter를 시작한다. 코드 위주로 작성을 하고, 필요한 개념들만 간단히 정리할 계획이다. 이미 시중에 플러터 관련 코드가 많지만, 내가 찾아보기엔 iOS cupertino design 기반의 예제 코드가 부족해 보여, 기존의 material design 코드를 iOS 느낌으로 전환하는 방식으로 작성해본다. 1. Hello Worldimport 'package:flutter/cupertino.dart';void main() { runApp( CupertinoApp( home: CupertinoPageScaffold( child: Center( ..
[Dev, flutter] 플러터에서 iOS device에 빌드해보기
·
Dev/flutter
아무 생각 없이 실제 iOS Device를 PC에 연결 후 빌드를 하면 다음과 같은 오류를 발견할 수 있다.로그에 찍힌 대로 해당 프로젝트의 경로에 접근해서 flutter create . 명령어를 작성한다.// 해당 경로로 이동하여flutter create .
[SKT FLY AI Challenger] 5기 합격 후기 (서류 / 코딩 테스트 / 면접 / 결과)
·
Life
캠퍼스를 돌아다니다 보면 정말 많은 회사의 정말 많은 부트캠프 공고를 볼 수 있는데, 나로서는 졸업 이후에 진로(진학/취업)를 정하지 못하기도 했고, 또 방학 기간에 활동을 하는 건 공채나 대학원 준비에 영향을 크게 미치지 않을 것 같아 고르고 골라 이 교육과정을 택했다. 서류전형 지원서는 지원 동기, 취업 이력, 자기소개서, 대외활동, 향후 계획 이렇게 총 5개의 항목으로 구성되어 있었으며 각각 글자 수 제한은 500자로, 지난번 모집 때와 같은 것 같다. 각자 내용이 다를 테니 내가 어떻게 작성했던 게 큰 팁이 되진 않을 것 같고, 결과적으로 말하자면 서류전형은 웬만해서는 탈락했다는 사람을 보지 못한 것 같다. (떨어지면 안 올려서 그런가)5월 7일(화)까지 모집을 받았고 서류전형 결과는 5월 13일..
[Algorithm] NP-completeness
·
Computer Science and Engineering/Data Structures and Algorithms
다항 시간 내에 해결이 가능한 polynomial-time algorithm이 있다면 당연히 그렇지 못한 문제들도 있지 않겠는가? 오늘은 컴퓨터공학 전공자라면 반드시 알아야 할 NP problem에 대해 알아보자. NP-completeness 우리가 이때까지 배웠던 거의 대부분의 알고리즘은 다항시간 내에 해결이 가능하다. input size가 n이라면 이 알고리즘의 시간 복잡도는 어떤 상수 k에 대해 $O(n^{k})$라는 소리. 그렇다면 모든 문제들이 다항 시간 내에 해결이 가능한가? 정답은 No (라고 대부분의 사람들이 믿는다.) 대표적인 예로는 튜링의 Halting Problem인데 이는 어떤 컴퓨터로도, 얼마나 오랜 시간을 들이더라도 해결할 수 없다. Turing's halting problem ..
[Algorithm] Greedy
·
Computer Science and Engineering/Data Structures and Algorithms
Greedy algorithms 최적화 문제에서 DP의 방식은 간혹 너무 많은 자원을 낭비하거나 비효율적일 수도 있다. DP는 항상 최적의 경우를 찾아주지만, 꼭 그러한 방식을 따르지 않아도 최적의 경우를 찾는 경우는 상당히 많다. 바로 sub-problem의 문제에 대한 해답이 전체 문제에 대한 해답으로 이어지는 경우인데, 이렇듯 지역적으로 최적화된 선택이 전역적으로도 최선의 선택을 만드는 경우, 또 그 선택들이 항상 순간마다 Best 해 보이는 것을 고르는 경우라면 우리는 이것을 그리디 알고리즘이라고 명명한다. 그리디 알고리즘에는 대표적으로 Minimum-spanning tree와 Dijkstra 알고리즘이 있으며, 이는 앞으로 차차 다룰 예정이다. 이에 앞서 그리디 알고리즘의 대표 문제로 거론되는 ..
[Algorithm] Dynamic Programming 2
·
Computer Science and Engineering/Data Structures and Algorithms
Subproblem graphs DP에서 우리는 sub-problem이 어떻게 구성되어 있는지, 그리고 서로 어떤 연관을 지니고 있는지를 이해하는 것이 중요하다.위 그래프 중 오른쪽은 앞선 dynamic programming 1 포스팅에서 살펴봤었던 그래프이다. 해당 그래프는 4라는 문제를 해결하기 위해 어떤 sub-problem이 필요하고, 또 이들은 또 다른 sub-problem을 지니고 있음을 가시적으로 보여준다. 왼쪽 그래프는 오른쪽을 단순화한 버전이다. 우리는 subproblem graphs를 통해 어떤 문제를 해결할 때 필요한 sub-problem이 뭔지를 한눈에 알 수 있다. 궁극적으로는 이 그래프를 통해 시간 복잡도를 결정할 수 있는데, 실행 시간은 각각의 sub-problem을 해결하기 ..
[Algorithm] Dynamic Programming 1
·
Computer Science and Engineering/Data Structures and Algorithms
익히 들어봤을 다이내믹  프로그래밍에 대해 정리해보려 한다. Dynamic programming 먼저 dynamic programming (이하 DP)이란 sub-problem의 solution들을 결합하여 문제를 해결하는 방식이다. 이는 앞서 배웠던 분할 정복 (Divide and conquer) 알고리즘과 비슷해 보이지만, 분명한 차이점이 존재한다. 분할 정복 알고리즘도 마찬가지로 문제를 서브 문제들로 나누고 해결한 다음에 합치는 것이지만 각각의 서브 문제들이 중복되지 않는다는 점이 다르다. DP는 각각의 서브 문제들을 단 한 번만 풀고, 이를 테이블에 저장해 둔 후에 필요할 때마다 꺼내서 사용한다. 이는 같은 문제를 다시 계산하는 문제를 해결할 수 있다는 장점이 있다. DP는 전형적으로 최적화 문제..