본문 바로가기

카테고리 없음

2020-05-26 06시 개발자 글 모음 | "HTTP2.0 Pipeline 패킷 " 외 6개 이야기

나의 삶을 결정할 자격을 가진 사람 by 정상역

  • 그동안 해왔던 일과 전혀 다른 일을 선택하는 결과로 포기해야 했던 꽤 큰 금액의 연봉(지금도 큰돈이지만 그때는 지금과는 비교도 할 수 없을 만큼 큰 의미였다)
  • 결심을 하자마자 어머니에게 전화를 해서 아주 담담하게 그러나 단호하게 이런저런 이유로 이런 결정을 하게 되었는데 내 선택에 후회하지 않을 자신이 있으니 너무 심려치 않으셔도 된다고
  • 내 결정에 대한 누군가의 걱정과 불안함은 결정에 대한 그의 판단이 아니라 그 결정을 마주한 나의 두려움과 불신으로부터 비롯되었다


그 때는 좋았던 시절일까, 좋아 보였던 시절일까 by 노용은


    [삼성 SW 역량 테스트] 미세먼지 안녕! by 구상철

    • +1 }; void spead(int cur) { int next = (cur + 1) % 2; for (int y = 0; y < r; ++y) { for(int x = 0; x < c; ++x) { if (map[cur][y][x] == -1) { map[next][y][x] = -1; } else { map[next][y][x] = 0; } } } for (int y = 0; y < r; ++y) { for (int x = 0; x < c; ++x) { int val = (map[cur][y][x] / 5); int candi = 0; for (int dir = 0; dir < 4; ++dir) { int ny = y + dy[dir]; int nx = x + dx[dir]; if (ny < 0 || ny >= r || nx < 0 || nx >= c) { continue; } if(map[next][ny][nx] != -1) { map[next][ny][nx] += val; candi += val; } } if (map[next][y][x] != -1) { map[next][y][x] += (map[cur][y][x] - candi); } } } } void move(int cur) { for (int y = up_y - 1; y > 0; --y) { map[cur][y][0] = map[cur][y - 1][0]; } for (int x = 0; x < c - 1; ++x) { map[cur][0][x] = map[cur][0][x + 1]; } for (int y = 0; y < up_y; ++y) { map[cur][y][c - 1] = map[cur][y + 1][c - 1]; } for (int x = c - 1; x > 1; --x) { map[cur][up_y][x] = map[cur][up_y][x - 1]; } map[cur][up_y][1] = 0; for (int y = down_y + 1; y < r; ++y) { map[cur][y][0] = map[cur][y + 1][0]; } for (int x = 0; x < c - 1; ++x) { map[cur][r - 1][x] = map[cur][r - 1][x + 1]; } for (int y = r - 1; y > down_y; --y) { map[cur][y][c - 1] = map[cur][y - 1][c - 1]; } for (int x = c - 1; x > 1; --x) { map[cur][down_y][x] = map[cur][down_y][x - 1]; } map[cur][down_y][1] = 0; } int main() { up_y = -1; scanf("%d %d %d"
    • &t); for (int y = 0; y < r; ++y) { for (int x = 0; x < c; ++x) { scanf("%d"
    • down_x = x; } } } } int cur = 0; for (int time = 0; time < t; ++time) { spead(cur); cur = (cur + 1) % 2; move(cur); } int ret = 0; for (int y = 0; y < r; ++y) { for (int x = 0; x < c; ++x) { if (map[cur][y][x] != -1) { ret += map[cur][y][x]; } } } printf("%d


    [삼성 SW 역량 테스트] 낚시왕 by 구상철

    • z = 0; break; } } return size; } // 1 -> up // 2 -> down // 3 -> right // 4 -> down void move(int cur) { int next = (cur + 1) % 2; for (int y = 0; y < r; ++y) { for (int x = 0; x < c; ++x) { map[next][y][x]
    • s; ny = (ny % ((r - 1) * 2)); int nd = 2; if (ny >= (r - 1)) { ny = ((r - 1) * 2) - ny; nd = 1; } if (map[next][ny][x]
    • s; ny = (ny % ((r - 1) * 2)); int nd = 2; if (ny >= (r - 1)) { ny = ((r - 1) * 2) - ny; nd = 1; } if (map[next][ny][x]


    [삼성 SW 역량 테스트] 이차원 배열과 연산 by 구상철

    • }; for (int x = 1; x <= pre_col_size; ++x) { ++bucket[map[sy][x]]; // bucket[3] = 5 라는 의미는
    • } int size = 0; for (int i = 1; i <= 100 && size < 100; ++i) { for (int j = 1; j <= 100 && size < 100; ++j) { if (bucket[j] == i) { map[sy][++size] = j; map[sy][++size] = i; } } } for (int i = size + 1; i <= pre_col_size; ++i) { map[sy][i] = 0; } if (cur_col_size < size) { cur_col_size = size; } } void update_col(int sx) { int bucket[101] = { 0
    • }; for (int y = 1; y <= pre_row_size; ++y) { ++bucket[map[y][sx]]; } int size = 0; for (int i = 1; i <= 100 && size < 100; ++i) { for (int j = 1; j <= 100 && size < 100; ++j) { if (bucket[j] == i) { map[++size][sx] = j; map[++size][sx] = i; } } } for (int i = size + 1; i <= pre_row_size; ++i) { map[i][sx] = 0; } if (cur_row_size < size) { cur_row_size = size; } } void solve() { while (map[r][c] != k) { if (cur_row_size >= cur_col_size) { pre_col_size = cur_col_size; cur_col_size = 0; for (int y = 1; y <= cur_row_size; ++y) { update_row(y); } } else { pre_row_size = cur_row_size; cur_row_size = 0; for (int x = 1; x <= cur_col_size; ++x) { update_col(x); } } ++ret; if (ret > 100) { break; } } } int main() { pre_row_size = 3


    [ Node.js 기본 ] Node.js로 엑셀 파일 데이터 입력 및 파일 다운로드 하는 방법 (with Ajax) by 안성주 about Node

    • length; idx++) { let tempKey = 'excelTest' + idx; let tempObj = new Object(); tempObj[tempKey] = new Object(); tempObj[tempKey]['displayName'] = dailyDatas[idx]['name']; tempObj[tempKey]['headerStyle'] = {}; tempObj[tempKey]['cellStyle'] = {}; tempObj[tempKey]['width'] = 120; Object
    • length; idx++) { let data = dailyDatas[idx]['data'] let tempKey = 'excelTest' + idx; for(let j=0; j
    • length; idx++) { let tempKey = 'excelTest' + idx; let tempObj = new Object(); tempObj[tempKey] = new Object(); tempObj[tempKey]['displayName'] = dailyDatas[idx]['name']; tempObj[tempKey]['headerStyle'] = {}; tempObj[tempKey]['cellStyle'] = {}; tempObj[tempKey]['width'] = 120; Object


    HTTP2.0 Pipeline 패킷 분석 by 공재웅

    • 궁금증의 요지는 7계층에서 구현된 HTTPS 패킷인데 어떻게 우측그림에서 각 요청을 서로 구분할 수 있는가
    • 각 TCP 요청의 포트는 역시나 같은 세션이며 첫번째 그림의 Seq (674) + Len (322)는 다음 그림의 Seq (996)과 같다
    • Follow HTTP Stream이 아닌 TLS Stream으로 분석해보면 Pipeline Stream 시작 시 HTTPS Session들이 열리며 하단의 여러 데이터(PNG 파일)들은 HTTPS2의 Stream Identifier로 구분하여 데이터를 조합 한다