couple of slides

This commit is contained in:
Ivan I. Ovchinnikov 2022-08-13 02:31:01 +03:00
parent 5c676c0a0e
commit 4628464aef
8 changed files with 321 additions and 10 deletions

Binary file not shown.

133
fancy-listings-preamble.tex Normal file
View File

@ -0,0 +1,133 @@
\usepackage{listings}
\definecolor{codekeywords}{rgb}{0.1,0.4,0.4}
\definecolor{codecomments}{rgb}{0,0.6,0}
\definecolor{codenumbers}{rgb}{0.4,0.4,0.4}
\definecolor{codestring}{rgb}{0.85,0.2,0.1}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\definecolor{codefine}{rgb}{0.7,0.5,0.3}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\lstdefinestyle{JCodeStyle}{
frame=single,
language=Java,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle=\scriptsize\ttfamily,
numbers=left,
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue},
commentstyle=\color{dkgreen},
stringstyle=\color{mauve},
breaklines=true,
breakatwhitespace=true,
tabsize=4,
escapeinside={<@}{@>}
}
\lstdefinestyle{PyCodeStyle}{
frame=single,
commentstyle=\color{codecomments},
numberstyle=\tiny\color{codenumbers},
stringstyle=\color{codestring},
basicstyle=\ttfamily\footnotesize,
keywordstyle=\color{codekeywords},
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=4,
escapeinside={<@}{@>}
}
% \DeclareCaptionFormat{listing}{
% \parbox{\textwidth}{\centering#1 - #3}
% }
% \captionsetup[lstlisting]{ format=listing, singlelinecheck=false, margin=0pt }
\lstdefinestyle{CCodeStyle}{
frame=single,
commentstyle=\color{codecomments},
morecomment=[l][\color{codefine}]{\#},
numberstyle=\tiny\color{codenumbers},
stringstyle=\color{codestring},
basicstyle=\ttfamily\footnotesize,
keywordstyle=\color{codekeywords},
emph={int,char,double,float,unsigned,void,bool},
emphstyle={\color{blue}},
breakatwhitespace=false,
breaklines=true,
captionpos=t,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=4,
escapeinside={<@}{@>}
}
\lstdefinestyle{ASMStyle}{
frame=single,
numberstyle=\tiny\color{codenumbers},
commentstyle=\color{codecomments},
keywordstyle=\color{codekeywords},
morecomment=[l]{;}, % l is for line comment
morecomment=[s]{/*}{*/}, % s is for start and end delimiter
basicstyle={\ttfamily\footnotesize},
morekeywords={
bset, macr,
add,addi,and,andi,
bge,beq,bne,br,
cmpeqi,cmpgei,cmplti,cmpnei,
ldhu,ldw,ldwio,
mov,movi,movhi,muli,
nop,nor,
ret,
slli,srai,srli,stw,stwio},
breakatwhitespace=false,
breaklines=true,
captionpos=t,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showtabs=false,
tabsize=4,
escapeinside={<@}{@>}
}
\lstdefinestyle{VerilogStyle}{
frame=single,
numberstyle=\tiny\color{codenumbers},
commentstyle=\color{codecomments},
keywordstyle=\color{codekeywords},
morecomment=[l]{//}, % l is for line comment
morecomment=[s]{/*}{*/}, % s is for start and end delimiter
basicstyle={\ttfamily\footnotesize},
morekeywords={
logic, always_ff, always_comb
},
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showtabs=false,
tabsize=2,
escapeinside={<@}{@>}
}
\lstset{escapeinside={<@}{@>}}

View File

@ -1,4 +1,5 @@
\immediate\write18{texcount -sum -1 prog-draft.tex > /tmp/wordcount.tex} \immediate\write18{texcount -sum -1 j-spec.tex > /tmp/wordcount.tex}
%\immediate\write18{texcount -sum -1 scenarios/jc-1-c.tex > /tmp/wordcount.tex}
\documentclass[12pt, a4paper]{report} \documentclass[12pt, a4paper]{report}
\usepackage[english,russian]{babel} % локализация и переносы \usepackage[english,russian]{babel} % локализация и переносы
\usepackage{fancyhdr} \usepackage{fancyhdr}
@ -18,11 +19,24 @@
\usetikzlibrary{mindmap,trees} \usetikzlibrary{mindmap,trees}
\titlelabel{\thetitle. \quad} \titlelabel{\thetitle. \quad}
\setcounter{tocdepth}{1}
\babelfont{rm}{PT Astra Serif} \babelfont{rm}{PT Astra Serif}
\babelfont{sf}{PT Astra Serif} \babelfont{sf}{PT Astra Serif}
\babelfont{tt}{PT Mono} \babelfont{tt}{PT Mono}
\graphicspath{{./pics/}} \graphicspath{{./pics/}}
\newcounter{slidenum}
\setcounter{slidenum}{1} % set to 2 if want to exclude title page of presentation
\newcommand{\showslide}[1]{
\noindent\makebox[\linewidth]{\rule{.90\paperwidth}{1.4pt}}
\begin{center}
\framebox{\includegraphics[page=\arabic{slidenum},width=.95\textwidth]{#1}}
\stepcounter{slidenum}
\end{center}
}
\newcommand{\wordcount}{\input{/tmp/wordcount.tex}} \newcommand{\wordcount}{\input{/tmp/wordcount.tex}}
\newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize} \newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize}
\renewcommand\labelitemi{\textemdash} \renewcommand\labelitemi{\textemdash}
@ -60,34 +74,59 @@
\begin{document} \begin{document}
\maketitle \maketitle
\tableofcontents \tableofcontents
\pagestyle{plain}
\chapter{Java Core} \chapter{Java Core}
\section{Платформа: история и окружение} \section{Платформа: история и окружение}
Краткая история (причины возникновения); JDK, JRE, JVM, выбор версии; CLI: сборка, множественные источники, пакеты, запуск; структура проекта: пакеты, классы, метод main, комментарии, документирование; \subsection*{Конспект лекции}
\subsection{Задания к семинару} \subsubsection{Краткая история (причины возникновения)}
\begin{figure}[H]
\centering
\includegraphics[width=17cm]{jc-01-tiobe.png}
\caption{График популярности языков программирования TIOBE}
\label{pic:java-in-tiobe}
\end{figure}
\subsubsection{Базовый инструментарий, который понадобится (выбор IDE)}
\begin{itemize} \begin{itemize}
\item [C-1] Скомпилировать проект из трёх классов, находящихся в двух пакетах, а также создать для этого проекта стандартную веб-страницу с документацией \item NetBeans - хороший, добротный инструмент с лёгким ностальгическим оттенком;
\item Eclipse - для поклонников Eclipse Foundation и швейцарских ножей с полусотней лезвий;
\item IntelliJ IDEA - стандарт де-факто, используется на курсе и в большинстве современных компаний;
\item Android Studio - если заниматься мобильной разработкой.
\end{itemize} \end{itemize}
\subsubsection{Что нужно скачать, откуда (как выбрать вендора)}
\subsubsection{Из чего всё состоит (JDK, JRE, JVM, выбор версии)}
\subsubsection{Структура проекта (пакеты, классы, метод main, комментарии)}
\subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)}
\subsubsection{Документирование (Javadoc)}
\subsection*{Задания к семинару}
\begin{itemize}
\item Скомпилировать проект из трёх классов, находящихся в двух пакетах, а также создать для этого проекта стандартную веб-страницу с документацией
\end{itemize}
\subsection*{Сценарий лекции}
%\subfile{scenarios/jc-1-c}
\section{Управление проектом: сборщики проектов} \section{Управление проектом: сборщики проектов}
Управление проектом: Jar-файлы; Gradle/Maven: зависимости, выгрузка артефакта, публичные репозитории, свойства проекта, приватные репозитории (хостинг); Bazel Управление проектом: Jar-файлы; Gradle/Maven: зависимости, выгрузка артефакта, публичные репозитории, свойства проекта, приватные репозитории (хостинг); Bazel
\subsection{Задания к семинару} \subsection*{Задания к семинару}
\begin{itemize} \begin{itemize}
\item [C-2] Создать загружаемый артефакт с функцией суммирования двух чисел и загрузить его в локальный кэш артефактов; \item Создать загружаемый артефакт с функцией суммирования двух чисел и загрузить его в локальный кэш артефактов;
\end{itemize} \end{itemize}
\section{Специализация: данные и функции} \section{Специализация: данные и функции}
Базовые функции языка: математические операторы, условия, циклы, бинарные операторы; Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными); Функции: параметры, возвращаемые значения, перегрузка функций; Базовые функции языка: математические операторы, условия, циклы, бинарные операторы; Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными); Функции: параметры, возвращаемые значения, перегрузка функций;
\subsection{Задания к семинару} \subsection*{Задания к семинару}
\begin{itemize} \begin{itemize}
\item [C-3] Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода); \item Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода);
\item [C-3] Сравнить без условий две даты, представленные в виде трёх чисел гггг-мм-дд; \item Сравнить без условий две даты, представленные в виде трёх чисел гггг-мм-дд;
\end{itemize} \end{itemize}
\section{Специализация: ООП} \section{Специализация: ООП}
Инкапсуляция: Классы и объекты (внутренние классы, вложенные классы, static, private/public, final, интерфейс взаимодействия с объектом), перечисления (создание, конструкторы перечислений, объекты перечислений, дополнительные свойства); Наследование: extends, Object (глобальное наследование), protected, преобразование типов, final; Полиморфизм: override, abstract, final; Инкапсуляция: Классы и объекты (внутренние классы, вложенные классы, static, private/public, final, интерфейс взаимодействия с объектом), перечисления (создание, конструкторы перечислений, объекты перечислений, дополнительные свойства); Наследование: extends, Object (глобальное наследование), protected, преобразование типов, final; Полиморфизм: override, abstract, final;
\subfile{scenarios/jc-4} %\subfile{scenarios/jc-4}
\section{Специализация: Тонкости работы} \section{Специализация: Тонкости работы}
Файловая система и представление данных; Пакеты \code{java.io}, \code{java.nio}, \code{String}, \code{StringBuilder}, string pool, ?JSON/XML? Файловая система и представление данных; Пакеты \code{java.io}, \code{java.nio}, \code{String}, \code{StringBuilder}, string pool, ?JSON/XML?

