Category: Инструменты

20
Июл
2021

Flutter Global Summit’21

Спикеры из крупных мировых компаний поговорят о применении Flutter и Dart в разработке приложений, сайтов и игр. Рассмотрят кейсы, проведут панельные дискуссии, воркшопы и Q&A-сессии.
— Читать дальше «Flutter Global Summit’21»

16
Июл
2021

🛠 Может ли NanoID заменить UUID?

UUID – один из наиболее часто используемых при разработке ПО универсальных идентификаторов. Однако в последние несколько лет появились альтернативы, которые ставят под сомнение необходимость его существования.

Перевод публикуется с сокращениями, автор оригинальной
статьи
Charuka Herath.

Среди альтернатив занял
место NanoID – один из ведущих конкурентов, которые заменят UUID. Чтобы лучше понимать сферу его применения, в
этой статье мы поговорим об особенностях NanoID, его преимуществах и ограничениях.

NanoID и его использование

Когда дело доходит до создания
UUID или NanoID в JavaScript, становится ясно, что тут все просто – у них есть
NPM-пакеты, которые помогут вам. Все, что нужно сделать – установить библиотеку NanoID NPM с помощью команды npmi nanoid и использовать ее в своем проекте.

        import { nanoid } from 'nanoid';
model.id = nanoid();
    
Знаете ли вы, что NanoID имеет более 11 754 тыс. загрузок NPM в неделю и на 60% быстрее чем UUID?

На приведенном ниже
графике показано сравнение мы
видим тенденцию к росту NanoID по сравнению с неизменным прогрессом UUID.


Надеемся, что эти цифры
убедили вас попробовать NanoID.

Основное различие между ними простое – используемый в качестве ключа алфавит. Поскольку NanoID использует алфавит большего размера чем UUID, более короткий идентификатор может работать также, как и более длинный UUID.

1. Размер NanoID составляет всего 108 байт

В отличие от UUID, NanoID
в 4,5 раза меньше по размеру и не имеет никаких зависимостей. Кроме того,
ограничение по «весу» было использовано для уменьшения размера еще на 35%.
Это напрямую влияет на размер данных. Например, использующий NanoID объект мал и компактен для передачи и хранения данных. По мере роста приложения эти цифры становятся заметными.

2. Более безопасный

В большинстве генераторов
случайных чисел используют небезопасную Math.random(). Однако NanoID использует crypto module и Web
Crypto API
, которые являются более безопасными.
Кроме того, NanoID использует свой собственный алгоритм, называемый uniform algorithm, при реализации генератора идентификаторов вместо использования random % alphabet.

3. Быстрый и компактный

NanoID на 60% быстрее
UUID. Вместо 36 символов в алфавите UUID, NanoID имеет только 21 символ.

        0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-
    

А еще NanoID
поддерживает 14 различных языков программирования, а именно:

        C#, C++, Clojure and ClojureScript, Crystal, Dart & Flutter, Deno, Go, Elixir, Haskell, Janet, Java, Nim, Perl, PHP, Python with dictionaries, Ruby , Rust, Swift.
    

4. Совместимость

NanoID умеет работать с
PouchDB, CouchDB WebWorkers, Rollup и библиотеками, вроде React и
React-Native.
Вы можете получить уникальный идентификатор в терминале с помощью npx nanoid, но для этого вам придется соблюсти необходимое условие – установка NodeJS.


Кроме того, в наборе
инструментов Redux можно найти NanoID и использовать его следующим образом:

        import { nanoid } from ‘@reduxjs/toolkit’
console.log(nanoid()) //‘dgPXxUz_6fWIQBD8XmiSy’
    

5. Пользовательские алфавиты

Еще одной существующей
особенностью NanoID является то, что он позволяет разработчикам применять пользовательский алфавит. Вы можете изменить литералы или размер
идентификатора, как показано ниже:

        import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('ABCDEF1234567890', 12);
model.id = nanoid();
    

В приведенном выше
примере определяется пользовательский алфавит ABCDEF1234567890 с размером
идентификатора 12.

6. Отсутствие сторонних зависимостей

Поскольку на NanoID не влияют
какие-либо сторонние зависимости, со временем он будет становиться более
стабильным и управляемым.
Это полезно для оптимизации размера пакета в долгосрочной перспективе и делает его менее подверженным связанным с зависимостями проблемам.

***

Ограничения и направленность на будущее

По мнению многих экспертов по StackOverflow, использование NanoID не имеет существенных недостатков или ограничений.

Нечитабельность – это основной недостаток, который многие разработчики видят в NanoID, поскольку он затрудняет отладку. Однако по сравнению с UUID NanoID намного короче и читабельнее.

Когда вы
используете NanoID в качестве первичного ключа таблицы, могут возникнуть проблемы,
если вы будете использовать тот же столбец, что и кластеризованный индекса. Это
происходит из-за того, что NanoID не являются последовательными.

В будущем…

NanoID постепенно
становится самым популярным генератором уникальных идентификаторов для
JavaScript, и большинство разработчиков выбирают его вместо UUID.


Приведенные выше тесты
показывают производительность NanoID по сравнению с другими
генераторами идентификаторов.

Он может генерировать более 2,2 млн. уникальных идентификаторов в секунду со своим алфавитом по умолчанию и более 1,8 млн. уникальных идентификаторов в секунду с пользовательским алфавитом.

Учитывая опыт применения, можно смело использовать
NanoID вместо UUID для любых будущих проектов, благодаря его небольшому размеру,
удобству URL, безопасности и скорости.

Дополнительные материалы:

15
Июл
2021

В IntelliJ IDEA завезли подключение к Docker через SSH и другие нововведения

В предварительную версию IntelliJ IDEA 2021.2 завезли полезные обновления для Kubernetes и Docker.
— Читать дальше «В IntelliJ IDEA завезли подключение к Docker через SSH и другие нововведения»

12
Июл
2021

Митап «Flutter в большом проекте»

Flutter-разработчики рассмотрят возможности использования фреймворка в больших проектах, поделятся своими подходами и полезными инструментами для работы с веб-приложениями.
— Читать дальше «Митап «Flutter в большом проекте»»

12
Июл
2021

🛠 Сложноструктурные аналитические отчеты с Python и LaTeX

В руководстве подробно рассматривается пример использования Python-библиотеки облачного представления приложений Streamlit и системы компьютерной вёрстки LaTeX для подготовки сложных аналитических отчетов с математическими, программными и графическими вставками.

Экосистема LaTeX. Быстрый старт

  • TeX (произносится как «тех») – система компьютерной верстки, предназначенная для подготовки научно-технических материалов высокого полиграфического качества.
  • LaTeX (произносится «латех») – это, строго говоря, набор макросов на языке разметки TeX, но в зависимости от контекста под LaTeX может пониматься макропакет, издательская система или язык, служащий для разметки документа. LaTeX 2e – наиболее полная, стабильная версия LaTeX.
  • MikTеX – свободно распространяемая реализация TeX под основные операционные системы – Windows, macOS, Linux (Ubuntu, Debian, CentOS и пр.) – включающая в себя практически все наиболее значимые расширения.

Установить реализацию MikTеX под нужную операционную систему можно по инструкциям на странице проекта. При желании с системой можно взаимодействовать и без установки дистрибутива, просто запустив Docker-образ:

miktex_install.sh
        $ docker pull miktex/miktex
$ docker volume create --name miktex
$ docker run -it \
  -v miktex:/miktex/.miktex \
  -v $(pwd):/miktex/work \
  miktex/miktex \
  pdflatex main.tex
    

Здесь с помощью команды docker pull в локальное хранилище образов скачивается Docker-образ miktex/miktex. Затем командой docker volume в файловой системе хоста создается директория miktex/. Последним шагом с помощью команды docker run остается запустить контейнер Docker на базе образа miktex/miktex. Флаг -it создает сеанс интерактивной работы на подключаемом терминальном устройстве, а флаг -v отображает директорию файловой системы хоста на директорию внутри контейнера.

Контейнер ожидает получить аргументы командной строки указывающие на выбранный компилятор (в данном случае PDFLaTeX) и собственно tex-файл (размеченный документ, на основании которого позже будет создан pdf-файл).

В качестве альтернативы MikTEX можно использовать TeX Live – это еще один свободно распространяемый и наиболее полный дистрибутив TeX. Для операционной системы MacOS X можно пользоваться специализированным решением MacTeX.

Опорный документ LaTeX (tex-файл) представляет собой обычный текстовый файл с разметкой. Для редактирования такого рода файлов можно пользоваться и обычным текстовым Unix-редактором Vim, но практичнее использовать специальные решения, например, открытую среду разработки TeXstudio (поддерживает все основные операционные системы). Однако TeXstudio не единственный вариант. Вот наиболее распространенные альтернативы: TeXmaker, Kile, TeXCenter.

LaTeX состоит из пакетов, получить доступ к которым можно на странице CTAN (The Comprehensive TeX Archive Network). CTAN – центральный репозиторий, в который стекаются все сколько-нибудь стоящие наработки, имеющие отношение к TeX.

Каждый пакет репозитория содержит документацию (с описанием зависимостей, примерами и контекстом использования, деталями реализации и пр.), исходные файлы, описание синтаксических особенностей, макродемонстрацию и другие компоненты, позволяющие быстро понять устройство пакета и порядок работы с ним. С общей структурой пакетов CTAN можно познакомиться на примере пакета для оформления программного кода listings.

Итак, для запуска примеров из настоящего руководства потребуется установить дистрибутив TeX (например, MikTеX) и LaTeX-редактор (например, TeXstudio).

Введение в язык разметки LaTeX

В текстовых процессорах, которые позволяют в момент набора текста видеть его на экране дисплея точно таким, как он будет выглядеть на бумаге, используется концепция визуального проектирования (WYSIWYG – What You See Is What You Get). В LaTeX же используется концепция логического проектирования, когда внешний вид документа становится понятен только после компиляции.

Внешний вид документа определяется инструкциями, описанными на языке разметки TeX или LaTeX. Между этими языками сложно провести четкую границу. Сам LaTeX написан в командах TeX и в LaTeX-документе можно использовать практические любые TeX-команды. Упрощенно можно считать, что язык разметки LaTeX это высокоуровневая «синтаксически-сахарная» обертка для низкоуровневого языка TeX. Таким образом, TeX в основном применяется при разработке классов и пакетов, в то время как LaTeX – для подготовки печатного документа.

Теперь рассмотрим общий синтаксис языка LaTeX и познакомимся с базовой структурой tex-документа.

  • LaTeX-файл должен начинаться с команды \documentclass, задающей стиль оформления документа, например, \documentclass{article}. Аргумент команды article означает, что документ будет оформлен в соответствии с наиболее общими правилами оформления статей. При желании можно изменить (с незначительными оговорками) любой элемент макета документа.
  • Команда \documentclass поддерживает и другие классы, доступные «из коробки»: book (для оформления книг), report (для оформления отчетов – нечто среднее между book и article), proc (для оформления трудов конференций) и letter (для деловых писем со сложной структурой).
  • После команды \documentclass могут следовать команды, относящиеся ко всему документу. Далее с помощью окружения\begin{document}\end{document} (условимся называть его документарным окружением) указывается тело документа. В общем случае окружением называют сложные конструкции вида \begin{}\end{}.
  • Часть tex-файла между командой \documentclass и \begin{document}\end{document} называют преамбулой. Команды указанные после закрывающей скобки окружения документа \end{document} LaTeX проигнорирует.

В итоге наипростейший шаблон документа будет выглядеть так:

base_example.tex
        \documentclass{article}
% область преамбулы
\begin{document} % тело документа: начало
% текст
\end{document} % тело документа: конец
% команды в этой части документа не будут учитываться при сборке документа
    

Инструкции, управляющие макетом страницы и прочие настройки tex-документа, могут быть размещены и в преамбуле, но когда инструкций становится много, будет удобнее вынести их в отдельный стилевой файл с расширением *.sty. Позже стилевой файл можно будет подключить командой \usepackage{}, принимающей в качестве аргумента путь до этого файла.

