본문 바로가기

개발26

아이폰 12 패널과 배터리 교체 후기 작년 인턴 생활을 할 때 기존에 가지고 있던 6 Plus로는 회사 앱 설치가 불가능해 급하게 아이폰 12를 refurbished로 아마존에서 구매했었다. 처음에 왔을 때부터 최대 배터리 성능이 80%였던터라 한 1년 가까이 쓰니까 전압이 일정하지 않아서 그런지 툭하면 꺼지곤 해서 스트레스가 이만저만이 아니었다. 이러한 이유로 한국에 온 김에 배터리 교체를 감행했다. 전에 이미 한번 바꿔본 기억이 있어서 그렇게 어렵진 않았다. 하지만 문제는 패널을 제거하면서 발생했는데, 아시는 분은 아시다시피 아이폰은 앞에서 패널을 먼저 제거해야 내부 부품에 접근할 수 있다. 근데 제거하다가 패널을 깨먹었다. 패널과 패널에 붙어 있는 프레임 사이에 헤라를 넣어서 모서리에 가니 사실상 유리를 직접적으로 건들여서 부셨기 때문.. 2024. 8. 5.
RDB에서 카테고리 구현 https://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ Managing Hierarchical Data in MySQL — Mike Hillyer's Personal Webspace Introduction Most users at one time or another have dealt with hierarchical data in a SQL database and no doubt learned that the management of hierarchical data is not what a relational database is intended for. The tables of a relational database are not m.. 2024. 1. 26.
Project FugaxOratio: introduction I am writing a post now just to make sure I will begin and complete this project. The idea of the project, FugaxOratio, comes from my favourite Youtuber and programmer Pope Kim using a program made by himself for an IRL live broadcasting. The features are simple. When you speak, a circle around a profile image aligned in center highlights and also if you speak louder and exceeds a certain bounda.. 2022. 4. 7.
Weak Head Normal Form (WHNF) 키워드: Reduction, Lazy evaluation 참조 https://opentutorials.org/module/1941/11208 2022. 1. 1.
hlint 설치 후기 Haskell을 학교에서 배우는데 좀 어설픈 것 같아서 방학이 된 겸, 교수님이 쓰시는 자료 (1)뿐만 아니라 다른 자료 (2)도 찾아보면서 공부하려고 준비하고 있었다. 내 눈에 밟힌 건 stack인데 stack이 하스켈 개발 전반적으로 도움을 주는 프로그램이라 설치해보려고 시도했다. 결론적으로는 실패했는데 아직 OS X AArch64는 지원을 안 한다고 한다 (출처는 GHCup). cabal은 되는 것 같아서 이걸로 프로젝트를 프로젝트답게 할 수 있지 않을까 싶어서 또 다른 삽질을 하던 도중 haskell의 linter인 hlinter를 vscode에서 발견했고 이걸 사용하려면 hlint를 설치해야 한다는 걸 알았다. 설치 방법은 상당히 쉬운데 cabal install hlint면 된다. 그치만!!! .. 2021. 12. 22.
자바스크립트의 신기한 기능들 이 글에서는 제가 자바스크립트를 공부하면서 다른 언어에서는 볼 수 없었던, 그래서 신기하지만 까먹지 않게 메모하고 싶은 기능들을 정리해보려고 합니다. 1. 호이스팅 (Hoisting) JS에는 변수나 함수를 선언할 때 (추가로 뭐가 있는지 안 찾아봄) 선언문을 가장 위로 끌어올려주는 (Hoist) 기능이 있습니다. 가령 이런 코드가 가능하다는 것이죠. 그렇지만 우리가 예상했던 것과는 다르게 호이스팅을 해도 "Hello"가 출력되진 않고 undefined가 출력됩니다. 그 이유는 변수의 선언 (책마다 표현하는 방식이 다르긴 하지만 전 declaration과 initialization or assignment로 구분하겠습니다)만을 호이스팅하기 때문입니다. 따라서 내부적으로는 코드가 다음과 같이 선언되게 된다.. 2021. 8. 22.
OpenCV에서 height, width resize_img = cv2.resize(img, (width, height)) # (128, 256)로 세팅 print('resized to 128x256 image shape:', resize_img.shape) # (256, 128)로 나옴 음... 이거 설계한 사람이 여러 명인데 통일을 안 한건가. 왜 이렇게 만들었지? 2019. 12. 1.
About Mathematics Behind Large Margin Classification Quiz SVM의 수학적 의미에 대해 설명하는 강의에서 나온 퀴즈다. 보기로는 1/4, 1/2, 1, 2가 주어지고 그중에 하나를 고르면 된다. 나는 문제를 풀고 보기 중에 선택하면 될 줄 알았는데 그렇게 하면 답을 못 구하고 보기를 하나씩 대입해보면 풀 수 있다. Decision boundary가 y축이라면 theta는 boundary와 수직을 이뤄야 한다. 그리고 우리는 다음과 같은 숙제를 갖고 있다. $$\min_{\theta}\frac{1}{2}\sum_{j=1}^{n}{\theta_{j}^{2}} \\ \text{s.t. } \begin{cases} p^{(i)}\left \| \theta \right \| \geq 1 & \text{ if } y^{(i)}=1 \\ p^{(i)}\left \| \the.. 2019. 9. 30.
분할 정복을 이용한 n제곱 계산 while (n > 0) { if (n & 1) ans = ans * a; a = a * a; n >>= 1; } 2019. 8. 7.
국어 수능 완성 1회차 70분동안 봤고, 36번까지 밖에 못 봄. + 앞에 과학 지문은 그냥 상식으로 풀음(시간 없어서) 하... 자괴감 오지게 드네 일단 52점. 2019. 7. 24.
float4에서 w의 의미(feat. 동차좌표계) HLSL에는 float4 데이터형이 존재하고 이는 x, y, z, w로 구성되어 있다. 복습을 하다 보니 사소한 의문점이 들었다. 3차원을 표현하는데 왜 float3을 사용하지 않고, float4를 사용하며 그렇다면 w의 의의가 무엇일까? 생각보다 쉽게 답을 찾을 수 있었다. http://www.silverwolf.co.kr/realprog/73432 3D Programming - 투영기하, 동차좌표계 투영변환이 무엇인가요 ? 실세계의 한점 Q = (X, Y, Z)는 3차원의 점이다 이 점이 앞시간에서 배웠던 투영 스크린 상의 한 점 (X, Y)로 2차원 점으로 변환되는 관계를 투영 변환이라 한다. 이렇게 투영변환을 사용할 때는 동차 좌표계라고 알려진 좌표계를 사용하는게 편하다. 그럼 동차좌표계가 그럼 .. 2019. 5. 7.
decltype decltype은 키워드이고 declared type의 줄임말이다. 타입을 정해주는 녀석이라고 보면 되겠다. auto와의 차이는 아직 나도 잘 모르겠으니까 추후에 업데이트하도록 하겠다. int x; decltype (x) y; // x와 동일한 타입인 y를 만들어라! 컴파일러가 저 타입을 결정하는 것인데 여기에는 규칙이 있다. decltype (expression) var; 1단계: expression이 괄호가 없는 식별자(identifier) 면, var은 expression과 같은 타입이다. double x = 5.5; double y = 7.9; double& rx = x; const double* pd; decltype(x) w; // double 타입 decltype(rx) u = y // do.. 2019. 5. 5.
함수 매개변수 작성 시 주의점 void show_array(const double ar[], int n); 다음과 같은 코드는 show_array()에게 전달되는 배열이 어떤 것이든지 그 배열 안에 있는 값을 변경할 수 없다는 것을 의미한다. 이것은 한 다리 건너는 간접 지시의 경우에만 동작한다. 배열의 원소들이 기본형이 아닌 포인터라든지, 이중 포인터면 const를 사용할 수 없다. 그래서 이차원 배열을 함수의 매개변수로 넘길 때 함수 원형을 const로 설정하지 않는 것이다. 2019. 5. 5.
함수 포인터 함수도 주소를 가지고 있다. 함수는 스택을 하나 새로 만드는 것을 리버싱이나 디버깅을 해봤다면 알 수 있는데, 함수의 주소는 해당하는 메모리 블록의 시작 주소다. 내가 읽고 있는 책에서는 함수 포인터의 활용의 예시로 시간 측정 함수를 예로 들고 있다. estimate()라는 함수가 있는데 함수 포인터를 인자로 받아서 상황에 따라 측정 기준을 바꿀 수 있다는 것이다. 함수 포인터를 사용하기 위해서는 다음과 같은 절차를 거치면 된다. 함수의 주소 얻기 함수를 지시하는 포인터 얻기 함수를 지시하는 포인터를 사용하여 그 함수를 호출하기 ​1. 함수의 주소 얻기 함수의 주소는 함수의 이름이다. 따라서 함수 포인터를 인자로 취하는 foo() 함수가 있다면 다음과 같이 호출할 수 있다. foo(this_is_func.. 2019. 5. 5.
2의 2000승 출력하기(C/C++) 2의 2000승 출력하기 설명 2천승이기 때문에 밖에 for문에서 2천 번 돌려주고 안에서는 곱하면서 받아 올림해주면 된다. 마지막으로 배열로 따지면 뒤에서부터 출력하면 된다. 코드 #include int main() { int digit[603] = { 0, }; digit[0] = 1; for (int i = 0; i = 10) { digit[j + 1] += digit[j] / 10; digit[j] %= 10; } } } for (int i = 602; i >= 0; --i) { printf("%d", .. 2018. 5. 15.