NetPeak Biz Tech    


Как разработать графический интерфейс для скриптов R

Как разработать графический интерфейс для скриптов R

< >

Хотите, чтобы ваши R-скрипты могли запускать пользователи без навыков программирования? Создайте понятное десктопное приложение.

Язык R предназначен преимущественно для Back End программирования, но на нем можно разработать довольно удобный графический интерфейс. В этой статье я расскажу, какие графические элементы вы можете построить с помощью пакета «gWidgets2», и поделюсь несколькими примерами интерфейса, разработанного в R.

Установка нужных пакетов

Основным пакетом, который мы рассмотрим будет «gWidgets2», который по сути является переписанным «gWidgets».

Но для построения интерфейсов вам понадобится установить несколько пакетов:

  1. Сначала установить одну из базовых графических библиотек: RGtk2, tcltk или Qt.
  2. Далее — пакет gWidgets2
  3. После чего необходимо установить один или несколько пакетов — это интерфейсы к базовым графическим пакетам: «gWidgets2RGtk2», «gWidgets2tcltk», «gWidgets2Qt».

Наиболее простым графическим интерфейсом является tcltk, поэтому мы установим его, и связанные с ним пакеты.

install.packages(\\\'tcltk\\\')
install.packages(\\\'gWidgets2\\\')
install.packages(\\\'gWidgets2tcltk\\\')

Какие элементы интерфейса доступны?

В пакете «gWidgets2» много графических элементов интерфейса — рассмотрим основные.

1. Диалоговое окно — «gwindow» и «gbasicdialog»

Основной и главный контейнер для всех графических элементов интерфейса.

Если вы планируете в дальнейшем запускать разработанный интерфейс с помощью BAT или EXE-файла, рекомендую в качестве главного контейнера использовать «gbasicdialog». При запуске из BAT-файла, элемент интерфейса «gwindow» строится и мгновенно закрывается, не дождавшись действий пользователя.

Все же существует способ, который позволит вам запускать интерфейс с помощью BAT-файла, даже если он построен через «gwindow». Сразу после завершения кода графического интерфейса воспользуетесь комaндой «Sys.sleep(300)», и окно не будет закрываться.

В «gbasicdialog» так же есть один небольшой баг, для закрытия обычного, или диалогового окна вам необходимо использовать функцию dispose(). Но из-за ошибки допущенной в пакете данная функция возвращает ошибку при попытке закрыть «gbasicdialog». Для закрытия диалогового окна вызывайте метод dispose_window() самого диалогового окна, вместо вызова функции dispose(), смотрите пример ниже:

# создаём окно
my_win <- gbasicdialog(\"My Window\",visible  = T, do.buttons=FALSE)

# добавляем кнопку для закрытия окна
gbutton(\"Cancel\", container = my_win,handler = function(h,...) {
  my_win()
})

Синтаксис:

gwindow(title = \"Window\", visible = TRUE, name=title, width = NULL,
height= NULL, parent=NULL, handler = NULL, action = NULL, ...,
toolkit = guiToolkit())
gbasicdialog(title = \"Dialog\", widget, parent=NULL,
do.buttons=TRUE,handler = NULL, action=NULL...,
toolkit=guiToolkit())

Основные аргументы:

  • title — заголовок диалогового окна;
  • visible — видимость диалогового окна, принимает значение «FALSE» или «TRUE». Можно отключить видимость построения окна и всех его элементов и включить после того, как окно будет полностью сформировано с помощью функции visible.
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...).

2. Кнопка — «gbutton»

Функция «gbutton» создает кнопку в указанном контейнере.

Синтаксис:

gbutton(text = \"\", border=TRUE, handler = NULL, action = NULL,
container = NULL,   ..., toolkit = guiToolkit())

Основные аргументы:

  • text — текст кнопки;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер, в котором размещается кнопка.

Пример использования:

obj <- gbutton(\"Hello world\", container = gwindow())

3. Ярлык — «glabel»

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

Синтаксис:

glabel(text = \"\", markup = FALSE, editable = FALSE, handler =
NULL,action = NULL, container = NULL, ..., toolkit = guiToolkit())

Основные аргументы:

  • text — текст ярлыка;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер, в который будет помещен ярлык.

Пример использования:

obj <- glabel(\"Hello world\", container = gwindow())

4. Текстовое поле — «gedit»

В диалоговом окне появится текстовое поле, в которое пользователь может ввести свои данные.

Синтаксис:

gedit(text = \"\", width = 25, coerce.with = NULL,
initial.msg=\"\",handler = NULL, action = NULL, container = NULL, ...,
toolkit = guiToolkit())

Основные аргументы:

  • text — текст ярлыка.
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...).
  • container — контейнер для текстового поля.

Пример использования:

obj <- gedit(\"Hello world\", container = gwindow())

5. Список с возможностью выбора одного элемента — «gradio»

Список, в котором можно отметить галочкой один элемент.

Синтаксис:

gradio(items, selected = 1, horizontal = FALSE, handler= NULL,action
= NULL, container = NULL, ..., toolkit = guiToolkit())

Основные аргументы:

  • items — вектор значений, возможных для выбора;
  • selected — числовое значение номера элемента, который будет выбран по умолчанию;
  • horizontal — ориентация списка (TRUE — горизонтальная, FALSE — вертикальная) ;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер, в котором размещается список.

Пример использования:

obj <- gradio(c(\"hello\",\"world\"), container=gwindow())

6. Выпадающий список «gcombobox»

Выпадающий список — более компактная альтернатива списку, с возможностью выбора одного элемента.

Синтаксис:

gcombobox(items, selected = 1, editable = FALSE, coerce.with=NULL,
handler = NULL,   action = NULL, container = NULL, ..., toolkit =
guiToolkit())

Основные аргументы:

  • items — вектор значений, возможных для выбора;
  • selected — числовое значение номера элемента, который будет выбран по умолчанию;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер для размещения выпадающего списка.

Пример использования:

obj <- gcombobox(c(\"hello\",\"world\"), container=gwindow())

7. Список с возможностью выбора нескольких элементов — «gcheckboxgroup»

Пакет «gcheckboxgroup» дает возможность пользователю отметить галочками любое количество элементов из списка.

Синтаксис:

gcheckboxgroup(items, checked = FALSE,  horizontal = FALSE,
use.table=FALSE,   handler = NULL, action = NULL, container = NULL,
..., toolkit = guiToolkit())

Основные аргументы:

  • items — вектор значений, возможных для выбора;
  • horizontal — ориентация списка (TRUE — горизонтальная, FALSE — вертикальная) ;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы функции — function(h,...) ;
  • container — контейнер для размещения списка.

Пример использования:

obj <- gcheckboxgroup(c(\"hello\",\"world\"), container=gwindow()

8. Календарь — «gcalendar»

С помощью этого элемента удобно выбирать дату.

Синтаксис:

gcalendar(text = \"\", format = \"%Y-%m-%d\", handler=NULL,action=NULL,
container = NULL, ..., toolkit = guiToolkit())

Основные аргументы:

  • text — дата по умолчанию;
  • format — формат в котором будет задана дата;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер, в котором размещается календарь.

Пример использования:

obj <- gcalendar(text = as.character(Sys.Date()),container=gwindow())

9. Выбор папки или файла — «gfile»

Этот элемент выводит на экран диалоговое окно для открытия или сохранения файлов и папок.

Синтаксис:

gfile(text = \"\", type = c(\"open\", \"save\", \"selectdir\"),
initialfilename = NULL,   filter = list(\"All files\" = list(patterns = c(\"*\")), \"R files\" =   list(patterns =
c(\"*.R\",\"*.Rdata\")),
\"text files\" = list(mime.types = c(\"text/plain\"))       ),
multi=FALSE, handler = NULL, action = NULL, ..., toolkit =
guiToolkit())

Основные аргументы:

  • text — заголовок диалогового окна, открывающегося для выбора файла или папки;
  • type — тип диалогового окна, принимает значение «open» (получить путь к файлу), «save» (сохранить объект в виде файла) и «selectdir» (получить путь к папке) ;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...).

Пример использования:

obj <- gbutton(\"Select file\", container=gwindow(), handler =
function(h,...) {gfile(text = \"Select file\", type = \"selectdir\")})

Как разработать простой графический интерфейс?

Рассмотрим, как можно применять основные элементы пакета. Для примера создадим текстовое поле с возможностью ввести свое имя и кнопку, при нажатии на которую появится приветственное сообщение.

  1. В качестве основного контейнера выберем «gwindow».
main_window <- gwindow(title = \"My main windows\")

Функция «gwindow(title = \"My main windows\")» создаст главное диалоговое окно, которое вам предстоит наполнить графическими элементами.

  1. Сначала добавим текстовый ярлык, чтобы объяснить пользователям, какие данные нужно ввести в этом поле.

Для создания ярлыка используйте функцию «glable(\"Enter your name\", container = main_window)». Первый аргумент отвечает за текст ярлыка. Аргумент container указывает контейнер, в котором будет отображаться ярлык — мы указали «main_window », так как именно в этот объект сохранили созданное на первом шаге диалоговое окно.

  1. Последний элемент диалогового окна — кнопка «Hello!».

Кнопка создается с помощью функции «gbutton(\"Hello!\", container = main_window, handler = function(h,...)». Первый аргумент отвечает за текст кнопки, второй — указывает контейнер, в котором отобразится кнопка. Аргумент «handler» обpaбатывает событие, а значит в нем нужно описать функцию, которая выполнится при нажатии кнопки:

function(h,...){ gmessage(paste0(\"Hello \",svalue(username),\"!\"))}

Функция выводит на экран сообщение, созданное с помощью функции «gmessage». Чтобы в сообщении появилось имя, заданное пользователем в текстовом поле, я использую функцию «svalue» — она в качестве аргумента принимает объект, значение которого вы хотите получить.

  1. В результате у вас получится такой код:
#Создаем диалоговое окно
main_window <- gwindow(title = \"My main windows\")
#Добавляем подпись к текстовому полю
glable(\"Enter your name\", container = main_window)

#Добавляем текстовое поле
username <- gedit(\"User name\", container = main_window)

#Добавляем кнопку
gbutton(\"Hello!\", container = main_window, handler = function(h,...){
#Описываем действия которые будут выполнены при нажатие на кнопку
gmessage(paste0(\"Hello \", svalue(username),\"!\"))})

Запустите код в R-консоли или R Studio, и сформируется диалоговое окно.

В текстовом поле можно ввести свое имя и нажать кнопку «Hello!», после чего появится приветственное сообщение.

Пример сложного графического интерфейса, разработанного в R

Пользуясь пакетом «gWidgets2», можно создавать и достаточно сложные интерфейсы.

В этом пункте я поделюсь графическим интерфейсом для запуска скриптов. В диалоговых окнах можно ввести пользовательские параметры, необходимые для подключения к API, выбрать период статистики и конкретные скрипты. После нажатия кнопки «Start» начинается процесс сбора данных.

Скрипт для создания вышеприведенного интерфейса:

library(gWidgets)
library(gWidgetstcltk)
library(lubridate)
options(guiToolkit=\"tcltk\")

#переходим в рабочую директорию
setwd(\"C:/ppc_bi\")


#Период
currentDate <-Sys.Date()
eopm <- currentDate - days(day(currentDate))
sopm <- currentDate - days(day(currentDate))
sopm <- sopm - days(day(sopm) - 1)


#Строим диалоговое окно
win <- gbasicdialog(\"BI Data Uploader System v 1.0\",visible =
F,do.buttons=FALSE)

#Выбор рабочей папки
dirgroup <- gframe(\"Work directory\",container = win,horizontal = T)
workdirblock <- gedit(\"C:/ppc_bi\", container = dirgroup)
gbutton(\"Choice\", container = dirgroup,handler = function(h,...) {
workdir <<- gfile(\"Select directory\",type=\"selectdir\")
svalue(workdirblock) <- workdir 
setwd(svalue(workdirblock))})

#Группируем учетные данные
cred_group <- ggroup(container = win)

#Учетные данные MySQL
mysqlgr <- gframe(\"MySQL credentials\",container = cred_group,horizontal = F)glabel(\"Host:\",container = mysqlgr)
host <- gedit(\"\", container = mysqlgr)
glabel(\"User:\",container = mysqlgr)
user <- gedit(\"\", container = mysqlgr)
glabel(\"Pass:\",container = mysqlgr)
pass <- gedit(\"\", container = mysqlgr)

#Учетные данные Google
gagroup <- gframe(\"Google credentials\",container = cred_group,horizontal = F)
glabel(\"Clientid:\",container = gagroup)
clientid <- gedit(\"\", container = gagroup)
glabel(\"Client secret:\",container = gagroup)
clientsecret <- gedit(\"\", container = gagroup)
glabel(\"Adwords API token:\",container = gagroup)
adwords_api_token <- gedit(\"\", container = gagroup)

#ID докса - справочника проектов
doxgroup <- gframe(\"Project dictionary document key\",container = win)
doxid <- gedit(\"\", container = doxgroup, width = 50)

#Установка отчетного периода
grperiod <- gframe(\"Period\",container = win,horizontal = F)
glabel(\"From: \",container = grperiod)
date_from <- gcalendar(text = as.character(sopm), format = \"%Y-%m-%d\",  container = grperiod)
glabel(\"To: \",container = grperiod)
date_to   <- gcalendar(text = as.character(eopm), format = \"%Y-%m-%d\",  container = grperiod)

#Выбор скриптов которые необходимо запустить
grscripts <- gframe(\"Scripts\",container = win,horizontal = T)
scripts <- gcheckboxgroup(c(\"AdWords\",\"Facebook\",\"Direct\",\"QualityScore\",\"LostProfit\",\"Summary\"), container=grscripts)

#Кнопка Start
gbutton(\"Start\", container = win,handler = function(h,...) { dispose(win) for(scrnum in svalue(scripts)){   scriptName <- paste0(scrnum, \".R\")   source(scriptName) }})

#Кнопка Cancel
gbutton(\"Cancel\", container = win,handler = function(h,...) { win()})

#Включаем окно
visible(win, set = T)

Выводы

С помощью пакета «gWidgets2» вы сможете организовывать R-скрипты в виде десктопных приложений с понятным интерфейсом.

Доступны такие графические элементы:

  1. Диалоговое окно, в котором будут содержаться все последующие элементы интерфейса.
  2. Кнопка с текстовой надписью и функцией, которая будет выполнятся при нажатии.
  3. Текстовый блок, с помощью которого вы сможете объяснить назначение определенных составляющих интерфейса.
  4. Текстовое поле для ввода данных.
  5. Списки с возможностью выбора одного или нескольких элементов.
  6. Выпадающий список, который позволяет более компактно разместить перечень доступных элементов.
  7. Календарь для удобного выбора дат и периодов.
  8. Диалоговое окно для выбора папки или файла.

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

Если вы используете язык R в работе, или планируете его изучить подписывайтесь на мой Telegram и YouTube канал R4marketing, в котором собрано много полезных, русскоязычных материалов по изучению R.



Комментарии:

Как добавить 100 000 метатегов на сайт за 5 минут?

Как добавить 100 000 метатегов на сайт за 5 минут? Как SQL-запросы сайтов и Google Sheets освобождают SEO-специалиста от рутины...

15 07 2026 23:50:49

Как выбрать трекер для мобильного приложения — часть вторая

Как выбрать трекер для мобильного приложения — часть вторая Трекеры теперь на любой вкус: за лидерство в сфере аналитики и трекинга в мире мобильных приложений все еще конкурируют более десяти различных систем. Как не растеряться в обилии инструментов?...

14 07 2026 12:49:20

Путь магазина «Модна Каста» от Андрея Логвина

CEO магазина «Модна Каста» Андрей Логвин — сделал отличный доклад на 8P о пути к успеху своего бизнеса и будущем Ecommerce. Детальнее об ощущении deal и «первом дне» для интернета читайте в новом посте....

13 07 2026 4:37:32

Удалённая работа: как перевести сотрудников из офиса домой без потери эффективности

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

12 07 2026 23:17:55

Что такое ассоциированные конверсии и как проверить их ценность

Что такое ассоциированные конверсии и как проверить их ценность Примерно 70% конверсий происходит за счет дополнительных источников, их ценность отражается в GA. Разбираемся, какие отчеты использовать для анализа и оценки таких источников. Читайте далее!...

11 07 2026 1:51:59

5 способов повысить продажи с помощью социальных доказательств

5 способов повысить продажи с помощью социальных доказательств Чтобы увеличить продажи и улучшить их эффективность в новых условиях необходимо применять «социальные доказательства»....

10 07 2026 15:25:42

Частые ошибки в email-маркетинге: исправляем ошибки в email рассылках и письмах

Частые ошибки в email-маркетинге: исправляем ошибки в email рассылках и письмах К чему стоит относиться с особенным вниманием при отправке рассылок. Грамматические ошибки, тема, прехедер и другие стратегически важные составляющие письма. Узнать больше!...

09 07 2026 2:32:31

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

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

08 07 2026 12:42:24

Форматы рекламных объявлений в Facebook и Instagram

Форматы рекламных объявлений в Facebook и Instagram Гайд по рекламе для SMM-, PPC-специалистов, блогеров и владельцев бизнеса...

07 07 2026 17:49:24

Чем отличается адвокат бренда от посла бренда?

Чем отличается адвокат бренда от посла бренда? Что такое посол бренда и чем он отличается от адвоката бренда?...

06 07 2026 8:29:49

Обзор SEO модулей для DRUPAL

Обзор SEO модулей для DRUPAL Создание, установка и оптимизация title и мета-тегов keywords, description у сайта, построенного на системе Drupal...

05 07 2026 5:11:50

Кейс Office-Expert.kz. Как дополнительно стимулировать покупки на 50 млн тенге в месяц

Кейс Office-Expert.kz. Как дополнительно стимулировать покупки на 50 млн тенге в месяц Мы решили внедрить товарные рекомендации на сайте. Они приносят дополнительно до 10% дохода....

04 07 2026 10:55:54

Перенос кампании из Google Ads в Яндекс.Директ с помощью таблиц Google

Перенос кампании из Google Ads в Яндекс.Директ с помощью таблиц Google Таблицы Google позволят перенести рекламную кампанию и сохранить при этом ключевые слова в разных типах соответствия. Подробный мануал — в новом посте....

03 07 2026 11:29:34

Как грамотно работать с Директ Коммaндер

Как грамотно работать с Директ Коммaндер Директ Коммaндер от Яндекса позволяет легко работать с большими кампаниями...

02 07 2026 23:32:45

Панель вебмастеров Google — анализируем данные без паники

Панель вебмастеров Google — анализируем данные без паники Как правильно читать отчеты в Панели вебмастеров Google — объясняем на примерах из пpaктики....

01 07 2026 21:26:48

Какую картинку выбрать для Рекламной сети Яндекса — руководство и кейс

Расскажу, как подобрать картинку на рабочий стол объявления в Рекламной сети Яндекса, и приведу небольшой кейс о том, как это делали мы для агентства путешествий...

30 06 2026 18:35:24

Что слушать за работой — подборка музыки

Что слушать за работой — подборка музыки Под какие треки работают интернет-маркетологи, копирайтеры и другие специалисты digital-рынка....

29 06 2026 2:45:43

17 тезисов о том, как инвестировать в интернет-маркетинг

17 тезисов о том, как инвестировать в интернет-маркетинг Артем Шевченко (Epicentr), Михаил Рогальский (Monobank), Максим Дмитров (BSH Hausgeräte), Андрей Чумаченко (Netpeak) и другие участники конференции 8Р о том, как они рассчитывают инвестиции в интернет-маркетинг....

28 06 2026 2:42:12

Более двух месяцев не могли запустить рекламу, а потом снизили стоимость заказа на 50% — игровой кейс

Более двух месяцев не могли запустить рекламу, а потом снизили стоимость заказа на 50% — игровой кейс Также повысили количество транзакций на 191% (по сравнению с аналогичным периодом прошлого года)....

27 06 2026 21:48:24

Основатель Depositphotos Дмитрий Сергеев: «Играйте только там, где вам проще»

Основатель Depositphotos и Clashot Дмитрий Сергеев рассказал нам о базовых правилах ведения бизнеса на западном рынке....

26 06 2026 4:39:22

Синтаксис, виды и параметры UTM-меток — как правильно отследить трафик

Синтаксис, виды и параметры UTM-меток — как правильно отследить трафик UTM-метки позволяют эффективно отслеживать источники трафика. Но составлять их нужно правильно. Как именно, давайте разбираться....

25 06 2026 16:26:31

10 готовых дашбордов для маркетолога в Data Studio

10 готовых дашбордов для маркетолога в Data Studio Подбор правильного инструмента для визуализации данных может сэкономить время и ресурсы компании, а также повысить общую продуктивность маркетинга...

24 06 2026 1:28:16

Netpeak Group купила конференцию eCommerce от OWOX

Конференцию eCommerce будет развивать комaнда Octopus Events...

23 06 2026 19:18:15

Как и когда выходить на рынки других стран — советы Google

Как и когда выходить на рынки других стран — советы Google Менеджер экспортного направления Гугл Украина — об особенностях выхода на рынки разных стран мира....

22 06 2026 1:42:20

Как настроить умную кампанию в контекстно-медийной сети Google

Готовы ли вы доверить основные настройки кампании автоматическим алгоритмам?...

21 06 2026 14:18:45

Как заявить права на сайт в Google Merchant Center

Как заявить права на сайт в Google Merchant Center Здесь не нужно часами собирать семантику, прописывать уйму расширений и создавать максимально релевантные объявления под каждый товар, а потому вам нужен этот понятный и короткий мануал! Читайте дальше!...

20 06 2026 22:33:36

Что такое релевантные страницы?

Что такое релевантные страницы? И как проверить релевантность на своем сайте. Если речь идет о страницах (сайтах), подразумевается соответствие контента запросу. Чем точнее страница отвечает на запрос, решает задачу пользователя, тем (при прочих равных) выше ее позиция в поисковой выдаче....

19 06 2026 11:47:39

Что такое VPN-соединение и как им пользоваться

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

18 06 2026 18:57:26

Как настроить бесплатный стриминг в Google ***ytics

Как настроить бесплатный стриминг в Google ***ytics Три способа парсинга данных с помощью Owox BI Pipeline, Mix Data BI Import, Owox BI Power Upload....

17 06 2026 14:18:53

Артем Борисов из Яндекс.Казахстан: казахстанцам нужен качественный контент на родном языке

Артем Борисов из Яндекс.Казахстан: казахстанцам нужен качественный контент на родном языке Почему встречаются низкие показатели переходов на сайты по всем источникам трафика? Нет рекламодателей, которые могут предложить пользователям те или иные товары и услуги....

16 06 2026 6:26:58

Загадки для тренировки мозга: заяц с одним ухом, пароход из Гавра и лабиринт с правым поворотом

Загадки для тренировки мозга: заяц с одним ухом, пароход из Гавра и лабиринт с правым поворотом Проверьте свою логику, находчивость и креативность...

15 06 2026 18:37:39

«Волшебный пинок»: вдохновение от знаменитостей. 11 мотивирующих речей

«Волшебный пинок»: вдохновение от знаменитостей. 11 мотивирующих речей Джефф Безос, Стив Джобс, Билл Гeйтс, Джимм Керри и другие. Собрали для вас подборку крутых выступлений людей, которые знают, как добиться ... в общем-то, всего. Читайте их основные тезисы, а главное — послушайте....

14 06 2026 1:37:39

Полный гайд по Reels в Instagram: что это, как создавать и что снимать

Полный гайд по Reels в Instagram: что это, как создавать и что снимать Как работать с новой функцией, чтобы набирать подписчиков и делать продажи. Подробное и актуальное руководство в 2021 году....

13 06 2026 18:43:41

Как начать работу с BigData — загружаем данные в Google BigQuery

Как начать работу с BigData — загружаем данные в Google BigQuery Начинаем работать с облачным сервисом хранения Google BigQuery...

12 06 2026 6:10:44

Как BuzzSumo заработал $2,5 миллиона за первый год — growth-кейс для SaaS

Стив Рейсон назвал 20 уроков, которые BuzzSumo усвоил на пути к топу самых популярных сервисов для контент-маркетологов....

11 06 2026 15:43:20

Сколько стоил клик Яндекс.Директ и Google Ads в Казахстане в четвертом квартале 2017 года

Сколько стоил клик Яндекс.Директ и Google Ads в Казахстане в четвертом квартале 2017 года Почти 3 миллиона клика в 24 тематиках в 15 городах Казахстана. Читайте новое исследование нашего аналитика....

10 06 2026 21:39:13

Кейс Leroy Merlin: как ежемecячно получать на 10% больше трафика из поисковиков

Кейс Leroy Merlin: как ежемecячно получать на 10% больше трафика из поисковиков Как Netpeak работал с сайтом филиала крупного бренда и добился результатов, несмотря на то, что сервера проекта находятся в другой стране....

09 06 2026 7:18:47

Рекламные кампании для масштабирования бизнеса в интернете

Рекламные кампании для масштабирования бизнеса в интернете Главные вопросы при запуске и настройке любых кампаний: «чего я хочу достичь?», «помогает ли текущая кампания достичь желаемых результатов?», «влияет ли кампания на эффективность других кампаний и источников?». Узнать больше....

08 06 2026 0:28:43

Как настроить отправку писем с помощью языка R

Как настроить отправку писем с помощью языка R и как избежать подводных камней....

07 06 2026 16:30:14

Как рекламировать товары для HoReCa и выйти на окупаемость в первый месяц работ — кейс econom-service

Как рекламировать товары для HoReCa и выйти на окупаемость в первый месяц работ — кейс econom-service Ещё один проект, который продвигался во время карантина....

06 06 2026 9:42:52

Core Web Vitals: что это такое и как работает

Core Web Vitals: что это такое и как работает В мае прошлого года Google анонсировал выход нового Core Web Vitals. Что это и как будет работать рассмотрим в статье...

05 06 2026 16:50:53

Как поменялись рекламные кампании во время карантина — что делать бизнесу

Как поменялись рекламные кампании во время карантина — что делать бизнесу Инсайты от специалистов агентства Netpeak о популярных тематиках, тенденциях, особенностях продвижения в карантин и кризис, новых правилах для контекстной рекламы и других способов продвижения. Чтобы узнать больше, читайте далее!...

04 06 2026 2:20:38

Как создать отчет по категориям и брендам в Google Data Studio, если они не передаются в Google ***ytics

Как создать отчет по категориям и брендам в Google Data Studio, если они не передаются в Google ***ytics Как настроить передачу категории и бренда товара в Google Data Studio....

03 06 2026 1:18:16

Как создать фид динамического ремаркетинга для Facebook без программиста

Как создать фид динамического ремаркетинга для Facebook без программиста Бесплатно, быстро и безопасно. Но есть и минусы. Узнать больше!...

02 06 2026 19:58:37

Как добавить сайт в Google ***ytics, Яндекс.Метрику и LiveInternet — пошаговое руководство

Как добавить сайт в Google ***ytics, Яндекс.Метрику и LiveInternet — пошаговое руководство Как зарегистрировать и настроить новый сайт в сервисах веб-аналитики...

01 06 2026 5:24:46

Расширения объявлений Google Рекламы — краткий обзор

Расширения объявлений Google Рекламы — краткий обзор 11 типов расширений и результат их внедрения на примере запущенных рекламных кампаний...

31 05 2026 20:26:58

Как привлечь на 174% больше звонков с помощью видеорекламы — кейс клиники лазерной косметологии Goldlaser.com.ua

Как привлечь на 174% больше звонков с помощью видеорекламы — кейс клиники лазерной косметологии Goldlaser.com.ua Клиникка использует лазеры и нуждается в продвижении. В специфических сферах привлечь потребителя впервые бывает сложнее и дороже, чем удержать его. Этот кейс о том, как повысить количество обращений новых клиентов с помощью видеорекламы...

30 05 2026 10:53:35

Как настроить божественные списки ремаркетинга с помощью GTM

Как настроить божественные списки ремаркетинга с помощью GTM Несколько фишек Google Tag Manager, чтобы сделать продвинутые списки ремаркетинга....

29 05 2026 10:59:39

Как использовать фотоколлаж в маркетинге

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

28 05 2026 0:54:42

Почему Google Merchant Center может заблокировать аккаунт

Почему Google Merchant Center может заблокировать аккаунт На что обращает внимание система и менеджеры Google при проверке сайта и аккаунта....

27 05 2026 1:12:36

Еще:
понять и запомнить -1 :: понять и запомнить -2 :: понять и запомнить -3 :: понять и запомнить -4 :: понять и запомнить -5 :: понять и запомнить -6 :: понять и запомнить -7 ::