본문 바로가기

분류 전체보기

[42서울] 미니쉘(minishell) 파싱, 그 후회와 참회의 기록. 서론 라 피씬 이후에 처음으로, 코드에 한이 맺히고 내가 이 길을 가는 게 맞나 하는 생각이 한 번씩 들 정도로 힘든 과제였다. 평소와 달리 코드의 깔끔함을 추구하지 못하고 3천 줄이 넘는 코드를 리팩터링 할 엄두가 안 나서 그냥 제출했다. 가장 크게 실수했다고 생각한 부분은 코드를 짤 때 처음부터 norminette 규정을 생각하고 만들었어야 했는데, 먼저 코드를 만든 다음에 노미넷을 지키려고 한 부분과 구조에서 문제가 발생했을 때 바로 갈아엎었어야 했는데 계속 하나씩 수정하다가 나중에는 갈아엎기도 애매하고 계속 수정하기도 애매한 구석에 밀렸던 게 후회된다. 그런데 지나고 나서 생각을 해보니 이런 부분들이 결국 내가 스스로 불러온 재앙이었다는 걸 알게 되었다. 그래서 그 부분들을 중심으로 미니쉘 과제의.. 더보기
[42서울] 철학자(Philosophers)에게 밥을 먹이자 서론 이번 과제는 생각보다 오래 걸려서 8~9일 정도 소요되었던 것 같다. 완성은 해놓고 집에 내려갔다 오느라 블랙홀 2일 남기고 평가를 받았는데, 내 코드를 4일 만에 다시 봄 + 평가에 문제 생기면 블랙홀 12시간 남기고 재평가받아야 함이라는 두 가지 요소로 인해 평가 내내 정신이 나갈 것 같았다. 다음부터는 이런 식으로 평가받지 말아야겠다. 철학자 과제는 운영체제에서 유명한 문제인 "식사하는 철학자 문제"를 직접 구현해보는 과제이다. 식사하는 철학자 문제는 대표적인 “동시성 제어” 문제로 하나의 젓가락(또는 포크)를 두 명이 동시에 잡지 못하도록 하면서(상호 배제), 각자 하나의 젓가락을 들고 다른 사람의 젓가락을 요구하는 데드락을 피해야 한다. 상호 배제는 뮤텍스를 통해서 구현하고, 데드락은 예방.. 더보기
[42서울] pipex 심플 가이드 서론 프로젝트 실패 이후 멘탈이 깨져서 신나게 놀다가 블랙홀이 가까워지면서 슬슬 공포감이 들어서 다시 과제를 시작했다. 후... 이러면 안되는데... 라는 생각이 들어서 다음 과제까지는 쉬지 않고 달려서 마무리할 예정이다. pipex 는 보너스까지 마무리하고 평가를 받으려고 했는데, 테스터기에서 일부가 해결이 안돼서 우선은 필수 파트만 내고 나머지는 나중에 다시 볼 생각이다. 과제 자체는 별로 어렵지 않았는데 리팩토링과 보너스 때문에 일주일 이상 걸렸다. 빠르게 필수 파트만 마무리한다면 3~4일 정도 걸리지 않을까 싶다. 서브젝트 정리 ./pipex file1 cmd1 cmd2 file2 이렇게 실행했을때의 결과물이 file2 이렇게 실행했을때의 결과물과 동일해야한.. 더보기
나의 이번 프로젝트는 왜 망했는가 서론 제목에 적혀있듯이 이번 프로젝트는 두 달 넘는 시간을 들였지만 배포조차 못하고 망했다. 실패한걸 뭘 정리까지 해두나 하는 생각이 있었는데, 심심할 때 42 슬랙에서 저장해둔 글을 읽다가 실패도 정리해둬야겠다는 생각이 들었다. 실패했다고 관심 끄고 버려두는 게 아니라 왜 실패했는지를 한 번 더 생각해보는 시간을 갖기 위해서 어제 몇몇 팀원들과 포스트 모템을 했고 그 내용을 간추렸다. 다음에 프로젝트를 또 할 텐데 그때 같은 이유로 망하면 안 되니까 경계의 의미로 기록을 남겨두려 한다. 상세한 내용은 노션에 적어뒀지만 문제가 될만한 부분은 빼고 다른 사람들을 위한 내용은 더해서 다시 글을 적는다. 프로젝트 소개 https://youtu.be/9Gv8oJ2OSV4 https://github.com/eco.. 더보기
[42 서울] so_long을 빠르게 끝내보자 서론 push_swap을 끝내고 참여한 사이드 프로젝트가 끝나가면서 여유도 조금 생긴 것도 있지만, 당장 이번 주에 과제를 안내면 월급을 못 받을지도 모르는 상황에 처해서 급하게 과제를 하나 해치웠다. 내가 이전에 so long을 하고 다른 과제를 남겨뒀다면 큰일이었을 텐데 다행히 난이도가 상대적으로 낮은 과제여서 제대로 잡은 지 3~4일 만에 해결을 할 수 있었다. 서브젝트 정리 이번 평가부터 평가표를 정리하지 않기로 했다. 원래 뭘 해야 하는지 생각하는 게 좋다고 생각했는데, 최근의 논란들에서 평가표를 미리 보는 행위가 과제에는 도움이 되지만 나의 실패 경험을 쌓는 데는 도움이 안 된다는 걸 알게 되었다. 그래서 과제 2개 만에 다시 방법을 바꾸기로 했음. miniLibX를 사용하여 최소한의 움직임으.. 더보기
맥에서 트위치 디코딩 오류 뜰때 해결법 두가지 최근 코딩을 하면서 램을 굉장히 많이 사용하고있다. vscode와 node.js의 npm start를 통한 크롬창 그리고 검색을 위한 크롬창 등등 해서 코딩중엔 맥미니의 8기가 램중에 80% 이상을 사용한다. 그러다가 종종 쉬려고 트위치를 틀면 트위치의 동영상이 제대로 켜지지 않을때가 있다. 동영상을 디코딩하는 중에 브라우저에서 오류가 발생했다는 메세지와 함께 멈추고, 새로고침을 계속 누르다보면 해결은 되는데 결국 30~40분 뒤에 다시 멈춘다. 인터넷에 트위치 디코딩 오류라고 치니까 하드웨어 가속을 끄면 된다고해서 오 ㅋㅋ 좋다 바로 끈다 이러고 껏는데, 대부분의 영상은 잘 나왔지만... 안타깝게도 몇개의 영상은 여전히 잘 안나왔다. 그 외에도 쿠키 삭제 등등 몇개를 해봤는데 동일한 증상이 있어서 도대.. 더보기
[42 서울] push_swap을 케이크처럼 쉽게 먹는 법 - 2 서론 어제 평가를 받았다. 역시 글을 쓰기전에 평가를 받으면 평가때 말을 하면서 머리속이 정리되서 글이 더 쉽게 나오는것 같다. 이전 글에도 적혀있지만 코드의 진행은 이 영상과 같다 https://youtu.be/8h7a7NxztkM 구현 시작 2개일때와 3개일때의 정렬은 별로 어렵지 않다. 2개일때는 그냥 둘중에 뭐가 더 높은 수인지를 확인해서 sa를 하거나 안하면 되고 3개일때는 경우의 수가 다섯가지이기 때문에 전체를 하드코딩하면 된다. 이제 3 보다 많은 숫자들을 정렬하기 위해서는 정렬 알고리즘이 필요하다. 우선 정렬이 시작되면 모든 수를 3등분 한다. 위에서 적힌 방법대로 나누면 왼쪽과 같은 모습이 된다. 이걸 이제 전부 스택b로 넘기면 오른쪽같은 사진이 된다. 전부 넘긴다고 했지만 실제 코드에서.. 더보기
[42 서울] push_swap을 케이크처럼 쉽게 먹는 법 - 1 서론 push_swap은 42서울 2서클 과제로 2서클 과제 중 가장 난이도가 높은 것으로 알려져 있다. 책 개구리를 먹어라! 의 교훈대로 2서클에서 가장 어려운 과제를 먼저 잡았다. 과제의 내용은 인자의 숫자들을 스택 두 개에 제한된 명령어를 최대한 적게 사용해서 정렬하는 과제이다. 이를 위해 다양한 알고리즘을 공부하고 고민하며 해결 방법을 찾아서 구현해야 한다. 이 글은 두 편으로 나눠서 1편에서는 알고리즘 구현 전까지, 2편에서는 알고리즘에 대한 얘기를 할 것이다. 다만 처음에 알고리즘을 생각해서 풀었다가 만점을 받기 위한 최적화가 난해해서(인자가 100개일 때 만점이 나오지 않았다), 갈아엎고 과제를 통과하기 위한 코드로 다시 짰다. 그러다 보니 이 글을 보고 구현하면 이 과제에서 학습할 수 있는.. 더보기