BIN
pics/jc-01-tiobe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 KiB

BIN
scenarios/build/jc-1-b.pdf Normal file

Binary file not shown.

BIN
scenarios/build/jc-1-c.pdf Normal file

Binary file not shown.

95
scenarios/jc-1-b.tex Normal file
View File

@ -0,0 +1,95 @@
\documentclass[russian]{beamer}
\usepackage{multicol}
\usepackage{babel}
\usepackage{fontspec}
\input{../fancy-listings-preamble}
\makeatletter
\def\beamer@framenotesbegin{% at beginning of slide
\usebeamercolor[fg]{normal text}
\gdef\beamer@noteitems{}%
\gdef\beamer@notes{}%
}
\makeatother
% \setbeamertemplate{note page}{\pagecolor{yellow!5}\insertnote}
% \setbeameroption{show notes on second screen=right}
\usetheme{Madrid}
\usecolortheme{seahorse}
\setmainfont{IBM Plex Sans}
\setsansfont{IBM Plex Sans}
\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{...}
\begin{frame}
\frametitle{Краткая история}
\includegraphics[width=12cm]{../pics/jc-01-tiobe.png}
\end{frame}
\note{...}
\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}
\item оракл ждк
\item опен ждк
\item либерика ждк
\item гост жаба
\item экзотические истории поискать надо
\end{enumerate}
\end{frame}
\note{...}
\begin{frame}
\frametitle{title}
\end{frame}
\note{...}
\end{document}

