Coder Social home page Coder Social logo

everyday_study's Introduction

🔔 인증 방법

스크린샷 2022-05-10 01 14 27

  • Issues에 들어갑니다.

스크린샷 2022-05-10 01 15 15

  • New issue를 누른 후,

스크린샷 2022-05-10 01 16 31

  • labels에서 자신의 이름(별명)에 해당되는 태그를 붙입니다.

스크린샷 2022-05-10 01 21 31

  • 제목은 위의 사진처럼 설정 후, 공부 인증을 할 수 있는 사진을 본문에 드래그 하여 등록을 합니다.

⏰ 규칙 및 주의사항

  • tag를 안 붙일 경우 출석으로 처리되지 않습니다.
  • Issues 외의 것들은 건드리지 말아주시길 바랍니다.
  • 제목은 날짜로 등록해주시길 바랍니다.(ex. 2022.05.11.수)
  • 날짜 수정 기록이 로그에 남습니다. 이 부분은 개인의 양심에 맡기도록 하겠습니다.
  • 일정(노는 것 제외)이 있어서 공부를 못하는 날은 저에게 미리 알려주시면 웬만하면 출석으로 인정해드립니다 :)
  • 출석 인정 시간: 당일 00:00 ~ 다음날 04:00(인증 텀은 최소 6시간입니다.)
  • 벌금: 1회당 1,000원(나중에 1/N 할 예정입니다.)

👥👤👥 참여 인원(이름, tag)

  • 전민혜, push
  • 김시진, sijin
  • 최지민, jimin
  • 조명기, naivete
  • 정준, jun
  • 이희선, sunny(화요일 제외)
  • 이지율, ashielee
  • 이예린, yxin
  • 강병헌, bean

everyday_study's People

Contributors

pushpull7381 avatar

Stargazers

ByeongHun Kang avatar

Watchers

 avatar

everyday_study's Issues

