- 개발/관리도구
- 임베디드 시스템용 C# 코드 작성 쉽게··· ‘닷넷 나노프레임워크’란?
- Cgit, Nginx & Gitolite: A Personal Git Server
- 105,000 free open source icons
- CRTP Bomb - Nested Curiously Recurring Template Pattern
- Tales of F A V I C O N S and Caches: Persistent Tracking in Modern Browsers
- How We Ported Linux to the M1
- Rust for Windows
- Technical Writing Courses by Google
- Mastering Vim
is hardhas never been easier - Dumbdown - The dumb alternative to markdown
- Porting Firefox to Apple Silicon
- From Monolith to Event-Driven: Finding Seams in Your Future Architecture
- How We Build Micro Frontends
- Intel Problems
- User power, not power users: htop and its design philosophy
- Building Multi-Architecture Docker Images With Buildx
- Front-End Performance Checklist 2021
- Modernizing PHP Applications with Golang
- That XOR Trick
- MuseScore 3.6 is Out!
- Software effort estimation is mostly fake research
- ForwardProxy - 100 LOC Ruby forward proxy using only standard libraries.
- Rust 크로스 컴파일 방법
- Front-end Challenges - Listing some playful open-source's challenges of jobs to test your knowledge
- asdf-python - Python plugin for asdf version manager
- Full Stack vs Full Cycle developer
- js;dr = JavaScript required; Didn’t Read.
- Tracing the Python GIL
- State of JS 2020 [한국어]
- The Problem with Gradle
- context.vim - A Vim plugin that shows the context of the currently visible buffer contents.
- A new and innovative way for Google to kill your SaaS startup
- Computer System Engineering
- Big O Notation - explained as easily as possible
- REST Servers in Go: Part 1 - standard library
- Mithril is a modern client-side JavaScript framework for building Single Page Applications. It's small (< 10kb gzip), fast and provides routing and XHR utilities out of the box.
- 222 Favorite JavaScript Utilities - in single line of code! No more!
- JavaScript Turns 25
- Common anti-patterns in Python
- Have the tables turned on NoSQL?
- webrtc - A pure Rust implementation of WebRTC API. Rewrite Pion WebRTC stack (http://Pion.ly) in Rust
- 버스와 사람
- Deno in 2020
- Tips for Designing Grafana Dashboards
- dns.watch - Our DNS Servers since 2014.
- My preferred .NET console stack
- “A damn stupid thing to do”—the origins of C
- Kubernetes dropping Docker is not that big of a deal
- 9 things to do in your first 10 minutes on a Linux server
- A brief history of network connectivity: Connected mainframes
- JuiceFS - Redis와 S3를 이용한 분산 POSIX 파일시스템
- Apple M1 Assembly Language Hello World
- Hanword HWP document converter for Microsoft Word 2016(아래아 한글 변환기)
- '공공서식 한글' SW 무료 배포 안내
- Advanced Programming in the UNIX Environment CS631 - APUE
- Top JavaScript Frameworks and Tech Trends for 2021
- "몸값 오르는 소리 들린다" 기업이 가장 선호하는 소프트웨어 개발자 스킬
- Mass deleting files in Windows
- Foam is a personal knowledge management and sharing system inspired by Roam Research, built on Visual Studio Code and GitHub.
- Welcome to the LearnJavaOnline.org Interactive Java Tutorial.
- How Linksys’ most famous router, the WRT54G, tripped into legendary status because of an undocumented feature that slipped through during a merger.
- Move over, ARM: BeagleV is a $150 RISC-V computer designed to run Linux
- This is The Entire Computer Science Curriculum in 1000 YouTube Videos
- Dockerfile best practices
- Clang vs Other Open Source Compilers
- What do you want to learn today ?
- The MOnSter 6502
- PHP - The Wrong Way
- Huawei ExaGear: x86_64 apps on Arm64
- "deno compile" into executable
- LuLu is the free, open-source firewall that aims to block unknown outgoing connections, protecting your privacy and your Mac!
- All-in-one bookmark manager
- Rewatch - 팀/회사를 위한 비디오 공유
- Multiplication sign
- Go Language at 13 Years: Ecosystem, Evolution, and Future in Conversation with Steve Francia
- MS 닷넷 JSON 시리얼라이저, 'C# 소스 생성기' 도입 예정
- The many lies about reducing complexity part 2: Cloud
- Startpage - Don't be tracked online. Protect your personal data.
- Foundations of Embedded Systems
- Nix is a tool that takes a unique approach to package management and system configuration. Learn how to make reproducible, declarative and reliable systems
- The decentralized CDN and file sharing platform for devs. Skynet is the storage foundation for a Free Internet!
- 6 YAML Features most programmers don’t know
- Terms of Service; Didn’t Read
- GitHub이 구축한 온콜 문화
- An Invisible Tax on the Web: Video Codecs
- Why Is Apple’s M1 Chip So Fast?
- Next Gen Static Blogging
- What Does RISC and CISC Mean in 2020?
- codesandbox - Quickly prototype ideas with code(gitpod도 참고)
- REST with Spring Tutorial
- Akin's Laws of Spacecraft Design*
- 게임기들의 구조
- 서버측 웹어셈블리 런타임 ‘와스머’, GA 버전 공개
- “하나의 오픈소스, 많은 기여자” 프로메테우스가 작동하는 아름다운 방식
- A 27th IOCCC Winner: Best of show - abuse of libc
- Ruby 3, concurrency and the ecosystem
- Why don’t PCs use error correcting RAM? “Because Intel,” says Linus
- 구글 테크니컬라이터가 전하는 이야기
- Thonny - 초보자를 위한 Python IDE
- 고성능 서버/데이터베이스
- Cloudflare Waiting Room
- The Next Gen Database Servers Powering Let's Encrypt
- "코로나19로 국내 기업 클라우드 전환 가속화"
- Kafka is not a Database
- Amazon: NOT OK - why we had to change Elastic licensing
- edge-sql - A serverless edge worker embedding SQLite using Cloudflare Workers and WASM.
- Why are relational databases still popular when non-relational databases can give most benefits of relational DB with the flexibility of modifying needs of changing technologies?
- KrahoDB is an open-source database designed to support multi-master replication.
- Migrating From Oracle to PostgreSQL - What You Should Know
- How to delete lots of rows from a MySQL database without indefinite locking
- GCP Outpaces Azure, AWS in the 2021 Cloud Report
- Elasticsearch -> Manticore Search data migration tool
- License Changes for Confluent Platform
- How AWS and Other Cloud Providers Became the Internet’s Most Powerful Moderators
- What Can We Learn From SQL’s 50 Year Reign? A Story of 2 Turing Awards
- Elasticsearch is dead, long live Open Distro for Elasticsearch
- 오라클, 블록체인 원장지원 ‘DBMS 21c’ 출시
- A Byte of Python
- Elasticsearch and Kibana are now business risks
- Doubling down on open, Part II
- A Question of Timing (with cURL)
- Handling NULL Values in PostgreSQL
- How to Avoid Cascading Failures in Distributed Systems
- 10기가비트 홈 네트워크 구축하기
- Trigger Warning! Setting up Database Tracking with Triggers in Postgres
- Sysbench: Postgres vs MySQL and the impact of regressions
- Resources consumed by idle PostgreSQL connections
- DBLog: A Generic Change-Data-Capture Framework
토요일, 1월 23, 2021
[B급 프로그래머] 1월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
금요일, 1월 22, 2021
[유튜브 방송] (즐겁게 배우는 SQL #39) 제약 조건 - NOT NULL 제약
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 39편을 공개해드리겠다. 39편은 NOT NULL 제약 조건을 소개한다.
2021년 1월 22일자 [즐겁게 배우는 SQL #39] 제약 조건 - NOT NULL 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 NOT NULL 기본 형식 소개
- 03:14 NOT NULL 예제
원본 학습자료는 SQLite NOT NULL Constraint를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: NOT NULL 기본 형식 소개
CREATE TABLE table_name ( ..., column_name type_name NOT NULL, ... );
- 단계 2: NOT NULL 예제
- SQL> CREATE TABLE suppliers( supplier_id INTEGER PRIMARY KEY, name TEXT NOT NULL );
- SQL> INSERT INTO suppliers(name) VALUES(NULL);
목요일, 1월 21, 2021
[유튜브 방송] (즐겁게 배우는 SQL #38) 제약 조건 - 외래 키
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 38편을 공개해드리겠다. 38편은 외래 키 제약 조건을 소개한다.
2021년 1월 21일자 [즐겁게 배우는 SQL #38] 제약 조건 - 외래 키 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 외래 키 기능 확인
- 03:47 외래 키 예제
- 06:41 외래 키 제약 행위(SET NULL)
- 12:21 외래 키 제약 행위(RESTRICT)
- 15:00 외래 키 제약 행위(CASCADE)
원본 학습자료는 SQLite Foreign Key를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 외래 키 기능 확인
FOREIGN KEY (foreign_key_columns) REFERENCES parent_table(parent_key_columns) ON UPDATE action ON DELETE action;
- 참고: 3.6.19 버전 이후에 외래 키를 지원
- 주의: SQLite을 컴파일할 때 SQLITE_OMIT_FOREIGN_KEY나 SQLITE_OMIT_TRIGGER를 정의하면 외래 키 제약을 사용할 수 없다
- 외래 키를 보고, 끄고 켜는 방법:
- SQL> PRAGMA foreign_keys;
- SQL> PRAGMA foreign_keys = OFF;
- SQL> PRAGMA foreign_keys = ON;
- 단계 2: 외래 키 예제
- SQL> PRAGMA foreign_keys = ON;
- SQL> CREATE TABLE suppliers ( supplier_id integer PRIMARY KEY, supplier_name text NOT NULL, group_id integer NOT NULL );
- SQL> CREATE TABLE supplier_groups ( group_id integer PRIMARY KEY, group_name text NOT NULL );
- SQL> DROP TABLE suppliers;
- SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER NOT NULL, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) );
- SQL> INSERT INTO supplier_groups (group_name) VALUES ('Domestic'), ('Global'), ('One-Time');
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES ('HP', 2);
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Inc.', 4);
- 단계 3: 외래 키 제약 행위(SET NULL)
- SQL> PRAGMA foreign_keys = ON;
- SQL> DROP TABLE suppliers;
- SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE SET NULL ON DELETE SET NULL );
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 3);
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Corp', 3);
- SQL> DELETE FROM supplier_groups WHERE group_id = 3;
- SQL> SELECT * FROM suppliers;
- 단계 4: 외래 키 제약 행위(RESTRICT)
- SQL> PRAGMA foreign_keys = ON;
- SQL> DROP TABLE suppliers;
- SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE RESTRICT ON DELETE RESTRICT );
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 1);
- SQL> DELETE FROM supplier_groups WHERE group_id = 1;
- SQL> DELETE FROM suppliers WHERE group_id =1;
- SQL> DELETE FROM supplier_groups WHERE group_id = 1;
- 단계 5: 외래 키 제약 행위(CASCADE)
- SQL> PRAGMA foreign_keys = ON;
- SQL> DELETE FROM supplier_groups;
- SQL> DROP TABLE suppliers;
- SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE CASCADE ON DELETE CASCADE );
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 1);
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Corp', 2);
- SQL> UPDATE supplier_groups SET group_id = 100 WHERE group_name = 'Domestic';
- SQL> SELECT * FROM suppliers;
- SQL> DELETE FROM supplier_groups WHERE group_id = 2;
- SQL> SELECT * FROM suppliers;
수요일, 1월 20, 2021
[유튜브 방송] (즐겁게 배우는 SQL #37) 제약 조건 - 기본 키
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 37편을 공개해드리겠다. 37편은 기본(주) 키 제약 조건을 소개한다.
2021년 1월 20일자 [즐겁게 배우는 SQL #37] 제약 조건 - 기본 키 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 기본 키 형식 소개
- 06:07 기본 키 예제
- 08:06 기본 키 추가하기
원본 학습자료는 SQLite Primary Key를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 기본 키 형식 소개
CREATE TABLE table_name( column_1 INTEGER NOT NULL PRIMARY KEY, ... ); CREATE TABLE table_name( column_1 INTEGER NOT NULL, column_2 INTEGER NOT NULL, ... PRIMARY KEY(column_1,column_2,...) ); PRAGMA foreign_keys=off; BEGIN TRANSACTION; ALTER TABLE table RENAME TO old_table; -- define the primary key constraint here CREATE TABLE table ( ... ); INSERT INTO table SELECT * FROM old_table; COMMIT; PRAGMA foreign_keys=on;
- 단계 2: 기본 키 예제
- SQL> CREATE TABLE countries ( country_id INTEGER PRIMARY KEY, name TEXT NOT NULL );
- SQL> CREATE TABLE languages ( language_id INTEGER, name TEXT NOT NULL, PRIMARY KEY (language_id) );
- SQL> CREATE TABLE country_languages ( country_id INTEGER NOT NULL, language_id INTEGER NOT NULL, PRIMARY KEY (country_id, language_id), FOREIGN KEY (country_id) REFERENCES countries (country_id) ON DELETE CASCADE ON UPDATE NO ACTION, FOREIGN KEY (language_id) REFERENCES languages (language_id) ON DELETE CASCADE ON UPDATE NO ACTION );
- SQL> INSERT INTO addresses ( house_no, street, city, postal_code, country ) VALUES ( '3960', 'North 1st Street', 'San Jose ', '95134', 'USA ' );
- SQL> INSERT INTO people ( first_name, last_name, address_id ) VALUES ('John', 'Doe', 1);
- SQL> DROP TABLE addresses;
- 단계 3: 기본 키 추가하기
- SQL> CREATE TABLE cities ( id INTEGER NOT NULL, name text NOT NULL );
- SQL> INSERT INTO cities (id, name) VALUES(1, 'San Jose');
- SQL> PRAGMA foreign_keys=off;
- SQL> BEGIN TRANSACTION;
- SQL> ALTER TABLE cities RENAME TO old_cities;
- SQL> CREATE TABLE cities ( id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL );
- SQL> INSERT INTO cities SELECT * FROM old_cities;
- SQL> DROP TABLE old_cities;
- SQL> COMMIT;
- SQL> PRAGMA foreign_keys=on;
화요일, 1월 19, 2021
[유튜브 방송] (즐겁게 배우는 SQL #36) 데이터를 정의하자 - 청소(Vacuum)
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 36편을 공개해드리겠다. 36편은 테이블 청소 방법을 소개한다.
2021년 1월 19일자 [즐겁게 배우는 SQL #36] 데이터를 정의하자 - 청소(Vacuum) 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 SQLite에서 청소(Vacuum)가 필요한 이유
- 04:55 VACUUM 명령과 pragma를 사용한 VACUUM 방식 지정
- 05:35 VACUUM INTO 살펴보기
원본 학습자료는 SQLite VACUUM을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: SQLite에서 청소(Vacuum)가 필요한 이유
- DROP이나 DELETE 등으로 자료를 삭제하더라도 데이터베이스 파일 크기는 그대로 --> 향후 사용을 위해 확보된 상태로 유지
- INSERT/DELETE 등으로 데이터를 삭제하면, 색인과 테이블이 조각화되는 상황이 발생
- 이런 문제점을 보완하기 위해 VACUUM을 도입(비고: PostgreSQL)
- 주의: VACUUM은 임시 데이터베이스 파일을 만들고 조각모음을 수행하고 다시 원본 데이터베이스 파일에 반영하므로 실시간성이 떨어짐
- 큰 테이블이나 색인을 데이터베이스에서 삭제하고 나면 수작업으로 VACUUM을 실행할 필요가 있음
- 주의: 3.9.2 버전에서 main 데이터베이스에만 VACUUM 명령을 실행할 수 있음
- 참고: SQLite는 자동으로 VACUUM 명령을 수행할 수 있지만, 제약으로 인해 수동으로 돌리는 편이 바람직함
- 단계 2: VACUUM 명령과 pragma를 사용한 VACUUM 방식 지정
- SQL> VACUUM; # 수동으로 VACUUM
- SQL> PRAGMA auto_vacuum = FULL; # 전체
- SQL> PRAGMA auto_vacuum = INCREMENTAL; # 증분
- SQL> PRAGMA auto_vacuum = NONE; # 하지 않음
- 단계 3: VACUUM INTO 살펴보기
- SQL> VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';
월요일, 1월 18, 2021
[유튜브 방송] (즐겁게 배우는 SQL #35) 데이터를 정의하자 - 테이블 제거
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 35편을 공개해드리겠다. 35편은 테이블 제거 방법을 소개한다.
2021년 1월 18일자 [즐겁게 배우는 SQL #35] 데이터를 정의하자 - 테이블 제거 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 테이블 제거 방법 소개
- 02:00 테이블 제거 예제
- 05:21 FK 문제 해결 방안
원본 학습자료는 SQLite Drop Table을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 테이블 제거 방법 소개
DROP TABLE [IF EXISTS] [schema_name.]table_name;
- 단계 2: 테이블 제거 예제
- SQL> PRAGMA foreign_keys = ON;
- SQL> CREATE TABLE IF NOT EXISTS people ( person_id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, address_id INTEGER, FOREIGN KEY (address_id) REFERENCES addresses (address_id) );
- SQL> CREATE TABLE IF NOT EXISTS addresses ( address_id INTEGER PRIMARY KEY, house_no TEXT, street TEXT, city TEXT, postal_code TEXT, country TEXT );
- SQL> INSERT INTO addresses ( house_no, street, city, postal_code, country ) VALUES ( '3960', 'North 1st Street', 'San Jose ', '95134', 'USA ' );
- SQL> INSERT INTO people ( first_name, last_name, address_id ) VALUES ('John', 'Doe', 1);
- SQL> DROP TABLE addresses;
- 단계 3: FK 문제 해결 방안
- SQL> PRAGMA foreign_keys = OFF;
- SQL> DROP TABLE addresses;
- SQL> UPDATE people SET address_id = NULL;
- SQL> PRAGMA foreign_keys = ON;
[개발자 이야기] (1월 16일) 마이크로서비스 도입, 이렇게 한다
2021년 1월 16일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2021년 1월 16일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 오늘 방송 주요 내용 소개
- 06:54 (신간 소개) 마이크로서비스 도입, 이렇게 한다
- 16:18 PHP 잘못된 방식으로 배우기
- 21:33 클라우드플레어 레이더 2020년 리뷰
- 23:55 엘라스틱 라이선스 변경
- 28:07 Learn X by Doing Y – 프로젝트 기반 학습 검색 엔진
- 29:59 안전한 Dockerfile 만들기
- 33:07 오라클, 블록체인DB와 AutoML 지원
- 36:49 PostgreSQL vs MySQL 누가 누가 빠를까?
- 39:14 윈도우에서 엄청나게 많은 파일을 지우는 방법
토요일, 1월 16, 2021
[B급 프로그래머] 1월 2주 소식(빅데이터/인공지능, 읽을거리 부문)
- 빅데이터/인공지능
- Teardown: What You Need To Know on Data Discovery Platforms
- Welcome to Greylock - A simple and lightweight data visualization library
- DuckDuckGo Reaches 100M Daily Search Queries for the First Time
- Sudden amnesia showed me the self is a convenient fiction
- Smart Contracts On Bitcoin
- We Don't Need Data Scientists, We Need Data Engineers
- The Bitter Lesson 번역
- A day in the life of AI
- 인공지능 챗봇 서비스 '이루다' KISA 조사 진행 중... 2차 Q&A 형식으로 해명하고 거듭 사과
- How To Predict NFL Winners With Python
- Multiplication sign
- 수학공부 카테고리 목록
- Simple Anomaly Detection Using Plain SQL
- '수면 아래 백조의 다리'··· 인공지능의 어두운 비밀 12가지
- ALGORITHMS FOR DECISION MAKING
- Komito Analytics is an enhancement for the most popular analytics software. It unlocks power of digital analytics with additional insights about visitor’s behavior.
- Introducing Machine Learning for Developers Newsletter (ML4Devs, Issue 1)
- Doing symbolic math with SymPy
- Scipy Lecture Notes
- DALL-E in Pytorch
- Traffic Simulator
- Dissecting the Apple M1 GPU, part I
- The nuclear lighthouses built by the Soviets in the Arctic
- 없으면 만든다··· 오픈 AI, 진일보한 이미지 생성 AI '달·E' 선보여
- JupyterLab 3.0 is released!
- 15.ai Deep-learning text-to-speech tool for generating voices of various characters
- DALL·E: Creating Images from Text
- MMTracking is an open source video perception toolbox based on PyTorch.
- How To Become A Computer Vision Engineer In 2021
- AI 소프트웨어 시장이 예상보다 줄 거라 전망하는 이유
- My year in data
- When Big Brands Stopped Spending On Digital Ads, Nothing Happened. Why?
- Headlime - Say goodbye to manually creating landing pages and writing copy
- Handtrack.js is a library for prototyping realtime hand detection (bounding box), directly in the browser.
- How to Staff Your AI Team
- What's the difference between boosting and bagging?
- 자바 개발자를 위한 머신러닝 실전 가이드 - ITWorld How To
- The Pile - An 800GB Dataset of Diverse Text for Language Modeling
- Getting started in Robotics
- WEKA - The workbench for machine learning
- 읽을거리
- The Bit Short: Inside Crypto’s Doomsday Machine
- Immunological characteristics govern the transition of COVID-19 to endemicity
- [특파원 리포트] 흥분한 '서학개미'들에게
- Managing Stress and Emotions When Working Remotely
- 21년 디지털자산 전망과 7대 트렌드
- If it will matter after today, stop talking about it in a chat room
- 자동차의 마지막 아날로그 - 시계: 자동차 시계의 역사
- 테크노마트 회상-1; 부동산 가격은 아무도 어떻게 될지 모른다.
- Terms of Service; Didn’t Read
- ‘마이크로매니징’을 피하면서 직원들을 돕는 방법
- To the moon: defining and detecting cryptocurrency pump-and-dumps
- 투자 자료 모음
- Your Air Travel Experience Will Never Be the Same
- 마트서 파는 참치 캔에 참다랑어는 없지만...
- Feel Like You’re Falling Behind Your Peers?
- 美 통화감독청, 은행 결제 업무에 블록체인·스테이블코인 활용 공식 허용
- The Colonel Blotto Game: How Underdogs Can Win
- [에세이] 무조건 상위 10% 안에 드는 방법
- 우리 집 고양이가 보는 집사의 모습은 거대하고 예측 불가능한 영장류?
- No One Can Explain Why Planes Stay in the Air
- GPU Shortages Will Worsen Thanks to Coin Miners
- 음향 편집기사가 말하는 '한국영화에서 대사가 잘 안 들리는 이유'
- 투자 전략: 벤치마크의 기술
- 비트코인 3만달러 돌파, 발사지는 코인베이스?
- 고용 한파엔 서울대 졸업장도, 토익 900점도 안 통한다
- 「주요국의 상위 10% 논문 국제점유율 분석」 주요내용
- `직장인만 봉`…눈덩이 소득세 5년간 45% 늘었다
- David Fincher, the Unhappiest Auteur
금요일, 1월 15, 2021
[유튜브 방송] (즐겁게 배우는 SQL #34) 데이터를 정의하자 - 테이블 열 이름 변경
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 34편을 공개해드리겠다. 34편은 테이블 열 이름 변경 방법을 소개한다.
2021년 1월 15일자 [즐겁게 배우는 SQL #34] 데이터를 정의하자 - 테이블 열 이름 변경 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 테이블 열 이름 변경 방법 소개
- 01:14 테이블 열 이름 변경 예제
- 02:30 테이블 열 이름 변경 예제(2)
원본 학습자료는 SQLite Rename Column을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 테이블 열 이름 변경 방법 소개
ALTER TABLE table_name RENAME COLUMN current_name TO new_name;
- 단계 2: 테이블 열 이름 변경 예제
- SQL> CREATE TABLE Locations( LocationId INTEGER PRIMARY KEY, Address TEXT NOT NULL, City TEXT NOT NULL, State TEXT NOT NULL, Country TEXT NOT NULL );
- SQL> INSERT INTO Locations(Address,City,State,Country) VALUES('3960 North 1st Street','San Jose','CA','USA');
- SQL> ALTER TABLE Locations RENAME COLUMN Address TO Street;
- SQL> SELET * FROM Locations;
- 단계 3: 테이블 열 이름 변경 예제(2)
- 참고: 3.25.0 이전에 사용하는 옛날 방식
- SQL> DROP TABLE IF EXISTS Locations;
- SQL> CREATE TABLE Locations( LocationId INTEGER PRIMARY KEY, Address TEXT NOT NULL, State TEXT NOT NULL, City TEXT NOT NULL, Country TEXT NOT NULL );
- SQL> INSERT INTO Locations(Address,City,State,Country) VALUES('3960 North 1st Street','San Jose','CA','USA');
- SQL> BEGIN TRANSACTION;
- SQL> CREATE TABLE LocationsTemp( LocationId INTEGER PRIMARY KEY, Street TEXT NOT NULL, City TEXT NOT NULL, State TEXT NOT NULL, Country TEXT NOT NULL );
- SQL> INSERT INTO LocationsTemp(Street,City,State,Country)
- SQL> SELECT Address,City,State,Country FROM Locations;
- SQL> DROP TABLE Locations;
- SQL> ALTER TABLE LocationsTemp RENAME TO Locations;
- SQL> COMMIT;
- SQL> SELECT * FROM Locations;
목요일, 1월 14, 2021
[유튜브 방송] (즐겁게 배우는 SQL #33) 데이터를 정의하자 - 테이블 변경
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 33편을 공개해드리겠다. 33편은 테이블 변경 방법을 소개한다.
2021년 1월 14일자 [즐겁게 배우는 SQL #33] 데이터를 정의하자 - 테이블 변경 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 테이블 변경 방법 소개
- 03:28 테이블 이름 변경 예제
- 05:04 테이블 열 추가 예제
- 07:42 테이블 열 삭제 예제
원본 학습자료는 SQLite Rename Column을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 테이블 변경 방법 소개
ALTER TABLE existing_table RENAME TO new_table; ) [WITHOUT ROWID]; ALTER TABLE table_name ADD COLUMN column_definition; ALTER TABLE table_name RENAME COLUMN current_name TO new_name; -- disable foreign key constraint check PRAGMA foreign_keys=off; -- start a transaction BEGIN TRANSACTION; -- Here you can drop column CREATE TABLE IF NOT EXISTS new_table( column_definition, ... ); -- copy data from the table to the new_table INSERT INTO new_table(column_list) SELECT column_list FROM table; -- drop the table DROP TABLE table; -- rename the new_table to the table ALTER TABLE new_table RENAME TO table; -- commit the transaction COMMIT; -- enable foreign key constraint check PRAGMA foreign_keys=on;
- 단계 2: 테이블 이름 변경 예제
- SQL> CREATE TABLE devices ( name TEXT NOT NULL, model TEXT NOT NULL, Serial INTEGER NOT NULL UNIQUE );
- SQL> INSERT INTO devices (name, model, serial) VALUES('HP ZBook 17 G3 Mobile Workstation','ZBook','SN-2015');
- SQL> ALTER TABLE devices RENAME TO equipment;
- SQL> SELECT name, model, serial FROM equipment;
- 단계 3: 테이블 열 추가 예제
- SQL> ALTER TABLE equipment ADD COLUMN location text;
- 단계 4: 테이블 열 삭제 예제
- SQL> CREATE TABLE users( UserId INTEGER PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL, Email TEXT NOT NULL, Phone TEXT NOT NULL );
- SQL> CREATE TABLE favorites( UserId INTEGER, PlaylistId INTEGER, FOREIGN KEY(UserId) REFERENCES users(UserId), FOREIGN KEY(PlaylistId) REFERENCES playlists(PlaylistId) );
- SQL> INSERT INTO users(FirstName, LastName, Email, Phone) VALUES('John','Doe','john.doe@example.com','408-234-3456');
- SQL> INSERT INTO favorites(UserId, PlaylistId) VALUES(1,1);
- SQL> SELECT * FROM users;
- SQL> SELECT * FROM favorites;
- SQL> PRAGMA foreign_keys=off;
- SQL> BEGIN TRANSACTION;
- SQL> CREATE TABLE IF NOT EXISTS persons ( UserId INTEGER PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL, Email TEXT NOT NULL );
- SQL> INSERT INTO persons(UserId, FirstName, LastName, Email) SELECT UserId, FirstName, LastName, Email FROM users;
- SQL> DROP TABLE users;
- SQL> ALTER TABLE persons RENAME TO users;
- SQL> COMMIT;
- SQL> PRAGMA foreign_keys=on;
- SQL> SELECT * FROM users;
수요일, 1월 13, 2021
[독서광] (신간 번역서) 마이크로서비스 도입, 이렇게 한다
작년 10월 말에 출간된 게임 엔진 블랙 북: 울펜슈타인 3D에 이어 오늘은 신간 번역서 소식 하나 전해드리겠다. 오늘의 주인공은 마이크로서비스 아키텍처 구축: 대용량 시스템의 효율적인 분산 설계 기법으로 유명해진 샘 뉴먼이 집필한 Monolith To Microservices의 번역서인 마이크로서비스 도입, 이렇게 한다: 기업의 유연성과 확장성을 높이는 마이크로서비스 마이그레이션 패턴과 현장 사례다.
이 책은 마이크로서비스를 기업에서 도입하는 과정에서 겪게될 여러 가지 어려움을 미리 볼 수 있는 수정 구슬을 제공하며, 구체적으로 마이크로서비스를 도입해야 할지 말아야 할지, 도입한다면 어떤 과정을 거쳐 도입해야 할지, 도입하는 과정에서 따르면 좋을 패턴 23가지와 문제에 부딪혔을 때 도움이 되는 해법을 소개한다. 쿠버네티스와 클라우드 네이티브만 도입하면 저절로 마이크로서비스 아키텍처를 멋지게 달성할 수 있지 않을까라는 막연한 희망을 품고 있는 분들이게 성공 확률을 높이는 비법은 무엇일까?
2020년 7월 15일 오라일리 테크 레이더에서 발표한 Microservices Adoption in 2020에서 조사한 결과를 여기서 잠깐 정리해보겠다.
- 채택한 대다수 회사는 마이크로서비스로 성공을 거뒀다: 소수(10% 이하)만 '완벽한 성공'을 보고했지만, 명백히 대다수(54%)가 최소한 '거의 성공했으며', 92%의 응답자가 최소한 어느 정도 성공을 거뒀다고 보고했다. 전혀 성공을 거두지 못한 회사는 10%에 못미쳤다.
- 마이크로서비스 우수 사례는 놀랄만큼 성숙되었다: 응답자의 대략 28%가 조직이 최소한 3년 정도 마이크로서비스를 사용해왔다고 응답했으며, 2/3(61%)의 응답자는 1년 이상 마이크로서비스를 사용해왔다고 응답했다.
- 채택한 회사들은 마이크로서비스에 거액의 판돈을 걸었다: 거의 1/3에 해당하는(29%) 응답자들은 마이크로서비스를 사용해 대다수(50% 이상) 시스템을 구현하거나 이주했다고 말했다.
- 마이크로서비스 성공은 소프트웨어 생명주기의 소유를 의미한다: 대다수(74%) 응답자는 팀이 소프트웨어 생명주기의 빌드-테스트-배포-유지 단계를 소유하고 있다고 응답했다. 생명 주기를 소유한 팀은 그렇지 못한 팀과 비교해 18% 더 높은 비율로 성공했다.
- 컨테이너의 성공: 응답자 중에 마이크로서비스 배포에 컨테이너를 사용한 조직이 그렇지 않은 조직과 비교해 더 많은 성공을 거두었다. 응답자를 대상으로 컨테이너 사용은 마이크로서비스 성공을 판단하는 가장 강력한 예측 요인이었다.
- 마이크로서비스는 문화다: 마이크로서비스를 채택한 많은 조직은 채택 과정에서 문화와 마인드 장벽을 언급했다. 모놀리스 애플리케이션을 마이크로서비스로 분해하는 작업은 상당한 도전이지만, 복잡도는 그 중에서도 가장 큰 도전으로 다가온다.
이렇듯 마이크로서비스가 점차 퍼져나가고 있음에도 불구하고 주의 사항이 있다. 대다수 성공 사례는 백지에서 시작한 경우보다는 기존 사업 이해도가 높은 경우에 해당하고 비교적 조직 규모가 큰 경우에 해당한다는 사실이다. 따라서 처음부터 마이크로서비스 아키텍처를 구성하는 방식보다는 기존 모놀리스를 점진적으로 마이크로서비스 아키텍처로 이동하는 방식이 성공 확률을 높인다는 샘 뉴먼의 경험적인 교훈을 잘 새겨 들어야 한다. 다시 말해, 마이크로서비스를 도입하고 싶은 마음이 급할수록 돌아가야한다. 이 책을 읽으면서 마이크로서비스 아키텍처와 관련된 문제를 솔직하게 평가하고, 심지어 마이크로아키텍처로 향하는 여정의 시작이 각자에게 적합한지 이해하자. 이렇게 차근차근 전진하다보면 여러분도 마이크로서비스로 성공한 일원이 되어 있을 것이다. 아무쪼록 마이크로서비스 여정을 떠나는 독자 여러분의 행운을 빈다!
한국어판에만 있는 보너스: '부록 C 한국어판 특별 부록: 기술의 진화로 짚어보는 마이크로서비스 도입의 허와 실'를 한국어판 독자들을 위해 특별히 작성했다.
현재 절찬 예약 판매 중이며, 애독자 여러분들의 많은 성원 부탁드리겠다.
- ▶️ 교보문고 https://bit.ly/3q9C5P8
- ▶️ 예스24 https://bit.ly/2LBHakh
- ▶️ 알라딘 http://aladin.kr/p/ryuUD
- ▶️ 인터파크 https://bit.ly/2XxnhxG
[유튜브 방송] (즐겁게 배우는 SQL #32) 데이터를 정의하자 - 테이블 생성
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 32편을 공개해드리겠다. 32편은 테이블 생성 방법을 소개한다.
2021년 1월 13일자 [즐겁게 배우는 SQL #32] 데이터를 정의하자 - 테이블 생성 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 테이블 생성 방법 소개
- 05:17 테이블 생성 예제
원본 학습자료는 SQLite Create Table을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 테이블 생성 방법 소개
CREATE TABLE [IF NOT EXISTS] [schema_name].table_name ( column_1 data_type PRIMARY KEY, column_2 data_type NOT NULL, column_3 data_type DEFAULT 0, table_constraints ) [WITHOUT ROWID];
- 단계 2: 테이블 생성 예제
- SQL> CREATE TABLE contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT NOT NULL UNIQUE, phone TEXT NOT NULL UNIQUE );
- SQL> CREATE TABLE groups ( group_id INTEGER PRIMARY KEY, name TEXT NOT NULL );
- SQL> CREATE TABLE contact_groups( contact_id INTEGER, group_id INTEGER, PRIMARY KEY (contact_id, group_id), FOREIGN KEY (contact_id) REFERENCES contacts (contact_id) ON DELETE CASCADE ON UPDATE NO ACTION, FOREIGN KEY (group_id) REFERENCES groups (group_id) ON DELETE CASCADE ON UPDATE NO ACTION );
화요일, 1월 12, 2021
[유튜브 방송] (즐겁게 배우는 SQL #31) 데이터를 정의하자 - SQL 데이터 타입
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 31편을 공개해드리겠다. 31편은 SQL 데이터 타입을 소개한다.
2021년 1월 12일자 [즐겁게 배우는 SQL #31] 데이터를 정의하자 - SQL 데이터 타입 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 데이터 타입 유형 소개
- 02:17 typeof() 함수 소개
- 03:12 데이터 타입 예제
- 05:47 데이터 타입 정렬 순서 확인
원본 학습자료는 SQLite Data Types을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 데이터 타입 유형 소개
- NULL: NULL
- INTEGER: 정수(1, 2, 4, 8 가변 바이트)
- REAL: 실수(8바이트)
- TEXT: 문자열(가변 바이트)
- BLOB(Binary Large OBject): 이진 데이터(x 로 시작하고 가변 바이트)
- 단계 2: typeof() 함수 소개
- SQL> SELECT typeof(100), typeof(10.0), typeof('100'), typeof(x'1000'), typeof(NULL);
- 단계 3: 데이터 타입 예제
- SQL> CREATE TABLE test_datatypes ( id INTEGER PRIMARY KEY, val );
- SQL> INSERT INTO test_datatypes (val) VALUES (1), (2), (10.1), (20.5), ('A'), ('B'), (NULL), (x'0010'), (x'0011');
- SQL> SELECT id, val, typeof(val) FROM test_datatypes;
- 단계 4: 데이터 타입 정렬 순서 확인
- 순서는: (가장 우선 순위가 낮은) NULL < INTEGER = REAL < TEXT < BLOB (가장 우선 순위가 높은)
- SQL> SELECT id, val, typeof(val) FROM test_datatypes ORDER BY val;
월요일, 1월 11, 2021
[유튜브 방송] (즐겁게 배우는 SQL #30) 트랜잭션이 뭐지?
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 30편을 공개해드리겠다. 30편은 트랜잭션의 개념/기본 원리와 예를 소개한다.
2021년 1월 11일자 [즐겁게 배우는 SQL #30] 트랜잭션이 뭐지? 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 트랜잭션 기본 원리 소개
- 04:51 트랜잭션 예제(정상적인 경우)
- 11:07 트랜잭션 예제(롤백하는 경우)
원본 학습자료는 SQLite Transaction을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 트랜잭션 기본 원리 소개 - ACID
- 원자성(Atomic): 트랜잭션 내에서는 모든 연산이 모두 완료되거나 모두 실패하거나 둘 중 한 가지 상태를 보증한다. 어떤 이유로든 시도하는 변경 내역이 실패하면 전체 연산은 중단되고 마치 아무런 변경사항도 없는 것처럼 보인다.
- 일관성(Consistent): 데이터베이스가 변경되면, 유효하며 일관된 상태로 유지된다.
- 격리(Isolation): 여러 트랜잭션이 간섭 없이 동시에 작동할 수 있다. 이는 어떤 트랜잭션 중에 이뤄진 모든 중간 상태 변경이 다른 트랜잭션에 보이지 않게 하는 방법으로 달성된다.
- 내구성(Durable): 일단 트랜잭션이 완료되고 나면 시스템 오류가 발생하는 상황에서도 데이터가 손실되지 않는다고 보장한다.
BEGIN TRANSACTION; COMMIT; ROLLBACK;
- 단계 2: 트랜잭션 예제(정상적인 경우)
- SQL> CREATE TABLE accounts ( account_no INTEGER NOT NULL, balance DECIMAL NOT NULL DEFAULT 0, PRIMARY KEY(account_no), CHECK(balance >= 0) );
- SQL> CREATE TABLE account_changes ( change_no INTEGER PRIMARY KEY AUTOINCREMENT, account_no INTEGER NOT NULL, flag TEXT NOT NULL, amount DECIMAL NOT NULL, changed_at TEXT NOT NULL );
- SQL> INSERT INTO accounts (account_no,balance) VALUES (100,20100);
- SQL> INSERT INTO accounts (account_no,balance) VALUES (200,10100);
- SQL> BEGIN TRANSACTION;
- SQL> UPDATE accounts SET balance = balance - 1000 WHERE account_no = 100;
- SQL> UPDATE accounts SET balance = balance + 1000 WHERE account_no = 200;
- SQL> INSERT INTO account_changes(account_no,flag,amount,changed_at) VALUES(100,'-',1000,datetime('now'));
- SQL> INSERT INTO account_changes(account_no,flag,amount,changed_at) VALUES(200,'+',1000,datetime('now'));
- SQL> COMMIT;
- SQL> SELECT * FROM accounts;
- SQL> SELECT * FROM account_changes;
- 단계 3: 트랜잭션 예제(롤백하는 경우)
- SQL> BEGIN TRANSACTION;
- SQL> INSERT INTO account_changes(account_no,flag,amount,changed_at) VALUES(100,'-',20000,datetime('now'));
- SQL> UPDATE accounts SET balance = balance - 20000 WHERE account_no = 100;
- SQL> SELECT * FROM account_changes;
- SQL> ROLLBACK;
- SQL> SELECT * FROM account_changes;
[개발자 이야기] (1월 9일) 내가 소프트웨어 업계에서 45년 동안 배운 교훈
2021년 1월 9일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2021년 1월 9일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 오늘 방송 주요 내용 소개
- 04:00 서버쪽 웹어셈블리 와스머 GA 버전 공개!
- 07:46 우리가 클라우드를 싫어하는 11가지 이유
- 12:22 닛산, 깃 저장소 설정 오류로 코드 유출
- 13:47 내가 소프트웨어 업계에서 45년 동안 배운 교훈
- 18:45 (SQL) Correlated Subquery
- 20:45 페북이 앱에서 수집하는 정보 범위는?
- 22:22 아틀라시안 클라우드 사용 약관 중…
토요일, 1월 09, 2021
[B급 프로그래머] 1월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
- 개발/관리도구
- Dissecting the Apple M1 GPU, part I
- Nissan source code leaked online after Git repo misconfiguration
- The Journey from Monolith to Microservices at GitHub: QCon Plus Q&A
- Why is my ethernet interface called enp0s10 instead of eth0?
- ‘역설투성이'··· 우리가 클라우드를 싫어하는 11가지 이유
- How NAT traversal works
- What I’ve Learned in 45 Years in the Software Industry
- PeerJS simplifies WebRTC peer-to-peer data, video, and audio calls.
- Web Development for Beginners - A Curriculum (한국어판)
- 2020년과 이후 JavaScript의 동향 - 라이브러리와 프레임워크 1
- A Look At The CPU Security Mitigation Costs Three Years After Spectre/Meltdown
- https://bert.org/2021/01/04/t2-pin-cracking/
- How to set environment variable in systemd service?
- Explore the night sky with this open source astronomy app
- Show progress in your Python apps with tqdm
- 10 examples of using Python in 2020
- 루비(Ruby) 버전 3.0.0, 병렬실행 및 타입설명 지원
- https://repl.leaningtech.com/?nodejs
- Learn Go in ~5mins
- System Design Interview Book Review: Finally, a Book for Getting Better at Architecting Systems
- The Offline Cookbook
- Stimulus, the "JavaScript Framework for the HTML You Already Have", Releases 2.0
- MsQuic is a Microsoft implementation of the IETF QUIC protocol.
- Why Performance Matters, Part 2: Perception Management
- An Incomplete Guide to Rollups (Ethereum Scalability Solution)
- Unclack is the small but mighty Mac utility that mutes your microphone while you type.
- mint - The programming language for writing single page applications.
- Open source RGB lighting control that doesn't depend on manufacturer software. Supports Windows and Linux.
- WhatsApp Beaten By Apple’s New iMessage Privacy Update
- muzzleapp - a simple mac app to slience embarrassing notification while screensharing
- GTK4 for Graphical User Interfaces
- Ryzen 9 5000 series processor by Linus Torvalds
- How to open a file in Emacs
- URL shorteners set ad tracking cookies
- Which programs are fastest?
- CodeSwing - VSCode용 대화형 코딩 환경
- JSON Lines 포맷
- A half-hour to learn Zig
- New 2021 GPS Accuracy Issue Impacting Some Garmin, Suunto, other GPS Devices
- Speed up Docker build time with cache warming
- Seven Hard-Earned Lessons Learned Migrating a Monolith to Microservices
- A review of endianness bugs in Qt, and how they were fixed
- Virtual Environments Demystified
- A half-hour to learn Rust
- The Lasting Lessons of John Conway's Game of Life
- 순수하게 CSS로만 만든 디지털 시계
- The Great Software Stagnation
- Getting started in Robotics
- horrifying-pdf-experiments
- [Python] REST API 개발로 알아보는 WSGI, ASGI
- distcc: a fast, free distributed C/C++ compiler
- Lichee Nano Pi – Will it run Debian?
- Embed Flash SWF content without the Plugin
- State machines are wonderful tools
- An onlinejudge system based on Python and Vue. (온라인 코딩 테스트 플랫폼)
- TabFS is a browser extension that mounts your browser tabs as a filesystem on your computer.
- The Monaco Editor is the code editor that powers VS Code.
- 🌳🚀 CS Visualized: Useful Git Commands
- The Big Little Guide to Message Queues
- Uber’s Real-Time Push Platform
- bpytop – Awesome Linux, macOS and FreeBSD resource monitor
- How we built the GitHub globe
- '배시(Bash) 5.1' 출시, 업데이트 주요 내용
- In the Search of Code Quality (Code Review)
- A fork of Puppeteer running on Deno.
- How to Build Rest API with Node.js, Express.js and MongoDB
- CTL is a fast compiling, type safe, header only, template-like library for ISO C99/C11.
- SikuliX automates anything you see on the screen of your desktop computer running Windows, Mac or some Linux/Unix.
- 네이버 클라우드 플랫폼의 Live Station과 OBS로 온라인 행사 운영하기
- Archivy - 셀프호스팅 지식 저장소
- 쿠버네티스 클러스터 운영자를 위한 모니터링
- YAML cheatsheet
- NumPy Illustrated: The Visual Guide to NumPy
- Teaching the Unfortunate Parts
- How AWS Added Apple Mac Mini Nodes to EC2
- In-depth: Functional programming in C++
- Why the iPhone Timer App displays a Fake Time
- Deview 2020 (Day 2/Day 3)
- Raspberry Pi PCIe Devices - Raspberry Pi PCI Express device compatibility database
- 어느 위치에서 실행하든 경로를 유지하는 배치 파일 만들기
- cosmopolitan libc - build-once run-anywhere c without devops
- 기업 무료 라이선스 S/W
- bar jar is also known as fat jar i.e. jar with dependencies.
- Welcome to the learnshell.org interactive Shell Programming tutorial.
- JavaScript 에서 TypeScript 로
- Systems design explains the world: volume 1
- Upptime - GitHub-powered open-source uptime monitor and status page
- The Genius of RISC-V Microprocessors
- Tokio 1.0 발표 - Rust용 비동기 런타임
- Run More Stuff in Docker
- Fun with IP address parsing
- 리멤버 서버/웹 팀은 어떻게 일을 하는가? (Code Review 포함)
- How much math you need for programming
- How I REVERSE ENGINEERED GOOGLE DOCS
- A Complete Guide to LLVM for Programming Language Creators
- How an obscure British PC maker invented ARM and changed the world
- 고성능 서버/데이터베이스
- Linux /proc Filesystem for MySQL DBAs - Part I, Basics
- json-sql
- minikeyvalue is a ~1000 line distributed key value store, with support for replication, multiple machines, and multiple drives per machine.
- Understanding Connections & Pools
- MySQL Challenge: 100k Connections
- PostgreSQL Database Security: What You Need To Know
- SQL Correlated Subqueries
- Creating a Java off-heap in-memory database
- his is a simple graph database in SQLite, inspired by "SQLite as a document database".
- PostgreSQL to ClickHouse
금요일, 1월 08, 2021
[유튜브 방송] (즐겁게 배우는 SQL #29) CRUD 연산의 기본기를 배우자 - 삽입하거나 기존 행을 대체하는 REPLACE
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 29편을 공개해드리겠다. 29편은 삽입하거나 기존 행을 대체하는 REPLACE를 소개한다.
2021년 1월 8일자 [즐겁게 배우는 SQL #29] CRUD 연산의 기본기를 배우자 - 삽입하거나 기존 행을 대체하는 REPLACE 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 데이터 조작 방법 소개
- 02:44 UNIQUE INDEX 조건 위배 예제
- 09:22 PK 조건 위배 예제
원본 학습자료는 SQLite REPLACE Statement를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 데이터 조작 방법 소개
INSERT INTO table (column1, column2 ,..) VALUES( value1, value2 ,...);
- 단계 2: UNIQUE INDEX 조건 위배 예제
- SQL> UCREATE TABLE IF NOT EXISTS positions ( id INTEGER PRIMARY KEY, title TEXT NOT NULL, min_salary NUMERIC );
- SQL> INSERT INTO positions (title, min_salary) VALUES ('DBA', 120000), ('Developer', 100000), ('Architect', 150000);
- SQL> CREATE UNIQUE INDEX idx_positions_title ON positions (title);
- SQL> INSERT INTO positions (title, min_salary) VALUES('Full Stack Developer', 140000);
- SQL> REPLACE INTO positions (title, min_salary) VALUES('Full Stack Developer', 140000);
- SQL> SELECT id,title,min_salary FROM positions;
- 단계 3: PK 조건 위배 예제
- SQL> INSERT INTO positions (id, min_salary) VALUES(2, 110000);
- SQL> REPLACE INTO positions (id, min_salary) VALUES(2, 110000);
- SQL> REPLACE INTO positions (id, title, min_salary) VALUES(2, "Developer", 110000);
- SQL> SELECT id,title,min_salary FROM positions;
목요일, 1월 07, 2021
[유튜브 방송] (즐겁게 배우는 SQL #28) CRUD 연산의 기본기를 배우자 - D(Delete)를 위한 DELETE
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 28편을 공개해드리겠다. 28편은 Delete를 소개한다.
2021년 1월 7일자 [즐겁게 배우는 SQL #28] CRUD 연산의 기본기를 배우자 - D(Delete)를 위한 DELETE 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 데이터 조작 방법 소개
- 01:19 where 조건문을 사용한 삭제
- 06:21 전체 삭제
원본 학습자료는 SQLite Delete를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 데이터 조작 방법 소개
DELETE FROM table WHERE search_condition;
- 단계 2: where 조건문을 사용한 삭제
- SQL> CREATE TABLE artists_backup( artistid INTEGER PRIMARY KEY AUTOINCREMENT, name NVARCHAR );
- SQL> INSERT INTO artists_backup SELECT artistid,name FROM artists;
- SQL> DELETE FROM artists_backup WHERE artistid = 1;
- SQL> DELETE FROM artists_backup WHERE name LIKE '%Santana%';
- 단계 3: 전체 삭제
- SQL> DELETE FROM artists_backup;
- 단계 4: ORDER BY와 LIMIT로 삭제
- 주의: SQLITE_ENABLE_UPDATE_DELETE_LIMIT를 컴파일 과정에서 활성화(참고 자료)
수요일, 1월 06, 2021
[유튜브 방송] (즐겁게 배우는 SQL #27) CRUD 연산의 기본기를 배우자 - U(Update)를 위한 UPDATE
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 27편을 공개해드리겠다. 27편은 Update를 소개한다.
2021년 1월 6일자 [즐겁게 배우는 SQL #27] CRUD 연산의 기본기를 배우자 - U(Update)를 위한 UPDATE 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 데이터 조작 방법 소개
- 02:06 한 컬럼을 업데이트
- 04:24 여러 컬럼을 업데이트
- 06:01 ORDER BY와 LIMIT로 업데이트
- 09:39 모든 행을 업데이트
원본 학습자료는 SQLite Update를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 데이터 조작 방법 소개
INSERT INTO table (column1, column2 ,..) VALUES( value1, value2 ,...);
- 단계 2: 한 컬럼을 업데이트
- SQL> UPDATE employees SET lastname = 'Smith' WHERE employeeid = 3;
- 단계 3: 여러 컬럼을 업데이트
- SQL> UPDATE employees SET city = 'Toronto', state = 'ON', postalcode = 'M5P 2N7' WHERE employeeid = 4;
- 단계 4: ORDER BY와 LIMIT로 업데이트
- SQL> UPDATE employees SET email = LOWER( firstname || "." || lastname || "@chinookcorp.com" ) ORDER BY firstname LIMIT 1;
- 주의: SQLITE_ENABLE_UPDATE_DELETE_LIMIT를 컴파일 과정에서 활성화(참고 자료)
- 단계 5: 모든 행을 업데이트
- SQL> UPDATE employees SET email = LOWER( firstname || "." || lastname || "@chinookcorp.com" );
화요일, 1월 05, 2021
[유튜브 방송] (즐겁게 배우는 SQL #26) CRUD 연산의 기본기를 배우자 - C(Create)를 위한 INSERT
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 26편을 공개해드리겠다. 26편은 Insert를 소개한다.
2021년 1월 5일자 [즐겁게 배우는 SQL #26] CRUD 연산의 기본기를 배우자 - C(Create)를 위한 INSERT 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 데이터 조작 방법 소개
- 03:15 한 행을 입력
- 06:02 여러 행을 입력
- 07:16 기본 값으로 입력
- 08:00 SELECT 문으로 뽑아낸 데이터를 입력
원본 학습자료는 SQLite Insert를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 데이터 조작 방법 소개
INSERT INTO table (column1, column2 ,..) VALUES( value1, value2 ,...);
- 단계 2: 한 행을 입력
- SQL> INSERT INTO artists (name) VALUES('Bud Powell');
- SQL> SELECT ArtistId, Name FROM Artists ORDER BY ArtistId DESC LIMIT 1;
- 단계 3: 여러 행을 입력
- SQL> INSERT INTO artists (name) VALUES ("Buddy Rich"), ("Candido"), ("Charlie Byrd");
- SQL> SELECT ArtistId, Name FROM artists ORDER BY ArtistId DESC LIMIT 3;
- 단계 4: 기본 값으로 입력
- SQL> INSERT INTO artists DEFAULT VALUES;
- SQL> SELECT ArtistId, Name FROM artists ORDER BY ArtistId DESC;
- 단계 5: SELECT 문으로 뽑아낸 데이터를 입력
- SQL> CREATE TABLE artists_backup( ArtistId INTEGER PRIMARY KEY AUTOINCREMENT, Name NVARCHAR );
- SQL> INSERT INTO artists_backup SELECT ArtistId, Name FROM artists;
- SQL> SELECT * FROM artists_backup;
월요일, 1월 04, 2021
[개발자 이야기] (1월 3일) 특집: 마음대로 예상하는 2021년 IT 기술 전망
2021년 1월 3일자 특집 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.
2021년 1월 3일자 특집 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 오늘 방송 주요 내용 소개
- 01:22 프론트 엔드가 주류로 자리잡는다
- 06:10 머신러닝/딥러닝이 프로그래머에 친숙하게 다가온다
- 08:57 클라우드는 더 이상 신기한 물건이 아니다
- 13:05 복잡함을 줄이려는 시도가 점점 더 늘어날 것이다
- 15:51 구독형 모델의 무료 서비스 범위가 점점 줄어들 것이다
- 17:30 IT 구인-구직 쏠림이 강화되고 있다
- 20:12 온라인 개발 자료와 온라인 IT 학원이 강세를 보일 것이다
- 22:22 로우 코딩 또는 노 코딩? 아직은 아니다
- 26:10 고성능 CPU와 GPU 부족 현상이 계속될 것이다
- 27:50 블록체인과 같은 특정 신기술이 갑자기 뜨는 상황은 없을 것이다
[유튜브 방송] (즐겁게 배우는 SQL #25) 보너스 - 지금까지 배운 내용 응용하기
[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 25편을 공개해드리겠다. 25편은 지금까지 배운 내용을 토대로 실제 문제를 풀어본다.
2021년 1월 4일자 [즐겁게 배우는 SQL #25] 보너스 - 지금까지 배운 내용 응용하기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 문제 분석
- 04:00 테이블 생성과 데이터 입력
- 06:32 일단 테이블 2개만 살펴보자
- 12:40 테이블 3개로 확장
방송에 사용한 실제 실습 자료는 다음을 참고한다:
- 단계 1: 문제 분석
테이블: course cno cname credit dept prname C123 프로그래밍 3 컴퓨터 PrKimDo C312 자료구조 3 컴퓨터 PrKimDo C324 파일처리 3 컴퓨터 PrKimDo C413 데이터베이스 3 컴퓨터 PrKimDo E412 반도체 3 전자 PrKimDo enrol sno cno grade midterm finalterm 100 C413 A 90 95 100 E412 A 95 95 200 C123 B 85 80 300 C312 A 90 95 300 C324 C 75 75 400 C312 A 90 95 400 C413 B 80 85 400 E412 C 65 75 500 C312 B 85 80 student sno sname dept year 100 Kim1 컴퓨터 4 200 Kim2 전기 3 300 Kim3 컴퓨터 1 400 Kim4 컴퓨터 4 500 Kim5 산공 2 문제: 컴퓨터공학과 4학년 모든 학생이 듣는 과목 이름을 출력
- 단계 2: 테이블 생성과 데이터 입력
- SQL> CREATE TABLE course ( cno TEXT PRIMARY KEY, cname TEXT NOT NULL, credit INTEGER, dept TEXT NOT NULL, pname TEXT NOT NULL);
- SQL> CREATE TABLE enrol (sno INTEGER, cno TEXT, grade TEXT NOT NULL, midterm INTEGER, finalterm INTEGER);
- SQL> CREATE TABLE student (sno INTEGER PRIMARY KEY, sname TEXT NOT NULL, dept TEXT NOT NULL, year INTEGER);
- SQL> INSERT INTO course values ('C123', '프로그래밍', 3, '컴퓨터', 'PrKimDo');
- SQL> INSERT INTO course values ('C312', '자료구조', 3, '컴퓨터', 'PrKimDo');
- SQL> INSERT INTO course values ('C324', '파일처리', 3, '컴퓨터', 'PrKimDo');
- SQL> INSERT INTO course values ('C413', '데이터베이스', 3, '컴퓨터', 'PrKimDo');
- SQL> INSERT INTO course values ('E412', '반도체', 3, '전자', 'PrKimDo');
- SQL> INSERT INTO enrol values (100, 'C413', 'A', 90, 95);
- SQL> INSERT INTO enrol values (100, 'E412', 'A', 95, 95);
- SQL> INSERT INTO enrol values (200, 'C123', 'B', 85, 80);
- SQL> INSERT INTO enrol values (300, 'C312', 'A', 90, 95);
- SQL> INSERT INTO enrol values (300, 'C324', 'C', 75, 75);
- SQL> INSERT INTO enrol values (400, 'C312', 'A', 90, 95);
- SQL> INSERT INTO enrol values (400, 'C413', 'B', 80, 85);
- SQL> INSERT INTO enrol values (400, 'E412', 'C', 65, 75);
- SQL> INSERT INTO enrol values (500, 'C312', 'B', 85, 80);
- SQL> INSERT INTO student values (100, "Kim1", '컴퓨터', 4);
- SQL> INSERT INTO student values (200, "Kim2", '전기', 3);
- SQL> INSERT INTO student values (300, "Kim3", '컴퓨터', 1);
- SQL> INSERT INTO student values (400, "Kim4", '컴퓨터', 4);
- SQL> INSERT INTO student values (500, "Kim5", "산공", 2);
- 단계 3: 일단 테이블 2개만 살펴보자
- SQL> select distinct enrol.cno, count(enrol.sno) as sno_cnt from enrol, student where student.sno = enrol.sno and student.dept = '컴퓨터' and student.year = 4 GROUP BY enrol.cno;
- SQL> select distinct enrol.cno, count(enrol.sno) as sno_cnt from enrol, student where student.sno = enrol.sno and student.dept = '컴퓨터' and student.year = 4 GROUP BY enrol.cno having sno_cnt = ( 2 ) ;
- 단계 4: 일단 테이블 2개만 살펴보자
- SQL> select distinct enrol.cno, course.cname, count(enrol.sno) as sno_cnt from enrol, student join course on enrol.cno = course.cno where student.sno = enrol.sno and student.dept = '컴퓨터' and student.year = 4 GROUP BY enrol.cno having sno_cnt = ( select count(c.sno) from ( select enrol.sno from enrol, student where student.sno = enrol.sno and student.dept = '컴퓨터' and student.year = 4 GROUP BY enrol.sno) as c) ;
[개발자 이야기] (1월 3일) 2020년 닷넷 개발자의 현황에 대해
2021년 1월 3일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다. 이번 주 방송은 생방송 스트리밍 도중에 끊겨서 두 개로 나뉘어져 있다.
2021년 1월 3일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.
하이라이트를 요약 정리하면 다음과 같다:
- 00:00 오늘 방송 주요 내용 소개
- 07:32 모나코 에디터 - VS Code의 에디터만 가져올 수 없을까?
- 09:47 지라(Jira)가 짜증나는 이유
- 12:23 어느 위치에서 실행하든 경로를 유지하는 배치 파일 만들기
- 14:57 (자바) uber jar를 아십니까?
- 18:11 2020년 닷넷 개발자의 현황에 대해
- (2) 00:00 애플 A14 Bionic Soc vs M1 다이 사진
- (2) 02:26 WSL2가 깃 저장소를 망가뜨려요
토요일, 1월 02, 2021
[B급 프로그래머] 12월 5주 소식(빅데이터/인공지능, 읽을거리 부문)
- 빅데이터/인공지능
- Why Do We Dream? A New Theory on How It Protects Our Brains
- How to read more books
- 파이썬 몇 줄로 간단히 해보는 탐색적 자료 분석
- 김진철의 How-to-Big Data | CPS와 Digital Transformation (1)
- Graph Toy Originally by Inigo Quilez - Simple on-line graph visualizer
- NIPA 2020 인공지능 문제해결 경진대회, 4관왕 달성 후기
- 구글 웨이모 "자율주행차량 최우선 덕목은 안전성"
- Back To The Future: Data Engineering Trends 2020 & Beyond
- Deview 2020 자료(인공지능은 Day 1 탭을...)
- Does GPT-2 Know Your Phone Number?
- This Smart Toilet Will Know You by the Shape of Your Asshole
- Machine Learning by Analogy
- DeepMind’s annual report: Why it’s hard to run a commercial AI lab
- 자코비안(Jacobian) 행렬의 기하학적 의미
- Reverse Engineering the source code of the BioNTech/Pfizer SARS-CoV-2 Vaccine
- PublicDataReader는 공공데이터포털에서 제공하는 OpenAPI 서비스를 Python으로 쉽게 이용할 수 있도록 도와주는 데이터 수집 라이브러리입니다.
- Cortex - 머신러닝을 위한 오픈소스 배포 플랫폼
- Python Jupyter Notebooks in Excel
- Real-time AR Sudoku solver - Made with TensorFlow.js
- Do You Think Like a Lawyer, a Scientist, or an Engineer?
- Introducing TensorFlow Recommenders
- [난제] PNP 문제
- 'AI 프로젝트를 수렁으로 이끄는' 7가지 흔한 이유
- What Is Data Engineering and Is It Right for You?
- nonoCAPTCHA - An async Python library to automate solving ReCAPTCHA v2 by audio using Mozilla's DeepSpeech, PocketSphinx,
- Advanced visualization tutorial with Seaborn
- BUILDING A SIMPLE NEURAL NET IN JAVA
- 알파고 이후 바둑계의 변화
- This column will change your life: just sit down and think
- 온프레미스 데이터 플랫폼 팀의 데이터 엔지니어가 하는 일(feat. 11번가 데이터 플랫폼 2020년 회고)
- 읽을거리
- Test your vocab
- LEXILE & QUANTILE TOOLS: 알라딘 원서 읽기 가이드도 참고
- mRNA, 과학계에서 외면받다가 코로나19 퇴치제로 주목받다
- 세계일류상품 선정품목 및 생산기업 리스트 (2020년 기준)
- Noise-Canceling Headphones Without the Headphones
- 카페베네는 스타벅스를 이긴 적이 없었다
- IDEASGRAB – LIST OF IDEAS FOR YOU TO GRAB.
- 자서전에 기록된 마이클 잭슨이 음악적으로 진심 대격분했다는 순간
- [F91] 신형 기체를 까는 연방장교.
- Outwitting the Grim Reaper - Neuroscientist Daniel Levitin on how to age successfully.
- The days of owning devices are over.
- 현금없는 사회 성큼…결제비중 20% 안돼
- 페이스북 타겟광고 사기 논란 휩싸여
- How to Start a Startup
- 읽을 시간 많았던 올해, 한 권쯤 더 읽고 싶다면…
- [김양한의 예술 이야기⑦] 짜장면과 미켈란젤로
- 100 Tips for a Better Life
- 애플과 페이스북 분쟁에 관한 고찰
- 오래된 미래 - 터치스크린
- [CEO 심리학] 행복한 사람과 목적없는 대화…스트레스 피하는 최고의 방법
- How much does it cost to send 1kg to lower earth orbit?