44
scenarios/jc-1-c.tex Normal file
View File

@ -0,0 +1,44 @@
\documentclass[../j-spec.tex]{subfiles}
\begin{document}
\showslide{build/jc-1-b.pdf}
Добро пожаловать на специализацию Java, лучшую из всех специализаций Java, что вы сможете найти.
% ------------------------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Здравствуйте, меня зовут Иван, я разработчик программного обеспечения в Российских космических системах, начальник группы программистов, автор и преподаватель нескольких курсов в направлении программирования на портале GeekBrains. Пара слов обо мне, почему я нахожусь здесь и планирую Вам что-то рассказывать про язык Java? Для этого придётся вынести за скобки мой опыт работы в цифровой схемотехнике и других языках, в том числе создание бортовой аппаратуры, которая прямо сейчас летает у нас над головами или продолжает доставлять другие полезные грузы в космос. С точки зрения языка Java, обо мне можно сказать, что я являюсь разработчиком нескольких отраслевых информационных систем поддержки единой наземной инфраструктуры российского космического агентства. На моём счету также участие в межотраслевых проектах по созданию единых баз данных космического применения.
%------------------------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Итак язык Java. Согласно википедии, Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems. Разработка ведётся сообществом; язык и основные реализующие его технологии распространяются по лицензии GPL.
Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, для которой существует реализация виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года. Традиционно занимает высокие места в рейтингах популярности языков программирования (3-е место в рейтинге TIOBE (на август 2021)). На графике отлично видно, что с 2002 года язык уверенно держится в тройке популярных, значительную часть времени возглавляя его.
Но это всё - сухие факты, ничего не говорящие нам о том, чем руководствовались разработчики языка и что нам, программистам, с этим делать.
Существует, интересная версия происхождения названия языка, связанная с аллюзией на кофе машину как пример бытового устройства, для программирования которого изначально язык создавался. Кстати, в результате работы проекта мир увидел принципиально новое устройство, карманный персональный компьютер, который опередил своё время более чем на 10 лет, но из-за большой стоимости не смог произвести переворот в мире технологии и был забыт. Устройство Star7 не пользовалось популярностью, в отличие от языка программирования Java и его окружения. С середины 1990-х годов язык стал широко использоваться для написания клиентских приложений и серверного программного обеспечения. Тогда же некоторое распространение получила технология Java-апплетов — графических Java-приложений, встраиваемых в веб-страницы; с развитием возможностей динамических веб-страниц технология стала применяться редко и язык стал применяться для бэк-энда.
Итак Язык программирования Java занял свою нишу в системном и прикладном программировании из-за своей высокой скорости работы, и веб-программировании, из-за удобного сетевого окружения, ставшего основой для создания бэк-энда веб-сервисов. Java очевидно испытал влияние языков C, C++, Pascal и других, так что многое в этих языках достаточно досконально изучить один раз, чтобы иметь возможность понимать все связанные.
% ------------------------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Мы привыкли к тому, что для программирования нужна некоторая среда, которая будет удобно подсказывать нам, что делать, как писать программу, запускать написанный код и помогать нам отлаживать его. Чаще всего это так, но я призываю вас не останавливаться на единственном инструменте, ведь если быть всегда сосредоточенным на отвёртке, вы никогда не узнаете, что люди придумали очень удобный шуруповёрт.
Я не планирую рекламировать ту или иную среду, скорее всего не буду даже много говорить о плюсах и минусах той или иной среды, просто покажу список и коротко расскажу о главных действующих лицах:
\begin{enumerate}
\item NetBeans - если коротко, то эта среда с нами из уважения к истории, она была первой, созданной для разработки на языке Java. Долгое время разработка этой среды не велась, но в последние несколько лет разработчики как будто бы вспомнили о ней и активно взялись за дело, сейчас есть версии под все популярные ОС, поддерживается весь популярный современный функционал, есть прикольные самобытные моменты, вроде расширенных клавиатурных макросов для написания функций с передаваемыми в них массивами;
\item Eclipse - проще, наверное, назвать язык или технологию, под которую нет плагина для этой весьма расширяемой и дополняемой среды программирования. Долгое время, вплоть до недавнего, а где-то и до сих пор, является корпоративным стандартом для написания Enterprise приложений и прочих сложных корпоративных приложений. Весьма гибкая среда и-за того, что разрабатывается Eclipse Foundation к ней можно подключить плагины, решающие почти любые задачи разработки. Из того что я видел своими глазами, Siemens использует Eclipse для разработки своих систем поддержки жизненного цикла изделий;
\item IntelliJ IDEA - стандарт де-факто примерно десять последних лет. Не уверен, можно ли назвать эту среду российской разработкой, но у компании, разрабатывающей эту среду, три русских учредителя. Да и сама эта компания началась именно с этой среды. В этой среде можно настроить почти любую деталь, что часто бывает очень удобно. Среда расширяется плагинами на почти все случаи жизни разработчика. Часто входит в экосистему JetBrains, развёрнутую на предприятии, поэтому тесно интегрируется в другие сферы деятельности компании. Существует как бесплатная, так и платная версия с расширенным функционалом, например, доступа к базам данных.
\end{enumerate}
Отдельно стоит обговорить такую среду, как Android Studio, как мог заметить внимательный зритель, её нет в списке на слайде, но не потому, что в ней нельзя разрабатывать Java-приложения, а потому что если не разрабатывать в ней именно Android приложения, следует отказаться от её использования из-за некоторой избыточности. Среда снабжена значительным количеством надстроек и эмуляторов мобильных устройств, которые попросту будут вам мешать, если вы не используете их в своей профессиональной деятельности. С другой стороны, если ваша цель - это именно мобильная разработка под Android, то и выбора у вас особо нет, только Android Studio.
% ------------------------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
О средах программирования дополнительно поговорили, нужно выбрать какую-нибудь, и скачать. В курсе, кроме этого урока будет использоваться комьюнити версия среды Intellij IDEA, можете для простоты выбрать её. Наверняка, для прохождения предыдущих курсов вы уже скачали и установили JDK, и вот сейчас пришла пора разобраться, что это, какие они бывают, откуда их брать и как их выбирать, мы же за осознанность как-никак.
% ------------------------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
\end{document}