2022-08-13 02:31:01 +03:00
|
|
|
|
\documentclass[russian]{beamer}
|
|
|
|
|
|
|
|
|
|
\usepackage{multicol}
|
|
|
|
|
\usepackage{babel}
|
|
|
|
|
\usepackage{fontspec}
|
|
|
|
|
\input{../fancy-listings-preamble}
|
2022-08-16 17:00:26 +03:00
|
|
|
|
\usepackage{forest}
|
2022-08-13 02:31:01 +03:00
|
|
|
|
|
|
|
|
|
\makeatletter
|
|
|
|
|
\def\beamer@framenotesbegin{% at beginning of slide
|
|
|
|
|
\usebeamercolor[fg]{normal text}
|
|
|
|
|
\gdef\beamer@noteitems{}%
|
|
|
|
|
\gdef\beamer@notes{}%
|
|
|
|
|
}
|
|
|
|
|
\makeatother
|
2022-08-16 17:00:26 +03:00
|
|
|
|
\newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize}
|
2022-08-13 02:31:01 +03:00
|
|
|
|
|
|
|
|
|
% \setbeamertemplate{note page}{\pagecolor{yellow!5}\insertnote}
|
|
|
|
|
% \setbeameroption{show notes on second screen=right}
|
|
|
|
|
|
|
|
|
|
\usetheme{Madrid}
|
|
|
|
|
\usecolortheme{seahorse}
|
2022-08-15 13:01:41 +03:00
|
|
|
|
\setmainfont{PT Astra Sans}
|
|
|
|
|
\setsansfont{PT Astra Sans}
|
2022-08-13 02:31:01 +03:00
|
|
|
|
|
|
|
|
|
\title{Платформа: история и окружение}
|
|
|
|
|
\author{Иван Игоревич Овчинников}
|
|
|
|
|
\institute[GB: Java]{GeekBrains. Java Core.}
|
|
|
|
|
\date{2022}
|
|
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
|
\setbeamertemplate{enumerate items}[circle]
|
|
|
|
|
|
|
|
|
|
\frame{\titlepage}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Введение и знакомство (о себе)}
|
|
|
|
|
Иван Овчинников. НПО ИТ, РКС, GB.
|
|
|
|
|
\begin{block}{Используемые технологии}
|
|
|
|
|
Много и с удовольствием C, C++, Java, Verilog. C\# и Python даже не считаем.
|
|
|
|
|
\end{block}
|
|
|
|
|
Для GB более 20 потоков по разным направлениям, более двух тысяч студентов.
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-17 15:57:35 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{О курсе}
|
|
|
|
|
и об уркое
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-13 02:31:01 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Краткая история}
|
|
|
|
|
\includegraphics[width=12cm]{../pics/jc-01-tiobe.png}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-14 16:46:20 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Почему Java?}
|
|
|
|
|
Написано однажды, работает везде.
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-13 02:31:01 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Базовый инструментарий}
|
|
|
|
|
\begin{enumerate}
|
|
|
|
|
\item Eclipse
|
|
|
|
|
\item NetBeans
|
|
|
|
|
\item IntelliJ IDEA
|
|
|
|
|
\item BlueJ
|
|
|
|
|
\item Oracle JDeveloper
|
|
|
|
|
\item MyEclipse
|
|
|
|
|
\item Greenfoot
|
|
|
|
|
\item jGRASP
|
|
|
|
|
\item JCreator
|
|
|
|
|
\item DrJava
|
|
|
|
|
\end{enumerate}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Что нужно скачать}
|
|
|
|
|
\begin{enumerate}
|
|
|
|
|
\item ждк
|
|
|
|
|
\item среду
|
|
|
|
|
\end{enumerate}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Что нужно скачать}
|
|
|
|
|
\begin{enumerate}
|
2022-08-14 16:46:20 +03:00
|
|
|
|
\item Oracle JDK
|
|
|
|
|
\item OpenJDK by Oracle
|
|
|
|
|
\item Liberica JDK
|
|
|
|
|
\item экзотические
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item GOST Java
|
|
|
|
|
\item AdoptOpenJDK
|
|
|
|
|
\item Red Hat OpenJDK
|
|
|
|
|
\item Azul Zulu
|
|
|
|
|
\item Amazon Corretto
|
|
|
|
|
\end{itemize}
|
2022-08-13 02:31:01 +03:00
|
|
|
|
\end{enumerate}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-14 16:46:20 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Кто делает для нас JDK}
|
|
|
|
|
\includegraphics[width=12cm]{../pics/jc-01-jdk-contrib.png}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Когда нужно по-быстрому}
|
|
|
|
|
\includegraphics[width=12cm]{../pics/jc-01-jupyter-logo.png}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-18 12:39:04 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Переменные среды}
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \code{PATH}
|
|
|
|
|
\item \code{JAVA_HOME}
|
|
|
|
|
\item \code{JRE_HOME}
|
|
|
|
|
\item \code{J2SDKDIR}
|
|
|
|
|
\item \code{J2REDIR}
|
|
|
|
|
\end{itemize}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-14 16:46:20 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{JDK и его друзья}
|
2022-08-15 00:57:28 +03:00
|
|
|
|
TL;DR:
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item JDK = JRE + инструменты разработчика;
|
|
|
|
|
\item JRE = JVM + библиотеки классов;
|
|
|
|
|
\item JVM = Native API + механизм исполнения + управление памятью.
|
|
|
|
|
\end{itemize}
|
2022-08-14 16:46:20 +03:00
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{JVM и что в нём происходит}
|
2022-08-15 00:57:28 +03:00
|
|
|
|
рис 1.2 (стр 4) конспекта
|
2022-08-14 16:46:20 +03:00
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-13 02:31:01 +03:00
|
|
|
|
\begin{frame}
|
2022-08-15 00:57:28 +03:00
|
|
|
|
\frametitle{Структура проекта}
|
2022-08-15 13:01:41 +03:00
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item простейшие (один файл)
|
|
|
|
|
\item обычные (несколько пакетов)
|
|
|
|
|
\item шаблонные (формируются сборщиками)
|
|
|
|
|
\item скриптовые (jupyter notebook)
|
|
|
|
|
\end{itemize}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Простейший проект}
|
|
|
|
|
Думаю, тут надо вживую покодить, благо немного
|
|
|
|
|
\begin{multicols}{2}
|
|
|
|
|
public class Main
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args)
|
|
|
|
|
|
|
|
|
|
System.out.println("Hello, world!");
|
|
|
|
|
|
|
|
|
|
\columnbreak
|
|
|
|
|
|
|
|
|
|
ivan@gb src > javac Main.java
|
|
|
|
|
|
|
|
|
|
ivan@gb src > java Main
|
|
|
|
|
|
|
|
|
|
Hello, world!
|
|
|
|
|
\end{multicols}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Jupyter Notebook}
|
|
|
|
|
также вживую открыть юпитер ноутбук, показать, что возможно запускать код в скриптовом формате
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Проект на Java}
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item пакеты,
|
|
|
|
|
\item классы,
|
|
|
|
|
\item метод main,
|
|
|
|
|
\item комментарии
|
|
|
|
|
\item ресурсы
|
|
|
|
|
\end{itemize}
|
2022-08-13 02:31:01 +03:00
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-16 17:00:26 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Пакеты}
|
|
|
|
|
разделить на два слайда
|
|
|
|
|
сначала пакет с пакетами потом
|
|
|
|
|
стоящие стройными рядами коробки или контейнеры
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Классы}
|
|
|
|
|
разделить на два слайда
|
|
|
|
|
сначала фото пустого школьного класса, потом
|
|
|
|
|
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{метод мейн}
|
|
|
|
|
разделить на два слайда
|
|
|
|
|
псвм
|
|
|
|
|
показать точку входа как вход в пещеру
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{комментарии}
|
|
|
|
|
разделить на два слайда
|
|
|
|
|
можно как в редакции «комменты и лайки туда»
|
|
|
|
|
и слайд с типами комментариев
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Структура простого проекта}
|
|
|
|
|
\begin{forest}
|
|
|
|
|
for tree={
|
|
|
|
|
font=\ttfamily, grow'=0, child anchor=west,
|
|
|
|
|
parent anchor=south, anchor=west, calign=first,
|
|
|
|
|
edge path={
|
|
|
|
|
\noexpand\path [draw, \forestoption{edge}]
|
|
|
|
|
(!u.south west) +(7.5pt,0) |- node[fill,inner sep=1.25pt]
|
|
|
|
|
{} (.child anchor)\forestoption{edge label};
|
|
|
|
|
}, before typesetting nodes={
|
|
|
|
|
if n=1 {insert before={[,phantom]}} {} },
|
|
|
|
|
fit=band, before computing xy={l=15pt},
|
|
|
|
|
}
|
|
|
|
|
[Sample
|
|
|
|
|
[src
|
|
|
|
|
[ru
|
|
|
|
|
[gb
|
|
|
|
|
[jcore
|
|
|
|
|
[regular
|
|
|
|
|
[OtherClass.java]
|
|
|
|
|
]
|
|
|
|
|
[sample
|
|
|
|
|
[Main.java]
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
[out
|
|
|
|
|
]
|
|
|
|
|
[README.md]
|
|
|
|
|
]
|
|
|
|
|
\end{forest}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Терминал}
|
|
|
|
|
показать папку с простейшим проектом из одного файла, скомпилировать, запустить.
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Терминал}
|
|
|
|
|
тут, скорее всего, без лайв кода не обойтись, нужно открыть терминал и показать папку проекта, структуру проекта и содержимое файлов
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Javadoc}
|
|
|
|
|
Пример автоматически сгенерированной документации
|
|
|
|
|
\includegraphics[width=12cm]{../pics/jc-01-javadoc.png}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{утилита javadoc}
|
|
|
|
|
основные ключи и аргументы
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \code{-d docs}
|
|
|
|
|
\item \code{-sourcepath src}
|
|
|
|
|
\item \code{-cp out}
|
|
|
|
|
\item \code{-subpackages}
|
|
|
|
|
\item \code{ru}
|
|
|
|
|
\end{itemize}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{куда же без особенностей работы с Windows?}
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \code{-locale ru_RU}
|
|
|
|
|
\item \code{-encoding utf-8}
|
|
|
|
|
\item \code{-docencoding cp1251}
|
|
|
|
|
\end{itemize}
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
2022-08-22 00:28:10 +03:00
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Автоматизация сборки в CLI}
|
|
|
|
|
makefile
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Автоматизация сборки в CLI}
|
|
|
|
|
SRCDIR := src
|
|
|
|
|
OUTDIR := out
|
|
|
|
|
|
|
|
|
|
JC := javac
|
|
|
|
|
JCFLAGS := -sourcepath .(SRCDIR)/ -d (OUTDIR)
|
|
|
|
|
MAINSOURCE := ru/gb/dj/Main
|
|
|
|
|
MAINCLASS := ru.gb.dj.Main
|
|
|
|
|
|
|
|
|
|
all:
|
|
|
|
|
(JC) (JCFLAGS) {SRCDIR}/{MAINSOURCE}.java
|
|
|
|
|
|
|
|
|
|
clean:
|
|
|
|
|
rm -R (OUTDIR)
|
|
|
|
|
|
|
|
|
|
run:
|
|
|
|
|
cd out \&\& java {MAINCLASS}
|
|
|
|
|
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Автоматизация сборки в CLI, контейнеризация}
|
|
|
|
|
docker
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
|
\frametitle{Автоматизация сборки в CLI, контейнеризация}
|
|
|
|
|
\# syntax=docker/dockerfile:1
|
|
|
|
|
|
|
|
|
|
FROM bellsoft/liberica-openjdk-alpine:11.0.16.1-1
|
|
|
|
|
|
|
|
|
|
\# from where (related to Dockerfile) to where
|
|
|
|
|
COPY ./src ./src
|
|
|
|
|
|
|
|
|
|
\# remember that you are root and in / directory
|
|
|
|
|
RUN mkdir ./out
|
|
|
|
|
|
|
|
|
|
\# be sure to use relative paths
|
|
|
|
|
RUN javac -sourcepath ./src -d out ./src/ru/gb/dj/Main.java
|
|
|
|
|
|
|
|
|
|
\# what will we do on a container start
|
|
|
|
|
CMD java -classpath ./out ru.gb.dj.Main
|
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
|
|
|
|
|
|
|
|
|
|
2022-08-15 00:57:28 +03:00
|
|
|
|
\begin{frame}
|
2022-08-17 15:57:35 +03:00
|
|
|
|
\frametitle{итоги}
|
|
|
|
|
что изучили и домашка
|
2022-08-15 00:57:28 +03:00
|
|
|
|
\end{frame}
|
|
|
|
|
\note{...}
|
2022-08-14 16:46:20 +03:00
|
|
|
|
|
2022-08-13 02:31:01 +03:00
|
|
|
|
\end{document}
|