- 개발/관리도구
- Software Systems Need Skin in the Game
- git merge conflict을 어떻게 방지할까
- Cockpit - The easy-to-use, integrated, glanceable, and open web-based interface for your servers
- Checked C by Microsoft
- sysPass - Intuitive, secure and multiuser password manager
- 12 requests per second - A realistic look at Python web frameworks
- 지메일의 골칫거리, 오래된 이메일을 간단히 정리하는 방법
- How Using Modern JavaScript May Improve Performance
- Why is it so hard to see code from 5 minutes ago?
- Dapr helps developers build event-driven, resilient distributed applications.
- Ruby Garbage Collection Deep Dive: Tri-Color Mark and Sweep
- Why did I leave Google or, why did I stay so long?
- 9xbuddy - 모든 비디오 다운로더 (9xbuddy.in)
- How NASA Designed a Helicopter That Could Fly Autonomously on Mars
- Learn Makefiles - With the tastiest examples
- 잘 나가는 IT기업들이 급구하는 ‘찐’ 개발자 덕목 세 가지
- Working with Embed in Go 1.16 Version
- ray.so - Create beautiful images of your code
- Announcing .NET 6 Preview 1
- "파악하고, 예방하고, 수정하자" 구글, 오픈소스 취약점 해결 위한 프레임워크 제안
- 다른 개발자들은 요즘 잘 나간다는데... '패배자같은 개발 직무' 탈출법
- “첫 일자리 찾는 신입 개발자라면 ‘리액트’ 배워라”
- ‘알아 두면 좋을’ 안드로이드의 숨은 기능 10가지
- '해커와 화가' 책 제목의 유래 (폴 그램 YC 창시자 이야기)
- wavve 뽀로로 사태를 점검합니다
- VT-69 portable data terminal.
- Service Mesh Ultimate Guide: Managing Service-to-Service Communications in the Era of Microservices
- How to Avoid Cascading Failures in Distributed Systems
- How to really learn Go
- Why is esbuild fast?
- Evergreen v5 - React UI 프레임워크 (evergreen.segment.com)
- Analyzing Clubhouse for fun and profit(한국어)
- FastAPI Boilerplate
- iptables: How Kubernetes Services Direct Traffic to Pods
- What security does a default OpenBSD installation offer?
- An Improved Thread with C++20
- Migrating Monoliths to Microservices with Decomposition and Incremental Changes
- Python strings are immutable, but only sometimes
- Faster JavaScript calls
- OWASP Cheat Sheet Series
- How to measure interrupt CPU overhead when IRQ time accounting is disabled?
- Rustlings - 버그 수정하며 Rust 언어 배우기
- ShareX - 윈도우용 무료 캡쳐 도구 (getsharex.com)
- 코딩 플레이그라운드 만들며 맛보는 요즘 FE 개발 환경 Part 1
- Kafka for Engineers
- No code is a lie
- A python script to download courses from Khan Academy using youtube-dl and beautifulsoup4.
- wasmer-go - A complete and mature WebAssembly runtime for Go based on Wasmer.
- 프로그래밍 관련 자료 모음(한국어, 분량이 엄청남!)
- Tutorial - Write a Shell in C
- Understanding Big O
- Timezone Bullshit
- The worst of the two worlds: Excel meets Outlook
- How to use Docker Security Scan Locally
- Alternative Shells
- SVG: The Good, the Bad and the Ugly
- What is some existing documentation on Linux memory management?
- svgrepo - Browse 300.000+ SVG Vectors and Icons
- Short Fat Engineers Are Undervalued
- 클라우드 스토리지 NextCloud 설치 방법
- Explore binaries using this full-featured Linux tool
- Joplin is a free, open source note taking and to-do application, which can handle a large number of notes organised into notebooks.
- "M1은 느리고 호환성도 문제" 인텔의 '애플 디스'는 사실일까
- Computer Networks: A Systems Approach (Book)
- 접속 환경별로 SSH 배경색상 변경하기 (stevenwadejr.com)
- Welcome to the website for the Pod Manager tool (podman).
- New EC2 T4g Instances – Burstable Performance Powered by AWS Graviton2 – Try Them for Free
- Kubernetes Failure Stories
- Cookin' with Rust
- What the f*ck Python! 😱
- Beej's Guide to Network Programming
- Improving how we deploy GitHub
- Deployment reliability at GitHub
- Free Spring Boot Projects with Source Code
- The Great Suspender에 멀웨어가 숨어있었군요.
- Patterns of Distributed Systems
- Researcher Breaches Systems of Over 35 Companies, Including Apple, Microsoft, and PayPal
- Web Scraping 101 with Python
- hello (also known as helloSystem) is a desktop system for creators with a focus on simplicity, elegance, and usability (for FreeBSD).
- CS193p - Developing Apps for iOS(Standford)
- The InfoQ eMag: Re-Examining Microservices after the First Decade
- Performance Analysis for Arm vs x86 CPUs in the Cloud
- POSIX Threads Programming
- Nasdaq Decodes : 테크 트렌드 2021 [6p PDF]
- IntelliJ IDEA 2021.1 EAP 1 Supports Java 16
- Block Profiling in Go
- Browser fuzzing at Mozilla
- A look at GSM (security)
- Glances is a cross-platform monitoring tool which aims to present a large amount of monitoring information through a curses or Web based interface.
- Remotion - React로 programmatically하게 동영상 만들기
- This web page contains a free electronic version of my self-published textbook Algorithms
- Turning an old Amazon Kindle into a eink development platform
- 네트워크는 왜 이렇게 생긴걸까?
- What is Complexity Science?
- Blog with Markdown + Git, and degrade gracefully through time
- Buildpacks vs Dockerfiles
- Why you should migrate everything from Linux to BSD
- MVP와 PoC, Prototype, Pilot 차이
- Change your MAC address with a shell script
- tusk - Short-lived anonymous feedback_
- What is the difference between LL and LR parsing?
- Faux86: A portable, open-source 8086 PC emulator for bare metal Raspberry Pi
- Soldat is a unique 2D (side-view) multiplayer action game.
- Performance impact of ad blockers
- Async/Await
- A visual guide to SSH tunnels
- Operating Systems: Three Easy Pieces
- What is The Mediocre Programmer?
- Supercookie uses favicons to assign a unique identifier to website visitors.
- Dependency가 많은 프로젝트의 스케줄 관리 방법
- Seeking the Productive Life: Some Details of My Personal Infrastructure
- iamlive - Generate a basic IAM policy from AWS client-side monitoring (CSM)
- V8 release v8.9
- The “Programming for Cats” aptitude test
- Agora - Clubhouse Is Just One Of The Possibilities
- awesome-selfhosted - Self-hosting is the practice of locally hosting and managing applications instead of renting from SaaSS providers.
- EPUB 변환기
- Don't use functions as callbacks unless they're designed for it
- AWS Cheat Sheets
- What CSS Developers Do and Why You Need One
- JavaScript for impatient programmers (ES2021 edition)
- Application Level Encryption for Software Architects
- These are your favorite GitLab engineering stories
- Spyder – a free and open source scientific environment written in Python
- 고성능 서버/데이터베이스
- Migrating to SQLAlchemy 2.0
- SQLite에서는 작은 쿼리 수백개도 효율적 (sqlite.org)
- 구글 고(Go) 언어, 그래프 기반 ORM 제공
- Role of Foreign Data Wrappers in Migrations to PostgreSQL
- Change Data Capture in Postgres With Debezium
- GraalVM inside Oracle Database
- '대체물에서 그린필드로'··· 변화하는 포스트그레SQL 시장
- 미래형 데이터센터에 필요한 일자리와 스킬, 지금까지와는 다르다?
- An SQL solution for Jupyter
- Why I Built Litestream (for SQLite3)
- Why is SQL so successful?
- A First Glance at Amazon Aurora Serverless RDS
- AWS Announces Amazon Aurora Supports PostgreSQL 12
- 클라우드 빅3, 데이터센터 투자 재개…삼성·SK하이닉스도 웃는다
- Petabyte tape cartridges are coming down the line
토요일, 2월 20, 2021
[B급 프로그래머] 2월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
화요일, 2월 16, 2021
[유튜브 방송] (즐겁게 배우는 SQL #50) 윈도우 함수 - 윈도우 함수(2)
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 50편을 공개해드리겠다. 50편은 몇 가지 윈도우 함수를 소개한다.
2021년 2월 16일자 [즐겁게 배우는 SQL #50] 윈도우 함수 - 윈도우 함수(2) 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 윈도우 함수 개괄
- 01:02 (값) LAST VALUE(정해진 윈도우 프레임 내에서 마지막 행의 값을 반환)
- 04:55 (값) LEAD(직후에 물리적으로 떨어진 오프셋 값을 가져오기)
- 08:20 (값) NTH_VALUE(정해진 윈도우 프레임 내에서 N번째 행의 값을 반환)
- 11:34 (순위) NTILE(순서가 있는 결과 집합을 정해진 버킷에 나눠서 넣기)
- 14:51 (순위) PERCENT_RANK(순위를 퍼센트로 보여줌)
- 17:13 (순위) RANK(순위를 보여줌, 중복 가능, 빈 순서 있음)
- 20:51 (순위) ROW_NUMBER(연속적인 정수를 부여, 중복 불가능)
온라인 실습 사이트는 SQL Online IDE에서 진행하면 되고, 원본 학습자료는 SQLite Window Functions를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 윈도우 함수 개괄
- 윈도우 함수는 현재 행을 기준으로 일련의 행 집합에 대해 연산을 수행한다
- 집계 함수는 계산 결과를 한 행으로 합치는 특성이 있는 반면에 윈도우 함수는 원래 행을 그대로 유지하는 특성이 있다
- 값과 순위를 매기는 함수가 대표적이다.
- 단계 2: (값) LAST VALUE(정해진 윈도우 프레임 내에서 마지막 행의 값을 반환)
- SQL> SELECT Name, printf ( '%.f minutes', Milliseconds / 1000 / 60 ) AS Length, LAST_VALUE ( Name ) OVER ( ORDER BY Milliseconds RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS LongestTrack FROM tracks WHERE AlbumId = 4;
- SQL> SELECT AlbumId, Name, printf ( '%.f minutes', Milliseconds / 1000 / 60 ) AS Length, LAST_VALUE ( Name ) OVER ( PARTITION BY AlbumId ORDER BY Milliseconds DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS ShortestTrack FROM tracks;
- 단계 3: LEAD(직후에 물리적으로 떨어진 오프셋 값을 가져오기)
- SQL> CREATE VIEW CustomerInvoices AS SELECT CustomerId, strftime('%Y',InvoiceDate) Year, SUM( total ) Total FROM invoices GROUP BY CustomerId, strftime('%Y',InvoiceDate);
- SQL> SELECT * FROM CustomerInvoices ORDER BY CustomerId, Year, Total;
- SQL> SELECT CustomerId, Year, Total, LEAD ( Total,1,0 ) OVER ( ORDER BY Year ) NextYearTotal FROM CustomerInvoices WHERE CustomerId = 1;
- SQL> SELECT CustomerId, Year, Total, LEAD ( Total,1,0 ) OVER ( PARTITION BY CustomerId ORDER BY Year ) NextYearTotal FROM CustomerInvoices;
- 단계 4: (값) NTH_VALUE(정해진 윈도우 프레임 내에서 N번째 행의 값을 반환)
- SQL> SELECT Name, Milliseconds Length, NTH_VALUE ( name,2 ) OVER ( ORDER BY Milliseconds DESC ) SecondLongestTrack FROM tracks;
- SQL> SELECT AlbumId, Name, Milliseconds Length, NTH_VALUE ( Name,2 ) OVER ( PARTITION BY AlbumId ORDER BY Milliseconds DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS SecondLongestTrack FROM tracks;
- 단계 5: (순위) NTILE(순서가 있는 결과 집합을 정해진 버킷에 나눠서 넣기)
- SQL> SELECT Name, Milliseconds, NTILE ( 4 ) OVER ( ORDER BY Milliseconds ) LengthBucket FROM tracks WHERE AlbumId = 1;
- SQL> SELECT AlbumId, Name, Milliseconds, NTILE ( 3 ) OVER ( PARTITION BY AlbumId ORDER BY Bytes ) SizeBucket FROM tracks;
- 단계 6: (순위) PERCENT_RANK(순위를 퍼센트로 보여줌)
- SQL> SELECT Name, Milliseconds, PERCENT_RANK() OVER( ORDER BY Milliseconds ) LengthPercentRank FROM tracks WHERE AlbumId = 1;
- SQL> SELECT Name, Milliseconds, printf('%.2f',PERCENT_RANK() OVER( ORDER BY Milliseconds )) LengthPercentRank FROM tracks WHERE AlbumId = 1;
- SQL> SELECT AlbumId, Name, Bytes, printf('%.2f',PERCENT_RANK() OVER( PARTITION BY AlbumId ORDER BY Bytes )) SizePercentRank FROM tracks;
- 단계 7: (순위) RANK(순위를 보여줌, 중복 가능, 빈 순서 있음)
- SQL> CREATE TABLE RankDemo ( Val TEXT );
- SQL> INSERT INTO RankDemo(Val) VALUES('A'),('B'),('C'),('C'),('D'),('D'),('E');
- SQL> SELECT * FROM RankDemo;
- SQL> SELECT Val, RANK () OVER ( ORDER BY Val ) ValRank FROM RankDemo;
- SQL> SELECT Name, Milliseconds, RANK () OVER ( ORDER BY Milliseconds DESC ) LengthRank FROM tracks;
- SQL> SELECT Name, Milliseconds, AlbumId, RANK () OVER ( PARTITION BY AlbumId ORDER BY Milliseconds DESC ) LengthRank FROM tracks;
- SQL> SELECT * FROM ( SELECT Name, Milliseconds, AlbumId, RANK () OVER ( PARTITION BY AlbumId ORDER BY Milliseconds DESC ) LengthRank FROM tracks ) WHERE LengthRank = 2;
- SQL>
- 단계 8: (순위) ROW_NUMBER(연속적인 정수를 부여, 중복 불가능)
- SQL> SELECT ROW_NUMBER () OVER ( ORDER BY Country ) RowNum, FirstName, LastName, country FROM customers;
- SQL> SELECT ROW_NUMBER () OVER ( PARTITION BY Country ORDER BY FirstName ) RowNum, FirstName, LastName, country FROM customers;
- SQL> SELECT * FROM ( SELECT ROW_NUMBER () OVER ( ORDER BY FirstName ) RowNum, FirstName, LastName, Country FROM customers ) WHERE RowNum > 20 AND RowNum <= 30
- SQL> CREATE VIEW Sales AS SELECT CustomerId, FirstName, LastName, Country, SUM( total ) Amount FROM invoices INNER JOIN customers USING (CustomerId) GROUP BY CustomerId;
- SQL> SELECT Country, FirstName, LastName, Amount FROM ( SELECT Country, FirstName, LastName, Amount, ROW_NUMBER() OVER ( PARTITION BY country ORDER BY Amount DESC ) RowNum FROM Sales ) WHERE RowNum = 1;
월요일, 2월 15, 2021
[유튜브 방송] (즐겁게 배우는 SQL #49) 윈도우 함수 - 윈도우 함수(1)
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 49편을 공개해드리겠다. 49편은 윈도우 함수를 개괄하고 몇 가지 윈도우 함수를 소개한다.
2021년 2월 15일자 [즐겁게 배우는 SQL #49] 윈도우 함수 - 윈도우 함수(1) 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 윈도우 함수 개괄
- 06:40 (순위) CUME_DIST(누적 분포)
- 11:41 (순위) DENSE_RANK(순서있는 행들의 집합에서 행의 순위 계산, 빈 순서 없음)
- 17:00 (값) FIRST_VALUE(정해진 윈도우 프레임 내에서 첫 행의 값을 반환)
- 22:12 (값) LAG(직전에 물리적으로 떨어진 오프셋 값을 가져오기)
온라인 실습 사이트는 SQL Online IDE에서 진행하면 되고, 원본 학습자료는 SQLite Window Functions를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 윈도우 함수 개괄
- 윈도우 함수는 현재 행을 기준으로 일련의 행 집합에 대해 연산을 수행한다
- 집계 함수는 계산 결과를 한 행으로 합치는 특성이 있는 반면에 윈도우 함수는 원래 행을 그대로 유지하는 특성이 있다
- 값과 순위를 매기는 함수가 대표적이다.
- 단계 2: (순위) CUME_DIST(누적 분포)
- SQL> CREATE TABLE CumeDistDemo( Id INTEGER PRIMARY KEY, value INT );
- SQL> INSERT INTO CumeDistDemo(value) VALUES(1000),(1200),(1200),(1400),(2000);
- SQL> SELECT Id, Value FROM CumeDistDemo;
- SQL> SELECT Value, CUME_DIST() OVER ( ORDER BY value ) CumulativeDistribution FROM CumeDistDemo;
- 단계 3: (순위) DENSE_RANK(순서있는 행들의 집합에서 행의 순위 계산, 빈 순서 없음)
- SQL> CREATE TABLE DenseRankDemo ( Val TEXT );
- SQL> INSERT INTO DenseRankDemo(Val) VALUES('A'),('B'),('C'),('C'),('D'),('D'),('E');
- SQL> SELECT Val, DENSE_RANK () OVER ( ORDER BY Val ) ValRank FROM DenseRankDemo;
- SQL> SELECT AlbumId, Name, Milliseconds, DENSE_RANK () OVER ( PARTITION BY AlbumId ORDER BY Milliseconds ) LengthRank FROM tracks;
- 단계 4: (값) FIRST_VALUE(정해진 윈도우 프레임 내에서 첫 행의 값을 반환)
- SQL> SELECT Name, printf('%,d',Bytes) Size, FIRST_VALUE(Name) OVER ( ORDER BY Bytes ) AS SmallestTrack FROM tracks WHERE AlbumId = 1;
- SQL> SELECT AlbumId, Name, printf('%,d',Bytes) Size, FIRST_VALUE(Name) OVER ( PARTITION BY AlbumId ORDER BY Bytes DESC ) AS LargestTrack FROM tracks;
- 단계 5: (값) LAG(직전에 물리적으로 떨어진 오프셋 값을 가져오기)
- SQL> SELECT * FROM CustomerInvoices ORDER BY CustomerId, Year, Total;
- SQL> SELECT CustomerId, Year, Total, LAG ( Total,1,0 ) OVER ( ORDER BY Year ) PreviousYearTotal FROM CustomerInvoices WHERE CustomerId = 4;
- SQL> SELECT CustomerId, Year, Total, LAG ( Total,1,0 ) OVER ( PARTITION BY CustomerId ORDER BY Year ) PreviousYearTotal FROM CustomerInvoices;
[개발자 이야기] (2월 13일) 라인개발자들이 직접 뽑은 인생 책은?
2021년 2월 13일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2021년 2월 13일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 오늘 방송 주요 내용 소개
- 04:18 AWS 새로운 T4g 인스턴스 무료 사용하기
- 07:21 MVP vs PoC
- 10:10 라인개발자들이 직접 뽑은 인생 책은?
- 11:55 코드로 배우는 스프링부트 프로젝트
- 13:08 Dependency가 많은 프로젝트의 스케줄 관리 방법
- 15:20 DGS: GraphQL for SpringBoot by 넷플릭스
- 17:21 크롬에서 안 쓰는 탭을 쉬게 만들려면?
- 18:49 sqlite를 상용 환경에서 사용하면 안 된다고?
토요일, 2월 13, 2021
[B급 프로그래머] 2월 2주 소식(빅데이터/인공지능, 읽을거리 부문)
- 빅데이터/인공지능
- Seven Legal Questions for Data Scientists
- Meet the Man Bridging Data Science & Big Data Systems
- Getting there: Structured data, semantics, robotics, and the future of AI
- Kaggle Publishes 2020 State of Machine Learning and Data Science Report
- Machine learning made easy with Python
- uizard - The design tool for creators
- What is Complexity Science?
- Extracting Training Data from Large Language Models
- Gradient Descent Models Are Kernel Machines (Deep Learning)
- "머신러닝 번역, 원문보다 어휘 다양성 떨어져"
- Science fiction hasn’t prepared us to imagine machine learning.
- 핏비트 이용한 수면단계 평가
- What data on myself I collect and why?
- libretranslate - Open Source Machine Translation
- [Mint] 이 할아버지, 테슬라를 분해했습니다
- 9 Distance Measures in Data Science
- 2021년 5가지 데이터 트렌드
- 200+ Machine Learning Projects Solved and Explained
- Big Ideas 2021
- 추천(Recommendation) 시스템 - 알고리즘 Trend 정리
- Dark Patterns at Scale: Findings from a Crawl of 11K Shopping Websites
- LabML Neural Networks - This is a collection of simple PyTorch implementations of neural networks and related algorithms.
- 추천시스템 분석 입문하기 by TAcademy
- 읽을거리
- 5M 이내 공간 샅샅이··· 애플 라이다(LiDAR)란? 역할은? 잠재력은?
- Mastercard to open up network to select cryptocurrencies
- Cloudflare Announces Fourth Quarter and Fiscal Year 2020 Financial Results
- 마작 이것만 알면 치는 흉내는 낼 수 있다 1
- Cambridge Bitcoin Electricity Consumption Index
- 진짜 고용대란
- Samsung Foundry: New $17 Billion Fab in the USA by Late 2023
- 미국 3대 주가지수 - 다우지수, S&P500, 나스닥 비교
- 한은, CBDC 보고서 "가상자산 아닌 법화와 같아"
- 재무제표로 스타벅스 코리아 째려보기
- How to Kill a Unicorn
- '경력직' 우대하는 사회
- 리튬이온전지의 원리와 탄생, 그리고 노벨상
- MVP와 PoC, Prototype, Pilot 차이
- Stop Swiss Cheesing your calendar
- 천재만을 원했던 한 바둑 기사가 바둑계에 끼친 영향
- 한국, GDP 대비 연구개발(R&D) 비중 세계 최고
- The Stranger Who Changed My Life: My Enemy, My Friend
- [시선]위기를 기회 삼으라는 기만
- 일 잘하는 사람은 누구? 인재는 직선으로 크지 않아요
- Should We Stop Telling Kids They're Smart?
- IBM 블록체인 사업부 사실상 와해 "개발자 10%만 남아"
- How to lose money 💸
- NASA 2020 MISSION - PERSEVERANCE ROVER
- Tiger 미국나스닥100 vs QQQ 심층 비교로 고민 해결!
- Chart: Why Battery Electric Vehicles Beat Hydrogen Electric Vehicles Without Breaking A Sweat
- Car ride game
- It Feels Like the Game is Rigged
- How long do people need to work at minimum wage to buy one Big Mac?
- Visa May Add Cryptocurrencies to Its Payments Network, Says CEO
- Design of the 60's and 70's for Nerds
- When a Colleague Is Grieving
- 미술감독 이목원 "미술감독은 솔루션을 만들어요"
- 한국이 짜게 먹는다는 조사의 진실?
수요일, 2월 10, 2021
[유튜브 방송] (즐겁게 배우는 SQL #48) 트리거 - INSTEAD OF 트리거
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 48편을 공개해드리겠다. 48편은 INSTEAD OF 트리거를 소개한다.
2021년 2월 10일자 [즐겁게 배우는 SQL #48] 트리거 - INSTEAD OF 트리거 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 INSTEAD OF 트리거 기본 형식
- 01:03 INSTEAD OF 트리거 예제
원본 학습자료는 SQLite INSTEAD OF Triggers를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: INSTEAD OF 트리거 기본 형식
CREATE TRIGGER [IF NOT EXISTS] schema_ame.trigger_name INSTEAD OF [DELETE | INSERT | UPDATE OF column_name] ON table_name BEGIN -- insert code here END; - 단계 2: INSTEAD OF 트리거 예제
- SQL> CREATE VIEW AlbumArtists( AlbumTitle, ArtistName ) AS SELECT Title, Name FROM Albums INNER JOIN Artists USING (ArtistId);
- SQL> SELECT * FROM AlbumArtists;
- SQL> INSERT INTO AlbumArtists(AlbumTitle,ArtistName) VALUES('Who Do You Trust?','Papa Roach');
- SQL> CREATE TRIGGER insert_artist_album_trg INSTEAD OF INSERT ON AlbumArtists BEGIN INSERT INTO Artists(Name) VALUES(NEW.ArtistName); INSERT INTO Albums(Title, ArtistId) VALUES(NEW.AlbumTitle, last_insert_rowid()); END;
- SQL> INSERT INTO AlbumArtists(AlbumTitle,ArtistName) VALUES('Who Do You Trust?','Papa Roach');
- SQL> SELECT * FROM Artists ORDER BY ArtistId DESC;
- SQL> SELECT * FROM Albums ORDER BY AlbumId DESC;
화요일, 2월 09, 2021
[유튜브 방송] (즐겁게 배우는 SQL #47) 트리거 - 트리거
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 47편을 공개해드리겠다. 47편은 트리거를 소개한다.
2021년 2월 9일자 [즐겁게 배우는 SQL #47] 트리거 - 트리거 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 트리거 기본 형식
- 07:13 BEFORE INSERT 트리거 예제
- 13:03 AFTER UPDATE 트리거 예제
- 17:47 트리거 제거 예제
원본 학습자료는 SQLite Trigger를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 트리거 기본 형식
CREATE TRIGGER [IF NOT EXISTS] trigger_name [BEFORE|AFTER|INSTEAD OF] [INSERT|UPDATE|DELETE] ON table_name [WHEN condition] BEGIN statements; END;
- 단계 2: BEFORE INSERT 트리거 예제
- SQL> CREATE TABLE leads ( id integer PRIMARY KEY, first_name text NOT NULL, last_name text NOT NULL, phone text NOT NULL, email text NOT NULL, source text NOT NULL );
- SQL> CREATE TRIGGER validate_email_before_insert_leads BEFORE INSERT ON leads BEGIN SELECT CASE WHEN NEW.email NOT LIKE '%_@__%.__%' THEN RAISE (ABORT,'Invalid email address') END; END;
- SQL> INSERT INTO leads (first_name,last_name,email,phone) VALUES('John','Doe','jjj','4089009334');
- SQL> INSERT INTO leads (first_name, last_name, email, phone) VALUES ('John', 'Doe', 'john.doe@sqlitetutorial.net', '4089009334');
- SQL> INSERT INTO leads (first_name, last_name, email, phone, source) VALUES ('John', 'Doe', 'john.doe@sqlitetutorial.net', '4089009334', 'company');
- SQL> SELECT * FROM leads;
- 단계 3: AFTER UPDATE 트리거 예제
- SQL> CREATE TABLE lead_logs ( id INTEGER PRIMARY KEY, old_id int, new_id int, old_phone text, new_phone text, old_email text, new_email text, user_action text, created_at text );
- SQL> CREATE TRIGGER log_contact_after_update AFTER UPDATE ON leads WHEN old.phone <> new.phone OR old.email <> new.email BEGIN INSERT INTO lead_logs ( old_id, new_id, old_phone, new_phone, old_email, new_email, user_action, created_at ) VALUES ( old.id, new.id, old.phone, new.phone, old.email, new.email, 'UPDATE', DATETIME('NOW') ); END;
- SQL> UPDATE leads SET last_name = 'Smith' WHERE id = 1;
- SQL> UPDATE leads SET phone = '4089998888', email = 'john.smith@sqlitetutorial.net' WHERE id = 1;
- SQL> SELECT old_phone, new_phone, old_email, new_email, user_action FROM lead_logs;
- 단계 4: 트리거 제거 예제
- SQL> DROP TRIGGER validate_email_before_insert_leads;
월요일, 2월 08, 2021
[유튜브 방송] (즐겁게 배우는 SQL #46) 색인 - 표현식 기반의 색인
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 46편을 공개해드리겠다. 46편은 표현식 기반의 색인을 소개한다.
2021년 2월 8일자 [즐겁게 배우는 SQL #46] 색인 - 표현식 기반의 색인 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 표현식 기반의 색인 예제
- 03:21 표현식 기반의 색인 동작 원리
- 05:29 표현식 기반의 색인 제약
원본 학습자료는 SQLite Expression-based Index를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 표현식 기반의 색인 예제
- SQL> SELECT customerid, company FROM customers WHERE length(company) > 10 ORDER BY length(company) DESC;
- SQL> EXPLAIN QUERY PLAN SELECT customerid, company FROM customers WHERE length(company) > 10 ORDER BY length(company) DESC;
- SQL> CREATE INDEX customers_length_company ON customers(LENGTH(company));
- SQL> EXPLAIN QUERY PLAN SELECT customerid, company FROM customers WHERE length(company) > 10 ORDER BY length(company) DESC;
- 단계 2: 표현식 기반의 색인 동작 원리
- SQL> CREATE INDEX invoice_line_amount ON invoice_items(unitprice*quantity);
- SQL> EXPLAIN QUERY PLAN SELECT invoicelineid, invoiceid, unitprice*quantity FROM invoice_items WHERE quantity*unitprice > 10;
- SQL> EXPLAIN QUERY PLAN SELECT invoicelineid, invoiceid, unitprice*quantity FROM invoice_items WHERE unitprice*quantity > 10;
[개발자 이야기] (2월 6일) 7년 차 SI 개발자가 솔루션 회사 이직 후 2년 간 배운 것
2021년 2월 6일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2021년 2월 6일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 오늘 방송 주요 내용 소개
- 06:06 리눅스 아재력 or 할배력 셀프 테스트
- 10:55 구글 검색 없이 기초적인 웹 앱을 만들 수 있을까?
- 14:24 크롬 89 베타에서 개선된 사항
- 16:47 2021년도에 눈여겨볼 Top 10 VSCode 확장
- 20:03 IT 업계 ‘아무말 대잔치’··· 오남용 심한 유행어 10선
- 24:09 7년 차 SI 개발자가 솔루션 회사 이직 후 2년 간 배운 것
- 32:47 2021년 미국 최고 직업은 자바 개발자
- 34:55 내 서버를 어디에 둬야 가장 빠를까?
토요일, 2월 06, 2021
[B급 프로그래머] 2월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
- 개발/관리도구
- Reloadr - Python hot code reloading tool.
- Open Sourcing the Netflix Domain Graph Service Framework: GraphQL for Spring Boot
- AWS Application Load Balancer algorithms
- 🍪 프론트에서 안전하게 로그인 처리하기 (ft. React)
- Make your games beautiful! - Godot Shaders is a community-driven shader library for the Godot game engine.
- How to hire senior developers: Give them more autonomy
- datatype99 is a header-only library that augments C99 with sum types.
- @PCBASICBot - The bot accepts programs in GW-BASIC by default (whose code is 100% compatible with BASICA).
- Computer Graphics from Scratch
- FE개발자의 성장 스토리 06 : 2021년 Chrome의 새로운 변화 – Schemeful same-site을 대응하자
- asdf - Manage multiple runtime versions with a single CLI tool
- Rust in Production: 1Password
- Getting better at Linux with 10 mini-projects
- Top Acronyms and Abbreviations Dictionary
- WSL2 기반 docker 사용시 vmmem 프로세스 메모리 소모량 줄이기
- The documentation system - tutorials, how-to guides, technical reference and explanation.
- Think twice before abandoning Xorg. Wayland breaks everything!
- Sinofsky speaks! Former Microsoft exec to publish memoirs online
- 크롬북 화면보호기의 숨은 의미··· ‘포스트 OS’ 시대가 온다
- IT 업계 ‘아무말 대잔치’··· 오남용 심한 유행어 10선
- 클라이언트 서버리스라는 '새 바람'을 환영하며
- Almalinux - An open-source RHEL fork built by the team at CloudLinux, inspired by the community.
- VideoLAN is 20 years old today!
- In Cab Ride you can drive thousands of different train routes
- FastAPI framework, high performance, easy to learn, fast to code, ready for production
- Learn Algorithms Together - Create a room, invite your friends, and race to finish the problems.
- Opstrace deploys secure, horizontally-scalable open source observability in your own cloud account, combining open APIs with the simple user experience of a large service provider.
- 2021년 미국 최고 직업은 자바 개발자
- Towards an understanding of technical debt
- Product Management for Engineers
- webmoji.xyz - 웹 이모지 입력기
- AI No Silver Bullet for Cloud Security, but Here’s How It Can Help
- S-MQTTT, or: secure-MQTT-over-Traefik
- 개발자를 위한 인프라 기초 총정리
- AWS 자격증 온라인 시험 후기
- traefik - 클라우드 네이티브 어플리케이션 프록시
- Terminalizer - 터미널을 녹화해서 GIF로 만들기
- NES.css - NES-style CSS Framework.
- mattermost - High trust collaboration for your enterprise
- 이미지 포맷 비교 JPEG, JPEG2000, WebP, HEIC, AVIF
- The MIT License, Line by Line
- Docker Engine 20.10 Released: Supports cgroups v2 and Dual Logging
- Chrome 89 Beta: Advanced Hardware Interactions, Web Sharing on Desktop, and More
- GraalVM 21.0 Introduces a JVM Written in Java
- crun - A fast and low-memory footprint OCI Container Runtime fully written in C.
- piku - 초경량 PaaS
- Build your own X, a collection of tutorials (Search engine, Neural Net, etc.)
- 리눅스 아재력 or 할배력 셀프 테스트
- When a Colleague Is Grieving
- 윈도우10 로그인 잠금화면의 멋진 배경이미지를 배경화면으로 저장해 보자.
- The Best Python Tools For Test Automation (Includes A Ready-To-Use Python Environment)
- Top 5 Cybersecurity Tools For A Work-From-Home World
- Dark Patterns at Scale: Findings from a Crawl of 11K Shopping Websites
- Cyclic dependencies are evil
- Toast UI Chart 4.0 출시
- Can you make a basic web app without googling?
- iHateRegex - Now you have two problems.
- 2021 카카오 신입공채 1차 온라인 코딩 테스트 for Tech developers 문제해설
- Top 10 VS Code extensions for 2021
- Microservices test architecture. Can you sleep well without end-to-end tests?
- ~/posts/creating-my-awesome-windows-10-dev-setup
- FastAPI 톺아보기 - 부제: python 백엔드 봄은 온다
- 입문자를 위한 리눅스/맥 커맨드라인 셸 사용법
- 5 questions with Portland-based wiki inventor Ward Cunningham
- Why I'm losing faith in UX
- Open MCT is a next-generation mission operations data visualization framework. Web-based, for desktop and mobile.
- 맥에서 보낸 파일명이 윈도우에서 깨질때 - 파일명 자모 분리 현상
- Become shell literate
- How To Find And Replace Multiple Text Strings Within A Text String
- Protocols, Not Platforms: A Technological Approach to Free Speech
- opensyllabus.org - Mapping the college curriculum across 6,059,459 syllabi.
- Aigo Chinese encrypted HDD − Part 1: taking it apart
- Drop your ebook file here to read it inside the browser!
- 매일 바뀌는 멋진 PC 배경화면, 빙 월페이퍼 앱
- '윈도우 보안의 시작' MS 디펜더의 숨겨진 설정 분석
- 파이썬이 기업을 지배하게 될 8가지 이유와 그렇지 않을 8가지 이유
- 험난한 주니어개발자로의 길
- Publish, ship, and install modern JavaScript for faster applications
- The unreasonable effectiveness of simple HTML
- Low-power Kindle dashboard
- 쿠버네티스가 답이 아닐 때
- Data Fetching on the Web Still Sucks
- WebRTC is now a W3C and IETF standard
- You Don't Really Need Another MOOC
- Vue Native is a framework to build cross platform native mobile apps using JavaScript
- Beyond the Brokers: A Tour of the Kafka Ecosystem
- The Best of Apache Kafka Architecture
- The Pros and Cons of DRY Code
- Best of 2020: When To Use – and Not To Use – Microservices
- With software as currency, containers and serverless are go-to
- A Life in Games
- The Google Cloud Developer's Cheat Sheet
- DNS마스크에 취약점··· 수백만 리눅스 기기, 위험에 노출
- 2021년 SW 개발자 채용 시장 전망… "원격 채용 늘고 클라우드 상한가"
- Explaining the Differences Between UI and UX
- Java on Truffle — Going Fully Metacircular
- The killing of CentOS Linux: 'The CentOS board doesn't get to decide what Red Hat engineering teams do'
- nq: queue utilities
- 여러분의 CS 교육에서 누락된 학기
- Firefox 85 Cracks Down on Supercookies
- kime - Korean IME
- ugrep - Search for anything in everything... ultra fast
- Introducing Twitter Text Editor
- [Windows 컨테이너] 1: Windows 컨테이너에 대한 이해
- Visualize Go process metrics in real-time
- WebRTC는 어떻게 실시간으로 데이터를 교환할 수 있을까?
- Maintaining Psychological Safety under Pressure
- Fun with conversion-operator name lookup
- iconduck - 109,669 free open source icons & illustrations
- aws ec2 nvme disk 의 device 위치 변경을 고정 시키기
- 베이그런트(Vagrant) 튜토리얼
- 30살 비개발자가 3개월만에 풀스택 개발을 하기까지..
- CodeCopy - 코드 복사 버튼을 넣어주는 크롬/FF 확장
- Timeflake - 128bit, 어느정도 정렬된, URL에도 안전한 UUID
- Blind Date: The Reality of Software Engineers Hiring Process
- Powerful data grid component built with StencilJS.
- Seven Hard-Earned Lessons Learned Migrating a Monolith to Microservices
- The Neuroscience of Trust
- Kimchi is an HTML5 based management tool for KVM.
- Site.js - Small Web construction set.
- Firecracker: start a VM in less than a second
- Filmulator - A simple raw photo editor based on the process of developing film
- 7년 차 SI 개발자가 솔루션 회사 이직 후 2년 간 배운 것
- Microsoft Small Basic
- siuba - scrappy data analysis, with seamless support for pandas and SQL
- 고성능 서버/데이터베이스
- Talking to Postgres Through Java 16 Unix-Domain Socket Channels
- Where's the fastest place to put my server? How much does it matter?
- “인터넷이 지구 반대편을 연결하는 방법” BGP의 개념과 동작 원리
- Slack fingers AWS auto-scaling failure in January outage postmortem
- Zoom이 오라클 클라우드를 선택한 이유 [2020]
- Google’s cloud business lost more than $5.5 billion last year, but it’s growing fast
- The shifting market for PostgreSQL
- The MySQL Clone Wars: Plugin vs. Percona XtraBackup
- Null Characters: Workarounds Aren’t Good Enough
- A network analysis on cloud gaming: Stadia, GeForce Now and PSNow
- Litestream is a standalone streaming replication tool for SQLite.
- 쿠버네티스를 7500노드로 확장하기
- We Built The World's Largest Real time High-Frequency, Low Latency Streaming System on Golang
- POSTGRES SCALING ADVICE FOR 2021
- Performance Analysis for Arm vs x86 CPUs in the Cloud
- Reasons why SELECT * is bad for SQL performance
- But how, exactly, databases use mmap?
금요일, 2월 05, 2021
[유튜브 방송] (즐겁게 배우는 SQL #45) 색인 - 색인
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 45편을 공개해드리겠다. 45편은 색인을 거는 방법을 소개한다.
2021년 2월 5일자 [즐겁게 배우는 SQL #45] 색인 - 색인 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 색인 개념과 색인 생성 기본 형식
- 04:13 단일 컬럼 색인 생성
- 10:04 다중 컬럼 색인 생성
- 14:05 색인 확인
- 15:59 색인 제거
원본 학습자료는 SQLite Index를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 색인 개념과 색인 생성 기본 형식
CREATE [UNIQUE] INDEX index_name ON table_name(column_list);
- 단계 2: 단일 컬럼 색인 생성
- SQL> CREATE TABLE contacts ( first_name text NOT NULL, last_name text NOT NULL, email text NOT NULL );
- SQL> CREATE UNIQUE INDEX idx_contacts_email ON contacts (email);
- SQL> INSERT INTO contacts (first_name, last_name, email) VALUES('John','Doe','john.doe@sqlitetutorial.net');
- SQL> INSERT INTO contacts (first_name, last_name, email) VALUES('Johny','Doe','john.doe@sqlitetutorial.net');
- SQL> INSERT INTO contacts (first_name, last_name, email) VALUES('David','Brown','david.brown@sqlitetutorial.net'), ('Lisa','Smith','lisa.smith@sqlitetutorial.net');
- SQL> SELECT first_name, last_name, email FROM contacts WHERE email = 'lisa.smith@sqlitetutorial.net';
- SQL> EXPLAIN QUERY PLAN SELECT first_name, last_name, email FROM contacts WHERE email = 'lisa.smith@sqlitetutorial.net';
- 단계 3: 다중 컬럼 색인 생성
- SQL> CREATE INDEX idx_contacts_name ON contacts (first_name, last_name);
- SQL> EXPLAIN QUERY PLAN SELECT first_name, last_name, email FROM contacts WHERE first_name = 'John';
- SQL> EXPLAIN QUERY PLAN SELECT first_name, last_name, email FROM contacts WHERE first_name = 'John' AND last_name = 'Doe';
- SQL> EXPLAIN QUERY PLAN SELECT first_name, last_name, email FROM contacts WHERE last_name = 'Doe';
- SQL> EXPLAIN QUERY PLAN SELECT first_name, last_name, email FROM contacts last_name = 'Doe' OR first_name = 'John';
- SQL>
- 단계 4: 색인 확인
- SQL> PRAGMA index_list('contacts');
- SQL> PRAGMA index_info('idx_contacts_name');
- SQL> SELECT type, name, tbl_name, sql FROM sqlite_master WHERE type= 'index';
- 단계 5: 색인 제거
- SQL> DROP INDEX idx_contacts_name;
- SQL> PRAGMA index_list('contacts');
- SQL> PRAGMA index_info('idx_contacts_name');
- SQL> DROP INDEX idx_contacts_email;
- SQL> PRAGMA index_list('contacts');
- SQL> PRAGMA index_info('idx_contacts_email');
목요일, 2월 04, 2021
[유튜브 방송] (즐겁게 배우는 SQL #44) 뷰 - 뷰 제거
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 44편을 공개해드리겠다. 44편은 뷰 제거 방법을 소개한다.
2021년 2월 4일자 [즐겁게 배우는 SQL #44] 뷰 - 뷰 제거 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 뷰 제거 기본 형식
- 01:19 뷰 제거 예제
원본 학습자료는 SQLite DROP VIEW를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 뷰 제거 기본 형식
DROP VIEW [IF EXISTS] [schema_name.]view_name;
- 단계 2: 뷰 제거 예제
- SQL> CREATE VIEW v_billings ( invoiceid, invoicedate, total ) AS SELECT invoiceid, invoicedate, sum(unitprice * quantity) FROM invoices INNER JOIN invoice_items USING ( invoiceid );
- SQL> SELECT * FROM v_billings;
- SQL> DROP VIEW v_billings;
화요일, 2월 02, 2021
[유튜브 방송] (즐겁게 배우는 SQL #43) 뷰 - 뷰 생성
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 43편을 공개해드리겠다. 43편은 뷰 생성 방법을 소개한다.
2021년 2월 2일자 [즐겁게 배우는 SQL #43] 뷰 - 뷰 생성 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 뷰 생성 기본 형식
- 05:52 복잡한 질의를 단순화하기 위한 뷰 생성
- 09:38 전용 컬럼 이름을 제공하기 위한 뷰 생성
원본 학습자료는 SQLite Create View를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1:뷰 생성 기본 형식
CREATE [TEMP] VIEW [IF NOT EXISTS] view_name[(column-name-list)] AS select-statement;
- 단계 2: 복잡한 질의를 단순화하기 위한 뷰 생성
- SQL> SELECT trackid, tracks.name, albums.Title AS album, media_types.Name AS media, genres.Name AS genres FROM tracks INNER JOIN albums ON Albums.AlbumId = tracks.AlbumId INNER JOIN media_types ON media_types.MediaTypeId = tracks.MediaTypeId INNER JOIN genres ON genres.GenreId = tracks.GenreId;
- SQL> CREATE VIEW v_tracks AS SELECT trackid, tracks.name, albums.Title AS album, media_types.Name AS media, genres.Name AS genres FROM tracks INNER JOIN albums ON Albums.AlbumId = tracks.AlbumId INNER JOIN media_types ON media_types.MediaTypeId = tracks.MediaTypeId INNER JOIN genres ON genres.GenreId = tracks.GenreId;
- SQL> SELECT * FROM v_tracks;
- 단계 3: 전용 컬럼 이름을 제공하기 위한 뷰 생성
- SQL> CREATE VIEW v_albums ( AlbumTitle, Minutes ) AS SELECT albums.title, SUM(milliseconds) / 60000 FROM tracks INNER JOIN albums USING ( AlbumId ) GROUP BY albums.title;
- SQL> SELECT * FROM v_albums;
월요일, 2월 01, 2021
[개발자 이야기] (1월 30일) 정말로 당신에게 다른 동영상 강의가 필요할까?
2021년 1월 30일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2021년 1월 30일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 오늘 방송 주요 내용 소개
- 06:59 timeflake - 어느 정도 정렬된 UUID
- 10:07 정말로 당신에게 다른 동영상 강의가 필요할까?
- 17:51 마이크로서비스를 써야할 때, 쓰지 말아야 할 때
- 24:09 소프트웨어를 구매하기 위해 사용 가능한 네 가지 통화
- 29:52 AWS 람다는 왜 그렇게 빠르게 구동될까?
- 33:13 30살 비개발자가 3개월만에 풀스택 개발을 하기까지..
- 35:49 맥에서 윈도우로 가져온 파일명이 자모 분리된 경우 해법
토요일, 1월 30, 2021
[B급 프로그래머] 1월 4주 소식(빅데이터/인공지능, 읽을거리 부문)
- 빅데이터/인공지능
- RV64X: A Free, Open Source GPU for RISC-V
- Tesla is willing to license Autopilot and has already had ‘preliminary discussions’ about it with other automakers
- '열광 이면에는...' RPA의 10가지 그늘
- CPTR: FULL TRANSFORMER NETWORK FOR IMAGE CAPTIONING
- SimpleHTR - Handwritten Text Recognition with TensorFlow
- Uber AI Introduce Fiber, a New Library for Distributed Machine Learning
- A sky map of the Hubble Space Telescope's observations
- Paradox-Free Time Travel Is Theoretically Possible, Researchers Say
- AI and Efficiency
- Google Open-Sources New Higher Performance TensorFlow Runtime
- Recipes for building an open-domain chatbot
- Microsoft: Machine Learning Models Can Be Easily Reverse Engineered
- 쿠키 대체 효과 "양호"··· 구글, 프라이버시 보호하는 광고 테스트 결과 공개
- AI 옵스 업체 6곳이 답했다 "AI 옵스에서 AI는 어떤 역할 하나?"
- Claude Shannon Demonstrates Machine Learning
- Why your AI-based monitoring startup will fail
- [GCP] 머신러닝 파이프라인에서 데이터 변환
- 5나노 車 반도체도 삼성-테슬라 맞손
- Applications of Deep Neural Networks
- GutenSearch - Look inside the books of Project Gutenberg.
- Job Description AI - Create professional job descriptions in seconds using AI
- 시가총액 데이터셋(marcap) - 한국거래소(KRX)에서 일자별 시가총액 순위 데이터, 1995-05-02 ~ 2020-12-31 (26년간), 1천만건 이상
- Algpt2 Part 2 - How I (almost) replicated OpenAI's GPT-2 (124M version)
- PySC2 - StarCraft II Learning Environment
- 11 Life Lessons From History’s Most Underrated Genius
- 국내 최대 패션 이커머스 기업 ‘무신사’, 인공지능 활용으로 앱 매출 132배 확대
- Best-of Machine Learning with Python
- AMX, 애플 M1의 숨겨진 보조프로세서
- State of AI Report 2020
- 심심해서 실리콘 밸리 AI/ML research scientist 취업관련 질문 받는다
- Julia Update: Adoption Keeps Climbing; Is It a Python Challenger?
- Level up your career with skill badges by Google
- datacamp - Build data skills online - Data drives everything. Get the skills you need for the future of work.
- 읽을거리
- 블록체인 기반 혁신금융 생태계 연구보고서
- Siliconpr0n: High Resolution Chip Maps
- What I Really Think of Bitcoin by Ray Dalio
- Is the Covid vaccine safe?
- [웹툰] 흙수저를 위한 나라는 없다
- Why employers will have no choice but to embrace remote working
- ‘Weaponised’ options trading turbocharges GameStop’s dizzying rally
- 1인치 이야기
- 매일 바뀌는 멋진 PC 배경화면, 빙 월페이퍼 앱
- The great unbundling
- Yes, I did drop 90GB of my work to Public Domain
- 제품비교는 블로그말고 소비자원에서 확인해보세요
- First Atomic Clock Wristwatch
- 2020 샌드박스 유튜브 데이터 리포트
- 애플워치에 있는 타키미터(Tachymeter)란 기능을 아시나요?
- The People the Suburbs Were Built for Are Gone
- A 10B Pixel Scan of Vermeer’s Masterpiece
- The Neuroscience of Trust - Management behaviors that foster employee engagemenㅅ
- 이커머스 절대강자는 없다, 150조원 시장 피말리는 경쟁
- '블랙록'은 '금융 플랫폼' 회사다!
- What color was “Apple Beige”?
- FAA Files Reveal a Surprising Threat to Airline Safety: the U.S. Military's GPS Tests
- How Long Does a Bottle of Wine Last After It Is Opened?
- I bought 200+ Raspberry Pi Model B’s and I’m going to fix them! Part 1
- 모기 퇴치 비법, 고양이는 알고 있었다
- '소울'의 사랑스러운 TMI - 재택근무여도 고퀄리티엔 문제없지!
- Most surgeries are ineffective
- Why cats are crazy for catnip
- 2021 뉴스레터 트렌드 - 유료화, 브랜드화, 세분화
- The mathematical case against blaming people for their misfortune
- PRISM Live studio PC는 초보도 전문가처럼 스트리밍하도록 돕는, 라이브 방송용 데스크톱 애플리케이션입니다.
- 번아웃, 남 인정 없이 못 사는 ‘비대한 공적 자아’의 최후
- An Economic Analysis of Ethereum
- 체르노빌 RBMK 원자로 시뮬레이터
금요일, 1월 29, 2021
[유튜브 방송] (즐겁게 배우는 SQL #42) 제약 조건 - AUTOINCREMENT 제약
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 42편을 공개해드리겠다. 42편은 AUTOINCREMENT 제약 조건을 소개한다.
2021년 1월 29일자 [즐겁게 배우는 SQL #42] 제약 조건 - AUTOINCREMENT 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 ROWID 소개
- 03:35 PK와 ROWID 연계 방안 소개
- 11:29 AUTOINCREMENT 제약 예제
원본 학습자료는 SQLite AUTOINCREMENT를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: ROWID 소개
- SQL> CREATE TABLE people ( first_name TEXT NOT NULL, last_name TEXT NOT NULL );
- SQL> INSERT INTO people (first_name, last_name) VALUES('John', 'Doe');
- SQL> INSERT INTO people (first_name, last_name) VALUES('Lily', 'Bush');
- SQL> SELECT rowid, _rowid_, oid, first_name, last_name FROM people;
- 단계 2: PK와 ROWID 연계 방안 소개
- SQL> DROP TABLE people;
- SQL> CREATE TABLE people ( person_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL );
- SQL> INSERT INTO people (person_id,first_name,last_name) VALUES( 9223372036854775807,'Johnathan','Smith');
- SQL> INSERT INTO people (first_name,last_name) VALUES('William','Gate');
- SQL> SELECT rowid, _rowid_, oid, first_name, last_name FROM people;
- SQL> CREATE TABLE t1(c text);
- SQL> INSERT INTO t1(c) VALUES('A');
- SQL> INSERT INTO t1(c) values('B');
- SQL> INSERT INTO t1(c) values('C');
- SQL> INSERT INTO t1(c) values('D');
- SQL> SELECT rowid, c FROM t1;
- SQL> DELETE FROM t1;
- SQL> INSERT INTO t1(c) values('E');
- SQL> INSERT INTO t1(c) values('F');
- SQL> INSERT INTO t1(c) values('G');
- SQL> SELECT rowid, c FROM t1;
- 단계 3: AUTOINCREMENT 제약 예제
- SQL> DROP TABLE people;
- SQL> CREATE TABLE people ( person_id INTEGER PRIMARY KEY AUTOINCREMENT, first_name text NOT NULL, last_name text NOT NULL );
- SQL> INSERT INTO people (person_id,first_name,last_name) VALUES(9223372036854775807,'Johnathan','Smith');
- SQL> INSERT INTO people (first_name,last_name) VALUES('John','Smith');
- SQL> SELECT rowid, _rowid_, oid, first_name, last_name FROM people;
목요일, 1월 28, 2021
[유튜브 방송] <마이크로서비스 도입, 이렇게 한다> 도서 증정 이벤트
[독서광] (신간 번역서) 마이크로서비스 도입, 이렇게 한다에서 이미 소개드린 샘 뉴먼의 신간 번역서 출간을 기념해 애독자와 애청자 여러분을 위한 이벤트를 준비했다. 유튜브 애청자 세 분을 추첨해 신간을 증정하는 이번 이벤트에 많은 참여 부탁드린다.
여느 때와 마찬가지로 이벤트 응모 방법은 정말 간단하다. 채널 박재호 유튜브 채널을 구독하고 나서 다음 영상에 응원의 댓글을 달면 끝!
슬라이드 셰어에 올린 방송 스크립트는 다음과 같다.
EOB수요일, 1월 27, 2021
[유튜브 방송] (즐겁게 배우는 SQL #41) 제약 조건 - CHECK 제약
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 41편을 공개해드리겠다. 41편은 CHECK 제약 조건을 소개한다.
2021년 1월 27일자 [즐겁게 배우는 SQL #41] 제약 조건 - CHECK 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 CHECK 제약 기본 형식 소개
- 03:06 컬럼 CHECK 예제
- 06:02 테이블 CHECK 예제
- 08:04 기존 테이블에 CHECK 제약 걸기
원본 학습자료는 SQLite CHECK constraints를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: CHECK 제약 기본 형식
CREATE TABLE table_name( ..., column_name data_type CHECK(expression), ... ); CREATE TABLE table_name( ..., CHECK(expression) ); BEGIN; -- create a new table CREATE TABLE new_table ( [...], CHECK ([...]) ); -- copy data from old table to the new one INSERT INTO new_table SELECT * FROM old_table; -- drop the old table DROP TABLE old_table; -- rename new table to the old one ALTER TABLE new_table RENAME TO old_table; -- commit changes COMMIT; - 단계 2: 컬럼 CHECK 예제
- SQL> CREATE TABLE contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT OT NULL CHECK (length(phone) >= 10) );
- SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','408123456');
- SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','(408)-123-456');
- 단계 3: 테이블 CHECK 예제
- SQL> CREATE TABLE products ( product_id INTEGER PRIMARY KEY, product_name TEXT NOT NULL, list_price DECIMAL (10, 2) NOT NULL, discount DECIMAL (10, 2) NOT NULL DEFAULT 0, CHECK (list_price >= discount AND discount >= 0 AND list_price >= 0) );
- SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New Product #1',2000,1000);
- SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New Product #2',900,1000);
- SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New XFactor',1000,-10);
- 단계 4: 기존 테이블에 CHECK 제약 걸기
- SQL> CREATE TABLE contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT NOT NULL );
- SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','(408)-123-456');
- SQL> BEGIN;
- SQL> CREATE TABLE new_contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT NOT NULL CHECK (length(phone) >= 10) );
- SQL> INSERT INTO new_contacts SELECT * FROM contacts;
- SQL> DROP TABLE contacts;
- SQL> ALTER TABLE new_contacts RENAME TO contacts;
- SQL> COMMIT;
화요일, 1월 26, 2021
[유튜브 방송] (즐겁게 배우는 SQL #40) 제약 조건 - UNIQUE 제약
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 40편을 공개해드리겠다. 40은 UNIQUE 제약 조건을 소개한다.
2021년 1월 26일자 [즐겁게 배우는 SQL #40] 제약 조건 - UNIQUE 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 UNIQUE 기본 형식 소개
- 02:11 UNIQUE 예제(하나)
- 04:43 UNIQUE 예제(여러 개)
- 06:55 UNIQUE와 NULL
원본 학습자료는 SQLite UNIQUE Constraint를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: UNIQUE 기본 형식 소개
CREATE TABLE table_name( ..., column_name type UNIQUE, ... ); CREATE TABLE table_name( ..., UNIQUE(column_name) ); CREATE TABLE table_name( ..., UNIQUE(column_name1,column_name2,...) ); - 단계 2: UNIQUE 예제(하나)
- SQL> CREATE TABLE contacts( contact_id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, email TEXT NOT NULL UNIQUE );
- SQL> INSERT INTO contacts(first_name,last_name,email) VALUES ('John','Doe','john.doe@gmail.com');
- SQL> INSERT INTO contacts(first_name,last_name,email) VALUES ('Johnny','Doe','john.doe@gmail.com');
- 단계 3: UNIQUE 예제(여러 개)
- SQL> CREATE TABLE shapes( shape_id INTEGER PRIMARY KEY, background_color TEXT, foreground_color TEXT, UNIQUE(background_color,foreground_color) );
- SQL> INSERT INTO shapes(background_color,foreground_color) VALUES('red','green');
- SQL> INSERT INTO shapes(background_color,foreground_color) VALUES('red','blue');
- SQL> INSERT INTO shapes(background_color,foreground_color) VALUES('red','green');
- 단계 4: UNIQUE와 NULL
- SQL> CREATE TABLE lists( list_id INTEGER PRIMARY KEY, email TEXT UNIQUE );
- SQL> INSERT INTO lists(email) VALUES(NULL),(NULL);
- SQL> SELECT * FROM lists;
월요일, 1월 25, 2021
[개발자 이야기] (1월 23일) 프론트엔드 성능 점검 항목 – 2021 버전
2021년 1월 23일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2021년 1월 23일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 오늘 방송 주요 내용 소개
- 06:28 js;dr
- 08:35 풀 스택 vs 풀 사이클 개발자
- 13:07 GCP, AWS, Azure 누가 누가 잘하나
- 15:52 AWS 엘라스틱 라이선스 변경에 대한 대응 방안 발표
- 20:40 오라클에서 PostgreSQL로 마이그레이션할 때 주의 사항
- 22:45 클라우드플레어 waiting room
- 26:40 프론트엔드 성능 점검 항목 – 2021 버전
- 32:47 gradle의 문제점





















