수치해석을 모르면 푸틴이 미사일을 잘못 쏴요 우리 학교에는 학생들 사이에서 인기가 많은 교수님이 한 분 계신다. 강의 시간에 뜬금없거나 재밌는 이야기를 많이 해서, 호불호가 갈릴 지언정 취향에 맞는 사람들에게는 인기가 항상 높다(귀엽다는 평가가 많다). 교수님은 수치해석 강의 시간에 농담 삼아서 위 이야기를 자주 말하신다. 갑자기 뜬금없이 미사일 이야기가 나와서, 많은 학생들은 의아해하기도 한다. 갑자기 수치해석에 관한 수업에서 왜 미사일에 관한 이야기가 나오는가? 이를 알기 위해선 한 가지 역사적 사건을 꼭 알아야 한다. 패트리어트 미사일 격추 실패 사건 때는 1991년 2월 25일, 이라크 전쟁 시기. 지금도 그렇고, 미국은 동맹국 사우디 아라비아에 파병을 보낸 상태였다. 다란(Dhahran) 시에 ..
Solution Challenge 2024 GDSC Solution Challenge 2024에 참여하게 되었다. 사실 작년 2023년에도 참여했었는데, 이때는 나를 포함한 팀원 모두가 첫 프로젝트라 많은 시행착오가 있었다. 하필 HIBL의 프로젝트 시기와도 동일하게 겹치는 시기라, 어려운 프로젝트 두 개를 동시에 진행하는 시기였다. 그래서 갈등도 있었고, 고생도 많았다. 그래서 올해 참여할 지 말지를 많이 고민했다. 원래는 고민 끝에 올해는 스킵하기로 마음먹었다. 사실 스킵하기로 하고서 여러 모로 아쉬움이 많이 남기는 했었다. 작년에 너무 고생했던 기억이 있어서, 도전할 용기는 많이 꺾였지만, 누군가 밀어주었으면 하는 바램이 있었다. 그러다가 이전에 데브옵스 스터디를 하면서 알게 된 분에게 권유를 받게..
문제 상황 Flutter에서 iOS 빌드 시 다음과 같은 에러가 발생하였다. Launching lib/main.dart on iPhone 15 Pro in debug mode... Running Xcode build... Xcode build done. 6.2s Failed to build iOS app Uncategorized (Xcode): Command CodeSign failed with a nonzero exit code Could not build the application for the simulator. Error launching application on iPhone 15 Pro. Uncategorized (Xcode): Command CodeSign failed with a nonz..
바쁜 비버 지난 학기에 논리회로 과목을 수강하던 중, 기말고사 시험 문제로 ‘바쁜 비버’에 대한 문제가 출제되었다. 바쁜 비버는 컴퓨터 과학에서 꽤 중요한 개념이다. 특징도 여러 가지 재미있는 게 많아서, 이에 대해 글을 써본다. 본 글의 목차는 다음과 같다. 바쁜 비버 게임을 소개한다. 바쁜 비버 함수와 최대 시프트 함수를 소개한다. 바쁜 비버 함수의 계산 불가능성을 증명한다. 최대 시프트 함수를 중심으로 성질과 하한을 찾아가는 과정을 다룬다. 이 과정에서 아커만 함수, ZF 공리계, 콜라츠 추측과의 연관 관계를 다룰 것이다. 바쁜 비버로부터 파생된 함수들을 다룬다. 바쁜 비버 게임 바쁜 비버 게임은 1962년 Tibor Radó의 논문 On Non-Computable Functions에서 처음 소개되..
부동 소수점의 성질과 연산, 그리고 FPU 이 글에서는 컴퓨터에서의 부동소수점을 저장하고 연산하는 법과 그 성질에 대해서 다루어볼 것이다. 또한 부동소수점을 처리하는 하드웨어인 FPU에 대해서 가볍게 소개하며, 어떻게 실수형 연산을 처리하는지를 알아볼 것이다. 각 목차의 내용은 다음과 같다. 부동소수점의 저장을 다룬다. 이 과정에서 수의 정규화와 비정규화에 대해 다룬다. 부동소수점의 성질을 다룬다. 이 과정에서 머신 엡실론과 실수의 분포를 다룬다. 부동소수점의 연산을 다룬다. FPU에 대해서 다룬다. 이 과정에서 Sparc 어셈블리어를 이용해서 어떻게 FPU를 활용하여 연산을 처리하는 지 알아본다. 💻 컴퓨터의 수의 표현과 부동 소수점 부동소수점의 표현 컴퓨터에서 숫자 체계는 크게 두 가지로 나뉜다. 정..
Sealed Class로 상태 패턴 사용하기 Sealed Class란? Dart 3.0 버전부터 sealed란 키워드가 class modifier로 새롭게 추가되었다. sealed 클래스는 enum의 확장판으로, class를 enum처럼 사용할 수 있게 해준다. 공식 문서에서 sealed 클래스의 용법을 찾아보면 다음과 같다. sealed class Vehicle {} class Car extends Vehicle {} class Truck implements Vehicle {} class Bicycle extends Vehicle {} // ERROR: Cannot be instantiated Vehicle myVehicle = Vehicle(); // Subclasses can be instantia..
Token Login / Auth 구현하기 https://nx006.tistory.com/64 Session VS Token Authentication - feat. JWT 기술 Authentication 앱을 만들 때 회원가입/로그인 기능을 구현해야 할 때가 있습니다. 인증 및 인가된 사용자에게 앱의 기능을 사용할 수 있게 하기 위해서는, 로그인이라는 Authentication(인증) 기능을 거 nx006.tistory.com 이전 글에서 Session 로그인과 Token Login 방식에 대해서 알아봤습니다. 이번 글에서는 어떻게 하면 Flutter에서 Token 로그인 방식을 관리할 수 있는지, 클라이언트 관점에서 구현해보겠습니다. 이 방법은 코드팩토리 님의 Flutter 강의를 듣고서 정리한 글입..
BottomNavigationBar 사용하기 위와 같은 화면을 구성할 때 BottomNavigationBar를 많이 사용하게 됩니다. BottomNavigationBar은 TabBarView와 같이 사용하게 되는데, 사용자의 입력에 따라서 두 위젯의 index가 잘 맞아야 하기 때문에 은근히 구현하기 어려운 부분입니다. 이 글에서 TabBarView와 BottomNavigationBar를 이용해서 위와 같은 UI를 구현해보겠습니다. BottomNavigationBar와 TabBarView 이용해서 화면 전환 구현하기 StatefulWidget 만들기 우선, BottomNavigationBar를 담는 View부터 만들어야 하는데, 이를 TabView라고 하겠습니다. 당연히 사용자의 입력에 따라서 UI가 달..
최근, 한 작은 Flutter 커뮤니티에서, 코드 제너레이션(Code Generation)에 대한 논쟁이 있었습니다. 그래서 이번 글에서는 이 논쟁에서 제시된, 코드 제너레이션을 사용해도 되는지에 대한 갑론을박을 간단히 정리하고, 제가 왜 코드 제너레이션을 쓰기로 결정했는지 작성합니다. 코드 제너레이션이란? 코드 제너레이션(Code Generation), 혹은 코드 젠(Code gen)이나 코드 생성이라고 부르기도 합니다. 말 그대로 코드를 자동으로 생성하는 행위입니다. 그리고 코드를 자동으로 생성해 주는 도구를 Code Generator라고 합니다. 코드 제너레이션은 주로 반복되는 구조의 코드를 자동으로 생성할 때 많이 사용됩니다. 그래서 코드의 복잡성과 반복성을 줄여주고, 개발자가 매 반복되는 구조의..
23년 3분기 회고 항상 한 분기가 끝나면, 회고록을 작성하려고 합니다. 회고록을 작성하는 이유 회고록은 정말 여러 곳에서 작성을 하라고 강조를 하더군요. 그래서 저도 회고록은 놓치지 않고 작성하려고 하고 있습니다. 회고록을 작성하는 이유는 여러가지 이유가 있습니다. 가장 중요한 이유는 과거를 회고하면서 미래를 발전시킬 방법을 찾는 것입니다. 또 시간이 지난 후 내가 이때 무슨 생각을 했고, 어떤 일을 했는지 돌아본다면, 앞으로 무엇을 할 지에 대해서도 더 고민해볼 수 있습니다. 회고록을 작성할 때, KPT 회고법을 사용하면 좋다고 합니다. Keep: 현재 만족하고 있는 부분, 계속 이어나가고 싶은 부분, 잘한 부분을 회고합니다 Problem: 불편했던 부분, 개선이 필요하다고 느끼는 부분을 회고합니다 ..
안녕하세요. 이번 글에서는 여러 정렬 알고리즘의 시간 복잡도를 증명해보겠습니다. 혹시 자료구조를 배우시는 분들이 계시다면, 시험볼 때 참고하시면 좋을 것 같습니다. 이 글은 $\LaTeX$ 문법이 잔뜩 적용되어 있어서, MathJax 스킨이 적용되어야 편하게 보인답니다. 혹시 Tistory 모바일 앱이나, 혹은 모바일 페이지 주소(nx006.tistory.com/m/67)로 접속이 되었을 경우, 인터넷 브라우저(Tistory 앱 X)에서 여기 주소로 다시 접속해주세요: https://nx006.tistory.com/67 정렬 알고리즘의 종류 이번 글은 정렬 알고리즘의 종류에 대해서 다루는 글은 아닙니다. 여기서는 간략하게 소개만 하고 넘어가겠습니다. 가장 대중적으로 많이 사용되는 정렬 알고리즘은 시간 복..
Flutter 소개 자료 B612 동아리에서 모바일 세션으로 참여하고 있는데, 각 세션은 정기 모임 활동에서 세션 발표를 해야 한다. 모바일 세션의 첫 발표는 내가 맡았다. Flutter에 대해서 소개하는 임무를 맡았다. 나름 모바일 세션이고 Flutter를 소개하는 자리인데 심심하게 발표를 시작하고 싶지 않았다. 그래서 Flutter를 소개하는 발표 자료를 Flutter로 만들기로 했다. 발표 자료 기획하기 우선 발표 자료부터 기획해 보자. 다행히 이는 이미 준비가 되어 있다. 지난 2주 동안 정기 모임 과제로 WIL을 작성했기에, 이를 바탕으로 구성하면 된다. 지난 WIL에서의 내용을 압축하면 다음과 같다. Flutter 소개 Cross Platform Framework iOS, Android, We..