- 개발/관리도구
- awk: `BEGIN { ...`
- All O'Reilley Cover Animals! From 1000+ Book covers!
- teler - Real-time HTTP Intrusion Detection
- DeClang is an anti-hacking compiler based on LLVM project and extented the OSS project ollvm
- MDN Web Docs evolves! Lowdown on the upcoming new platform
- Humans are Bad at URLs and Fonts Don’t Matter
- Glitch is a collaborative programming environment that lives in your browser and deploys code as you type.
- esbuild - An extremely fast JavaScript bundler
- 오픈소스화는 예상보다 훨씬 더 녹록지 않다
- What's in a Linux executable?
- Pyston v2: 20% faster Python
- Graphical User Interface Using Flutter in Embedded Systems
- Introducing the AWS Load Balancer Controller
- The Grand Unified Theory of Software Architecture
- [인터뷰]“KFX 개발 그 자체가 경이…대한민국 대표 브랜드될 것”
- Git 브랜치 배우기
- 30대, 40대, 그리고 50대에 개발자가 된 300명의 이야기
- Async Cookie Store API 살펴보기
- 행안부, 전체 공공 사이트에 HTTPS 도입 검토
- How to become a Kickass Web Developer in 2021 [Frontend & Backend Tips]
- Git 2.29 Introduces Experimental Support for SHA-256
- Next.js Analytics provides your Real Experience Score through data from actual visitors.
- We are excited to introduce Next.js 10
- 4 Hiring Myths Common in HackerNews Discussions
- How Apple Is Organized for Innovation
- 7 Git tricks that changed my life
- bash redirects
- odeGym is an online Java programming course that is 80% based on practice
- Road to gRPC
- Parsing Algorithms
- The TypeScript Team Presents `Type | Treat`
- How a one line change decreased our clone times by 99%
- B2B SaaS 가격책정 하는 법
- 핸즈프리 코딩 : 받아쓰기와 아이트래킹으로 코딩하기
- upptime - GitHub로 자동 운영되는 오픈소스 업타임 모니터
- Create time-saving apps using AppSheet, no coding required
- Windows 10 now hides the SYSTEM control panel, how to access it
- Javascript FlatMap Usage
- Top 10 games from the JS13K 2020 competition
- It's Time To Admit It: The X.Org Server Is Abandonware
- YouTube-dl is now part of GitHub/dmca.git
- If you need to convert files from one markup format into another, pandoc is your swiss-army knife.
- vdx - An intuitive CLI for processing video, powered by FFmpeg
- ØMQ - The Guide
- Curated WiFi Arsenal
- LiveCode is a modern day HyperCard
- The official website of Nand to Tetris courses
- Four Features That Justify a New Unix Shell
- Don't use VPN services.
- Seven Hard-Earned Lessons Learned Migrating a Monolith to Microservices
- NICKEL: BETTER CONFIGURATION FOR LESS
- Comparison of Kubernetes Ingress Controllers
- The Top 10 Python Frameworks For Web Development
- Developing Cloud-Native Applications with Microservices Architectures
- AWS NLBs and the mixed up TCP connections
- Chrome won't clear your Google and YouTube data — even if you tell it to
- GCP에서 Squid를 이용한 Proxy 서버 설정 방법
- “여전히 매력적인 선택지”··· C 언어 주요 강좌 4선
- A snap is a bundle of an app and its dependencies that works without modification across many different Linux distributions.
- Cgroup Driver 선택하기
- To write better, you need to develop a habit of writing.
- The React Framework in Deno.
- You can Surf Internet in Linux Terminal With These Command Line Browsers
- VS Code’s REST Client Plugin is All You Need to Make API Calls
- Safari deopt with a large ESBuild bundle.
- How the Linux kernel handles interrupts
- “작지만 유용한 기능 모음” 윈도우 10의 새 파워토이 사용 가이드
- 안전하고 간단하지만 아직 개발 중인 VPN, '와이어가드'란?
- Cloudflare Analytics 리뷰
- 알고리즘이 정보를 보호하는 방법, 암호 기법의 의미와 종류
- Implementation plan for speeding up CPython
- The Error Model
- My Eight-Year Quest to Digitize 45 Videotapes (Part One)
- Simultaneous Multithreading in Red Hat Enterprise Linux
- AWS and their Billions in IPv4 addresses
- Ridiculously fast unicode (UTF-8) validation
- Security Headers - Quickly and easily assess the security of your HTTP response headers.
- bunkerized-nginx - nginx Docker image secure by default.
- Why mmap is faster than system calls
- Programming by Doing
- Better Git diff output for Ruby, Python, Elixir, Go and more
- Building a computer in Conway's game of life
- Services in systemd: In-Depth Tutorial
- rdrview - Command line tool to extract the main content from a webpage, as done by the "Reader View" feature of most modern browsers.
- Openproject: Open-source project management software
- Faster Web App Delivery with PRPL
- Layoutit Grid – CSS Grids layouts made easy
- How to answer questions in a helpful way
- Temporal is the open source microservices orchestration platform for running mission critical code at any scale.
- 파이썬 3.9의 새로운 기능과 더 나아진 기능
- Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.
- Dev Hints - A ridiculous collection of web development cheatsheets.
- Glow is a terminal based markdown reader designed from the ground up to bring out the beauty—and power—of the CLI.
- 실전 Web Application 부하 테스트 - 2편
- My Favorite Free Courses to learn Docker and DevOps for Frontend Developers
- 고성능 서버/데이터베이스
- Mango - A MongoDB driver for Deno.
- You Don’t Need a Blockchain, You Need a Time-Series Database
- OkCupid가 오픈소스 검색엔진으로 Vespa를 선택한 이유
- Improving Postgres Connection Scalability: Snapshots
- Why we chose Java for our High-Frequency Trading application
- MySQL 8.0.22: Asynchronous Replication Automatic Connection (IO Thread) Failover
- Getting started with MongoDB: what I’ve learned
- Experience working with 600+TB ElasticSearch cluster
- Installing MySQL with Docker
- THE LONG ROAD TO HTTP/3 - SHORT HISTORY OF HTTP PROTOCOL
- MySQL Challenge: 100k Connections
- We deleted the production database by accident 💥
토요일, 10월 31, 2020
[B급 프로그래머] 10월 4주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
금요일, 10월 30, 2020
[유튜브 방송] (리눅스 업스킬 도전 #22-b) notepad++ 편집기로 EC2 원격 호스트의 파일 편집하기
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 추가 팁인 22-b편을 공개해드리겠다. 22-b편은 notepad++ 편집기로 EC2 원격 호스트의 파일을 편집하는 방법을 설명한다.
2020년 10월 30일자 [리눅스 업스킬 도전 #22-b] notepad++ 편집기로 EC2 원격 호스트의 파일 편집하기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 notepad++과 SFTP 지원 소개
- 03:00 플러그인 설치
- 04:24 플러그인 활성화와 원격 호스트 등록
- 07:30 테스트
방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 플러그인 설치
- 플러그인 --> 플러그인 관리 --> 사용가능 탭에서 NppFTP 설치
- 단계 2: 플러그인 활성화와 원격 호스트 등록
- 설치 후 플러그인 --> NppFTP --> Show NppFTP window
- 우측 NppFTP 영역에서 톱니 바퀴 누르고, Profile settings
- Profile settings 대화상자에서 Add new 누르고 프로파일 이름을 지정
- Connection 탭의 Hostname에 EC2 IP 주소, Connection Type을 SFTP, Port는 22번 그대로, username을 ubuntu(또는 ec2-user)로 설정
- Authentication 탭의 Try private key file authentication에 체크박스를 켜고, Private key file에 EC2의 개인키(주의: ppk 형식이 아니라 pem 형식!)를 설정
- Close를 눌러 닫고 나온다
- 우측 NppFTP 영역에서 툴바 가장 마지막 아이콘(Show message window)을 눌러 하단의 Output 영역을 활성화(접속시 문제가 생기면 로그를 확인할 수 있음)
- 단계 3: 테스트
- 우측 NppFTP 영역에서 접속 아이콘을 누르고 앞서 지정한 프로파일 이름을 선택하고 암호를 입력하면(pem 파일의 기본 암호는 비어 있으므로 그냥 OK) 로그인
- 원하는 파일을 더블클릭하면 편집 창에 뜨고, 수정 후 저장하면 자동으로 서버로 올라감
참고: 위와 같은 방법은 vi와 같은 편집기에 익숙하지 않을 경우에 사용하는 패턴이며, VSCode, Atom, 이클립스, 서브라임 등 다양한 IDE(또는 편집기)에서 응용 가능하다!
EOB목요일, 10월 29, 2020
[유튜브 방송] (리눅스 업스킬 도전 #22-a) EC2 인스턴스에서 계정 추가 후 공개 키 등록 방법
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 추가 팁인 22-a편을 공개해드리겠다. 22-a편은 EC2 인스턴스에 계정을 추가한 다음에 SSH 접속을 위해 공개 키를 등록하는 방법을 설명한다.
2020년 10월 29일자 [리눅스 업스킬 도전 #22-a] EC2 인스턴스에서 계정 추가 후 공개 키 등록 방법 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 계정 추가 복습
- 03:30 개인 키 생성(ppk)
- 05:31 공개 키 확인
- 06:38 공개 키 등록과 테스트
방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 개인 키 생성(웹)
- EC2 관리 화면(네트워크 및 보안 --> 키 페어)에서 [키페어 생성]으로 새로운 키 생성
- ppk 형식으로 다운로드!(주의: 보안을 강화하려면 puttygen에서 passphrase를 지정해야 한다)
- 단계 2: 공개 키 확인
- 공개 키는 puttygen으로 ppk 개인 키를 로드한 다음 상단에서 확인
- 단계 3: 해당 사용자 계정으로 들어간 다음에 공개키 등록과 테스트(터미널)
- $ mkdir .ssh
- $ chmod go-rwx .ssh
- $ cd .ssh
- 확인된 공개 키를 ~/.ssh/authorized_keys 파일에 추가
- $ chmod go-rwx authorized_keys
- 마지막으로 putty를 하나 더 뛰워 IP 주소와 개인 키를 지정한 다음에 로그인해서 정상 동작하는지 확인
수요일, 10월 28, 2020
[유튜브 방송] (개발자 영어 #4) 개발 관련 질문과 대답 방법
오늘은 개발자 영어 4편을 공개해드리겠다.
2020년 10월 28일자 [개발자영어 #4] '개발 관련 질문과 대답 방법 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 개발자 영어에서 확인할 수 있다.
2020년 10월 28일자 방송 내용은 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 0:00 개발자 영어 소개
- 1:14 질문과 대답이 중요한 이유
- 3:41 질문 제대로 하기
- 10:51 대답 제대로 하기
화요일, 10월 27, 2020
[독서광] (번역서) 게임 엔진 블랙 북: 울펜슈타인 3D
정말 간만에 번역서로 독자 여러분들을 찾아뵙게 되어 무척 기쁘다. 이번에 새로 선보일 책은 게임 엔진을 분석하는 블로거로 유명한 파비앙 상글라르가 집필한 게임 엔진 블랙 북 시리즈 중 첫번째 책인 울펜슈타인 3D다. PC에서 FPS의 신기원을 열었다고 평가받는 울펜슈타인을 만드는 과정에서 직면한 여러 가지 제약 사항을 극복하면서도 정말 재미있는 게임을 만들어나가는 내용이 담긴 이 책은 게임 제작자는 물론이고 게임 애호가들의 열정을 다시 한 번 불어일으키기게 충분하다는 생각이다.
무엇이 존 카맥을 움직여 이렇게 재미있는 게임을 만들게 했을까? 개발 팀원들 사이에서 협력은 어떻게 이뤄졌을까? 게임 파이프라인을 어떤 식으로 구축해 최단 기간 내에 완성도 높은 작품을 만들 수 있었을까? 단순히 연대기 순으로 개발 일지를 기록하는 방법도 있지만 이 책은 울펜슈타인의 원본 소스 코드를 중심으로 그 당시 열악한 하드웨어/소프트웨어 환경, 부족한 자료를 채우기 위한 아이디어 구상, 게임성을 높이기 위한 애셋과 지도 설계, 다양한 게임기로 이식 과정에서 일어난 절충안을 알기 쉽게 설명하고 있다.
번역과 교정지 검토가 끝난 다음에 출판사에 보낸 역자 서문(주의: 아래 글은 초안이며, 출판된 책과 다소 차이가 날 수 있음에 주의하자)을 여기 옮겨본다.
오픈 소스로 나온 소프트웨어를 분석하려면 가장 처음 버전부터 살펴보라는 조언이 있다. 가장 첫 버전은 이 소프트웨어가 추구하는 목표가 명확하며 아키텍처와 핵심적인 알고리즘이 한 눈에 들어오기 때문이다. 시간이 지날수록 사용자의 환경이나 요구에 따른 변화가 늘어나기 시작하며 꼭 있어야 하지는 않지만 있어도 좋은 기능이 추가되기 시작한다. 그리고 참여 개발 인원이 늘어남에 따라 일관성도 조금씩 균열이 가기 시작한다. 예외를 처리하기 위한 온갖 보호 코드가 들어가고 다양한 테스트 케이스가 추가된다. 어느 정도 안정화된 버전 3이 넘어가면서부터는 방대한 코드 기반이 자리를 잡게 되지만 그만큼 분석이 매우 어려워지고 전문적으로 프로젝트에 관여하지 않는 이상 소스코드에서 뭔가 더하거나 빼기 어려운 상황이 된다. 그렇다면 게임 부문은 어떨까? 대화 상자를 하나 띄우기 위해서도 온갖 프레임워크와 라이브러리 사용에 매몰되는 현 시점에서 진짜 게임 개발이란 무엇이며 게임의 핵심을 정확하게 파고드는 방법이 있긴 할까? 다행스럽게도 이드 소프트웨어가 공개한 울펜슈타인에서 답을 찾을 수 있다.
CPU가 장착된 물건을 보면 울펜슈타인을 포팅하려고 든다는 이야기가 탄생한 배경은 두 가지 때문이라는 생각이다. 먼저 소스 코드가 상위레벨(역공학으로 분석한 어셈블리어가 아닌 C와 같은 고급 프로그래밍 언어)로 존재해야 하며, 다음으로 재미있는 게임을 위한 핵심적인 알고리즘과 다양한 제한을 푸는 문제 해결의 열쇠가 소스 코드에 녹여져 있어야 한다. 울펜슈타인은 놀랍게도 기존에 바이너리 롬 이미지로만 존재하는 여느 게임과는 달리 두 가지 요건을 모두 충족하며 그 결과 뭔가 직접 만들고 싶어하는 개발자들이 다양한 환경에서 동작하게 이식 작업을 진행할 수 있었다. 울펜슈타인 애호가들은 지도를 편집하거나 애셋을 추가하는 방법으로 게임을 풍부하게 만들었고 최고의 실력자들은 자신이 보유한 컴퓨터나 게임기에서 동작할 수 있게 직접 소매를 걷어붙이고 뛰어들었다. 과거 추억이 떠올라 현재 보유한 컴퓨터에서 울펜슈타인을 돌려보는 애호가들도 많다. <[SW] Wolfenstein-3D 를 Windows용으로 컨버전 하기> 글에서는 윈도우 10에서 울펜슈타인을 돌리기 위해 개발 환경 설정부터 컴파일과 라이브러리 파일/애셋 설치에 이르기까지 전반적인 경험을 공유하고 있다. 개발 환경 구축이 어렵다면 비록 원본 코드와 거리가 멀긴 하지만 HTML5로 만들어진 코드를 이용해서 웹 브라우저에서 실행해볼 수도 있다. 무한한 가능성은 우리의 상상력이 제한할 뿐이다.
게임 업계에 울펜슈타인이 남긴 업적은 단순히 하드웨어적으로 적합하지 않아 보이는 업무용 PC에 3D 효과가 담긴 1인칭 게임의 가능성을 훌쩍 뛰어넘어서 이렇게 게임을 즐기고 만들고 싶어하는 모든 사람에게 불을 밝혀주는 등대가 되었다는 이정표라고 말해도 과언이 아니다. 게임을 만들고 싶어하는 많은 사람들이 울펜슈타인 코드를 읽으면서 시작했으며 처음 등장한지 28년이 지난 지금에 와서도 배울 교훈은 충분하다고 본다. 파편화되고 열악한 하드웨어, GPU는 고사하고 레지스터 레벨에서 저수준 조작을 가해야 가까스로 성능을 맞출 수 있는 그래픽 카드, 제한적인 메모리와 운영체제 지원 등 게임을 만들지 못할 이유를 열거하라면 끝도 없지만 창의력은 제약에서 나온다는 말이 있듯이 이드 소프트웨어의 열정적인 개발자들은 이 모든 어려움을 극복하고 FPS의 원형을 만들어내는 데 성공했으며 오픈소스로 공개하기 전부터 이미 다른 게임 제작자에게 엔진을 제공해 당시 게임 수준을 한 단계 높일 수 있었다.
그렇다면 호기심이나 장래 게임 제작의 뜻을 품고 울펜슈타인 코드를 보고 싶은 개발자라면 어디서 출발해야 할까? 지금은 존재하지도 않는 하드웨어와 찾기도 어려운 개발 환경을 이해하고 코드 이면에 숨어 있는 제약을 파악하는 과정은 결코 쉽지 않을 것이다. 다행히 이 책은 울펜슈타인이 동작하는 하드웨어 환경, 개발 환경, 소프트웨어 개발 과정에서 직면한 다양한 문제와 이를 해결하는 방안을 체계적으로 정리하고 있다. 원래 x86의 메모리 제약이 어떤 문제를 일으키며 이를 해소하기 위한 메모리 관리 기법은 무엇인가? 부동소수점 연산을 소프트웨어적으로 구현하려면 어떻게 해야 하는가? 그래픽 카드에 제약 사항을 해소하기 위해 어떤 방식을 사용해서 이중 버퍼링을 구현할까? 3차원 그래픽을 위해 수학을 어느 정도 알아야 하고 복잡한 연산을 회피하기 위해 어떤 기교를 부려야 할까? 적들의 상태를 관리하기 위해 상태 머신을 어떻게 구현해야 할까? 제한된 화면 해상도와 색상으로 어떻게 그럴싸하게 화면을 구성할까? 이와 같은 질문에 대한 대답이 이 책에 잘 정리되어 있다. 지금은 하드웨어가 발전하고 소프트웨어 개발 환경이 엄청나게 전문화되고 고도화되었기에 이 모든 질문과 대답이 무의미해보일지도 모르겠다. 하지만, 이런 온갖 제약에도 불구하고 사람들이 푹 빠져들만한 재미있는 게임을 만들기 위해 어떤 설계 결정을 내렸고 이런 설계 결정에 맞춰 알고리즘을 어떻게 구성하고 어떻게 구현했는지에 초점을 맞추면 또 다른 세계가 열릴 것이다.
이 책을 번역하는 동안 정말 간만에 옛날 생각이 많이 났었다. 80286 AT 컴퓨터에서 터보 C를 사용해 프로그램을 만들다 포인터 버그 때문에 프로그램이 시작하자 마자 바로 죽은 기억, 크롬 모니터와 허큘리스 그래픽 카드에서 게임을 하기 위해 램 상주 프로그램(TSR)인 CIMCGA를 설치한 기억, 사운드블래스터 사운드 카드를 구입한 다음에 IRQ 맞추고 충돌을 방지하느라 애를 먹은 기억, 게임을 할 목적으로 XMS/EMS 메모리 관리를 위해 AUTOEXEC.BAT과 CONFIG.SYS를 이리저리 수정한 기억 등이 지금도 엊그제처럼 생생하게 떠오른다. 역자와 마찬가지로 독자 여러분들도 1990년대 초반으로 돌아가 해커, 광기의 랩소디 : 세상을 바꾼 컴퓨터 혁명의 영웅들(복간판) 3부에 등장한 1980년대 게임 해커들의 정신을 이어 받아 몇 단계 진일보한 열정 넘치는 개발자들의 활약상을 함께 즐기면 좋겠다.
인터넷 서점에서 절찬 예약 판매 중이며, 과거 게임의 개발 역사가 궁금하신 분이라면 무척 흥미롭게 빠져들 것이다.
앞으로도 출판사에서 이런 고전을 펴내고야 만다는(한빛미디어 담당자에게 다시 한 번 감사 말씀 드린다) 어려운 결정을 내릴 수 있게 독자 여러분들의 많은 성원 부탁드리겠다.
EOB월요일, 10월 26, 2020
[개발자 이야기] (10월 24일) AWS는 IPv4를 몇 개 확보했을까?
2020년 10월 24일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2020년 10월 24일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 0:00 금주 새로운 소식 개괄
- 7:10 사고로 서비스용 데이터베이스를 날렸어요… 뉴뉴
- 10:09 Security Headers - HTTP 응답 헤더의 보안 수준 점검
- 13:06 bunkerized-nginx – 안전한 nginx 컨테이너 만들기
- 15:40 아틀라시안 JIRA/Confluence/Bitbucket 서버 판매 중단!
- 18:01 파이썬 3.9 개선 사항
- 22:33 devhints.io – 개발자를 위한 커닝 페이퍼
- 24:48 AWS는 IPv4를 몇 개 확보했을까?
- 27:33 mmap이 시스템 호출보다 빠른 이유
토요일, 10월 24, 2020
[B급 프로그래머] 10월 3주 소식(빅데이터/인공지능, 읽을거리 부문)
- 빅데이터/인공지능
- Analytics at Netflix: Who We Are and What We Do
- The Hardware Lottery
- Introducing TensorFlow Recommenders
- How randomized response can help collect sensitive information responsibly
- AI and Creativity
- A Recipe for Training Neural Networks
- 마켓70 제2F호 - 정보통신·자동차 관련 제품 12종 보유율 (팬데믹 이전)
- A Programmer’s Intuition for Matrix Multiplication
- Programming language Python is a big hit for machine learning. But now it needs to change
- 스마트하게 식단을 관리하는 딥러닝 기술
- 하루종일 띄어쓰기 교정만.. 난 AI 로봇의 비서인가[이슈&탐사]
- What is machine learning?
- Covid-19: The global crisis — in data
- The value of a shared understanding of AI models
- Awesome Data Engineering
- MS, '자동 이미지 캡션' 고도화··· "2배 더 정확"
- Emerging Architectures for Modern Data Infrastructure
- Meet the Excel warriors saving the world from spreadsheet disaster
- The science of wisdom
- Your Brain Makes You a Different Person Every Day
- Song stuck in your head? Just hum to search
- New deep learning models require fewer neurons
- Nemo: Data discovery at Facebook
- Tesla's 'Full Self-Driving' beta releases to some drivers on October 20th
- Interpreting Machine Learning Model
- The Gap: Where Machine Learning Education Falls Short
- 읽을거리
- To write better, you need to develop a habit of writing.
- Virtual events: 10 best practices and tips for speakers
- Why Skills Training Can’t Replace Higher Education
- 용서를 구하지 말고 의도를 밝혀라
- 누가 0.5도의 온도차를 느끼는가
- 마라샹궈를 가장 맛있게 먹는 방법에 대한 소고
- Why and How zk-SNARK Works
- John von Neumann, father of the computer revolution
금요일, 10월 23, 2020
[유튜브 방송] (리눅스 업스킬 도전 #21-c) busybox에서 심볼릭 링크를 걸어서 실행할 기능을 알아내는 방법
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 Q&A인 21-c편을 공개해드리겠다. 21-c편은 busybox에서 심볼릭 링크를 걸어서 실행할 기능을 알아내는 방법을 설명한다.
2020년 10월 23일자 [리눅스 업스킬 도전 #21-c] busybox에서 심볼릭 링크를 걸어서 실행할 기능을 알아내는 방법 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 argv 설명
- 03:20 간단한 프로그램 작성
- 06:57 심볼릭 링크를 걸고 PATH에 .(현재 디렉토리)를 추가하는 방법
- 09:11 실제 실행과 테스트
방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: argv[0]의 비밀: argv.c 코드는 다음과 같다.
#include <stdio.h> #include <string.h> int main(int argc, char **argv) { if (!strcmp(argv[0], "ls")) { printf("function ls is called\n"); } else if (!strcmp(argv[0], " pwd")) { printf("function chown is called\n"); } else if (!strcmp(argv[0], " echo")) { printf("function chgrp is called\n"); } else { printf("function is not recognized\n"); } return 0; }
- 단계 2: 빌드 후 실행
- $ gcc -o argv argv.c
- $ ln -s argv ls
- $ export PATH=".:$PATH"
- $ ls
화요일, 10월 20, 2020
[유튜브 방송] (리눅스 업스킬 도전 #21-b) (도커 컨테이너의 기반이 되는) chroot 소개
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 Q&A인 21-b편을 공개해드리겠다. 21-b편은 (도커 컨테이너의 기반이 되는) chroot와 루트 파일 시스템 구성에 필요한 프로그램을 통합해서 제공하는 busybox를 설명한다.
2020년 10월 20일자 [리눅스 업스킬 도전 #21-b] (도커 컨테이너의 기반이 되는) chroot 소개 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 chroot 설명
- 05:20 busybox 빌드와 설치
- 14:57 root 파일 시스템 생성
- 18:02 chroot로 생성된 root 파일 시스템 마운트하면서 셸 기동
방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: busybox 빌드와 설치
- $ wget https://busybox.net/downloads/busybox-1.32.0.tar.bz2
- $ tar xvpfj busybox-1.32.0.tar.bz2
- $ cd busybox-1.32.0
- $ head INSTALL
- $ sudo apt-get install libncurses5-dev libncursesw5-dev # 만일 curses.h가 없다는 오류가 발생할 경우 ncurses를 make menuconfig에 앞서 설치해야 한다
- $ make menuconfig # menuconfig 화면에서 Settings ---> 선택한 다음에 아래에 있는 Build static binary (no shared libs) (NEW)를 선택해 체크박스, 나머지는 기본값으로 두고 화면 하단의 <Exit> 누르고 설정 파일을 저장
- $ sudo apt-get install build-essential # 만일 C 컴파일러가 없을 경우
- $ make
- $ find . -name busybox
- $ ldd busybox
- $ busybox
- 단계 2: root 파일 시스템 생성
- $ cd ..
- $ mkdir root
- $ cd root
- $ mkdir bin
- $ cd bin
- $ cp ../../busybox-1.32.0/busybox .
- $ ln -s busybox ls
- $ ln -s busybox pwd
- $ ln -s busybox sh
- $ ln -s busybox cd
- 단계 3: chroot로 생성된 root 파일 시스템 마운트하면서 셸 기동
- $ cd ../..
- $ sudo chroot ./root /bin/sh
월요일, 10월 19, 2020
[개발자 이야기] (10월 17일) 서버리스 혁명이 지체되는 이유는?
2020년 10월 17일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2020년 10월 17일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 0:00 금주 새로운 소식 개괄
- 02:58 개발팀에 독약 같은 사람
- 05:05 윈도우 10에서 개발 환경 설정 총정리
- 06:59 130만개에 이르는 자바스크립트 라이브러리 비교 사이트
- 08:14 덮어놓고 구글 따라하다 망하는 기술
- 11:10 임시 그림으로 사용 가능한 고양이 이미지
- 11:52 서버리스 혁명이 지체되는 이유는?
- 15:45 HTTP Prompt – 상호대화식 명령행 HTTP 클라이언트
- 17:04 윈도우 10 비밀번호 분실했을 때 해결법
[유튜브 방송] (리눅스 업스킬 도전 #21-a) 우분투에서 한국어 로케일을 사용하려면 어떻게 해야 하나요?
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 Q&A인 21편-a 편을 공개해드리겠다. 21-a편은 우분투에서 한국어 로케일을 지정하는 방법을 설명한다.
2020년 10월 19일자 [리눅스 업스킬 도전 #21-a] 셸 스크립트 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 로케일이란?
- 02:20 로케일 설정 방법
Ubuntu Locale 한글로 바꾸기를 함께 살펴보기 바라며, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
- $ locale -a
- $ locale
- $ sudo dpkg-reconfigure locales
- $ sudo update-locale LANG=C.UTF-8 LANGUAGE
토요일, 10월 17, 2020
[B급 프로그래머] 10월 2주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
- 개발/관리도구
- ${...}: how to do string operations in bash
- delta - A viewer for git and diff output
- Announcing HashiCorp Waypoint
- Canonical introduces high-availability Micro-Kubernetes
- LintCode - Coding Interview Question Online Training System
- How Much Memory Does the Process Really Take on Linux?
- PCG, A Family of Better Random Number Generators
- Espruino JavaScript for Microcontrollers
- LDM - My Favorite ARM Instruction
- Java Annotated Monthly – October 2020
- READING CODE IS HARDER THAN WRITING IT
- '마이크로서비스, 모노리포, SRE'…덮어놓고 구글 따라하면 안 되는 기술들
- 네트워크 스위치와 허브, 라우터는 어떻게 다른 걸까
- Sale of amateur radio AMPRnet TCP/IP addresses raised $108 million
- Learning from Bugs and Testers: Testing Boeing 777 Full Flight Simulators
- Dockerfile Security Best Practices
- Low-Level Academy - TCP/IP fundamentals Exchanging Messages
- Snap!6 is here, and it's all about scale
- Windows 10에서 개발 환경 설정
- Memory Optimizations for Go Systems
- openbase - Choose the right package every time
- 새롭게 업데이트 된 VS Code Settings Sync 사용하기
- 흔한 C 프로그래밍 오류 4가지, '그리고 5가지 대처법'
- Sega Master System Architecture
- Cloudflare Introduces API Shield
- User-Agent Client Hints의 도입, UA 프리징을 대비하라
- Introducing NGINX Service Mesh
- VIM adventures
- Office Web Apps Viewer
- Extracting SSH Private Keys From Windows 10 ssh-agent
- A review of consensus protocols
- A List of Post-mortems!
- HTTP API 디자인 가이드
- XONSH - A Python-powered, cross-platform, Unix-gazing shell language and command prompt.
- Raymond Chen이 한글날에 밝히는 윈도우의 한글 자모 분리 현상
- Google’s Internal Data Show Engineers Found It Harder to Code From Home
- Why the Serverless Revolution Has Stalled
- placekitten - A quick and simple service for getting pictures of kittens for use as placeholders in your designs or code.
- 윈도우 10 비밀번호 분실했을 때 해결법
- Cognitive Complexity, Because Testability != Understandability
- How the HotSpot and Graal JVMs Execute Java Code
- Announcing the 0.8 Release of PyOxidizer
- HTTP Prompt is an interactive command-line HTTP client featuring autocomplete and syntax highlighting.
- 초보자에게 추천하는 svelte
- Volta’s job is to manage your JavaScript command-line tools, such as node, npm, yarn, or executables shipped as part of JavaScript packages.
- Summary of Computing Laws : Amdahl, Dennard, Gustafson, Little, Moore and More…!
- Beyond Moore’s Law: New solutions for beating the data growth curve
- How a Kubernetes Pod Gets an IP Address
- ShellSpec - A full-featured BDD unit testing framework for dash, bash, ksh, zsh and all POSIX shells
- COLLISION DETECTION
- xorpd.net - What if you knew how computers work?
- 서비스 메시가 데이터센터 네트워킹에서 중요한 이유
- “크롬 새 탭을 메모장으로” 화려하지 않아도 실용적인 마이 노트(My Notes)
- Git scraping: track changes over time by scraping to a Git repository
- Complete BBC Micro Games Archive
- 자바스크립트와 V8 엔진의 메모리 관리 프로세스
- bit is an experimental modernized git CLI built on top of git
- Coding Bootcamp VS University, 어떤 차이가 있을까요?
- Chrome is deploying HTTP/3 and IETF QUIC
- nb is a command line note-taking, bookmarking, archiving, and knowledge base application
- Google secretly adds a cool new tab feature to Chrome
- libcurl automatically replacing line feed with line feed + carriage return
- Introducing DigitalOcean App Platform: reimagining PaaS to make it simpler for you to build, deploy, and scale apps
- SDE Interview Questions
- Plausible: Self-Hosted Google Analytics alternative
- 롯데카드 사례 : 클라우드 컨테이너화를 통한 디지털 혁신 여정
- 40th Anniversary of The Ethernet
- Kubernetes: When to Use, and When to Avoid, the Operator Pattern
- Rethinking Task Size in SRE
- CQRS and Event Sourcing
- Programmable Search Engine by Google
- Diagram Maker: Open sourcing IoT visualization
- Kube DOOM - Kill Kubernetes pods using Id's Doom!
- Fortunately, I don't squash my commits
- How we ran a Unix-like OS (Xv6) on our home-built CPU with our home-built C compiler
- Darling - run macOS software on Linux
- HTTPS를 쓰면 패스워드를 평문으로 보내도 될까?
- FastCGI — The Forgotten Treasure
- Shenandoah in JDK 11 - Interview with Red Hat's Team
- chibicc: A Small C Compiler
- beantimer is a small tool which measures bean initialization time and order during application startup.
- Open-source self-hosted comments for a static website
- Editor.js - Next generation block styled editor. Free. Use for pleasure.
- RustStarterKit2020
- Why do we use the Linux kernel's TCP stack?
- A web of trust for npm
- Fomantic-UI - A community fork of Semantic-UI
- NestedText: A Human Friendly Data Format
- OBS 로지텍 웹캠 (c920) 설정 백업/복구 - WebCameraConfig
- 실용 파이썬 프로그래밍(Practical Python Programming 번역)
- JQuery to React: How we rewrote the HelloSign Editor
- Understand Django: Anatomy of an Application
- kubectl trace is a kubectl plugin that allows you to schedule the execution of bpftrace programs in your Kubernetes cluster.
- Awesome Philosophy Compsci
- 고성능 서버/데이터베이스
- Exponential growth in DDoS attack volumes
- How a 40KB Optimization Saved Us 50TB of Bandwidth
- Announcing pg_stat_monitor Tech Preview: Get Better Insights Into Query Performance in PostgreSQL
- Durability: Linux File APIs
- Why Kafka Is so Fast
- Arctype is the fast and easy-to-use SQL client for developers and teams
- CG/SQL: Easy, accurate code generation for SQLite
- 올해도 내년도 포스트그레SQL의 해다
- PostgreSQL 13 Features Distilled
- TIME for a WTF MySQL moment
- Best Practices for Querying and Scanning Data
목요일, 10월 15, 2020
[유튜브 방송] (리눅스 업스킬 도전 #20) 셸 스크립트
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 마지막 20편을 공개해드리겠다. 20편은 간단한 셸 스크립트 작성법을 설명한다.
2020년 10월 15일자 [리눅스 업스킬 도전 #20] 셸 스크립트 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 셸 스크립트 기초
- 01:26 단계 1) attacker 셸 스크립트 작성하기
- 08:25 단계 2) topattacker 셸 스크립트로 확장하기
원본 학습자료는 Day 20 - Scripting을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
- $ vim attacker
#!/bin/bash # # attacker - prints out the last failed login attempt # echo "The last failed login attempt came from IP address:" grep -i "disconnected from" /var/log/auth.log | tail -1 | cut -d: -f4 | cut -f7 -d" "
- $ chmod +x attacker
- $ ./attacker
- $ vim attacker
- 단계 2
- $ vim topattacker
#!/bin/bash # ## topattacker - list the most persistent attackers # if [ -z "$1" ]; then echo -e "\nUsage: `basename $0` <num> - Lists the top <num> attackers by IP" exit 0 fi echo " " echo "Persistant recent attackers" echo " " echo "Attempts IP " echo "-----------------------" grep "Disconnected from authenticating user root" /var/log/auth.log | cut -d: -f4 | \ cut -d" " -f7 | sort | uniq -c | sort -nr | head -$1
- $ chmod +x topattacker
- $ ./topattacker
- $ vim topattacker
수요일, 10월 14, 2020
[유튜브 방송] (리눅스 업스킬 도전 #19) 아이노드와 심볼릭 링크
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 19편을 공개해드리겠다. 19편은 아이노드와 하드 링크, 그리고 심볼릭 링크를 설명한다.
2020년 10월 14일자 [리눅스 업스킬 도전 #19] 아이노드와 심볼릭 링크 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 아이노드란 무엇인가?
- 00:39 단계 1) ls와 stat 명령으로 아이노드 확인보기
- 01:55 단계 2) ln 명령어로 하드 링크 걸고 확인하기
- 06:21 단계 3) ln -s 명령으로 심볼릭 링크 걸고 확인하고, 심볼릭 링크의 사용 용법을 살펴보기
원본 학습자료는 Day 19 - Inodes, symlinks and stat을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
- $ ls -li /etc/hosts
- $ stat /etc/hosts
- 단계 2
- $ stat /etc/passwd
- $ sudo ln /etc/passwd link1
- $ ls -li link1
- $ stat link1
- $ stat /etc/passwd
- 단계 3
- $ ln -s /etc/passwd link2
- $ ls -li link2
- $ stat link2
- $ which vim
- $ ls -li /usr/bin/vim
- $ ls -li /usr/bin/view
- $ ls -li /etc/alternatives/vim
- $ ls -li /etc/alternatives/view
- $ ls -ltr /etc/rc2.d/*
- 참고: alternatives 패키지는 자바나 파이썬 여러 버전을 관리(심볼릭 링크를 체계적으로 걸어줌)
화요일, 10월 13, 2020
[유튜브 방송] (리눅스 업스킬 도전 #18) 로그 파일 회전시키기
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 18편을 공개해드리겠다. 18편은 아파치 웹 서버의 로그 회전 방법을 설명한다.
2020년 10월 13일자 [리눅스 업스킬 도전 #18] 로그 파일 회전시키기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 로그 회전이란 무엇인가?
- 00:58 단계 1) cron에서 로그 회전에 대한 관련 파일 찾기와 아파치 로그 회전 파일 설정 확인하기
- 03:17 단계 2) 아파치 로그 회전 방법 설명
원본 학습자료는 Day 18 - Log rotation을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
- $ less /etc/cron.daily/logrotate
- $ less /etc/logrotate.conf
- $ ls -al /etc/logrotate.d/
- $ less /etc/logrotate.d/apache2
/var/log/apache2/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if invoke-rc.d apache2 status > /dev/null 2>&1; then \ invoke-rc.d apache2 reload > /dev/null 2>&1; \ fi; endscript prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript }
- 단계 2(옵션 분석)
- daily: 매일
- missingok: 로그 파일이 없어도 문제 없음
- rotate: 전체 회전될 파일 수
- compress: 회전될 로그 파일을 압축
- delaycompress: 회전되면서 바로 압축되지 않고 한 템포 늦춤
- notifempty: 비어있을 경우 회전하지 않음
- sharedscripts: 여러 로그 파일이 있을 경우에도 한 번만 postrotate와 prerotate 스크립트를 수행
- postrotate: 회전한 다음에 수행할 스크립트
- prerotate: 회전하기 전에 수행할 스크립트
월요일, 10월 12, 2020
[개발자 이야기] (10월 10일) 구글 등 주요 회사의 [코딩 인터뷰] 살펴보기
2020년 10월 10일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2020년 10월 10일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 0:00 금주 새로운 소식 개괄
- 3:44 돈을 제대로 썼을까? - 엔지니어를 위한 짧은 (그러나 교훈적인) 이야기
- 7:30 구글 등 주요 회사의 [코딩 인터뷰] 모음
- 11:30 git 연습
- 12:38 NestedText: JSON과 YAML은 가라!
- 14:53 egghead – 프론트엔드 개발자를 위한 동영상 모음
- 15:47 셸 히스토리를 중앙 저장소에 모아보자
- 16:55 깃허브 – 코드 스캐닝 서비스 시작
- 18:41 요즘 컴파일러의 최적화 수준
[유튜브 방송] (리눅스 업스킬 도전 #17) 소스 코드로 프로그램 컴파일하고 설치하기
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 17편을 공개해드리겠다. 17편은 직접 소스 코드를 내려 받아 프로그램을 컴파일하고 설치하는 방법을 설명한다.
2020년 10월 12일자 [리눅스 업스킬 도전 #17] 소스 코드로 프로그램 컴파일하고 설치하기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 소스코드로 프로그램을 컴파일하고 설치해야 하는 시나리오
- 00:40 단계 1) nmap 소스 코드 얻고 컴파일 방법 소개
- 02:45 단계 2) 필요한 컴파일러와 도구 설치와 설정/컴파일 절차 소개
원본 학습자료는 Day 17 - From the source를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
- 웹 브라우저로 https://nmap.org/ 방문해서 다운로드 링크 따라가기
- 'Source Code Distribution' 항목에서 위치 파악: https://nmap.org/dist/nmap-7.80.tar.bz2
- $ wget -v https://nmap.org/dist/nmap-7.80.tar.bz2
- 컴파일 방법 숙지: https://nmap.org/book/inst-source.html
- 단계 2
- $ ls -ltr
- $ tar xvpfj nmap-7.80.tar.bz2 # j 옵션은 bzip2 압축을 해제하는 경우에 사용, 참고) gzip은 z 옵션
- $ cd nmap-7.70
- $ head INSTALL
- $ sudo apt install build-essential # C 컴파일러 설치
- $ sudo apt install flex # flex 설치
- $ sudo apt install bison # yacc 신형 버전 설치
- $ ./configure
- $ make
- $ make install
- $ sudo updatedb
- $ which nmap
- $ nmap -V
토요일, 10월 10, 2020
[B급 프로그래머] 10월 1주 소식(빅데이터/인공지능, 읽을거리 부문)
- 빅데이터/인공지능
- A Guide to Deep Learning and Neural Networks
- Human Learn - Machine Learning models should play by the rules, literally.
- ML Engineer Guide: Feature Store vs Data Warehouse
- Optuna: A hyperparameter optimization framework
- Configuring Google Colab Like A Pro
- VSCode on Google Colab
- State of AI 2020 보고서 [구글 Slide, 183P]
- What makes a data analyst excellent?
- Effective testing for machine learning systems.
- Rethinking human-AI interaction
- Excel Error Believed to Have Caused UK to Lose 15,841 Covid-19 Tests
- Jupyter Notebooks Gallery - Top 10 Jupyter notebooks
- AI 챗봇 아직은 일렀나… 유통업계 챗봇 서비스 속속 ‘종료’
- igel - A delightful machine learning tool that allows you to train/fit, test and use models without writing code
- Faster than Light in Our Model of Physics: Some Preliminary Thoughts
- 프로젝트 기록 - 실전 딥러닝용 이미지 전처리
- Web Neural Network API
- LIKE OIL LEADS TO GLOBAL WARMING... - DATA LEADS TO SOCIAL COOLING
- How to Get Hired as a Machine Learning Engineer
- Towards ML Engineering: A Brief History Of TensorFlow Extended (TFX)
- 김진철의 How-to-Big Data | 빅데이터의 미래 (11)
- Sum-of-Three-Cubes Problem Solved for ‘Stubborn’ Number 33
- bbox-visualizer - this package helps users draw bounding boxes around objects, without doing the clumsy math that you'd need to do for positioning the labels.
- 읽을거리
- 모바일에서 잘 읽히는 글을 만드는 에디팅 수칙
- 강의 녹화를 위한 기자재 가이드 - 하드웨어, 카메라, 마이크 등
- '제법 쓸 만 하다' 무료 동영상 편집 SW 5선
- [온라인 광고 기초] 페이스북, 구글, 카카오 광고 용어 사전
- 페이스북이 애플 보고 뭐라 하는 장면에 인앱 결제 논쟁의 역설과 해법이 있다
- 책도 밑그림을 가지고 읽어야 한다. 빌 게이츠와 일론 머스크의 독서법은 같다.
- 다빈치 리졸브를 활용한 영상 색보정 온라인 강의(한국 콘텐츠 아카데미)
- (번역) 뉴스레터에 대한 소고
- Your Response to Mistakes Defines You
- 앱스토어 논란을 단순히 애플의 갑질로만 볼 수 없는 이유
- '내 영상은 왜?' 유튜브 조회수의 현실
- 가구소득과 수학성적
- Fail like a scientist
- OBS 로지텍 웹캠 (c920) 설정 백업/복구 - WebCameraConfig
- OBS STUDIO – OBS 스튜디오 가이드
- 열고 닫는 자동차 창문의 역사
- Writing a book: is it worth it?
- 미래의 리더에게 필요한 3가지 중추 '머리, 심장, 손'
- Nearly half of Americans who rely on YouTube for news watch independent channels
- (구글) 개발자 프로그램 정책 미리보기: 결제
- [인터뷰] '베테랑'이란 무엇인가, T1 '페이커' 이상혁
목요일, 10월 08, 2020
[유튜브 방송] (리눅스 업스킬 도전 #16) tar와 친구들
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 16편을 공개해드리겠다. 16편은 tar 명령으로 아카이브를 만들고 푸는 방법을 설명한다.
2020년 10월 8일자 [리눅스 업스킬 도전 #16] tar와 친구들 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 tar 명령 역사 소개
- 02:23 단계 1) 기본적인 사용법
- 05:40 단계 2) 실제 예제
- 08:47 단계 3) tar로 디렉토리 옮기기
원본 학습자료는 Day 16 - 'tar' and friends...를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
- $ tar cvpf myinits.tar /etc/init.d/
- $ gzip myinits.tar
- $ tar cvpfz myinits.tgz /etc/init.d/
- 단계 2
- $ mkdir tarsample
- $ cd tarsample
- $ gzip -d myinits.tar.gz
- $ tar xvpf myinits.tar
- $ ls -al ./etc/
- $ rm -rf ./etc
- $ tar xvpfz myinits.tgz
- $ ls -al ./etc/
- $ rm -rf ./etc
- 단계 3(보너스)
- $ tar cvpf - /etc/init.d | (cd /home/ubuntu/tarsample; tar xvpf -)
- $ ls -al ~/etc/
- $ rm -rf ~/etc
- $ tar cvpf - /etc/init.d | tar xvpf - -C /home/ubuntu/tarsample
- $ ls -al ~/etc/
- $ rm -rf ~/etc
- $ cp -a /etc/init.d /home/ubuntu/tarsample
수요일, 10월 07, 2020
[유튜브 방송] (리눅스 업스킬 도전 #15) 우분투 패키지 저장소 추가하기
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 15편을 공개해드리겠다. 15편은 우분투 패키지 저장소 추가 방법을 설명한다.
2020년 10월 7일자 [리눅스 업스킬 도전 #15] 우분투 패키지 저장소 추가하기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 우분투 패키지 저장소(Personal Package Archive (PPA)) 소개
- 01:36 단계 1) 현재 패키지 목록 확인
- 04:36 단계 2) 우분투 패키지 저장소 추가와 이 저장소로부터 PHP 7.3 버전 설치하기
원본 학습자료는 Day 15 - Deeper into repositories...와 How to Install PHP on Ubuntu 18.04를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
- $ less /etc/apt/sources.list
- $ apt-cache dump | less
- $ apt-cache dump | grep "Package:" | wc -l
- $ sudo apt udpate
- $ sudo apt install netperf
- 단계 2
- $ apt-cache dump | grep "php7.3" | less
- $ sudo apt install software-properties-common
- $ sudo add-apt-repository ppa:ondrej/php
- $ sudo apt update
- $ sudo apt install php7.3 php7.3-common php7.3-opcache php7.3-cli php7.3-gd php7.3-curl php7.3-mysql
- $ php -v
화요일, 10월 06, 2020
[유튜브 방송] (리눅스 업스킬 도전 #14) sudo 권한 주기
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 14편을 공개해드리겠다. 14편은 특정 사용자에게 sudo 권한을 주는 방법을 설명한다.
2020년 10월 6일자 [리눅스 업스킬 도전 #14] sudo 권한 주기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 sudo 권한 소개
- 00:48 단계 1) 사용자 추가 후 사용자 관련 파일 확인
- 04:18 단계 2) sudo 권한 추가 예제
원본 학습자료는 Day 14 - Your little helper...를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
- $ su - ubuntu
- $ id
- $ su - jaypark
- $ id
- $ less /etc/paswd
- $ less /etc/group
- $ less /etc/shadow
- $ id
- 단계 2
- $ less /etc/sudoers
- $ sudo usermod -a -G sudo jaypark
- $ sudo su - jaypark
- $ id
- $ sudo /bin/bash
- $ sudo su -
- $ sudo -i
월요일, 10월 05, 2020
[유튜브 방송] (리눅스 업스킬 도전 #13) 파일 접근 허가 기초와 사용자 추가
[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 13편을 공개해드리겠다. 13편은 파일 접근 허가 기초와 사용자 추가 방법을 설명한다.
2020년 10월 5일자 [리눅스 업스킬 도전 #13] 파일 접근 허가 기초와 사용자 추가 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 파일 접근 허가 기초
- 01:56 단계 1) chmod 명령을 사용한 사용자 접근 허가 변경
- 04:26 단계 2) adduser 명령을 사용한 사용자 추가와 usermod 명령을 사용한 그룹 추가
원본 학습자료는 Day 13 - Who has permission?를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1
-rw------- 1 steve staff 4478979 6 Feb 2011 private.txt -rw-rw-r-- 1 steve staff 4478979 6 Feb 2011 press.txt -rwxr-xr-x 1 steve staff 4478979 6 Feb 2011 upload.bin 사용자, 그룹, 나머지에 대한 접근허가를 -rwx__rwx__rwx 세 부분으로 나눠 지정함
- $ touch permission.txt
- $ ls -al permission.txt
- $ chmod u-w permission.txt
- $ ls -al permission.txt
- $ chmod o-r permission.txt
- $ ls -al permission.txt
- $ vi permission.txt
- $ chmod u+w permission.txt
- $ vi permission.txt
- 단계 2: useradd 대신 adduser! (참고: MAN(useradd(8)) useradd is a low level utility for adding users. On Debian, administrators should usually use adduser(8) instead.)
- $ sudo adduser jaypark
- $ su - jaypark
- $ id
- $ ls -al /var/log/auth.log
- $ less /var/log/auth.log
- $ usermod -a -G adm jaypark
- $ id
- $ less /var/log/auth.log
토요일, 10월 03, 2020
[B급 프로그래머] 9월 5주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
- 개발/관리도구
- Understanding How UUIDs Are Generated
- Declarative Shadow DOM
- egghead - Learn the best JavaScript tools and frameworks from industry pros. Video tutorials for badass web developers.
- Escaping strings in Bash using !:q
- Heapothesys - an Open-Source GC Latency Benchmark by Amazon Corretto
- Typography in 8 bits: System fonts
- Getting started with Svelte
- Bringing the browser developer tools to Visual Studio Code
- Server-side Showdown: Apache vs NGINX
- Level up your shell history with Loki and fzf
- A Year with Java 11 in Production!
- C++: The Good Parts
- kitty - the fast, featureful, GPU based terminal emulator
- Code scanning is now available!
- 3270font: A font for the nostalgic
- Cloudflare Web Analytics
- From Zero to main(): How to Write a Bootloader from Scratch
- Design Notes(디자인에 사용할 여러 가지 자원을 모아놓은 사이트)
- How To Reduce Your Kubernetes Cost
- pollo - an extensible Docker-based Platform as a Service (PaaS)
- How India Censors The Web
- Elsa is a minimal, fast and secure runtime for Javascript and Typescript written in Go, leveraging the power from QuickJS.
- C’s Biggest Mistake
- 가상 머신, 거의 모든 IT 혁신의 출발점
- What's new with rdiff-backup?
- 3 open source alternatives to Confluence
- Analyze Linux startup performance
- 미래의 리더에게 필요한 3가지 중추 '머리, 심장, 손'
- Wireflow - flow chart collaboration app
- TIC-80 tiny computer 0.80.1344
- AVC - AWS Video Catalog is a website that collects all the official Amazon videos related to each individual AWS Service and categorizes them in a way that makes it easy to find what you are looking for.
- Workers Durable Objects Beta: A New Approach to Stateful Serverless
- 국내 (개발) 블로그를 모아서 보여주는 사이트
- All duckduckgo bang operators on one page (metasearch tool)
- 파이썬 모듈과 패키지(동영상)
- Go: Goroutine Leak Detector
- It used to be simpler to teach (UNIX)
- devhints - Rico's cheatsheets
- PHP Annotated – September 2020(한국어 번역)
- Fully documented source code for Elite on the BBC Micro
- 개발자를 위한 정보 검색 팁
- RemNote – 공부하고 글쓰는 사람을 위한 강력한 노트 도구
- duf - Disk Usage/Free Utility (Linux, BSD & macOS)
- Adobe unveils ambitious multi-year vision for PDF: Introduces Liquid Mode
- Stevey's Google Platforms Rant
- Welcome to the learnsqlonline.org free interactive SQL tutorial.
- Stop Asking Me to "Sign Up"
- A Short Story for Engineers
- LEd is an open-source 2D level editor, with a strong focus on user-friendliness.
- jitsi - More secure, more flexible, and completely free video conferencing
- urlcat - Build correct URLs easily.
- Ruby 3.0.0 Preview 1 Released
- Visual and interactive way to learn Git
- Welcome to the learncs.org free interactive C# tutorial.
- Liteboard provides a decentralized lightweight online lecture experience.
- 뱅크샐러드는 어떻게 레거시 서비스를 박살 내는가
- 컴파일러 최적화의 힘
- Introducing Luna, Amazon's cloud gaming service where it's easy to play great games on devices you already own. No waiting for lengthy downloads or updates — just play.
- 크롬 확장프로그램 개발⛏️ 회고
- Monitoring Linux Logs with Kibana and Rsyslog
- Oracle Cloud 방화벽 설정 (http/https 특정 포트 열기)
- Spring Professional Certification Study Guide
- How expensive is integer-overflow trapping in C++?
- Microservices Adoption in 2020
- Costs and Benefits of .NET Application Migration to the Cloud
- 5 Key Ways the Kubernetes Architecture Has Evolved in 5 Years
- From Monolith to Event-Driven: Finding Seams in Your Future Architecture
- Enabling Distributed Tracing for Microservices With Jaeger in Kubernetes
- C++ 14 기능 지원부터 벡터 API까지··· JDK 16, 기능 구체화
- Java 15 Released
- Biscuit: An OS kernel in a high-level language
- Cloud Native is about Culture, Not Containers
- Modern Banking in 1500 Microservices
- Porting ScreenPlay from QMake to CMake: A story on why CMake is actually pretty nice in 2020.
- 군더더기 없는 파이썬 코드를 위한 타입 체커 4종
- 업데이트 : 누구나 할 수 있는 실용적인 라즈베리 파이 프로젝트 10선
- The Ultimate Guide to Web Performance 🚀
- How To : iOS 14의 앱 보관함 사용법
- JVM 메모리 해부학
- Welcome to the LearnPython.org interactive Python tutorial.
- X-COM
- Here’s How I Solved a Weird Bug Using Tried and True Debugging Strategies
- A Picture of Java in 2020
- View PDF files in Firefox or choose another viewer
- How to install software with Ansible
- Essential Cheat Sheet: Convert jQuery to JavaScript
- What's the largest amount of bad code you have ever seen work?
- Get my free ebooks: JavaScript, Node, React, C
- James Bottomley's random Pages
- Game Source Code Collection
- ErrorLens turbo-charges language diagnostic features by making diagnostics stand out more prominently,
- Klipse is a Javacript plugin for embedding interactive code snippets in tech blogs.
- 유용한 테스트 케이스를 위한 개발자의 자세
- Rubyspeed is a basic proof of concept (horribly hacked together) that allows annotating method declarations to automatically be specialized and compiled to C.
- Shape Up v 1.8, 2019 edition - Stop Running in Circles and Ship Work that Matters
- Lessons from DAZN: Scaling Your Project with Micro-Frontends
- Principles for Microservice Design: Think IDEALS, Rather than SOLID
- Best Practices for Web Developers with Webhint - Rachel Simone Weil at OpenJS World
- Performance vs. New Features: It Doesn’t Have to Be a Zero-Sum Game
- Is the AWS Free Tier Really Free?
- Introduction to Computer Graphics
- Why Not Rust?
- The Little Things: Speeding up C++ compilation
- IP Address Tools Online
- Vue 3 가볍게 훑어보기
- 개발자를 위한 추천 도서(마인드맵)
- CDK Patterns is more than "just AWS CDK examples"
- Java 9 – Javadoc Improvement
- 고성능 서버/데이터베이스
- Store and Access Time Series Data at Any Scale with Amazon Timestream – Now Generally Available
- dbcrossbar is an open source tool that copies large, tabular datasets between many different databases and storage formats.
- MySQL: Import CSV, not using LOAD DATA
- urkel - An optimized and cryptographically provable key-value store. Written in C.
- MySQL 쓰면서 하지 말아야 할 것 17가지
- Mastering PostgreSQL Administration(PDF)
- B-tree indexes - learn more about the heart of PostgreSQL
- Ora2Pg - Moves Oracle and MySQL database to PostgreSQL
- How we(Timescale) are building a self-sustaining open-source business in the cloud era (version 2)
- Database Version Control With Liquibase
- Lessons Learned from Running Postgres 13: Better Performance, Monitoring & More