[백엔드 #스프링] 2022-05-10 (화)

개요

스프링 부트는 Node js 보다 Learning Curve 가 크다. 하지만 잘 만 활용하면 Node js 보다 많은 기능을 수행할 수 있게 함

3~4년전에는 Node js 로 하는 팀이 많았음 카카오 금융쪽은 스프링을 굉장히 깊게 다룸

Node

  • Non-Block IO: 이벤트 루프 기반 비동기 처리
  • 소켓 디스크립터를 미리 생성
  • Poller 를 이용해서 처리를 함

Spring

  • Block IO: 어떤 작업이 끝날 때 까지 블로킹 되어 있음
  • 톰캣(WAS) 컨테이너가 내장되어 있음
  • 톰캣 9점대는 제공되는 IO가 Non-Block IO
  • 쓰레드는 띄우는데 IO처리는 Non-Block임
  • WAS 서버를 다른 것으로 바꿀 수 있음 async 방식으로도 개발 가능
  • 대용량 접속자가 있을 때 서버사이드에서 튜닝하는 것이 중요함 (스트레스 테스팅을 해봐야 함)
  • 쓰레드를 생성할때마다 소켓 디스크립터가 복제 됨
  • async 방식을 지원하는 DB는 몽고 DB 밖에 없음
  • 전자 정부 표준이 Spring 임

조언

  • 개발자는 본인이 실력이 있어야 함
  • 개발 환경이 급격하게 변함
  • 올해 내년이 개발자 열풍이 가장 PEAK
  • 요즘에는 대부분 클라우드 기반이라 CI/CD(ex. 젠킨스, GIT FLOW) 와 DevOps 가 중요함

2022.05.13 (금)

priority Queues(우선순위 큐)

  • 특정한 우선순위 지정가능 -> 비교가능 -> 비교 연산자 필요
  • ADT
    entry형태로 데이터 묶임->key로 구분(최대한 중복 피함)
    삽입, 삭제, 탐색(min(키가 작을수록 우선), max(키가 높을수록 우선)) 가능
    사용 예시: 경매, 증권
    PQ-sort
  • unsorted sequence로 구현<선택 정렬>
    • 삽입: 끝에 인덱스에 붙이기 O(1) + 데이터 카피(n) = O(n)
    • mIn, max 탐색 O(n) * n = O(n^2)
      => 총 O(n^2) - best, average,worst 케이스 모두 동일
      -sorted sequence로 구현<삽입 정렬>
    • 삽입: (오름차순 기준) 뒤에서 부터 차례로 키를 비교하는데 내가 작으면 그자리! => 최대: n*O(n)
    • 삭제:O(1) *n => O(n)배열 복사
      => 총O(n^2) => 데이터 100개 미만시 빠른 편/ 데이터 20개 미만시 거의 가장 빠른 편
      인플레이스 삽입 정렬
      =>인풋 크기 이외에 사용하는 공간을 상수 만큼만 사용(but.. 암묵적으로 logn까지는 봐줌)
      앞의 내용의 경우 배열을 2개 사용했지만 인플레이스는 변수 1개만 더 사용해서
      새로 들어오는 값이랑 원래 배열이랑 차례로 비교하다가 (오름차순 기준) 새로 들어온 값이 작아서
      자리를 바꾸어주어야 할 때 변수를 사용해서 바꾸어준다!

=>슬슬 자료구조 복습 시작!

2022.05.12(화)

#include
using namespace std;

class Heap
{
private:
int arr[10001] = {0};
int lastindex = 0;
public:
void upheap(int i)
{
if (i == 1)
{
return;
}
else
{
if ((arr[i] > arr[i / 2]))
{
int tmp = arr[i];
arr[i] = arr[i / 2];
arr[i / 2] = tmp;
upheap(i / 2);
}

	}
}

void insert(int i)
{
	lastindex++;
	arr[lastindex] = i;
	upheap(lastindex);
}
void size()
{
	cout << lastindex << endl;
}
void isEmpty()
{
	if (lastindex == 0)
	{
		cout << "1" << endl;
	}
	else
	{
		cout << "0" << endl;
	}
}
void downheap(int i)
{
	if (2 * i < lastindex)
	{
		if (arr[2 * i] > arr[2 * i + 1])
		{
			if (arr[i] < arr[2 * i])
			{
				int tmp = arr[i];
				arr[i] = arr[2 * i];
				arr[2 * i] = tmp;
				downheap(2 * i);
			}
			else  return;
		}
	}
	else
		return;
	if(2*i+1 < lastindex)
	{
		if (arr[i] < arr[2 * i + 1])
		{
			int tmp = arr[i];
			arr[i] = arr[2 * i + 1];
			arr[2 * i + 1] = tmp;
			downheap(2 * i + 1);

		}
		else return;
	
	}
	else
		return;

	
}
void pop()
{
	if (lastindex == 0)
	{
		cout << "-1" << endl;
		return;
	}
	cout << arr[1] << endl;
	arr[1] = arr[lastindex];
	lastindex--;
	downheap(1);

}
void top()
{
	if (lastindex == 0)
	{
		cout << "-1" << endl;
		return;
	}
	cout << arr[1] << endl;

}
void print()
{
	if (lastindex==0)
	{
		cout << "-1";
	}
	for (int i = 1; i <= lastindex; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}

};

int main()
{
int t;
cin >> t;
Heap h;
while (t--)
{

	string k;
	cin >> k;
	if (k == "isEmpty")
	{
		h.isEmpty();
	}
	else if (k == "print")
	{
		h.print();
	}
	else if (k == "top")
	{
		h.top();
	}
	else if (k == "insert")
	{
		int i;
		cin >> i;
		h.insert(i);
	}
	else if (k == "size")
	{
		h.size();
	}
	else if (k == "pop")
	{
		h.pop();
	}
}

}
저번 주 실습 자료구조 때 vector로 구현했던 heap 를 array로 구현하기

2022.05.16 (월)

Binary Search Tree(이진 탐색 트리) -> 이진 탐색 알고리즘과 구분하기

  • 구조: 이진 트리(키(중요),벨류) -> 자식이 2개 이하
  • internal node에만 정보 저장 -> external node에는 정보 저장 불가능
  • 순서 :
    image
    -중위 순회 시 오름차순 정렬 가능

<탐색>

  1. 루트와 key 값 비교
    • 같다면 끝(찾음)
    • key 값이 작다면 왼쪽 자식의 키와 다시 비교
    • key 값이 크다면 오른쪽 자식의 키와 다시 비교
      <재귀>
  2. 만약 leaf 노드까지 도달했다? -> 값 없음.
    => 시간 복잡도 O(h)

<삽입> put(k,o)

  1. 루트부터 탐색해서 k 찾기 -> 당연히 없음! 삽입할 leaf 위치 찾은 거임!
  2. 찾은 위치에 internal 노드(o) 달고 거기에 2개의 external 노드 달아주기
    => 시간 복잡도 탐색 O(h) + 매달아 주기O(1) = O(h)

<삭제> erase(k)

  1. 루트부터 탐색해서 k 찾기
  2. if k의 왼쪽 자식이 리프면 k와 묶어서 지우기
    else if k의 오른쪽 자식이 리프면 k와 묶어서 지우기
    else 자식 모두 internal 노드면 중위 순회로
    successor(그 값과 가장 가까운데 바로 다음인 노드)를 찾고
    삭제할 노드와 successor key 값을 변경 후 successor와
    그 자식 노드(왼쪽 자식) 삭제!
    =>시간 복잡도 k탐색 O(h) + successor 찾기 O(1) + k값 위에 덮기 O(1) + successor과 왼쪽 자식 삭제 O(1) =>O(h)

2022.05.11(수)

image
오늘 튜터링용 강의 자료 만들면서 공부한 내용 올립니다!

2022.05.15 (일)

<heap의 구현 방법>

  1. 완전 이진 트리이므로 배열(vector)로 구현했을 때 유리함!!
    ** 물론, 배열도 단점이 있긴 함!
    => 미리 크기를 정해야 함.. 캐시 메모리 느낌임!
    이미 자주 사용해서 CPU에 대기 타고 있는 메모리면 HIT(빠른 접근)이 가능하지만 없을 수도 있음!
  2. 물론, 트리의 경우 linked structure 구현 가능하니까 이걸로도 구현 가능하기는 함

<heap 배열로 구현>
특징

  1. 0번째 인덱스는 비운다(인덱스 1부터 시작해야 쉬움)
  2. 내가 i 인덱스를 가질 때, 내 부모는 i/2 인덱스를 가짐.(물론 i가 1이면 끝임! => root 노드이므로)
  3. 인덱스가 있어 마지막 노드 찾는 시간(O(1)) => 사이즈 = 마지막 노드 인덱스(삭제와 삽입할 수 있는 공간)

<힙 구성 시간 단축하기!>
♣ version 1 (construction)
1단계 작업 빨라짐
image
구조: 완전 이진 트리 만족
순서: root downheap 해주면 만족 => O(logn)
♣ version 2(Bottom-up heap construction>
위에꺼 일반화한 버전! => 2^n -1 + 2^n - 1 + 1= 2^(n+1) -1
image

  1. 배열 사용 =>complete Binary tree 만족(구조 만족)
  2. 순서 조건 => downheap을 통해 맞추어줌!
  3. (삽입)걸리는 시간: 직접 단선 그려보기 오른쪽 1번/ 나머지 왼쪽으로 그리면 겹치지 않고 그릴 수 있음
    단선 1개당 2번 계산(downheap 이므로)
    <2(연산 조건 downheap)(n-1) (총간선 수) 이므로 O(n) 걸림!
    힙 삽입 원래 O(n
    logn)시간 걸리는데 O(n) 걸리는 거니까 단축됨을 알 수 있음,

2022.05.11(수) 객체지향 개발 5대 원칙 SOLID

개요

현재 대부분의 언어들은 객체 생성을 지향하고 있습니다,
객체를 설계하는데 있어서 Standard하고 그대로 행한다면 Best Practice가 될 수 있는 내용을 가져 왔습니다.


목차

  1. SRP
  2. OCP
  3. LSP
  4. ISP
  5. DIP

SRP(Single Responsibility Principle)

  • 메서드는 하나의 기능만 가진다
    즉, 물을 마신다 라는 메서드가 있으면 탐사수, 아이리스, 에비앙등의 물 종류만 마실 수 있지 오렌지 쥬스, 크렌베리 쥬스는 마실 수 없도록 설계해야 한다는걸 의미합니다.

OCP(Open-Close Principle)

  • 확장은 여유롭지만 변경은 보수적이여야 한다
    즉, 바나나우유, 일반 팩 우유를 생각한다면 쉽게 이해 할 수 있는데요. 바나나 우유와 일반 우유는 우유라는게 같지만 바나나 우유 같은 경우 마실 수 있는 방법이 입구를 벗기거나 빨때를 꽂아 먹는 방법이 있는데, 우유는 입구 팩을 찢어야 한다는 점이 있는데요. 이 경우 우유라는 객체는 OCP 원칙을 위반하는 것을 의미합니다.

LSP(Liskov Substitution Principle)

  • 상호 대체 가능한 객체가 있을때 변경 하여도 실제 동작에 영향을 끼치면 안된다.
    즉, 상호 대체란 자식이 부모와 위치가 달라져도 자식간 자식의 위치가 달라져도 동일 한 기능을 할 수 있어야 한다는걸 의미합니다. 생물학적 예시를 들자면, 부모(아버지, 어머니, 삼촌)에 따른 분류가 아닌 종(포유류, 양서류,....)에 따른 분류로 설계 해야 한다는걸 의미합니다.

ISP(Interface Segregation Principle)

  • 각 객체가 의미하는데 있어서 역할에 맞게 분리하는것을 의미합니다.
    즉, 인터페이스가 맥도날드라면 감자튀김, 버거, ...등등 맥도날드에서 생성하는 것에 관련 된 것으로 분리 하는 것을 의미합니다. 해당되지 않는 예는 실제 맥도날드에서 팔지 않고있는 피자, 랍스타, 스테이크 같은 것들이 인터페이스에 설계 되면 이 원칙에 어긋난다는걸 의미합니다.

DIP(Dependency Inversion Principle)

  • 고 차원 객체(채소)가 저 차원 객체(감자)에게 의존하면 안된다는 것을 의미합니다.
    감자를 요리한다고 하면 감자에서 파생되는 개념이 여러개가 존재 할 수 있는데, 대표적으로 감자튀김, 찐감자, 감자탕 각자 다른 성격을 띄고 있는 요리(프라이, 찜, 다른 요리의 재료) 로서 원칙에 위배 된다고 볼 수 있습니다.

마치며

S.O.L.I.D 원칙에 대해서 정리 해봤는데요, 다른 의견이 있거나 틀렸다 하는 부분이 있다면 피드백 미리 감사합니다 🙇 다음번 스터디 내용에선 WebSocket을 다루려고 해요. 다음 리뷰에서 봐요 😁 이만 마치겠습니다.

[MLOps #Docker] 2022-05-17 (화)

도커란 무엇인가?

  • 애플리케이션을 컨테이너로 좀 더 쉽게 사용 할 수 있게 함
  • Go 언어로 작성되었으며 2013년 3월에 릴리즈 된 이후 지금까지 꾸준히 개발됨

가상 머신과 도커 컨테이너

기존 가상화

  • 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용함
  • 하이퍼바이저에 의해 생성되고 관리되는 운영체제를 게스트 OS 라 함
  • 일반 호스트에 비해 성능 손실이 있음

Docker 가상화

  • 가상 공간을 생성하기 위해 리눅스 자체 기능인 cgroup, croot, namespace 를 사용
  • 프로세스 단위의 격리 환경을 만들기 때문에 성능손실이 거의 없음
  • 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상머신에 비해 대폭 줄어듦

도커를 사용해야 하는 이유

  • 애플리케이션의 개발과 배포가 편해짐
  • 여러 애플리케이션의 독립성과 확장성이 높아짐

모놀리스 아키텍처 (Monolith)

  • 여러 모듈이 상호작용하는 로직을 하나의 프로그램 내에서 구동
  • 소규모 서비스에서 사용하기 좋음
  • 확장성과 유연성이 떨어짐

마이크로 서비스 아키텍처 (Micro-service)

  • 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응할 수 있음
  • 컨테이너는 여러 모듈에게 독립된 환경을 빠른 시간 내에 제공 할 수 있기 때문에 마이크로 서비스에서 가장 많이 사용되고 있는 가상화 기술임

도커 엔진

  • 맥은 xhyve 기술을 윈도우는 Hyper-V 기술을 활용해 가상화 엔진을 구축함
  • 도커 엔진은 크게 두가지 종류 (CE, EE) 로 나뉨

EE (Docker Enterprise Edition)

  • 유료로 제공되는 기업용 솔루션
  • 각종 부가 기능들을 도커 엔진과 함께 제공함
  • 3개월 마다 안정화된 버전으로 릴리즈 됨

CE (Docker Community Edition)

  • 무료로 제공되는 도커 엔진
  • 별도의 기술 지원 및 서비스 제공 X
  • 도커 엔진 자체의 핵심 기능 무료사용 가능

[생각 #맥킨지식 사고] 2022-05-12 (목)

맥킨지식 사고 - 1

MECE (Mutually Exclusive Collectively Exhaustive)

어떤 개념을 중복되지 않게 또 부분 집합의 합집합이 전체 집합이 되어야 함. 즉, 우리가 평상시에 어떤 문제를 해결하거나 상대방에게 설명할 때 중복 되게 말하면 안되고 또 전체적인 내용을 포함하고 있어야 함 그러면 어떻게 MECE에 강해질 수 있을까?

1단계 과제=전체 집합을 확인한다

총무부장이 방문 고객의 응대와 직원의 휴식을 비롯해 다양한 상황을 상정하고 이러한 과제를 냈다. Q. 시중의 자판기에서 판매되는 음료를 전체적으로 어떻게 정리할 수 있는가

전체집합: 자판기에서 살 수 있는 음료

2단계 MECE 기준을 찾는다

  1. 자판기를 MECE로 파악
  • 상품 제조사 별

  • 설치 장소 별

    • 실내
    • 실외
  1. 음료를 MECE로 파악
  • 용량별
  • 포장용
  • 온도별
  • 성분별

기준을 정할때 고려해야 할 점

  1. 정의가 명쾌한지, 사람마다 해석에 차이가 발생하지는 않는지 생각하자. 예를 들어 매운 음식이라는 카테고리를 만들었다고 해보자 어떤 사람은 불닭볶음면이 맵다고 또 어떤 사람은 안 맵다고 할 수 있다
    이러면 MECE 기준으로 적절하지 않은 것이다.

  2. 무엇보다 상대의 목적에 부합하는 기준을 찾아내자

예시 문제

  1. 세상에는 다양한 도시락이 있으며 그 종류는 점점 더 많아지고 있다 '세상에 있는 도시락'을 전체 집합으로 했을 때 어떻게 정리할 수 있을까.

  2. 고객을 대상으로 한 영업 활동은 전체적으로 어떻게 파악 할 수 있는가? 당신의 기업이 실제로 실시하고 있는지 아닌지는 차치하고, 이론적으로 어떻게 파악할 수 있는지.

[PS] 2022-05-11 (수)

백준

1328번

3차원 DP 문제 점화식 떠올리는게 약간 어렵지만 구현난이도는 쉬운편

1328

[기획 #이론] 2022-05-09 (월)

개요

마이크로소프트와 같은 빅테크 기업에서는 기획을 어떤 방식으로 진행하는지

Innovative UX Design

좋은 서비스란 무엇인가?

  1. 제대로 동작해야함
  2. 효과적(?)이어야 한다
  3. 다른사람들에게 소개 시켜 줄 만한 서비스를 개발해야 한다.
  4. 어떻게 하면 사용자의 기분을 좋게 해줄지 생각해봐야한다.(애플이 이렇게함)

Design goal of Innovative UX Design

  • 사용자의 감정을 이해해야 한다
  • 너무 많은 기능을 담아도, 너무 적은 기능을 담아도 안된다 = 적당히 담아야함
  • 서비스를 사용하는 사람들을 기쁘게 해야 한다

Goal: Bring it into balance

기획할때 고려해야 하는 3가지 사항

  • technology feasibility
  • customer experience
  • business opportunity

위에 명시되어 있는 3가지 사항의 밸런스를 맞추는 것이 중요하다

Microsoft case

  1. 사용자에 대한 깊은 인사이트
  2. Pick a few insights and write a scenario
  3. 솔루션에 대한 것을 브레인스토밍해야함
  4. 구체적인 솔루션이 나올때 까지 (유저 테스트, 피드백을) 반복해야 함
  5. 지속적으로 현재 어느정도 까지 기획 또는 개발이 되었는지 체크해야함

2022.05.16

공모전 아이디어 회의, 공모전 신청서 작성

2022.05.14 (토)

Heap
<힙은 크게 구조, 순서 2가지 조건을 만족함>

  • 구조: Complete Binary Tree(포화 이진 트리)
    *포화 이진 트리 조건 :
    1. 깊이 마지막 레벨 위까지 full binary tree
    2. 왼쪽 먼저 채움
  • 순서: Heap-Order(min()의 경우) : key(v) >= key(parent(v))
    *순서로 나타나는 특징:
    1. 형제, 삼촌 키는 나 상관x
    2. 부모, 조부모들은 항상 더 작음
    (부모, 조부모: 나에서 루트로 가는 경로에 있는 분들)
    <퀴즈!>///////////////////////////////////////////////////////////////////////////////
    Q. 노드가 11개 있다! 이것으로 만들 수 있는 힙의 구조는 몇가지인가?
    => 답: 1개.. 순서와 구조가 모두 정해져 있어서 1가지 밖에 없다!
    Q. 힙에서 중요한 노드는 뭘까?
    => 답: last node
    -> 추가 할 때 오른쪽에 넣을지 새로운 지식을 만들지 판단해야 해서 빨리 찾아야함.
    (물론, root 노드는 항상 중요함!)
    /////////////////////////////////////////////////////////////////////////////////////////
    <Heap 높이>
    첫번째 레벨: 0, 높이: h 노드의 개수가 n이라고 가정
    1+2+2^2+2^3 +...+ 2^h-1 +1 <= n (h높이에서 하나의 노드(최소)만 있는 경우)
    1+2+2^2+2^3+ ...+2^h-1+2^h>= n(h높이에서 포화 이진 트리(최대) 인 경우)
    log(n+1)-1<=h <logn
    => O(h) = O(logn)
구조: 마지막 노드 위치를 O(1)에 찾는다면 => 넣기만 하면 되니까 O(1) 순서: upheap(내 조상들과 삽입 정렬(나 빼고 정렬되어 있어서 쓰기 딱임) =>조상들과 비교니까 최대로 시간이 걸리면 트리의 높이만큼 걸림O(logn) => 구조 (O(1)) + 순서(O(logn)) 삽입 = O(logn) *주의 사항: upheap이 insert는 아님! => insert 과정에 upheap이 포함된거임! 구조: 마지막 노드 위치를 안다면 1.root 노드 삭제 2.마지막 노드를 root에 대입 3.마지막 노드 위치 변경 순서: downheap 1. 자식 끼리 작은 값 확인(비교) 2. root(조상)와 비교 -> 크면 내려감 =>재귀적으로 반복! => 구조(O(1)) + 순서(2*logn=>O(logn)) 삭제 = O(logn)

<PQ sort 시간 복잡도 비교>
상식: logn !(팩토리얼임) = n logn
heap 삽입 정렬 선택 정렬
삽입 O(nlogn) O(n^2) O(n)
삭제 O(n
logn) O(n) O(n^2)

// 가독성이 왜이럴까요... 띄어쓰기가 다 무시되네요ㅠㅠ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.