일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 그래프
- 프로그래머스 레벨 2
- 쉬운 문제
- Algorithm
- 자바스크립트
- 레벨 1
- 문자열
- javascript
- HTTP 완벽 가이드
- 타입 챌린지
- socket
- Crawling
- TCP
- 수학
- 소켓
- dfs
- Nestjs
- Node.js
- dp
- 크롤링
- HTTP
- 가천대
- typescript
- 백준
- type challenge
- 타입스크립트
- ip
- BFS
- 프로그래머스
- 알고리즘
- Today
- Total
목록프로그래밍 (478)
kakasoo
팀원들과 이야기하다보면, 옳은 것에 대한 혼동이 온다. 내가 말하는 기술적 가치들이, 당장의 비즈니스에 몰려서 모두 환상적인 것이 되고 만다. 좋다는 의미의 환상이 아니라, 주니어 개발자가 가진 환상이다. 내가 말하는 것은, 아직 어린 신입의 패기 정도로 보이면 좋게 보인 것일 것이다. 어쩌면, 지나치게 과신한 나머지, 팀 전체에게 부담을 주고 있다는 평가를 받고 있을지 모른다. 그래서 더욱 조심스러워지는 부분이 있다. 그래서 이제는 이야기할 때, 옳은 것을 두고 설득하려는 태도가 틀렸다는 걸 깨달았다. 옳은 것은 없다. 대신에 옳아지는 것이 있다. 즉, 처음부터 옳은 것은 어디에도 없고, 대화를 통해 옳은 것을 결정지어 나가는 자세가 필요하다는 것을 깨달았다. 이제 나의 고민은 '어떻게 하면 옳아질 수..
대학교 세미나를 진행하면서, 뒤풀이에서 질문을 받았다. "카카수님은 변수 명이라던가, 컨벤션은 어떻게 정하나요?" 당연히 팀끼리 정하면 될 일이지만, 그런 답을 듣고 싶어서 질문한 것은 아닐 것이다. 나도 팀끼리, 그리고 회사에서도, 컨벤션을 정하고 작업한 적은 있지만 그게 잘 지켜진 적은 그다지 없었다. 사실 100번은 지켜도 1번 지켜지지 않은 게 있으면, 나중 가서 고치기도 심란하니 놔두게 되는 게 컨벤션 아닌가. 또 처음에는 열심히 하더라도, 점차 코드가 길어지면 컨벤션의 양도 늘어나게 되고, 그러다보면 컨벤션이 작업을 따라가는 게 아니라, 작업을 하기 위해 컨벤션을 봐야 하는 문제가 생긴다. ex. "이것과 관련된 컨벤션이 어디 있더라?" 이미 만들어진 코드를 따라 하기 라이브러리와 프레임워크의..
Node.js heap out of memory Today I ran my script for filesystem indexing to refresh RAID files index and after 4h it crashed with following error: [md5:] 241613/241627 97.5% [md5:] 241614/241627 97.5% [md5:] 241625/2... stackoverflow.com 오늘 갑자기 내 dev server가 터졌다고 프론트 개발자 분께서 말씀해주셨다. 프론트 개발자와의 협업을 위해 dev server를 열고 swagger 문서를 제공해준 건데, 정말로 터져있었다. 서버를 재실행하고 error message를 확인한 결과 Node.js 메모리가 부족해서 ..
[Puppeteer launcher error results with undefined After testing my project on windows, i've deployed it to Ubuntu-based VM and that is where the Puppeteer behavior baffles me. I did install all required dependencies, but i have a feeling that my e... stackoverflow.com](https://stackoverflow.com/questions/69494700/puppeteer-launcher-error-results-with-undefined) Puppeteer를 다루던 중에 에러가 발생했다. 아무래도 Ty..
이미 QueryBuilder로 짜여진 부분은 남겨둬도 된다고 생각했지만, 오늘 다시 생각해보니 고치는 게 이득이다. QueryBuilder로 짜여진 것도, 결국 ON절을 WHERE 절로 고치면 해결할 수 있다. 조금 코드의 형태가 달라지긴 하겠지만, 해결할 수 없는 것은 아니다. // NOTE : 코드 1번 const departments = await this.departmentRepository .createQueryBuilder('department') .leftJoinAndSelect( 'department.userList', 'user', 'user.accountStatus = :available OR user.accountStatus = :rest', { available: UserStatus..
Sequelize가 ORM이냐 아니냐를 가지고 많은 얘기가 오간다. 설명에도 대놓고 ORM이라고 말하고 있지만, Java 에서 넘어온 개발자들에게 Sequelize는 어딘가 엉성한 친구였을 것이고, TypeScript가 나온 이상, JavaScript의 고유성이라고 변명하기는 힘들어 졌을 것 같다. 다만, 그렇다고 해도 TypeORM 역시 엉성한 부분이 많아, 절대적이라고 말하지는 못했을 것 같다. 양쪽 다 부족함을, 취향의 차이로 구분해야 했다. 하지만 TypeORM ^0.3.x 부터는 많은 게 달라졌다. 일단 비교를 위해 기존의 코드를 하나 보자. 이전에 짰던 코드 중 일부를 가져왔다. 이 코드는 TypeORM의 QueryBulder 를 이용해서 만든 코드다. withDeleted 를 true로 하여..
리더 ( Leader )가 되어야 한다는 말을 종종 강연에서 듣곤 한다. 하지만 한국 사람들은 이 얘기를 들으면, 아니, 어떻게 정점에 오르라는 것인가 생각하고는 포기하고 만다. 이는 한국 사회가 리더라고 하면 보통 1인자를 생각하기 때문에 그런 것 같다. 다만 내가 지켜본 바로는 리더는 서열을 의미하는 말이 아니다. 내가 생각하는 리더는 "자신의 의사를 팀의 방향에 반영할 수 있는 사람"을 의미한다. 딱히 서열과 관계가 없는 말이고, 말단 직원부터 대표까지, 누구나 될 수 있다. 물론, 아무렇게나 자신의 의견을 내세우고, 또 고집을 피워봐야 나쁜 리더 밖에 되지 않는다. 좋은 리더가 되려면, 설득력 있는 사람이 되어야 한다. 좋은 의견을 말해야 한다. 논리적이고, 합리적이고, 또한 창의적인 의견을 개진..
// 프로그래머스 레벨 1 숫자 문자열과 영단어를 풀었습니다. const numbers = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", ]; const solution = (s) => { const str = s.split(""); let stack = []; let answer = ""; for (const a of str) { if (isNaN(Number(a))) { stack.push(a); const num = numbers.findIndex((el) => el === stack.join("")); if (num !== -1) { answer += String(num); stack = []; }..
// 백준 11723번 node.js는 메모리 제한으로 풀 수 없는 문제. const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const input = []; const combinations = function* (elements, selectNumber) { for (let i = 0; i < elements.length; i++) { if (selectNumber === 1) { yield [elements[i]]; } else { const fixed = elements[i]; const rest = elements.slice..
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const input = []; rl.on("line", (line) => { input.push(line); }).on("close", () => { const map = input.map((row) => row.split(" ")); const nullPoint = []; for (let i = 0; i < map.length; i++) { for (let j = 0; j < map[i].length; j++) { if (map[i][j] == 0) { nullPoint.push..
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { const num = Number(line); const rows = new Array(num + 1).fill(0).map((el) => 0); const isAble = (row) => { for (let i = 1; i < row; i++) { if ( rows[i] === rows[row] || Math.abs(rows[row] - rows[i]) === row - i ) { return false; } } return true;..
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const input = []; rl.on("line", (line) => { input.push(line); }).on("close", () => { const num = Number(input.splice(0, 1)) + 1; const expression = input[0].split(" "); const numbers = new Array(10).fill(0).map((el, i) => i); const visited = new Array(10).fill(false); con..