2D 컴퓨터비젼에 대한 설명. 영상으로부터 정보를 추출해내는 공학/과학 분과인 컴퓨터비젼의 기술에 대한 쉬운 설명. 파이썬(Python)의 컴퓨터비젼/영상처리 라이브러리인 scikit-image를 주로 활용하였으며 코드를 함께 담음.
R컨퍼런스 발표본 (2014.5.30) 임.
2D 컴퓨터비젼에 대한 설명. 영상으로부터 정보를 추출해내는 공학/과학 분과인 컴퓨터비젼의 기술에 대한 쉬운 설명. 파이썬(Python)의 컴퓨터비젼/영상처리 라이브러리인 scikit-image를 주로 활용하였으며 코드를 함께 담음.
R컨퍼런스 발표본 (2014.5.30) 임.
이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다.
iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다.
본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
스트림 API는 람다 표현식을 적극적으로 활용해서 만들어진 자바의 새로운 API 입니다.
스트림 API를 통해서 자바에서도 맵/리듀스 방식으로 대량의 데이터를 순차 또는 병렬 처리를 할 수 있게 되었는데요, 이번 발표를 통해 스트림 API가 무엇인지- 어떻게 써먹는지에 대해 가볍게 씹고 뜯고 맛보고 즐기셨으면 좋겠습니다. :)
예제코드 : https://github.com/arawn/jdk8-stream-api
이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다.
iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다.
본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
스트림 API는 람다 표현식을 적극적으로 활용해서 만들어진 자바의 새로운 API 입니다.
스트림 API를 통해서 자바에서도 맵/리듀스 방식으로 대량의 데이터를 순차 또는 병렬 처리를 할 수 있게 되었는데요, 이번 발표를 통해 스트림 API가 무엇인지- 어떻게 써먹는지에 대해 가볍게 씹고 뜯고 맛보고 즐기셨으면 좋겠습니다. :)
예제코드 : https://github.com/arawn/jdk8-stream-api
http://github.com/ipkn/crow
Crow 프로젝트에서 사용한 C++11 기법들을 실제 구현에 대한 설명을 포함하여 자세히 설명한 발표자료입니다.
C++11 features used in Crow
video:
http://youtu.be/MixS9c3mE6U
https://vimeo.com/119627253
[소스 코드]
https://github.com/henlix/data-structure.git
https://github.com/henlix/calculator
[설명]
대학생 연합 IT 벤처 창업 동아리 S.O.P.T (Shout Our Passion Together - http://sopt.org) 에서 내부적으로 진행하는 전공 과목 기초 스터디 자료입니다.
이번주에 다룰 내용은 기본적으로 자료구조에서 다루는 스택, 큐 그리고 스택을 응용한 수식 연산에 대한 구현입니다.
스터디 자료는 다음과 같은 순서대로 올라갈 예정입니다.
1. 데이터 구조 및 알고리즘
2. 운영체제
3. 네트워크
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
이 발표는 이전에 발표했던 내용에서 일부 사례 추가 및 최신 내용으로 갱신한 버전입니다.
5. Visual Studio
+1 million new
monthly active
.NET developers in
last year
0
200,000
400,000
600,000
800,000
1,000,000
1,200,000
2018.12 2019.01 2019.02 2019.03 2019.04
1 백만명 이상의 .NET Core 개발자
Visual Studio, Visual Studio for Mac, Visual Studio Code
7. 대용량(테라/페타) 데이터셋을 위한 분산 분석 엔진
Distributed analytics engine for large datasets typically terabytes or petabytes
현재 Scala, Java, Python 및 R과 함께 사용 가능
.NET은 지원없음 🙊
8. 도
• 하지만, .NET이 OSS 빅데이터 분야를 지원하지
않았기에, .NET 세상에서 빅데이터는 정적이 흐른다…
• 기존 .NET으로 작성되어 있는 비즈니스 로직들 중
빅데이터에 활용 가능한 로직은 수백만 줄의 코드에
이른다
• 이러한 로직을 Python/Scala/Java 로 변환하는 것은
어려울 뿐만 아니라 비용도 엄청나게 든다!
최근 수행된 .NET 개발자 설문조사(1000 명 이상 참여) 결과,
70% 이상의 개발자들이 Apache Spark에 관심이 있다고 말했다.
😍
💖
10. Total execution time (seconds) for all 22 queries in the TPC-H benchmark (lower is better).
Data sourced from an internal run of the TPC-H benchmark, using warm execution on Ubuntu 16.04.
.NET for Apache Spark는 고성능을
위해 설계되었고, TPC-H 벤치마크에서
python보다 나은 성능을 보이고 있다.
tpc.org/tpch.
TPC-H 벤치마크는 업무(business) 중심의 쿼리
집합으로 구성되어 있으며, 자세한 내용은
dot.net/spark 를 참고
406 433
375
.NET PYTHON SCALA
TPC-H 벤치마크의 전체 22개의 쿼리 실행에 걸린 총 실행 시간(초)
낮을수록 고성능
11. val europe = region.filter($"r_name" === "EUROPE")
.join(nation, $"r_regionkey" === nation("n_regionkey"))
.join(supplier, $"n_nationkey" === supplier("s_nationkey"))
.join(partsupp,
supplier("s_suppkey") === partsupp("ps_suppkey"))
val brass = part.filter(part("p_size") === 15
&& part("p_type").endsWith("BRASS"))
.join(europe, europe("ps_partkey") === $"p_partkey")
val minCost = brass.groupBy(brass("ps_partkey"))
.agg(min("ps_supplycost").as("min"))
brass.join(minCost, brass("ps_partkey") === minCost("ps_partkey"))
.filter(brass("ps_supplycost") === minCost("min"))
.select("s_acctbal", "s_name", "n_name",
"p_partkey", "p_mfgr", "s_address",
"s_phone", "s_comment")
.sort($"s_acctbal".desc,
$"n_name", $"s_name", $"p_partkey")
.limit(100)
.show()
var europe = region.Filter(Col("r_name") == "EUROPE")
.Join(nation, Col("r_regionkey") == nation["n_regionkey"])
.Join(supplier, Col("n_nationkey") == supplier["s_nationkey"])
.Join(partsupp,
supplier["s_suppkey"] == partsupp["ps_suppkey"]);
var brass = part.Filter(part["p_size"] == 15
& part["p_type"].EndsWith("BRASS"))
.Join(europe, europe["ps_partkey"] == Col("p_partkey"));
var minCost = brass.GroupBy(brass["ps_partkey"])
.Agg(Min("ps_supplycost").As("min"));
brass.Join(minCost, brass["ps_partkey"] == minCost["ps_partkey"])
.Filter(brass["ps_supplycost"] == minCost["min"])
.Select("s_acctbal", "s_name", "n_name",
"p_partkey", "p_mfgr", "s_address",
"s_phone", "s_comment")
.Sort(Col("s_acctbal").Desc(),
Col("n_name"), Col("s_name"), Col("p_partkey"))
.Limit(100)
.Show();
유사한 구문 – 복붙해도 크게 문제가 없음!
$”col_name” vs. Col(“col_name”) 대,소문자 구분
Scala C#
C# vs Scala (e.g., == vs ===)
12. .NET for Apache Spark의 주요 목표
.NET 개발자가 Apache Spark를 쉽고 매끄럽게 사용할 수 있도록 돕는 것
전혀 목표가 아닌 부분!
- 기존의 Scala/Python/Java 기반 Spark 개발자가 .NET을 쓰도록 전환 😒
20. AutoML을 활용한
사용자 정의 ML
Model Builder(간단한
UI 도구)와 CLI를 통해
사용자 정의 ML Model을
매우 쉽게 만들 수 있다
.NET 개발자를 위해
구축됨
.NET 에코시스템을
그대로 활용하면서 C# 및
F#을 사용하여 사용자
정의 ML 모델을 생성한다
TensorFlow 등으로
확장 가능
다른 대중적인 ML
프레임워크(TensorFlow,
ONNX, Infer.NET 등)를
활용할 수 있다
검증되고 입증된
솔루션
Microsoft Office,
Windows 및 Azure에
활용되고 있는 동일한
ML 프레임워크를 사용
dot.net/ml
ML.NET 1.0
오픈 소스, 크로스 플랫폼 머신 러닝 프레임워크
21. Product recommendation
Recommend products based on purchase history
using a matrix factorization algorithm.
Sentiment analysis
Analyze the sentiment of customer reviews
using a binary classification algorithm.
Price prediction
Predict taxi fares based on distance traveled
etc. using a regression algorithm.
Customer segmentation
Identify groups of customers with similar
profiles using a clustering algorithm.
Spam detection
Flag text messages as spam using a binary
classification algorithm.
Image classification
Classify images (e.g. broccoli vs pizza) using
a TensorFlow deep learning algorithm.
Sales forecasting
Forecast future sales for products using a
regression algorithm.
GitHub labeler
Suggest the GitHub label for new issues
using a multi-class classification algorithm.
Fraud detection
Detect fraudulent credit card transactions
using a binary classification algorithm.
dot.net/ml
감성 분석
이진 분류(binary classification) 알고리즘을
사용하여 고객 리뷰의 감정을 분석한다
제품 추천
행렬 분해(matrix factorization) 알고리즘을
사용하여 구매 이력을 기반으로 제품들을 추천한다
가격 예측
회귀(regression) 알고리즘을 사용하여 이동 거리
등을 기반으로 택시 요금을 예측한다
고객 세분화
클러스터링(clustering) 알고리즘을 사용하여
유사한 프로필을 가진 고객 그룹을 식별한다
GitHub 레이블러(labeler)
멀티 클래스 분류(multi-class classification)
알고리즘을 사용하여 새로운 이슈에 대한 GitHub
라벨을 제안한다
사기 탐지
이진 분류(binary classification) 알고리즘을
사용하여 신용카드 부정 거래를 감지한다
스팸 탐지
이진 분류(binary classification) 알고리즘을
사용하여 텍스트 메시지를 스팸으로 표시한다
이미지 분류
TensorFlow 딥러닝 알고리즘을 사용하여
이미지(예: 브로콜리 vs 피자)를 분류한다
매출 예측
회귀(regression) 알고리즘을 사용하여 제품의
향후 매출을 예측한다
42. gRPC
고성능의 계약(contract) 기반
RPC 서비스 (.NET용 지원)
수많은 언어와 플랫폼에서 작동
Worker service
Windows 서비스 혹은 Linux
daemon처럼 장시간 실행해야 하는
백그라운드 프로세스의 시작점
메시지 큐에서 메시지를 생성 및
소비
Web API’s + identity
Web API에 보안/인증을 접목
43. C#을 사용한
풀스택 웹 개발
AngularJS, React, Vue 등을
알아야 할 필요가 없음
.NET의 안정성 및 일관성 활용
모든 브라우저에서
동작
클라이언트 및 서버에서
강력한 형식 사용
클라이언트 및 서버에서
C# 코드 공유
Web assembly
(선택적, preview)
Native 성능
플러그인이 필요없음
코드변환 필요없음
52. 지원하지 않는 것들
Web forms, WCF 서버, Windows Workflow(WF)
• .NET Framework 4.8에서만 지원
• .NET 5에 포팅될 계획은 없음
권장사항
• ASP.NET Web forms → ASP.NET Blazor (마이그레이션 가이드 제공 예정)
• WCF server 및 remoting → gRPC (마이그레이션 가이드 제공 예정)
• Windows workflow (WF) → 오픈소스 core workflow (https://github.com/UiPath/corewf)
53. .NET 5
INFRASTRUCTURE
.NET STANDARD
DESKTOP WEB CLOUD MOBILE GAMING IoT AI
WPF
Windows forms
UWP
ASP.NET Xamarin UnityAzure ARM32
ARM64
ML.NET
.NET for
Apache Spark
.NET : 단일된 통합 플랫폼
54. 2019년 7월
.NET Core
3.0
RC
2019년 9월
.NET Core
3.0
2019년 11월
.NET Core
3.1
LTS
2020년 11월
.NET 5.0
2021년 11월
.NET 6.0
LTS
2022년 11월
.NET 7.0
2023년 11월
.NET 8.0
LTS