Сам стилевой файл содержит импорты пакетов \RequirePackage{}, пользовательские команды \newcommand{}, псевдонимы математических операторов \DeclareMathOperator и прочие элементы кастомизации:

style_template.sty
        % начало стилевого файла
\RequirePackage[english,russian]{babel}
\RequirePackage[utf8]{inputenc}
\RequirePackage{amsmath, amsfonts, amssymb, latexsym}
\RequirePackage[
	left=2cm,
	right=2cm,
	top=2cm,
	bottom=2cm
		]{geometry}
... 
\newcommand{\str}[1]{cтр.~\pageref{#1}}
\newcommand{\strbook}[1]{стр.~{#1}}
...
\DeclareMathOperator*{\argmin}{arg\,min}
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\sign}{sign}
\DeclareMathOperator*{\const}{const}
...
    

С подключенным стилевым файлом tex-документ будет выглядеть так:

base_example_with_usepackage.tex
        \documentclass{article}
\usepackage{style_template} % подключаем стилевой файл style_template.sty, расположенный в той же директории, что и tex-файл
\begin{document}
% текст
\end{document}
    

Аргумент команды \usepackage может включать не только имя стилевого файла, но и путь до него относительно корня проекта (без указания расширения файла).

Далее предполагается, что все настройки макета документа описаны в стилевом файле style_template.sty, который расположен в той же директории, что и tex-файл.

К сожалению, в настоящем руководстве нет возможности рассмотреть все элементы и тонкости подготовки LaTeX-файлов, но в github-репозитории доступен полный код рассматриваемого примера с пояснениями, включая опорный стилевой файл, адаптированный для работы с кириллицей и содержащий декоративные настройки окружений, которые могут пригодиться при подготовке сложноструктурных аналитических отчетов.

Разобравшись с базовыми структурными элементами tex-файла, можно сосредоточиться на содержательной части и перейти к наполнению документа.

Наберем в документарном окружении следующие строки:

simple_onepage_template.tex
        ...
\begin{document}

\title{Аналитический отчет по ...} % заголовок отчета
\author{\itshape Иванов И.И.} % автор работы
\date{} % просим LaTeX не указывать дату, так как будет
        % использован наш вариант оформления даты, описанный в стилевом файле
\maketitle % создает заголовок

\thispagestyle{fancy} % задает стиль страницы

В этой части можно разместить аннотацию к отчету. \TeX -- это издательская система компьютерной верстки, предназначенная для набора ...

\tableofcontents % создает оглавление

\section{Пример многострочной формулы}
    Для набора сложных многострочных формул используются различные окружения, например, окружение \texttt{multline}
	\begin{multline}
		F_{\zeta}(z)=P[\,\zeta\leqslant z\,] = \int\!\!\!\int_{x/y\leqslant z}f_X(x;n)f_Y(y;m)\,dxdy =\\ \dfrac{1}{2^{(n+m)/2}\Gamma(n/2)\Gamma(m/2)}\int\!\!\!\int_{x/y\leqslant z}x^{n/2-1}y^{m/2-1}\exp\left( -\frac{x}{2} \right) \exp\left( -\frac{y}{2} \right) \,\mathrm{d}x \, \mathrm{d}y.
	\end{multline}

\section{Пример группового размещения формул}

Несколько формул можно разместить в одной группе с помощью окружения \texttt{gather}
\begin{gather}
	\sum_{j \in \mathbf{N}} b_{ij} \hat{y}_{j} = \sum_{j \in \mathbf{N}} b_{ij}^\lambda \hat{y}_j + (b_{ii} - \lambda_i)\hat{y}_i \hat{y},\notag \\
	\det \mathbf{K}(t=1, t_1, \ldots, t_n) = \sum_{I \in \mathbf{n} } (-1)^{|I|} \prod_{i \in I} t_i \prod_{j \in I} (D_j + \lambda_j t_j) \det \mathbf{A}^{(\lambda)} (\, \overline{I} | \overline{I} \,) = 0,\tag{$a$} \\
	\mathbb{F} = \sum_{i=1}^{\left[ \frac{n}{2}\right] } \binom{ x_{i,i+1}^{i^2}}{ \left[ \frac{i+3}{3} \right]} {{\sqrt{\mu(i)^\frac{3}{2} (i^2-1)}} \over\displaystyle {\sqrt[3]{\rho(i)-2} + \sqrt[3]{\rho(i)-1}} }, \tag{$b$}
\end{gather}

\section{Простая однострочная формула}

Теорема Хинчина-Винера утверждает, что спектральная плотность мощности стационарного в широком смысле случайного процесса представляет собой преобразование Фурье от соответствующей автокорреляционной функции
\begin{equation*} % без нумерации
    S_{xx}(f) = \int\limits_{-\infty}^{\infty}  \, r_{xx} (\tau) e^{-j 2 \pi f \tau} \mathrm{d} \tau,\ \text{где}\ r_{xx}(\tau) = \mathbb{E}[\,x(t) \, x^{*}(t - \tau)\,].
\end{equation*}

\end{document}
    

Теперь можно вызвать компилятор PDFLaTeX через командную оболочку и передать ему имя tex-файла. Результат компиляции приведен на рисунке ниже.

Результат компиляции файла <code class="inline-code">analyt_report_template.tex</code>
Результат компиляции файла analyt_report_template.tex

Рассмотрим более подробно код файла analyt_report_template.tex.

  • В первых строках файла с помощью команд \title и \author мы объявляем заголовок отчета и имя автора работы соответственно, а с помощью команды \maketitleсоздаем заголовок.
  • Затем с помощью команды \date, вызванной без аргументов, подавляем вывод временной метки. Здесь для привязки ко времени будет использоваться специальная низкоуровневая командная вставка в стилевом файле style_template.sty (этот фрагмент кода приводится только для справки, так как конечному пользователю приложения нет необходимости вносить в стилевой файл изменения напрямую):
fragment_style_template.sty
        ... 
\def\@maketitle{
    \begin{flushright}
	\footnotesize\itshape
	Дата последней сборки документа:\\ \today\ в \currenttime
    \end{flushright}

    \begin{center}
	\let \footnote \thanks
	\begin{spacing}{1.5}
	    {\Large\bfseries\@title}
	\end{spacing}\vskip 1mm

	{\normalsize
	    \begin{tabular}[t]{l}
		\@author
	    \end{tabular}\par	
	}
    \end{center}
    \par
    \vskip 1.5em
}
...
    

Команда \thispagestyle задает стиль страницы, а команда \tableofcontents создает оглавление документа. С помощью команды \section создаются разделы документа высшего уровня (с учетом класса документа). Для того чтобы создать раздел более низкого уровня следующей ступени можно воспользоваться командой \subsection.

LaTeX обладает широким набором окружений для оформления математических конструкций произвольной сложности, однако здесь мы ограничимся рассмотрением только трех типов окружения: equation, multline и gather.

Как должно быть понятно из приведенного выше рисунка, equation используется для однострочных формул, multline – для многострочных, а gather – для группового размещения формул. Звездочка после имени окружения означает, что LaTeX не станет присваивать номера формулам, попавшим в это окружение.

При наборе формул используются специальные LaTeX-команды с названиями созвучными набираемому элементу, например, для того чтобы добавить в формулу знак суммы с нижним lowindex и верхним upindex индексом используется команда \sum_{lowindex}^{upindex}, чтобы вставить символ большой омеги – \Omega, а для вставки символа гамма потребуется \gamma и т.д.

Для быстрого поиска нужных математических LaTeX-команд, специальных символов, приемов оформления псевдокода и пр. удобно пользоваться компактным, но очень содержательным сборником Константина Воронцова «LaTeX 2e в примерах».

Прочие детали работы с издательской системой LaTeX можно выяснить из следующих работ:

Введение в Python-библиотеку Streamlit

Библиотека Streamlit – это простая, лаконичная и в тоже время очень мощная библиотека для прототипирования браузерных решений с графическим интерфейсом. Streamlit включает поддержку всех основных элементов стека, ориентированных на компьютерное зрение, машинное и глубокое обучение.

Установить библиотеку проще всего с помощью менеджера пакетов pip: pip install streamlit.

Запускается приложение командой streamlit run:

streamlit_run.sh
        $ streamlit run streamlit_simple_example.py

  You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8502 # <-- 
  Network URL: http://192.168.1.247:8502
    

После запуска сценария в браузере (http://localhost:8502) откроется вкладка с приложением. Завершить работу приложения можно, закрыв вкладку браузера и набрав Ctrl+C в командной оболочке.

В Streamlit реализован сравнительно небольшой набор «выразительных средств», но все элементы продуманы и покрывают значительную часть требований к «гибкому динамическому прототипу».

Начать работу со Streamlit можно с вводного руководства, которое подробно описывает все возможности библиотеки, включая Markdown-разметку, аудио и видео объекты, различные графические объекты (Bokeh, Altair, Plotly и др.), а также оптимизацию загрузки объемных наборов данных.

Ниже приводится пример использования библиотеки Streamlit для построения двух интерактивных графиков (на базе библиотеки Plotly) гауссовских процессов с автокорреляционной функцией экспоненциального типа.

streamlit_simple_example.py
        import streamlit as st
import math
import pandas as pd
from pandas import Series
import plotly.graph_objects as go
import numpy as np
import numpy.random as rnd

title_app = "Простой пример использования библиотеки Streamlit"
# чтобы на вкладке браузера отображалось имя приложения, а не имя файла
st.set_page_config(
    layout="wide",
    page_title=title_app,
    initial_sidebar_state="expanded",
)


def gauss_with_exp_acf_gen(
    *,
    sigma: float = 2,
    w_star: float = 1.25,
    delta_t: float = 0.05,
    N: int = 1000,
) -> np.array:
    """
    Описание
    --------
    Генерирует дискретную реализацию
    стационарного гауссовского ПСП
    с КФ экспоненциального типа

    Параметры
    ---------
    sigma : стандартное отклонение ординат ПСП.
    w_star : параметр модели ПСП.
    delta_t : шаг по времени.
    N : число отсчетов ПСП.

    Возвращает
    ----------
    xi : массив элементов ПСП с заданной КФ
    """
    gamma_star = w_star * delta_t
    rho = math.exp(-gamma_star)
    b1 = rho
    a0 = sigma * math.sqrt(1 - rho ** 2)

    xi = np.zeros(N)
    xi[0] = rnd.rand()
    x = rnd.randn(N)

    for n in range(1, N):
        xi[n] = a0 * x[n] + b1 * xi[n - 1]

    return xi


def main(N: int = 100):
    timestmp = np.arange(N)
    # временной ряд №1
    time_series_1 = gauss_with_exp_acf_gen(sigma=5, w_star=1.25, N=N)
    # временной ряд №2
    time_series_2 = gauss_with_exp_acf_gen(sigma=6.5, w_star=1.75, N=N)

    fig = go.Figure()

    fig.add_trace(
        go.Scatter(
            x=timestmp,
            y=time_series_1,
            name="Временной ряд (объект-1)",
            opacity=0.8,
            mode="lines",
            line=dict(
                color="#E84A5F",
            ),
        )
    )

    fig.add_trace(
        go.Scatter(
            x=timestmp,
            y=Series(time_series_1).rolling(window=7).mean(),
            name="Скользящее среднее (объект-1)",
            mode="lines",
            opacity=0.6,
            line=dict(
                color="#FF847C",
            ),
        )
    )

    fig.add_trace(
        go.Scatter(
            x=timestmp,
            y=time_series_2,
            name="Временной ряд (объект-2)",
            mode="lines",
            opacity=0.8,
            line=dict(
                color="#5E63B6",
            ),
        )
    )

    fig.add_trace(
        go.Scatter(
            x=timestmp,
            y=Series(time_series_2).rolling(window=7).mean(),
            name="Скользящее среднее (объект-2)",
            mode="lines",
            opacity=0.6,
            line=dict(
                color="#6EB6FF",
            ),
        )
    )

    fig.update_layout(
        title=dict(
            # text="<i>Временной ряд</i>",
            font=dict(
                family="Arial",
                size=18,
                color="#07689F",
            ),
        ),
        xaxis_title=dict(
            text="<i>Временная метка</i>",
            font=dict(
                family="Arial",
                size=13,
                color="#537791",
            ),
        ),
        yaxis_title=dict(
            text="<i>Продолжительность простоя, час</i>",
            font=dict(
                family="Arial",
                size=13,
                color="#537791",
            ),
        ),
        xaxis=dict(
            showline=True,
        ),
        yaxis=dict(
            showline=True,
        ),
        autosize=False,
        showlegend=True,
        margin=dict(
            autoexpand=False,
            l=70,
            r=10,
            t=50,
        ),
        legend=dict(
            orientation="v",
            yanchor="bottom",
            y=0.01,
            xanchor="right",
            x=0.99,
            font=dict(family="Arial", size=12, color="black"),
        ),
        plot_bgcolor="white",
    )

    st.plotly_chart(fig, use_container_width=True)


if __name__ == "__main__":
    main(N=350)
    

В этом примере к библиотеке Streamlit имеет отношение только:

  • функция st.set_page_config(), которая переопределяет имя вкладки браузера – отображается не имя файла, а имя приложения;
  • функция st.plotly_chart(), которая принимает сконфигурированный Plotly-объект и выводит его в окно браузера.
Результат работы сценария <code class="inline-code">streamlit_simple_example.py</code>
Результат работы сценария streamlit_simple_example.py

Прочие элементы сценария streamlit_simple_example.py играют лишь вспомогательную роль.

Пример-шаблон аналитического отчета

Предлагается в качестве примера, сочетающего приемы работы с библиотекой Streamlit (браузерный интерфейс приложения) и LaTeX-разметку (опорный tex-файл), рассмотреть подготовку отчета на тему «Оценка усталостной долговечности силовых элементов транспортных машин под воздействием стационарных гауссовских процессов с автокорреляционной функцией экспоненциально-косинусного семейства».

Важно подчеркнуть, что предлагаемый пример представляет собой расширяемый шаблон, т.е. содержит ключевые окружения для оформления математических формул, программных вставок, графических объектов и прочие наиболее востребованные компоненты, и может быть взят за основу для разработки более сложных документов.

Подробности реализации обсуждаемого решения можно узнать из github-репозитория, сейчас же кратко остановимся на нескольких нюансах.

Часто возникает необходимость выгрузить подготовленный с помощью Streamlit файл результатов (например, табличных объект Pandas), но сам Streamlit не предлагает никаких решений. Тем не менее это ограничение можно обойти с помощью следующей функции:

downloader_for_streamlit.py
        def text_downloader(multiline: str) -> NoReturn:
    """
    Принимает LaTeX-шаблон документа в виде многострочной строки и
    создает на странице ссылку для скачивания шаблона
    """
    OUTPUT_TEX_FILENAME = "base_template_for_latex.tex"
    
    b64 = base64.b64encode(multiline.encode()).decode()
    # создает ссылку для скачивания файла
    href = (f'<a href="data:file/txt;base64,{b64}" '
            f'download="{OUTPUT_TEX_FILENAME}">Скачать ...</a>')
    st.markdown(href, unsafe_allow_html=True)
    

Функция читает текстовый файл, переданный в виде строки, кодирует его с помощью стандарта base64 и передает тег-ссылку методу markdown. В итоге файл можно будет скачать, кликнув на созданную ссылку.

При наборе текстового шаблона для Python (latex_template_for_python.txt) – по сути файл представляет собой каркас документа с заглушками под строковую интерполяцию – важно помнить о синтаксических особенностях LaTeX. Дело в том, что в контексте строковой интерполяции фигурные скобки означают «место подстановки», а в контексте LaTeX – обязательный аргумент команды. То есть, чтобы Python корректно «прочитал» строку следует фигурные скобки, относящиеся к синтаксису LaTeX, удвоить.

В результате получится текстовый файл вида:

fragment_latex_template_for_python.txt
        \documentclass[
    11pt,
    a4paper,
    utf8,
]{{article}}

\usepackage{{style_template}}

\begin{{document}}
...
Усталостная долговечность по модели \eqref{{eq:miles}} составляет $ Y_{{NB}} = {Y_NB:.2f} $, сек.

\section{{Оценка усталостной долговечности по модели P.H. Wirsching и C.L.~Light}}
...
    

Ниже на рисунках приводится общий вид приложения.

Стартовая страница приложения
Стартовая страница приложения

Скачав подготовленный tex-файл в директорию проекта, останется только запустить компилятор (дважды!).

pdflatex_start.sh
        # для сборки каркаса
$ pdflatex base_template_for_latex.tex
# для вычисления конечных ссылок на страницы, формулы и пр.
$ pdflatex base_template_for_latex.tex

    

После сборки документа в рабочей директории проекта будет создан pdf-файл.

Выгрузка подготовленного LaTeX-шаблона
Выгрузка подготовленного LaTeX-шаблона
Результат работы <code class="inline-code">pdflatex base_template_for_latex.tex</code>. Фрагмент собранного аналитического отчета
Результат работы pdflatex base_template_for_latex.tex. Фрагмент собранного аналитического отчета

Чтобы развернуть приложение на свободной облачной платформе Streamlit, достаточно кликнуть на Deploy this app в правой верхней части панели запущенного приложения, как изображено на рисунке. Однако предварительно необходимо зарегистрироваться на Streamlit и отправить заявку на допуск к ресурсам (обычно обработка заявки занимает несколько дней).

Развертывание приложения на облачной платформе Streamlit
Развертывание приложения на облачной платформе Streamlit

После успешного развертывания на платформе приложение будет доступно конечному пользователю по ссылке, как в данном случае.

Заключение

Из руководства вы узнали:

  • что собой представляет система компьютерной вёрстки LaTeX, где найти ее дистрибутивы и пакеты, как правильно читать документацию, как начать работать с системой;
  • как разрабатывать гибкие, масштабируемые шаблоны документов с помощью языка разметки TeX/LaTeX;
  • как использовать приемы разработки приложений с помощью Python-библиотеки Streamlit;
  • как может выглядеть пример связки «LaTeX + Streamlit»;
  • и, наконец, как развернуть приложение на облачной платформе Streamlit.

Полезные источники:

Связные материалы с платформы Proglib:

12
Июл
2021

🛠 Сложноструктурные аналитические отчеты с Python и LaTeX

В руководстве подробно рассматривается пример использования Python-библиотеки облачного представления приложений Streamlit и системы компьютерной вёрстки LaTeX для подготовки сложных аналитических отчетов с математическими, программными и графическими вставками.

Экосистема LaTeX. Быстрый старт

  • TeX (произносится как «тех») – система компьютерной верстки, предназначенная для подготовки научно-технических материалов высокого полиграфического качества.
  • LaTeX (произносится «латех») – это, строго говоря, набор макросов на языке разметки TeX, но в зависимости от контекста под LaTeX может пониматься макропакет, издательская система или язык, служащий для разметки документа. LaTeX 2e – наиболее полная, стабильная версия LaTeX.
  • MikTеX – свободно распространяемая реализация TeX под основные операционные системы – Windows, macOS, Linux (Ubuntu, Debian, CentOS и пр.) – включающая в себя практически все наиболее значимые расширения.

Установить реализацию MikTеX под нужную операционную систему можно по инструкциям на странице проекта. При желании с системой можно взаимодействовать и без установки дистрибутива, просто запустив Docker-образ:

miktex_install.sh
        $ docker pull miktex/miktex
$ docker volume create --name miktex
$ docker run -it \
  -v miktex:/miktex/.miktex \
  -v $(pwd):/miktex/work \
  miktex/miktex \
  pdflatex main.tex
    

Здесь с помощью команды docker pull в локальное хранилище образов скачивается Docker-образ miktex/miktex. Затем командой docker volume в файловой системе хоста создается директория miktex/. Последним шагом с помощью команды docker run остается запустить контейнер Docker на базе образа miktex/miktex. Флаг -it создает сеанс интерактивной работы на подключаемом терминальном устройстве, а флаг -v отображает директорию файловой системы хоста на директорию внутри контейнера.

Контейнер ожидает получить аргументы командной строки указывающие на выбранный компилятор (в данном случае PDFLaTeX) и собственно tex-файл (размеченный документ, на основании которого позже будет создан pdf-файл).

В качестве альтернативы MikTEX можно использовать TeX Live – это еще один свободно распространяемый и наиболее полный дистрибутив TeX. Для операционной системы MacOS X можно пользоваться специализированным решением MacTeX.

Опорный документ LaTeX (tex-файл) представляет собой обычный текстовый файл с разметкой. Для редактирования такого рода файлов можно пользоваться и обычным текстовым Unix-редактором Vim, но практичнее использовать специальные решения, например, открытую среду разработки TeXstudio (поддерживает все основные операционные системы). Однако TeXstudio не единственный вариант. Вот наиболее распространенные альтернативы: TeXmaker, Kile, TeXCenter.

LaTeX состоит из пакетов, получить доступ к которым можно на странице CTAN (The Comprehensive TeX Archive Network). CTAN – центральный репозиторий, в который стекаются все сколько-нибудь стоящие наработки, имеющие отношение к TeX.

Каждый пакет репозитория содержит документацию (с описанием зависимостей, примерами и контекстом использования, деталями реализации и пр.), исходные файлы, описание синтаксических особенностей, макродемонстрацию и другие компоненты, позволяющие быстро понять устройство пакета и порядок работы с ним. С общей структурой пакетов CTAN можно познакомиться на примере пакета для оформления программного кода listings.

Итак, для запуска примеров из настоящего руководства потребуется установить дистрибутив TeX (например, MikTеX) и LaTeX-редактор (например, TeXstudio).

Введение в язык разметки LaTeX

В текстовых процессорах, которые позволяют в момент набора текста видеть его на экране дисплея точно таким, как он будет выглядеть на бумаге, используется концепция визуального проектирования (WYSIWYG – What You See Is What You Get). В LaTeX же используется концепция логического проектирования, когда внешний вид документа становится понятен только после компиляции.

Внешний вид документа определяется инструкциями, описанными на языке разметки TeX или LaTeX. Между этими языками сложно провести четкую границу. Сам LaTeX написан в командах TeX и в LaTeX-документе можно использовать практические любые TeX-команды. Упрощенно можно считать, что язык разметки LaTeX это высокоуровневая «синтаксически-сахарная» обертка для низкоуровневого языка TeX. Таким образом, TeX в основном применяется при разработке классов и пакетов, в то время как LaTeX – для подготовки печатного документа.

Теперь рассмотрим общий синтаксис языка LaTeX и познакомимся с базовой структурой tex-документа.

  • LaTeX-файл должен начинаться с команды \documentclass, задающей стиль оформления документа, например, \documentclass{article}. Аргумент команды article означает, что документ будет оформлен в соответствии с наиболее общими правилами оформления статей. При желании можно изменить (с незначительными оговорками) любой элемент макета документа.
  • Команда \documentclass поддерживает и другие классы, доступные «из коробки»: book (для оформления книг), report (для оформления отчетов – нечто среднее между book и article), proc (для оформления трудов конференций) и letter (для деловых писем со сложной структурой).
  • После команды \documentclass могут следовать команды, относящиеся ко всему документу. Далее с помощью окружения\begin{document}\end{document} (условимся называть его документарным окружением) указывается тело документа. В общем случае окружением называют сложные конструкции вида \begin{}\end{}.
  • Часть tex-файла между командой \documentclass и \begin{document}\end{document} называют преамбулой. Команды указанные после закрывающей скобки окружения документа \end{document} LaTeX проигнорирует.

В итоге наипростейший шаблон документа будет выглядеть так:

base_example.tex
        \documentclass{article}
% область преамбулы
\begin{document} % тело документа: начало
% текст
\end{document} % тело документа: конец
% команды в этой части документа не будут учитываться при сборке документа
    

Инструкции, управляющие макетом страницы и прочие настройки tex-документа, могут быть размещены и в преамбуле, но когда инструкций становится много, будет удобнее вынести их в отдельный стилевой файл с расширением *.sty. Позже стилевой файл можно будет подключить командой \usepackage{}, принимающей в качестве аргумента путь до этого файла.

Сам стилевой файл содержит импорты пакетов \RequirePackage{}, пользовательские команды \newcommand{}, псевдонимы математических операторов \DeclareMathOperator и прочие элементы кастомизации:

style_template.sty
        % начало стилевого файла
\RequirePackage[english,russian]{babel}
\RequirePackage[utf8]{inputenc}
\RequirePackage{amsmath, amsfonts, amssymb, latexsym}
\RequirePackage[
	left=2cm,
	right=2cm,
	top=2cm,
	bottom=2cm
		]{geometry}
... 
\newcommand{\str}[1]{cтр.~\pageref{#1}}
\newcommand{\strbook}[1]{стр.~{#1}}
...
\DeclareMathOperator*{\argmin}{arg\,min}
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\sign}{sign}
\DeclareMathOperator*{\const}{const}
...
    

С подключенным стилевым файлом tex-документ будет выглядеть так:

base_example_with_usepackage.tex
        \documentclass{article}
\usepackage{style_template} % подключаем стилевой файл style_template.sty, расположенный в той же директории, что и tex-файл
\begin{document}
% текст
\end{document}
    

Аргумент команды \usepackage может включать не только имя стилевого файла, но и путь до него относительно корня проекта (без указания расширения файла).

Далее предполагается, что все настройки макета документа описаны в стилевом файле style_template.sty, который расположен в той же директории, что и tex-файл.

К сожалению, в настоящем руководстве нет возможности рассмотреть все элементы и тонкости подготовки LaTeX-файлов, но в github-репозитории доступен полный код рассматриваемого примера с пояснениями, включая опорный стилевой файл, адаптированный для работы с кириллицей и содержащий декоративные настройки окружений, которые могут пригодиться при подготовке сложноструктурных аналитических отчетов.

Разобравшись с базовыми структурными элементами tex-файла, можно сосредоточиться на содержательной части и перейти к наполнению документа.

Наберем в документарном окружении следующие строки:

simple_onepage_template.tex
        ...
\begin{document}

\title{Аналитический отчет по ...} % заголовок отчета
\author{\itshape Иванов И.И.} % автор работы
\date{} % просим LaTeX не указывать дату, так как будет
        % использован наш вариант оформления даты, описанный в стилевом файле
\maketitle % создает заголовок

\thispagestyle{fancy} % задает стиль страницы

В этой части можно разместить аннотацию к отчету. \TeX -- это издательская система компьютерной верстки, предназначенная для набора ...

\tableofcontents % создает оглавление

\section{Пример многострочной формулы}
    Для набора сложных многострочных формул используются различные окружения, например, окружение \texttt{multline}
	\begin{multline}
		F_{\zeta}(z)=P[\,\zeta\leqslant z\,] = \int\!\!\!\int_{x/y\leqslant z}f_X(x;n)f_Y(y;m)\,dxdy =\\ \dfrac{1}{2^{(n+m)/2}\Gamma(n/2)\Gamma(m/2)}\int\!\!\!\int_{x/y\leqslant z}x^{n/2-1}y^{m/2-1}\exp\left( -\frac{x}{2} \right) \exp\left( -\frac{y}{2} \right) \,\mathrm{d}x \, \mathrm{d}y.
	\end{multline}

\section{Пример группового размещения формул}

Несколько формул можно разместить в одной группе с помощью окружения \texttt{gather}
\begin{gather}
	\sum_{j \in \mathbf{N}} b_{ij} \hat{y}_{j} = \sum_{j \in \mathbf{N}} b_{ij}^\lambda \hat{y}_j + (b_{ii} - \lambda_i)\hat{y}_i \hat{y},\notag \\
	\det \mathbf{K}(t=1, t_1, \ldots, t_n) = \sum_{I \in \mathbf{n} } (-1)^{|I|} \prod_{i \in I} t_i \prod_{j \in I} (D_j + \lambda_j t_j) \det \mathbf{A}^{(\lambda)} (\, \overline{I} | \overline{I} \,) = 0,\tag{$a$} \\
	\mathbb{F} = \sum_{i=1}^{\left[ \frac{n}{2}\right] } \binom{ x_{i,i+1}^{i^2}}{ \left[ \frac{i+3}{3} \right]} {{\sqrt{\mu(i)^\frac{3}{2} (i^2-1)}} \over\displaystyle {\sqrt[3]{\rho(i)-2} + \sqrt[3]{\rho(i)-1}} }, \tag{$b$}
\end{gather}

\section{Простая однострочная формула}

Теорема Хинчина-Винера утверждает, что спектральная плотность мощности стационарного в широком смысле случайного процесса представляет собой преобразование Фурье от соответствующей автокорреляционной функции
\begin{equation*} % без нумерации
    S_{xx}(f) = \int\limits_{-\infty}^{\infty}  \, r_{xx} (\tau) e^{-j 2 \pi f \tau} \mathrm{d} \tau,\ \text{где}\ r_{xx}(\tau) = \mathbb{E}[\,x(t) \, x^{*}(t - \tau)\,].
\end{equation*}

\end{document}
    

Теперь можно вызвать компилятор PDFLaTeX через командную оболочку и передать ему имя tex-файла. Результат компиляции приведен на рисунке ниже.

Результат компиляции файла <code class="inline-code">analyt_report_template.tex</code>
Результат компиляции файла analyt_report_template.tex

Рассмотрим более подробно код файла analyt_report_template.tex.

  • В первых строках файла с помощью команд \title и \author мы объявляем заголовок отчета и имя автора работы соответственно, а с помощью команды \maketitleсоздаем заголовок.
  • Затем с помощью команды \date, вызванной без аргументов, подавляем вывод временной метки. Здесь для привязки ко времени будет использоваться специальная низкоуровневая командная вставка в стилевом файле style_template.sty (этот фрагмент кода приводится только для справки, так как конечному пользователю приложения нет необходимости вносить в стилевой файл изменения напрямую):
fragment_style_template.sty
        ... 
\def\@maketitle{
    \begin{flushright}
	\footnotesize\itshape
	Дата последней сборки документа:\\ \today\ в \currenttime
    \end{flushright}

    \begin{center}
	\let \footnote \thanks
	\begin{spacing}{1.5}
	    {\Large\bfseries\@title}
	\end{spacing}\vskip 1mm

	{\normalsize
	    \begin{tabular}[t]{l}
		\@author
	    \end{tabular}\par	
	}
    \end{center}
    \par
    \vskip 1.5em
}
...
    

Команда \thispagestyle задает стиль страницы, а команда \tableofcontents создает оглавление документа. С помощью команды \section создаются разделы документа высшего уровня (с учетом класса документа). Для того чтобы создать раздел более низкого уровня следующей ступени можно воспользоваться командой \subsection.

LaTeX обладает широким набором окружений для оформления математических конструкций произвольной сложности, однако здесь мы ограничимся рассмотрением только трех типов окружения: equation, multline и gather.

Как должно быть понятно из приведенного выше рисунка, equation используется для однострочных формул, multline – для многострочных, а gather – для группового размещения формул. Звездочка после имени окружения означает, что LaTeX не станет присваивать номера формулам, попавшим в это окружение.

При наборе формул используются специальные LaTeX-команды с названиями созвучными набираемому элементу, например, для того чтобы добавить в формулу знак суммы с нижним lowindex и верхним upindex индексом используется команда \sum_{lowindex}^{upindex}, чтобы вставить символ большой омеги – \Omega, а для вставки символа гамма потребуется \gamma и т.д.

Для быстрого поиска нужных математических LaTeX-команд, специальных символов, приемов оформления псевдокода и пр. удобно пользоваться компактным, но очень содержательным сборником Константина Воронцова «LaTeX 2e в примерах».

Прочие детали работы с издательской системой LaTeX можно выяснить из следующих работ:

Введение в Python-библиотеку Streamlit

Библиотека Streamlit – это простая, лаконичная и в тоже время очень мощная библиотека для прототипирования браузерных решений с графическим интерфейсом. Streamlit включает поддержку всех основных элементов стека, ориентированных на компьютерное зрение, машинное и глубокое обучение.

Установить библиотеку проще всего с помощью менеджера пакетов pip: pip install streamlit.

Запускается приложение командой streamlit run:

streamlit_run.sh
        $ streamlit run streamlit_simple_example.py

  You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8502 # <-- 
  Network URL: http://192.168.1.247:8502
    

После запуска сценария в браузере (http://localhost:8502) откроется вкладка с приложением. Завершить работу приложения можно, закрыв вкладку браузера и набрав Ctrl+C в командной оболочке.

В Streamlit реализован сравнительно небольшой набор «выразительных средств», но все элементы продуманы и покрывают значительную часть требований к «гибкому динамическому прототипу».

Начать работу со Streamlit можно с вводного руководства, которое подробно описывает все возможности библиотеки, включая Markdown-разметку, аудио и видео объекты, различные графические объекты (Bokeh, Altair, Plotly и др.), а также оптимизацию загрузки объемных наборов данных.

Ниже приводится пример использования библиотеки Streamlit для построения двух интерактивных графиков (на базе библиотеки Plotly) гауссовских процессов с автокорреляционной функцией экспоненциального типа.

streamlit_simple_example.py
        import streamlit as st
import math
import pandas as pd
from pandas import Series
import plotly.graph_objects as go
import numpy as np
import numpy.random as rnd

title_app = "Простой пример использования библиотеки Streamlit"
# чтобы на вкладке браузера отображалось имя приложения, а не имя файла
st.set_page_config(
    layout="wide",
    page_title=title_app,
    initial_sidebar_state="expanded",
)


def gauss_with_exp_acf_gen(
    *,
    sigma: float = 2,
    w_star: float = 1.25,
    delta_t: float = 0.05,
    N: int = 1000,
) -> np.array:
    """
    Описание
    --------
    Генерирует дискретную реализацию
    стационарного гауссовского ПСП
    с КФ экспоненциального типа

    Параметры
    ---------
    sigma : стандартное отклонение ординат ПСП.
    w_star : параметр модели ПСП.
    delta_t : шаг по времени.
    N : число отсчетов ПСП.

    Возвращает
    ----------
    xi : массив элементов ПСП с заданной КФ
    """
    gamma_star = w_star * delta_t
    rho = math.exp(-gamma_star)
    b1 = rho
    a0 = sigma * math.sqrt(1 - rho ** 2)

    xi = np.zeros(N)
    xi[0] = rnd.rand()
    x = rnd.randn(N)

    for n in range(1, N):
        xi[n] = a0 * x[n] + b1 * xi[n - 1]

    return xi


def main(N: int = 100):
    timestmp = np.arange(N)
    # временной ряд №1
    time_series_1 = gauss_with_exp_acf_gen(sigma=5, w_star=1.25, N=N)
    # временной ряд №2
    time_series_2 = gauss_with_exp_acf_gen(sigma=6.5, w_star=1.75, N=N)

    fig = go.Figure()

    fig.add_trace(
        go.Scatter(
            x=timestmp,
            y=time_series_1,
            name="Временной ряд (объект-1)",
            opacity=0.8,
            mode="lines",
            line=dict(
                color="#E84A5F",
            ),
        )
    )

    fig.add_trace(
        go.Scatter(
            x=timestmp,
            y=Series(time_series_1).rolling(window=7).mean(),
            name="Скользящее среднее (объект-1)",
            mode="lines",
            opacity=0.6,
            line=dict(
                color="#FF847C",
            ),
        )
    )

    fig.add_trace(
        go.Scatter(
            x=timestmp,
            y=time_series_2,
            name="Временной ряд (объект-2)",
            mode="lines",
            opacity=0.8,
            line=dict(
                color="#5E63B6",
            ),
        )
    )

    fig.add_trace(
        go.Scatter(
            x=timestmp,
            y=Series(time_series_2).rolling(window=7).mean(),
            name="Скользящее среднее (объект-2)",
            mode="lines",
            opacity=0.6,
            line=dict(
                color="#6EB6FF",
            ),
        )
    )

    fig.update_layout(
        title=dict(
            # text="<i>Временной ряд</i>",
            font=dict(
                family="Arial",
                size=18,
                color="#07689F",
            ),
        ),
        xaxis_title=dict(
            text="<i>Временная метка</i>",
            font=dict(
                family="Arial",
                size=13,
                color="#537791",
            ),
        ),
        yaxis_title=dict(
            text="<i>Продолжительность простоя, час</i>",
            font=dict(
                family="Arial",
                size=13,
                color="#537791",
            ),
        ),
        xaxis=dict(
            showline=True,
        ),
        yaxis=dict(
            showline=True,
        ),
        autosize=False,
        showlegend=True,
        margin=dict(
            autoexpand=False,
            l=70,
            r=10,
            t=50,
        ),
        legend=dict(
            orientation="v",
            yanchor="bottom",
            y=0.01,
            xanchor="right",
            x=0.99,
            font=dict(family="Arial", size=12, color="black"),
        ),
        plot_bgcolor="white",
    )

    st.plotly_chart(fig, use_container_width=True)


if __name__ == "__main__":
    main(N=350)
    

В этом примере к библиотеке Streamlit имеет отношение только:

  • функция st.set_page_config(), которая переопределяет имя вкладки браузера – отображается не имя файла, а имя приложения;
  • функция st.plotly_chart(), которая принимает сконфигурированный Plotly-объект и выводит его в окно браузера.
Результат работы сценария <code class="inline-code">streamlit_simple_example.py</code>
Результат работы сценария streamlit_simple_example.py

Прочие элементы сценария streamlit_simple_example.py играют лишь вспомогательную роль.

Пример-шаблон аналитического отчета

Предлагается в качестве примера, сочетающего приемы работы с библиотекой Streamlit (браузерный интерфейс приложения) и LaTeX-разметку (опорный tex-файл), рассмотреть подготовку отчета на тему «Оценка усталостной долговечности силовых элементов транспортных машин под воздействием стационарных гауссовских процессов с автокорреляционной функцией экспоненциально-косинусного семейства».

Важно подчеркнуть, что предлагаемый пример представляет собой расширяемый шаблон, т.е. содержит ключевые окружения для оформления математических формул, программных вставок, графических объектов и прочие наиболее востребованные компоненты, и может быть взят за основу для разработки более сложных документов.

Подробности реализации обсуждаемого решения можно узнать из github-репозитория, сейчас же кратко остановимся на нескольких нюансах.

Часто возникает необходимость выгрузить подготовленный с помощью Streamlit файл результатов (например, табличных объект Pandas), но сам Streamlit не предлагает никаких решений. Тем не менее это ограничение можно обойти с помощью следующей функции:

downloader_for_streamlit.py
        def text_downloader(multiline: str) -> NoReturn:
    """
    Принимает LaTeX-шаблон документа в виде многострочной строки и
    создает на странице ссылку для скачивания шаблона
    """
    OUTPUT_TEX_FILENAME = "base_template_for_latex.tex"
    
    b64 = base64.b64encode(multiline.encode()).decode()
    # создает ссылку для скачивания файла
    href = (f'<a href="data:file/txt;base64,{b64}" '
            f'download="{OUTPUT_TEX_FILENAME}">Скачать ...</a>')
    st.markdown(href, unsafe_allow_html=True)
    

Функция читает текстовый файл, переданный в виде строки, кодирует его с помощью стандарта base64 и передает тег-ссылку методу markdown. В итоге файл можно будет скачать, кликнув на созданную ссылку.

При наборе текстового шаблона для Python (latex_template_for_python.txt) – по сути файл представляет собой каркас документа с заглушками под строковую интерполяцию – важно помнить о синтаксических особенностях LaTeX. Дело в том, что в контексте строковой интерполяции фигурные скобки означают «место подстановки», а в контексте LaTeX – обязательный аргумент команды. То есть, чтобы Python корректно «прочитал» строку следует фигурные скобки, относящиеся к синтаксису LaTeX, удвоить.

В результате получится текстовый файл вида:

fragment_latex_template_for_python.txt
        \documentclass[
    11pt,
    a4paper,
    utf8,
]{{article}}

\usepackage{{style_template}}

\begin{{document}}
...
Усталостная долговечность по модели \eqref{{eq:miles}} составляет $ Y_{{NB}} = {Y_NB:.2f} $, сек.

\section{{Оценка усталостной долговечности по модели P.H. Wirsching и C.L.~Light}}
...
    

Ниже на рисунках приводится общий вид приложения.

Стартовая страница приложения
Стартовая страница приложения

Скачав подготовленный tex-файл в директорию проекта, останется только запустить компилятор (дважды!).

pdflatex_start.sh
        # для сборки каркаса
$ pdflatex base_template_for_latex.tex
# для вычисления конечных ссылок на страницы, формулы и пр.
$ pdflatex base_template_for_latex.tex

    

После сборки документа в рабочей директории проекта будет создан pdf-файл.

Выгрузка подготовленного LaTeX-шаблона
Выгрузка подготовленного LaTeX-шаблона
Результат работы <code class="inline-code">pdflatex base_template_for_latex.tex</code>. Фрагмент собранного аналитического отчета
Результат работы pdflatex base_template_for_latex.tex. Фрагмент собранного аналитического отчета

Чтобы развернуть приложение на свободной облачной платформе Streamlit, достаточно кликнуть на Deploy this app в правой верхней части панели запущенного приложения, как изображено на рисунке. Однако предварительно необходимо зарегистрироваться на Streamlit и отправить заявку на допуск к ресурсам (обычно обработка заявки занимает несколько дней).

Развертывание приложения на облачной платформе Streamlit
Развертывание приложения на облачной платформе Streamlit

После успешного развертывания на платформе приложение будет доступно конечному пользователю по ссылке, как в данном случае.

Заключение

Из руководства вы узнали:

  • что собой представляет система компьютерной вёрстки LaTeX, где найти ее дистрибутивы и пакеты, как правильно читать документацию, как начать работать с системой;
  • как разрабатывать гибкие, масштабируемые шаблоны документов с помощью языка разметки TeX/LaTeX;
  • как использовать приемы разработки приложений с помощью Python-библиотеки Streamlit;
  • как может выглядеть пример связки «LaTeX + Streamlit»;
  • и, наконец, как развернуть приложение на облачной платформе Streamlit.

Полезные источники:

Связные материалы с платформы Proglib:

03
Июл
2021

📊 Как стать разработчиком BI-систем в 2021 году

Обзор профессии будущего. Разбираемся, зачем нужны разработчики бизнес-ориентированных аналитических систем.

Еще несколько десятков лет назад, из-за отсутствия глобальной конкуренции, компаниям не нужно было анализировать свою работу, прогнозируя будущий спрос на продукцию. Чтобы успешно вести дела, им было достаточно наличия интересной идеи, квалифицированных сотрудников и сильного делового чутья.

В наши дни все намного сложнее. Необходимо учитывать разнообразие запросов и нужд потребителя, ведь основа любого успешного предприятия – удовлетворение желаний клиента. Если клиентов несколько, подобрать им нужное предложение не составит большого труда. Однако, если их тысячи, чтобы угодить каждому, необходимо грамотно проанализировать данные.

Данные правят миром, но информация в необработанном виде не представляет ценности из-за сложности восприятия. Бизнесу необходим инструмент, помогающий понять потребности клиентов, а также способные разрабатывать и поддерживать его специалисты.

Что такое Business Intelligence?

Набор процессов, архитектур и технологий для преобразования необработанных данных в способствующую прибыльным бизнес-действиям значимую информацию, называется Business Intelligence (BI). Данные обрабатываются специальным программным обеспечением, предоставляющим пользователю подробную информацию о характере бизнеса на основании созданных отчетов, сводок, карт, графиков и диаграмм. Business Intelligence помогает аналитикам принимать решения, основанные на актуальных сведениях и исторических фактах.

Кто такой разработчик Business Intelligence?

Разработчики систем бизнес-аналитики создают и поддерживают решения, используемые для руководства бизнес-стратегиями. Это инженеры, занимающиеся программной обработкой данных и подготавливающие их для анализа. Компаниям нужны технические специалисты, способные упростить ценную информацию. Они поддерживают, отлаживают и при необходимости восстанавливают специальный софт.

Разработчики систем бизнес-аналитики выполняют следующие функции:

  1. Создание и обновление BI-решений.
  2. Разработка технических запросов.
  3. Разработка точных поисковых запросов.
  4. Перевод данных в простые бизнес-термины и форматы для использования в других отделах.
  5. Работа с бизнес-аналитиками и другими Data-разработчиками.
  6. Создание визуальных документов для представления данных.
  7. Документирование процессов для будущего использования.
  8. Устранение неполадок моделирования бизнес-аналитики и разработка решений.
  9. Резервное копирование и безопасное хранение данных.

Что надо знать?

Давайте разберемся с технологиями и программным обеспечением, используемым разработчиками систем бизнес-аналитики:

  1. Теория вероятностей и математическая статистика.
  2. Управление базами данных. Язык запросов SQL.
  3. Язык программирования Python (pandas, numpy, matplotlib).
  4. Технология обработки данных OLAP (online analytical processing).
  5. Принцип работы с ETL.
  6. Продуктовая аналитика и BI-инструменты (Tableau, Power BI).
  7. Apache Airflow.
  8. Работа с хранилищем данных SQL Azure.
  9. Git.
  10. Linux.
  11. Технический английский язык.
Важные «мягкие» навыки (soft skills), необходимые в профессии
Умение работать в команде, дисциплинированность, выносливость и адаптируемость к изменяющимся обстоятельствам, любознательность и способность в краткие сроки усвоить большой объем новой информации. Хороший разработчик должен уметь объяснять сложные концепции простым языком, для более продуктивного диалога с ответственными, за принятие решений людьми.

Наиболее популярные платформы для анализа данных – Tableau и Power BI

Power BI – набор инструментов для визуализации аналитических бизнес-данных от Microsoft, структурирующий полученную из различных источников информацию. В его стартовый пакет входит несколько коннекторов, служб (Power BI desktop, Power BI SaaS) и мобильное приложение для всех популярных платформ. Power BI desktop применяется для создания отчетов, Power BI SaaS (Software as a Service) публикует эти отчеты, а мобильное приложение используется для их мониторинга. Платформа позволяет подключаться к различным неструктурированным файлам, базам данных SQL, облаку Azure и к веб-платформам, вроде Facebook, Google Analytics и Salesforce. Скачать последнюю версию программы можно по ссылке.

Вот несколько полезных ссылок для разработчиков Power BI:

Популярный инструмент информационной визуализации Tableau обладает мощной функциональностью для обнаружения и исследования данных. Он позволяет найти ответы на важные вопросы за секунды. Платформа не требует выполнения сложных сценариев – любой аналитик может работать с ней благодаря нехитрому интерфейсу.

Tableau предлагает бизнес-решения для всех отраслей, отделов и сред данных. Ниже приведен ряд преимуществ инструмента:

  1. Аналитическая скорость. Не требуется высокий уровень знаний в области программирования, почти все делается перетаскиванием.
  2. Легкое обслуживание. Не требуется сложная настройка программного обеспечения. Популярную десктопную версию легко установить.
  3. Визуальное обнаружение. Использование инструментов визуализации (цвета, линии тренда, диаграммы и графики).
  4. Возможность смешивать разнообразные наборы данных (реляционные, неструктурированные и обработанные источники данных) в реальном времени без дорогостоящих предварительных затрат на интеграцию.
  5. Архитектура Agnostic. Tableau работает на всех типах устройств, пользователю можно не беспокоиться о требованиях к оборудованию или программному обеспечению.
  6. Совместная работа в реальном времени. Сортировка и обсуждение данных, возможность встраивать интерактивную панель управления в порталы SharePoint и Salesforce.
  7. Источник централизованных данных – сервер Tableau предоставляет централизованное место для управления всеми опубликованными источниками данных организации.

Бесплатную персональную версию Tableau Desktop можно загрузить отсюда.

Полезные ссылки для разработчиков Tableau:

Сколько зарабатывает BI-разработчик?

Потребность в BI-разработчиках испытывают большинство крупных и средних компаний вне зависимости от сферы деятельности. Уровень заработной платы и возможности для карьерного роста у представителей этой профессии довольно высоки. Зарплата BI-разработчика зависит от его знаний, умений и опыта работы. Вот несколько актуальных вакансий , взятых с портала по поиску работы hh.ru:




Стоит отметить, что работодатели ищут уже состоявшихся специалистов. У начинающих разработчиков, зарплата будет значительно ниже. Похожая ситуация наблюдается и за рубежом. Вот несколько предложений о работе, опубликованных на сайте glassdoor.com в этом месяце:


***

Существует два пути в профессию разработчика Business Intelligence. Первый – это самообразование. Он непростой и длительный: без опытного наставника освоить специальность будет сложно. Главный минус этого варианта – недостаток практики при большом объеме теории. Второй путь – онлайн-курсы. Рекомендуем обратить внимание факультет BI-разработки образовательного портала GeekBrains. Под руководством практикующих специалистов вы сможете изучить все нюансы профессии, отточите навыки на практике и создадите 5 проектов для портфолио. Сделайте правильный выбор!

29
Июн
2021

Инструменты, которыми пользуются Java-программисты в повседневной работе

Подборка инструментов, которые являются общими для львиной доли Java-разработчиков, а некоторые — и вовсе для большинства backend-программистов.
— Читать дальше «Инструменты, которыми пользуются Java-программисты в повседневной работе»

24
Июн
2021

Лучшие практики стилизованных компонентов React

Приведённые в статье советы и рекомендации должны помочь вам грамотно использовать стилизованные компоненты React.
— Читать дальше «Лучшие практики стилизованных компонентов React»

22
Июн
2021

🛠 Лучшие инструменты No-Code для разработчиков в 2021 году

Существует множество инструментов no-code, но выбрать правильные сложно. В небольшом обзоре мы выделили лучшие продукты для разработчиков, которые будут активно использоваться в 2021 году.

22
Июн
2021

🛠 Лучшие инструменты No-Code для разработчиков в 2021 году

Существует множество инструментов no-code, но выбрать правильные сложно. В небольшом обзоре мы выделили лучшие продукты для разработчиков, которые будут активно использоваться в 2021 году.

21
Июн
2021

Free Dev Stuff — сборник бесплатных инструментов для разработчиков

Тут есть как «попсовые» варианты, так и те, о которых большинство даже не слышало.
— Читать дальше «Free Dev Stuff — сборник бесплатных инструментов для разработчиков»

17
Июн
2021

🎮 Разработка игр на Unity: 10 важных советов для начинающих

Unity – одна из самых популярных платформ для создания игр, а также приложений дополненной и виртуальной реальности. Вы точно слышали о таких продуктах, как Rust, PokemonGo или Firewatch. Они стали культовыми и создавали их именно в Unity. Разбираемся, на что нужно обратить внимание осваивающему движок с нуля новичку.

1. Освойте необходимые для старта навыки

Для начала работы в Unity вам нужно знать хотя бы один из перечисленных языков программирования: C#, JavaScript или Boo. Будет отлично, если вы владеете еще и 3Ds max. Это сильно вам поможет в написании игры.

2. Изучите основы дизайна

Отличный пользовательский опыт (UX) невероятно важен для создания приятного геймплея. Игроков могут расстроить меню и интерфейсы, которые слишком сложны для навигации, а также чрезмерно или недостаточно проработаны. Лучше всего, чтобы все было просто, интуитивно понятно и соответствовало внешнему виду вашей игры.

Независимо от того, создаете ли вы мобильную гипер-казуальную или полностью захватывающую 3D-игру, правильные звуки в нужное время являются важной частью игрового процесса. Звуки могут даже служить неявным руководством для пользователя, помогая ему перемещаться по уровням или давая подсказки о результатах действий персонажа. Самое главное, звуковое оформление задает настроение и атмосферу вашей игры.

3. Освойте инструменты (плагины) для разработки игр

Для себя я выделил ТОП-3 полезных каждому разработчику инструмента:

  • Graphy – это идеальный, простой в использовании и многофункциональный счетчик кадров в секунду, монитор статистики и отладчик для вашего проекта на Unity. Отладчик позволяет вам установить одно или несколько условий, выполнение которых приведет к желаемым последствиям, таким как снимок экрана, приостановка работы редактора, печать сообщения на консоль и т. д. Можно даже вызвать метод из собственного кода.
  • Lunar Unity Mobile Console – это высокопроизводительная и легкая в управлении консоль тестирования и отладки Unity для iOS/Android.
  • Odin Inspector and Serializer – единственный полностью платный плагин в топе, но он того стоит. OdinSerializer очень хорошо сравнивается со многими популярными библиотеками сериализации с точки зрения производительности и распределения мусора, обеспечивая при этом превосходный набор функций для использования в Unity. Графики производительности в этом разделе профилируются в двоичном формате.

4. Освойте Blender и Maya


Blender и Maya – наиболее мощные из доступных инструментов. Они занимают ведущие позиции в графике и анимации. Эти приложения повышают гибкость игровой разработки и в конечном итоге помогают сделать игру качественнее. Для самого движка Unity эти приложения очень важны.

5. Подучите терминологию

Индустрия игр достаточно быстро развивается, и в сфере их разработки давно появилась собственная терминология. Например, retargeting – это применение созданной для одной модели анимации к другой модели, а rigging – процесс построения скелетной иерархии сочленений костей для вашего меша (что такое «меш», попробуйте узнать сами). Для ознакомления с профессиональным жаргоном стоит прочесть «Unity Руководство: Словарь терминов анимации и Mecanim».

6. Учтите распространенные ошибки новичков


Даже у самых опытных разработчиков случаются ошибки. Выделим несколько из них:

  1. недооценка фазы планирования;
  2. работа с неоптимизированными моделями;
  3. построение взаимозависимой архитектуры кода;
  4. игнорирование потерь производительности;
  5. игнорирование проблем со сборкой мусора;
  6. отсутствие оптимизации использования памяти и хранилища;
  7. общие ошибки физики;
  8. тестирование всей функциональности вручную.

Чтобы таких проблем не возникало, воспользуйтесь советами одной из наших статей.

7. Используйте обучающие материалы для новичков

Из обучающих материалов по Unity я порекомендую книгу «Unity 3.x Game Development Essentials». В ней вы найдете нужную для создания игры с нуля информацию.


Ваш игрок оказывается на необитаемом острове, ему необходимо спастись и для этого он выполняет различные задания. Игру можно пройти за пару минут, однако ее создание занимает намного больше времени. Книга содержит очень подробное руководство по написанию игры с нуля. Издание англоязычное, так что я дам читателям еще один факультативный совет: учите английский, потому что в геймдеве без него никуда. Впрочем, в этой книге несложно интуитивно догадаться, о чем идет речь, поскольку написана она без особых премудростей.

8. Подумайте о маркетинге и рекламе

Обойтись без этого невозможно: маркетинг очень важен. Чтобы люди играли в вашу игру, они должны знать о существовании продукта. К счастью, есть много простых способов продать свою разработку. Использование социальных сетей – один из способов, и он может быть абсолютно бесплатным. Публикуйте скриншоты и видео, используйте соответствующие хэштеги и проявите себя в качестве дизайнера видеоигр. Если вы связаны с людьми, которые активно продвигают игры или участвуют в их разработке, и у вас есть значительная база подписчиков, вы можете получить много инсталляций.

9. Изучите мнения экспертов

В широком мире разработки игр информации предостаточно. Если вы не будете осторожны, вы можете оказаться в море информации настолько глубоком, что вам будет трудно держать голову над водой. Обучающие видеоролики-отличный способ узнать новую информацию, не чувствуя себя подавленным. Мы собрали пять лучших учебных пособий по Unity от создателей YouTube, чтобы помочь вам ознакомиться с инструментами и мышлением разработки игр. Смотрите, слушайте и учитесь у профессионалов Unity. Чтобы начать разработку, вам необходимо иметь хотя бы базовые знания программирования. В частности, для движка Unity нужно знание языка C#. То есть должно быть понимание основ ООП, основных структур данных. Если говорить про среды разработки, то это могут быть как MS Visual Studio, так и другие сторонние решения, где вам удобно будет писать код.
Александр Саваткин, Senior Developer в компании Alawar

10. Пройдите обучение на курсах

Если вы только начинаете путь в профессии, обратите внимание на курс факультета разработки игр на Unity образовательной онлайн-платформы GeekBrains. В нем уделяется большое внимание практике, а студенты в процессе обучения реализуют 2D- и 3D-игры разных жанров для ПК и смартфонов. С таким багажом можно идти на собеседование с потенциальным работодателем, тем более платформа предлагает студентам бесплатные карьерные консультации и помогает подобрать соответствующие их навыкам вакансии.

15
Июн
2021

Курс «Python и инструменты машинного обучения»

Обучение работе с аналитическими инструментами в Python от Московского физико-технического института. 2 месяца практических онлайн-вебинаров и сертификат о повышении квалификации в финале.
— Читать дальше «Курс «Python и инструменты машинного обучения»…

14
Июн
2021

Серебряные пули против оборотней или чем пользуется Full Stack Developer

Подборка технологий и инструментов, которые использует в своей работе Full Stack разработчик. От фреймворков до плагинов для IDE.
— Читать дальше «Серебряные пули против оборотней или чем пользуется Full Stack Developer»

10
Июн
2021

🎨 11 лучших поисковых систем по изображениям, которые нельзя пропустить

Иногда найти необходимую картинку – то еще занятие. Читайте подборку лучших поисковиков, которые предложат вам только самые лучшие и качественные изображения.

Перевод публикуется с…

01
Июн
2021

Конференция WWDC 2021

На Всемирной конференции разработчиков Apple представят последние обновления и дадут участникам возможность пообщаться с ведущими инженерами компании.
— Читать дальше «Конференция WWDC 2021»

15
Май
2021

🔀 SDLC модели: как выбрать правильный подход к разработке и не завалить проект

В этой статье Вадим Кулага, проектный менеджер EPAM Anywhere, расскажет об основных моделях разработки программного обеспечения (SDLC), их плюсах и минусах, а также о реальных примерах их использования.

14
Май
2021

🛠 10 забавных расширений VS Code для разработчиков

В сети есть много подборок полезных для программистов расширений VS Code. Мы рассмотрим те из них, которые повысят вашу производительность и эффективность. Они позволяют делать множество вещей – от визуализации данных до изучения JavaScript…

06
Май
2021

Конференция Highload++ 2021

Большая конференция для разработчиков высоконагруженных систем. Доклады, митапы, нетворкинг, уникальный опыт и ноу-хау от экспертов, задающих тренды.
— Читать дальше «Конференция Highload++ 2021»

20
Апр
2021

☕ Мобильные приложения для изучения Java

Рассматриваем самые популярные на рынке инструменты обучения языку программирования Java, чтобы вы могли выбрать для себя оптимальный.

Для изучения программирования на Java необязательно сидеть за компьютером в офисе или штудировать многостраничную бумажную документацию. При помощи мобильных приложений можно осваивать язык даже во время прогулки или в общественном транспорте. В небольшом обзоре мы расскажем читателям о самых популярных среди них.


SoloLearn

Языки программирования: Java, C#, SQL, PHP, C ++, Python, JavaScript, Ruby, Swift, HTML, CSS.

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: нет, переведен только интерфейс.

Если вы новичок в программировании, приложение SoloLearn поможет наработать базу для старта. Поначалу придется только перетаскивать фрагменты кода и выполнять быстрые задания.

Это программа с интуитивно понятным интерфейсом и четырьмя вкладками: «Learn» – бесплатные уроки по кодированию, «Play» – тут можно сразиться с другими пользователями в онлайн-битвах, «Code» – встроенная IDE, «Discuss» – место, где опытные программисты дают советы по выполнению задания и отвечают на вопросы новичков.

Преимущества:

  • Заинтересованное и активное сообщество;
  • Сотни бесплатных уроков;
  • Подходит для новичков;

Недостатки:

  • Не обучает навыкам программирования глубоко;
  • Проблемы с доступностью: шрифт самого большого размера плохо читается;
  • Сертификат SoloLearn не приветствуется работодателями.

Стоимость: приложение и доступ к платформе бесплатны (есть реклама и встроенные покупки от 199 рублей).


Programming Hub

Языки программирования: Java, C, C ++, C #, Swift, Javascript, Python, HTML, CSS и др.

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: нет.

Programming Hub – это приложение для обучения начинающих разработчиков. Курсы образовательной платформы снабжены видеороликами и подробными комментариями, чтобы пользователи могли понять основные постулаты Java.

После прохождения программы обучающиеся научаться создавать приложения с нуля. У платформы есть встроенный компилятор и IDE, чтобы дать возможность новичкам наработать большой практический опыт.

Преимущества:

  • Настраиваемый пользовательский интерфейс;
  • Встроенный компилятор;
  • Курсы углубленного обучения для Java-разработчиков среднего уровня.

Недостатки:

  • Абонентская плата;
  • Мало базовых практических задач для новичков;
  • Колеблющаяся скорость загрузки.

Стоимость:

Приложение бесплатно, но для полноценного обучения нужна PRO-подписка (от 459 рублей в месяц через встроенные покупки).

CodeGym

Языки программирования: Java.

Поддерживаемые платформы: Android (есть русская версия того же разработчика).

Обучение на русском языке: в основной версии нет, существует отдельное приложение.

Минимум теории и очень много практики. Получаса занятий в день на CodeGym будет достаточно, чтобы заметить ощутимый прогресс через несколько нескольких недель.

CodeGym – самый многообещающий мобильный курс по Java на рынке. В нем около 600 уроков по программированию и 1200 викторин. Учебные материалы помогут разработчикам подтянуть знания и прокачать имеющиеся навыки.

Преимущества:

  • Более 1200 задач по программированию на Java;
  • Пользовательская мобильная IDE;
  • К окончанию курса у вас будет более 500 часов практического опыта;
  • Сильное сообщество разработчиков на Java;
  • Виртуальные помощники, которые следят за вашим прогрессом.

Недостатки:

  • Обучение работе с эмулятором требует времени и существенных усилий;
  • Студенты должны вводить код вручную;

Стоимость: доступ к платформе бесплатен, но в русскоязычной версии приложения есть встроенные покупки (от 85 рублей).


Enki

Что можно изучить: SQL, JavaScript, Python, Java, Data Science, Git, CSS, HTML, CompSci, Linux, Blockchain.

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: нет.

Задания здесь небольшие и интересные. В приложении можно настроить индивидуальный график обучения и отслеживать прогресс прохождения тестов и практических заданий при помощи встроенной панели.

Enki – это довольно удобное для новичков приложение, позволяющее изучать программирование на Java (пользователю доступны исчерпывающие материалы со всеми основными темами). Чтобы начать, необходимо знать техническую терминологию на базовом уровне.

Преимущества:

  • Веселые игры и викторины для проверки понимания концепций разработки на Java;
  • Углубленные уроки кодирования.

Недостатки:

  • Множество ошибок и проблем с производительностью;
  • Для доступа к значительной части контента нужно оплатить подписку;
  • Низкая скорость загрузки.

Стоимость:

Базовая версия Enki бесплатна, однако для получения доступа ко всем теоретическим материалам и практическим заданиям необходимо оплатить премиум-подписку от 199 рублей в месяц через покупки в приложении.


Easy Coder

Языки программирования: Java.

Поддерживаемые платформы: Android.

Обучение на русском языке: нет.

В приложении вы можете проверить свои навыки и перенять реальный практический опыт у профессионалов. Наличие интегрированной среды разработки и большого количества всевозможных тестов поможет быстро прокачать навыки.

Easy Coder – приложение для изучения языка при помощи видеоматериалов. В нем можно наблюдать, как матерые разработчики кодят на Java, подробно объясняя каждое действие. Такой подход поможет новичку быстрее окунуться в мир программирования и научиться решать простые задачи.

Преимущества:

  • Интерактивный пользовательский интерфейс;
  • Различные виды учебных материалов: видеоролики, викторины и задания;
  • Подходит для новичков и разработчиков среднего уровня.

Недостатки:

  • Некоторые видео не имеют субтитров.

Стоимость:

Приложение бесплатное, но в нем есть встроенные покупки (от 179 рублей) и система испытаний для получения доступа к премиум-контенту.


Encode

Языки программирования: Java, Python, JavaScript, HTML, CSS.

Поддерживаемые платформы: Android.

Обучение на русском языке: нет.

Лишь усвоив основные концепции уроков, вы сможете перейти к более сложным материалам. Платформа также имеет автономный режим: начинающие разработчики могут изучать и улучшать свои навыки программирования без подключения к интернету.

Encode – это приложение, которое обучает новичков программированию на Java, уделяя основное внимание разработке под Android. Чтобы перейти на следующий уровень обучения, пользователь должен решать практические задачи.

Преимущества:

  • Интуитивно понятный пользовательский интерфейс;
  • Автономный режим;
  • В учебных материалах использован реальный код.

Недостатки:

  • Нет активного сообщества пользователей;
  • Отсутствуют углубленные курсы по программированию;
  • Ограниченное количество уроков.

Стоимость:

Приложение и доступ к базовому набору материалов бесплатны. Есть платный контент (цена подписки через покупку в приложении – 389 рублей).


Codecademy

Языки программирования: Python, JavaScript, SQL, Java, HTML, CSS.

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: нет.

Программа предлагает разные курсы в зависимости от варианта использования языка, будь то разработка веб-интерфейса, создание мобильных приложений или программного обеспечения для настольных систем.

Codecademy может похвастаться одним из крупнейших сообществ разработчиков, насчитывающим более 26 миллионов активных участников. Есть обширный пакет бесплатных уроков по Java, а при наличии премиум-аккаунта вы сможете работать с личным помощником, который будет проверять каждое задание.

Хотя платформа не особенно интерактивна, она находит надежные способы мотивировать пользователей, присваивая им значки и открывая дополнительный контент по мере повышения уровня.

Преимущества:

  • Отличная документация;
  • Индивидуальная помощь;
  • Большое количество курсов по Java и другим языкам программирования.

Недостатки:

  • Проблемы с производительностью приложения;
  • Медленная загрузка;
  • Попадаются неправильные ответы на вопросы;
  • Курсы по большей части не бесплатны;
  • Сертификат не выдается.

Стоимость:

Приложение бесплатно, в нем также отсутствуют встроенные покупки. За доступ к базовым курсам платить не нужно, но тарифный план PRO стоит от $19,99 в месяц. Личный помощник обойдется уже в $500 за месяц.

Learn Java Programming

Языки программирования: Java.

Поддерживаемые платформы: Android.

Обучение на русском языке: нет.

Learn Java Programming – это набор руководств по Java Core. Рядом с каждой концепцией есть объясняющий теоретические основы комментарий с практическими примерами и фрагментами реального кода.

Вы можете поделиться статьями с друзьями или одноклассниками. Все учебные материалы доступны в автономном режиме – вы можете скачать их в виде PDF-файла.

Преимущества:

  • Есть материал для новичков и специалистов среднего уровня;
  • Автономный доступ к учебным материалам.

Недостатки:

  • Нет интерактивности, викторин или IDE;
  • Пользователи неоднократно сообщали о проблемах с производительностью приложения;
  • Платформа не предлагает реальных практических проблем.

Стоимость:

Приложение и доступ к учебной платформе бесплатны, но есть возможность приобретения коммерческого контента через встроенные покупки (цена от 499 рублей).

Java Deep Learning: Core Java

Языки программирования: Java.

Поддерживаемые платформы: Android.

Обучение на русском языке: нет.

Хотя Java Deep Learning ориентирован на новичков, пользователи должны иметь базовое представление о языке, чтобы комфортно пройти обучение. Контент платформы очень разнообразен. Например, на вкладке «Интервью» разработчики могут увидеть сотни вопросов, которые обычно задают на собеседованиях.

Приложение помогает разработчикам повысить уровень владения Java для прохождения собеседований или для личных проектов. В зависимости от цели обучения Java Deep Learning предлагает ученикам индивидуальные программы.

Преимущества:

  • Углубленное освещение различных аспектов языка программирования;
  • Программа обучения охватывает интерфейсы Java.lang, Java.io и Java.ui;
  • Есть встречающиеся на собеседованиях вопросы с ответами.

Недостатки:

  • Орфографические ошибки;
  • Требуются предварительные условия для написания кода.

Стоимость:

Приложение и доступ к платформе бесплатны, но есть реклама.


Udemy

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: есть.

Хотя крупнейшая в мире платформа для онлайн-обучения не специализируется на Java, там можно найти десятки интересных курсов для разработчиков. Среди них есть варианты с практическими задачами, текстовые лекции и видео-комментарии. Некоторые курсы публикуются известными в отрасли профессионалами.

Преимущества:

  • Широкий выбор курсов;
  • Удобный интерфейс и возможность работать в своем темпе;
  • Виджеты для проверки правильности кода;
  • Встроенная IDE, поддерживается интерфейс командной строки.

Недостатки:

  • Каждый может опубликовать курс – качество учебных материалов часто не на высоте;
  • Большой разброс цен и высокие скидки мешают пользователям адекватно оценить предлагаемый продукт;
  • Недостоверная система оценки – высокий рейтинг курса не гарантирует его качества;
  • Сертификаты Udemy не ценятся работодателями.

Стоимость:

Есть платные и бесплатные курсы, в т.ч. на русском языке. Сервис обещает возврат денег в течение 30 дней, но если вы загрузили весь контент курса, с этим могут возникнуть проблемы.

Заключение

Использование мобильных приложений упрощает доступ к учебным материалам и делает процесс освоения Java более доступным. На рынке нет недостатка в инструментах, которые помогут вам заложить прочную основу для дальнейшего знакомства с одним из самых популярных языков программирования. Скачивайте, пробуйте и выбирайте. Надеемся, что наш обзор был вам полезен.

***

Главная проблема популярных зарубежных платформ онлайн-образования – отсутствие обучения на русском языке или недостаточно высокое качество русскоязычных материалов. Опытные программисты как правило знают английский, но для многих новичков это серьезная проблема. Если вы только начинаете свой путь в профессии, обратите внимание на курс факультета Java-разработки онлайн-академии GeekBrains. За 12 месяцев занятий с практикующими преподавателями из крупнейших российских технологических компаний вы освоите основы языка или систематизируете уже имеющиеся знания. Успешно завершив программу обучения, вы добавите к своему портфолио 5 реализованных проектов и получите помощь в трудоустройстве от квалифицированных HR-специалистов академии.

20
Апр
2021

☕ ТОП-10 мобильных приложений для изучения Java

Рассматриваем самые популярные на рынке инструменты обучения языку программирования Java, чтобы вы могли выбрать для себя оптимальный.

Для изучения программирования на Java необязательно сидеть за компьютером в офисе или штудировать многостраничную бумажную документацию. При помощи мобильных приложений можно осваивать язык даже во время прогулки или в общественном транспорте. В небольшом обзоре мы расскажем читателям о самых популярных среди них.


SoloLearn

Языки программирования: Java, C#, SQL, PHP, C ++, Python, JavaScript, Ruby, Swift, HTML, CSS.

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: нет, переведен только интерфейс.

Если вы новичок в программировании, приложение SoloLearn поможет наработать базу для старта. Поначалу придется только перетаскивать фрагменты кода и выполнять быстрые задания.

Это программа с интуитивно понятным интерфейсом и четырьмя вкладками: «Learn» – бесплатные уроки по кодированию, «Play» – тут можно сразиться с другими пользователями в онлайн-битвах, «Code» – встроенная IDE, «Discuss» – место, где опытные программисты дают советы по выполнению задания и отвечают на вопросы новичков.

Преимущества:

  • Заинтересованное и активное сообщество;
  • Сотни бесплатных уроков;
  • Подходит для новичков;

Недостатки:

  • Не обучает навыкам программирования глубоко;
  • Проблемы с доступностью: шрифт самого большого размера плохо читается;
  • Сертификат SoloLearn не приветствуется работодателями.

Стоимость: приложение и доступ к платформе бесплатны (есть реклама и встроенные покупки от 199 рублей).


Programming Hub

Языки программирования: Java, C, C ++, C #, Swift, Javascript, Python, HTML, CSS и др.

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: нет.

Programming Hub – это приложение для обучения начинающих разработчиков. Курсы образовательной платформы снабжены видеороликами и подробными комментариями, чтобы пользователи могли понять основные постулаты Java.

После прохождения программы обучающиеся научаться создавать приложения с нуля. У платформы есть встроенный компилятор и IDE, чтобы дать возможность новичкам наработать большой практический опыт.

Преимущества:

  • Настраиваемый пользовательский интерфейс;
  • Встроенный компилятор;
  • Курсы углубленного обучения для Java-разработчиков среднего уровня.

Недостатки:

  • Абонентская плата;
  • Мало базовых практических задач для новичков;
  • Колеблющаяся скорость загрузки.

Стоимость:

Приложение бесплатно, но для полноценного обучения нужна PRO-подписка (от 459 рублей в месяц через встроенные покупки).

CodeGym

Языки программирования: Java.

Поддерживаемые платформы: Android (есть русская версия того же разработчика).

Обучение на русском языке: в основной версии нет, существует отдельное приложение.

Минимум теории и очень много практики. Получаса занятий в день на CodeGym будет достаточно, чтобы заметить ощутимый прогресс через несколько нескольких недель.

CodeGym – самый многообещающий мобильный курс по Java на рынке. В нем около 600 уроков по программированию и 1200 викторин. Учебные материалы помогут разработчикам подтянуть знания и прокачать имеющиеся навыки.

Преимущества:

  • Более 1200 задач по программированию на Java;
  • Пользовательская мобильная IDE;
  • К окончанию курса у вас будет более 500 часов практического опыта;
  • Сильное сообщество разработчиков на Java;
  • Виртуальные помощники, которые следят за вашим прогрессом.

Недостатки:

  • Обучение работе с эмулятором требует времени и существенных усилий;
  • Студенты должны вводить код вручную;

Стоимость: доступ к платформе бесплатен, но в русскоязычной версии приложения есть встроенные покупки (от 85 рублей).


Enki

Что можно изучить: SQL, JavaScript, Python, Java, Data Science, Git, CSS, HTML, CompSci, Linux, Blockchain.

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: нет.

Задания здесь небольшие и интересные. В приложении можно настроить индивидуальный график обучения и отслеживать прогресс прохождения тестов и практических заданий при помощи встроенной панели.

Enki – это довольно удобное для новичков приложение, позволяющее изучать программирование на Java (пользователю доступны исчерпывающие материалы со всеми основными темами). Чтобы начать, необходимо знать техническую терминологию на базовом уровне.

Преимущества:

  • Веселые игры и викторины для проверки понимания концепций разработки на Java;
  • Углубленные уроки кодирования.

Недостатки:

  • Множество ошибок и проблем с производительностью;
  • Для доступа к значительной части контента нужно оплатить подписку;
  • Низкая скорость загрузки.

Стоимость:

Базовая версия Enki бесплатна, однако для получения доступа ко всем теоретическим материалам и практическим заданиям необходимо оплатить премиум-подписку от 199 рублей в месяц через покупки в приложении.


Easy Coder

Языки программирования: Java.

Поддерживаемые платформы: Android.

Обучение на русском языке: нет.

В приложении вы можете проверить свои навыки и перенять реальный практический опыт у профессионалов. Наличие интегрированной среды разработки и большого количества всевозможных тестов поможет быстро прокачать навыки.

Easy Coder – приложение для изучения языка при помощи видеоматериалов. В нем можно наблюдать, как матерые разработчики кодят на Java, подробно объясняя каждое действие. Такой подход поможет новичку быстрее окунуться в мир программирования и научиться решать простые задачи.

Преимущества:

  • Интерактивный пользовательский интерфейс;
  • Различные виды учебных материалов: видеоролики, викторины и задания;
  • Подходит для новичков и разработчиков среднего уровня.

Недостатки:

  • Некоторые видео не имеют субтитров.

Стоимость:

Приложение бесплатное, но в нем есть встроенные покупки (от 179 рублей) и система испытаний для получения доступа к премиум-контенту.


Encode

Языки программирования: Java, Python, JavaScript, HTML, CSS.

Поддерживаемые платформы: Android.

Обучение на русском языке: нет.

Лишь усвоив основные концепции уроков, вы сможете перейти к более сложным материалам. Платформа также имеет автономный режим: начинающие разработчики могут изучать и улучшать свои навыки программирования без подключения к интернету.

Encode – это приложение, которое обучает новичков программированию на Java, уделяя основное внимание разработке под Android. Чтобы перейти на следующий уровень обучения, пользователь должен решать практические задачи.

Преимущества:

  • Интуитивно понятный пользовательский интерфейс;
  • Автономный режим;
  • В учебных материалах использован реальный код.

Недостатки:

  • Нет активного сообщества пользователей;
  • Отсутствуют углубленные курсы по программированию;
  • Ограниченное количество уроков.

Стоимость:

Приложение и доступ к базовому набору материалов бесплатны. Есть платный контент (цена подписки через покупку в приложении – 389 рублей).


Codecademy

Языки программирования: Python, JavaScript, SQL, Java, HTML, CSS.

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: нет.

Программа предлагает разные курсы в зависимости от варианта использования языка, будь то разработка веб-интерфейса, создание мобильных приложений или программного обеспечения для настольных систем.

Codecademy может похвастаться одним из крупнейших сообществ разработчиков, насчитывающим более 26 миллионов активных участников. Есть обширный пакет бесплатных уроков по Java, а при наличии премиум-аккаунта вы сможете работать с личным помощником, который будет проверять каждое задание.

Хотя платформа не особенно интерактивна, она находит надежные способы мотивировать пользователей, присваивая им значки и открывая дополнительный контент по мере повышения уровня.

Преимущества:

  • Отличная документация;
  • Индивидуальная помощь;
  • Большое количество курсов по Java и другим языкам программирования.

Недостатки:

  • Проблемы с производительностью приложения;
  • Медленная загрузка;
  • Попадаются неправильные ответы на вопросы;
  • Курсы по большей части не бесплатны;
  • Сертификат не выдается.

Стоимость:

Приложение бесплатно, в нем также отсутствуют встроенные покупки. За доступ к базовым курсам платить не нужно, но тарифный план PRO стоит от $19,99 в месяц. Личный помощник обойдется уже в $500 за месяц.

Learn Java Programming

Языки программирования: Java.

Поддерживаемые платформы: Android.

Обучение на русском языке: нет.

Learn Java Programming – это набор руководств по Java Core. Рядом с каждой концепцией есть объясняющий теоретические основы комментарий с практическими примерами и фрагментами реального кода.

Вы можете поделиться статьями с друзьями или одноклассниками. Все учебные материалы доступны в автономном режиме – вы можете скачать их в виде PDF-файла.

Преимущества:

  • Есть материал для новичков и специалистов среднего уровня;
  • Автономный доступ к учебным материалам.

Недостатки:

  • Нет интерактивности, викторин или IDE;
  • Пользователи неоднократно сообщали о проблемах с производительностью приложения;
  • Платформа не предлагает реальных практических проблем.

Стоимость:

Приложение и доступ к учебной платформе бесплатны, но есть возможность приобретения коммерческого контента через встроенные покупки (цена от 499 рублей).

Java Deep Learning: Core Java

Языки программирования: Java.

Поддерживаемые платформы: Android.

Обучение на русском языке: нет.

Хотя Java Deep Learning ориентирован на новичков, пользователи должны иметь базовое представление о языке, чтобы комфортно пройти обучение. Контент платформы очень разнообразен. Например, на вкладке «Интервью» разработчики могут увидеть сотни вопросов, которые обычно задают на собеседованиях.

Приложение помогает разработчикам повысить уровень владения Java для прохождения собеседований или для личных проектов. В зависимости от цели обучения Java Deep Learning предлагает ученикам индивидуальные программы.

Преимущества:

  • Углубленное освещение различных аспектов языка программирования;
  • Программа обучения охватывает интерфейсы Java.lang, Java.io и Java.ui;
  • Есть встречающиеся на собеседованиях вопросы с ответами.

Недостатки:

  • Орфографические ошибки;
  • Требуются предварительные условия для написания кода.

Стоимость:

Приложение и доступ к платформе бесплатны, но есть реклама.


Udemy

Поддерживаемые платформы: iOS, Android.

Обучение на русском языке: есть.

Хотя крупнейшая в мире платформа для онлайн-обучения не специализируется на Java, там можно найти десятки интересных курсов для разработчиков. Среди них есть варианты с практическими задачами, текстовые лекции и видео-комментарии. Некоторые курсы публикуются известными в отрасли профессионалами.

Преимущества:

  • Широкий выбор курсов;
  • Удобный интерфейс и возможность работать в своем темпе;
  • Виджеты для проверки правильности кода;
  • Встроенная IDE, поддерживается интерфейс командной строки.

Недостатки:

  • Каждый может опубликовать курс – качество учебных материалов часто не на высоте;
  • Большой разброс цен и высокие скидки мешают пользователям адекватно оценить предлагаемый продукт;
  • Недостоверная система оценки – высокий рейтинг курса не гарантирует его качества;
  • Сертификаты Udemy не ценятся работодателями.

Стоимость:

Есть платные и бесплатные курсы, в т.ч. на русском языке. Сервис обещает возврат денег в течение 30 дней, но если вы загрузили весь контент курса, с этим могут возникнуть проблемы.

Заключение

Использование мобильных приложений упрощает доступ к учебным материалам и делает процесс освоения Java более доступным. На рынке нет недостатка в инструментах, которые помогут вам заложить прочную основу для дальнейшего знакомства с одним из самых популярных языков программирования. Скачивайте, пробуйте и выбирайте. Надеемся, что наш обзор был вам полезен.

***

Главная проблема популярных зарубежных платформ онлайн-образования – отсутствие обучения на русском языке или недостаточно высокое качество русскоязычных материалов. Опытные программисты как правило знают английский, но для многих новичков это серьезная проблема. Если вы только начинаете свой путь в профессии, обратите внимание на курс факультета Java-разработки онлайн-академии GeekBrains. За 12 месяцев занятий с практикующими преподавателями из крупнейших российских технологических компаний вы освоите основы языка или систематизируете уже имеющиеся знания. Успешно завершив программу обучения, вы добавите к своему портфолио 5 реализованных проектов и получите помощь в трудоустройстве от квалифицированных HR-специалистов академии.

06
Апр
2021

Стек технологий, используемый в работе с Java Virtual Machine

Подборка технологий, инструментов, фреймворков и библиотек для создания утилит и интеграционных решений на Java/Scala.
— Читать дальше «Стек технологий, используемый в работе с Java Virtual Machine»