Наши города заполонили курьеры - почти каждый второй пользуется доставками. Яндекс лавка, Самокат, Сбермаркет - основные «игроки», курьеры которых ежедневно доставляют заказы в столице Татарстана. Подработка курьером отличное занятие для студентов, чаще всего они идут в доставщики. Яндекс курьеры, курьер Самоката - сейчас эта профессия звучит гордо) Мы сняли большой фильм про работу курьера в нашем городе - вы услышите три реальные истории от курьеров и узнаете, сколько можно заработать на доставке, какие условия труда, а также с какими трудностями приходится сталкиваться во время работы курьером.
С момента выхода первой части статьи из рубрики «сам себе экосистема» прошёл уже практически год! За это время, мы успели с вами реализовать клиенты VK и YouTube, которые работают на Android 2.2+, а также на Windows Phone 8, написать небольшую 2D-игру с нуля весом менее 1Мб, которая работает практически везде и довести существующее приложение до ума, дабы оно работало даже на смартфоне с дисплеем 240x320! Но на дворе 2024 год, люди стремительно переходят из соц. сетей в продвинутые мессенджеры и уже сложно себе представить современного человека, который не пользовался бы «телегой» или даже «вайбером» в качестве основного средства общения. Поэтому я решил реализовать клиент Telegram на смартфоне 14-летней давности на базе официальной реализации MTProto от команды Telegram — TDLib. Сегодня мы с вами: узнаем новые причины мотивации вернуть в строй смартфоны прошлых лет, напишем на C# реле-сервер, который обрабатывает пакеты MTProto и кодирует их в простой текстовый формат датасетов, который можно моментально обработать даже при нестабильном GPRS-соединении на 21-летнем Siemens C60, а также узнаем о разработке миниатюрных Android-приложений на базе «голого» API-системы, которые не тянут за собой никаких зависимостей, в том числе и AppCompat/androidx. Интересно? Тогда жду вас под катом!
На дворе уже стукнул 2024 год, современные смартфоны предлагают какие-то немыслимые мощности относительно тех, которые когда-то были в первых Android-девайсах. Сейчас за сотню баксов можно купить смартфон с хорошей 1080p IPS-матрицей, 4Гб ОЗУ и 8-ядерным шустрым чипсетом, который вполне способен плавно тянуть даже стремительно «жиреющие» на ресурсы клиенты социальных сетей, банков и прочие необходимые в повседневной жизни приложения. И казалось бы: всё хорошо, покупай себе редмик раз в год или айфон раз в несколько лет и наслаждайся всеми прелестями работы современных приложений…
Для многих людей смартфон — это лишь инструмент, повседневный компаньон, который помогает облегчить выполнение каких-то задач. Им совершенно не важно, как он выглядит, как ощущается в руках, какой у него дисплей и железо «под капотом», лишь бы работал да и нормально. Но есть и другая категория людей, для которых телефоны, смартфоны и любые портативные гаджеты — это не просто утилитарный девайс, а настоящее инженерное произведение искусства, с которого буквально сдувают пылинки и стараются до последнего пользоваться ими как повседневными устройствами. Хотите пример? Смотрите ниже:
Фактически, среди современных смартфонов по сути и нет представителей такого нынче вымершего форм-фактора, как сайдслайдеры с физической QWERTY-клавиатурой, боковые раскладушки с двумя дисплеями и даже из QWERTY-моноблоков есть только смартфоны от Unihertz. Даже среди моноблоков с тачскринами нет никакого разнообразия, лишь без-рамочные одинаковые девайсы за исключением устройств от Sony.
Galaxy S Plus
Раньше меня часто спрашивали, мол, да как ты вообще можешь пользоваться смартфоном 10-летней давности, на котором давно нет официальных клиентов популярных сервисов и только недавно, с развитием блога, мне перестали задавать этот вопрос, поняв, что это бесполезно — ведь это дело принципа и порыва энтузиазма! Смотрите сами: у нас уже есть простенькие, но вполне рабочие клиенты ВК, YouTube, сейчас я допиливаю клиент «Сбера» на СМСках, реализую карты OpenStreetMap (правда пока без адекватной навигации), а в будущем планирую написать приложение для мониторинга погоды и трекинга посылок. Кроме того, в рамках этой статьи мы реализуем с вами клиент Telegram: так чем же это не функционал современного смартфона?
Но хорошо, с функционалом разобрались, однако для многих читателей слова «старый смартфон» это прямые синонимы «тормозной смартфон», мол «фуу, да как можно пользоваться этим тормозным кирпичом, он же лагает в последней версии моей ВКшечки!». Но давайте поставим вопрос ребром: может, это не столько девайсы немощные, сколько сами приложения, с кодовой базой, которая тянется более 10 лет, откровенно жиреют, обрастают костылями и хаками после далеко не одного поколения программистов, которые над ними работали? :) Один, вот, предпочитал пользоваться чистым AppCompat'ом, другой решил притащить зависимость, которая, например, оптимизирует виртуализацию ListView, третий решил заменить всю сериализацию Json со встроенных классов в Android на что-то стороннее и реализовал это костылями и вот так, по чуть-чуть изначально оптимальный и шустрый код превращается в неповоротливое УГ, которое не рефакторили кучу лет.
На видео Galaxy Pocket Neo — очень дешёвый Android-смартфон из 2011 года с 1-ядерным чипсетом на ~800МГц и 256Мб ОЗУ. При этом всём, Android софтварно рисует все анимации на процессоре, без участия GPU.
А значит у стареньких девайсов всё равно есть шанс быть полезными и стать полноценными повседневными смартфонами даже спустя более чем десять лет после выхода! И в сегодняшнем материале, я вам расскажу об особенностях разработки самопального клиента Telegram с собственным прокси-сервером, которое концептуально допускает реализацию даже на кнопочном Siemens C60 2003 года. Как? Читаем ниже!
❯ Принцип работы
В отличии от ВК (который разрабатывали те же самые люди, что и Telegram), API которого построено на базе REST-запросов и концепции Longpolling'а для моментального получения событий с сервера, Telegram построен на базе собственного протокола под названием MTProto, который может работать поверх любого «транспорта» (протокола нижнего уровня) — TCP, HTTP, WebSocket и т.п. Сам по себе MTProto в современном виде, разработка прожженного математика Николая Дурова и его команды — протокол относительно сложный для реализации «на коленке» и в первую очередь требует довольно серьезного понимания принципов работы современной криптографии, да и документирован он всё ещё не особо хорошо. Кроме того, у MTProto весьма интересный бинарный формат пакетов, эдакий велосипед Protobuf. В долгосрочной перспективе поддерживать свой велосипед MTProto может быть весьма проблематично, учитывая не самую лучшую документацию.
Но городить велосипед и не нужно, поскольку у команды Telegram есть официальная реализация MTProto — библиотека TDLib, которая инкапсулирует в себе не только детали реализации протокола, но и сетевой ввод/вывод и выбор транспорта, хранение базы данных сообщений и авторизации, автоматическую загрузку фото и видео, конвертация объектов из бинарного формата MTProto в JSON и полная многопоточность и частичная потоко-безопасность. С одной стороны это плюс — уже готовое решение для реализации клиента на новой поддерживаемой платформе, где есть OpenSSL (можно статически слинковать), zlib (линкуется статически), сокеты и файловый ввод/вывод, а также довольно неплохой механизм JSON-based API, которое позволяет использовать библиотеку в любом языке, который поддерживает вызов C-функций, а с другой и минус — библиотека довольно много весит, в одиночку прибавляя ~20Мб веса приложения для каждой архитектуры, у неё течёт память и у нее странный механизм получения данных с сервера (например, нельзя ответить на сообщение, зная его ID, если сообщение предварительно не загружено, при том что на сервере весь ответ — это просто ID, на какое сообщение прилетел ответ).
Понятное дело, что на стареньком смартфоне использовать оригинальный TDLib будет проблематичным — даже если собрать либы современным NDK и запилить JNI-интерфейс, библиотека «жрёт» много ОЗУ (20-100Мб «вхолостую», в зависимости от числа диалогов и частоты прилетающих событий, плюс со временем течет до 1-2Гб, если не использовать базу данных сообщений. Скорее всего, это косяк в реализации пулов, объекты из которых выгружаются при сбросе в базу, но не выгружаются при высоком потреблении ОЗУ) и уж тем-более TDLib не запустить на любимых кнопочных Java-сонериках! Поэтому я решил написать прокси-сервер, который отправляет команды, слушает ивенты TDLib и предоставляет REST-like API для клиентских программ, которые просто вызывают какой-либо метод, а в ответ получают простой и короткий строковой датасет только с необходимыми полями, весом до 10Кб (что позволяет его быстро загрузить даже с GPRS-интернетом), который можно быстро распарсить даже на преусловутом Siemens C60!
К сожалению, поскольку TDLib прожорлив, я не смогу захостить на своём сервере инстансы для читателей, которые хотят поюзать приложение, поэтому вам придется ставить и запускать сервер на своём VDS/компьютере с белым IP/роутере, если под него есть .NET Core :)
Клиентом же будет выступать Android-смартфон, где приложение будет фронтэндом данных с сервера. Ничего сложного на первое время нет: первое окно — это список диалогов, второе окно — список сообщений в диалоге + поле для написания сообщения, третье окно — информация о пользователе. Всё это я реализовал за три дня не-напряжной работы «на коленке».
Давайте же перейдем к реализации сервера!
❯ Прокси-сервер
Сервер я решил писать на C#, поскольку у .NET Core сейчас всё очень хорошо с кроссплатформенностью и производительностью. Его можно даже на Raspberry Pi запустить :)
Итак, какая-же архитектура такого сервера может быть? Программа инициализирует TDLib, начинает слушать её события в отдельном потоке, пока в основном потоке крутится HTTP-сервер, который обрабатывает каждый отдельный запрос с клиентского приложения. Почему синхронно? Потому что TDLib фактически не возвращает никаких идентификаторов для возвращаемых датасетов, дабы их можно было отличить друг от друга. Приведу пример: у нас есть метод getChatHistory, который возвращает n-сообщений. При этом TDLib сам определяет, сколько хочет сообщений вернуть (и в первый вызов возвращает одно сообщение вне зависимости от настрое и отправляем пакет message n-раз. При этом в пакете message нет какого-либо ID, который позволял бы ассоциировать текущий объект с какой-либо операцией. Увы!
Начинаем с коммуникации с TDLib. Для работы с библиотекой, мы будем использовать json-интерфейс. Для .NET есть биндинги через C++/CLI, но в таком случае, сервер не будет работать на Linux. Для работы с библиотекой хватит лишь три функции: CreateClientID, которая аллокейтит новый инстанс клиента, Send, которая асинхронно отправляет JSON-объект с командой, которую затем обработает TDLib и Receive, которая ждёт N-секунд и возвращает в виде ASCII-строки (!) JSON-объект с описанием события или данными после одного из запросов. За это у нас отвечает класс TDLibInterface, который объявляет PInvoke-методы для вызова нативных методов из библиотеки. .NET Core сам подгрузит библиотеку tdjson (причём на Linux он добавит ей префикс а-ля libtdjson.so, а на Windows загрузит tdjson.dll) и сам разберется с маршаллингом аргументов функций: например, string автоматически преобразует в const char*. Тем не менее, с const char* возвратами нужно быть аккуратнее — у меня был SIGSEGV, пока я ручками не конвертировал их в обычную строку.
З.Ы: На Пикабу нет отдельного тега для кода, а вставить листинги картинками я не могу из-за ограничения на 25 медиаэлементов. Так что листинги будут совсем без табов, но алгоритм их работы понять можно :)
Позволю себе чуточку критики в сторону TDLib. Во первых, почему нет s-версии функции с возможностью указать длину входной строки, а tdjson полагается исключительно на \0 в конце строки? Во вторых, почему const char*, а не wchar_t*? Сейчас юникод во входной строке приходится escape'ами превращать в \u-последовательности. После этого, нам нужно написать обёртку над TDLib, которая будет вызывать для зарегистрированных событий специальные функции, называемые коллбэками. При этом закомментированный WriteLine снизу — это «дебаг» для того, чтобы узнать названия неизвестных мне ивентов :)
В каждом объекте, полученном с помощью receive, есть поле "@type", которое содержит в себе имя класса возвращаемого объекта. Первый же вопрос от читателей — почему я использую JObject с ручным дерганьем нужных полей и вручную пишу JSON в виде строковых литералов вместо нормальной сериализации/десериализации? Ответ прост: во-первых, для актуализации Data-классов придется писать кодогенератор из TL-схемы, а во-вторых иногда TDLib может возвращать немного разные объекты в JSON, из-за чего приходится мудрить с атрибутами на этих самых Data-классах, иначе десериализатор выбросит исключение. Это решается нормальными юнит-тестами на всех вариантах данных, но зачем себе в колени стрелять, если нужен конкретный фиксированный функционал и лишь малое число от всех полей, возвращаемых TDLib?
string recv = NativeInterface.Receive(10.0d);
if (recv != null) { JObject json = JObject.Parse(recv);
if (!handlers.ContainsKey(type)) { //Console.WriteLine("Unknown event type: {0}", type); continue; }
handlers[type](recv, json); }
Теперь переходим к самому интересному — обработке событий и реализации синхронного клиента, который позволяет без async/await просто запросить список сообщений и сразу же его получить (такой подход может быть полезен и юзерботам, которые не хотят размазывать стейты по всей программе). Почему без асинков? Честно сказать, мне они просто не нравятся: как привык к концепции wait/notify и коллбэков из Java, так их и юзаю всю жизнь :)
Сначала TDLib запрашивает параметры инициализации (стейт authorizationStateWaitTdlibParameters), затем если пользователь не авторизован — запрашивает номер телефона и код подтверждения (плюс дополнительные шаги для авторизации если они есть). В конце, TDLib возвращает стейт Ready, что означает готовность библиотеки к работе:
После этого, можно начать работу с данными. Обратите внимание, мой подход потоко-небезопасен, его нельзя дергать из нескольких потоков одновременно! В коде ниже, я вызываю метод для фетча сообщений, а затем в соответствующем коллбэке от TDLib обрабатываю данные (дабы статья не разрасталась на 20+ минут, я чуть урезал все листинги).
public List<Message> QueryMessagesInChat(long chatId, long lastMessage, int count) { messages.Clear();
public User QueryUser(long userId) { string json = Utils.Format("{\"@type\": \"getUser\", \"user_id\": \"{0}\" }", userId); NativeInterface.Send(InstanceID, json);
waitHandle.WaitOne(); return user; }
Переходим к реализации самого сервера, для наших целей хватит обычного HttpListener. Сначала мы зарегистрируем все поддерживаемые методы и занесем их в ассоциативный список ключ-значение. Сами методы реализованы в виде делегатов, которые принимают лишь один аргумент — список параметров из строки запроса, а возвращают строку — все ответы, за исключением особых (связанных с загрузкой вложений) — текстовые.
Переходим к обработке запроса. Метод ищет, зарегистрирован ли запрошенный метод и если да, то парсит строку запроса, которая начинается с "?", которую затем передаёт в виде коллекции ключ->значения обработчику метода:
А сами методы, в свою очередь, дергают соответствующие функции из клиента и формируют на их основе датасет в примитивном формате:
public staticstring QueryChats(Dictionary<string, string> args) { if(args.ContainsKey("count")) { int count = int.Parse(args["count"]); StringBuilder ret = new StringBuilder();
В результате получаем вот такой простой датасет, который, как я и говорил, легко распарсить и на Siemens C60, и на Atmega328 — да где угодно! В целом, такой сервер можно использовать для реализации бота в телеграме, который будет передавать показания каких-то датчиков, сигнализацию и прочие клевые штуки!
Переходим к реализации клиента, т.е. приложения на Android. Здесь будет не менее интересно!
❯ Пилим для Android
В геймдеве есть своеобразный мем — некоторые инди-разработчики сначала начинают делать меню, вместо основного геймплея, что становится предметом насмешек среди других разработчиков. Но в разработке приложений для смартфонов всё по другому — здесь как-раз таки хорошо заранее продумывать макет будущего приложения!
Поскольку у нас с вами мессенджер, то главный экран должен представлять из себя список чатов (ListView) и верхнюю панельку, где в будущем могут разместиться настройки и свайп-менюшка:
Такой вот простой макет.
Каждый пункт меню — это тоже отдельный layout, в котором мы по шаблону строим внешний вид будущего элемента списка. На немолодых устройствах есть смысл использовать как можно меньше контейнеров в layout'е, поскольку пересчет позиций и размеров элементов — одна из самых «тяжелых» операций в UI-фреймворке вообще. Кроме того, не стоит использовать кучу картинок и drawable — в Android 2.x всё 2D рисуется софтварно, аппаратное ускорение появилось только в 3.0 (частично).
Но дабы в списке диалогов что-то появилось, нужно сначала реализовать фетчинг (получение) этих самых диалогов с сервера! Сам объект, который занимается обработкой запросов называется ClientManager и является синглтоном — он в единственном экземпляре на все время работы программы. Помимо менеджмента «ноды» (т.е. прокси-сервера), токена для авторизации и обработчика ошибок, ClientManager реализует метод для асинхронного запроса информации с сервера и, собственно, формирует строки запросов с помощью соответствующих методов:
Подгрузка чатов и сообщений реализована через Adapter — концепция «виртуальных» списков, которая предполагает что система создаст не 50 элементов интерфейса на каждую кнопку чата, а только 5 и будет их виртуально «мотать по кругу», обновляя только данные в уже существующих элементах. Это позволяет значительно ускорить отрисовку, учитывая то, что Android 2.x Canvas рисуется программно.
Ну вы уже явно замучились видеть простыни кода, давайте посмотрим что у нас вышло!
Шустренько, да? А ведь это ультрабюджетник Alcatel OT-916D, один из последних массовых дешевых QWERTY-смартфонов за 5 000 рублей из 2012 года. Кстати, смартфон подарил мне читатель chuvakoff с Хабра!
Переходим к окну чата. Основной макет почти такой-же, как и у основного окна: только добавилась панелька для ввода сообщения снизу.
Концептуально, всё тоже самое — запрашиваем данные с сервера, парсим их и загружаем в адаптер, благодаря чему мы сможем листать наш диалог. Однако в сообщения я добавил контекстное меню с стандартными фишками типа копирования, ответа и прочих подобных действий. Поскольку у нас нет ни пушей, ни еще каких-либо средств для поулчения данных о новых сообщениях, я раз в определенный интервал просто получаю сообщения — и если новый датасет отличается от старого — обновляю окошко чата.
Переходим к реализации поля для ввода сообщения. Здесь всё просто — на серверсайде за это отвечает метод SendMessage. Однако для того, чтобы с нашего клиента можно было ответить на другие сообщения, я ввёл также «контекст ответа», в котором запоминается сообщение, на которое мы хотим ответить. Telegram также поддерживает Markdown, однако его полная поддержка пока не реализована.
В остальном же, функционал конечно пока совсем базовый, однако клиент работает очень шустро даже бюджетной X10 Mini Pro и позволяет чатится с моими читателями в Telegram. В будущем хотелось бы допилить:
Поддержка картинок: Сейчас уже есть кривоватый механизм кэширования изображений на стороне сервера, который позволяет загружать аватарки чатов. В будущем, я добавлю поддержку «галерей» с картинками!
Поддержка голосовых сообщений: Не все их любят, но они порой удобны и выручают. Реализую как прослушивание, так и запись!
Подробный просмотр профилей и менеджмент чатов: Удаление сообщений, чатов и прочие фишечки из официальных клиентов.
Казалось бы — до официальных клиентов ещё очень далеко. Но сам факт, чтобы всё это работало достаточно шустро на девайсах, которым уже более 10 лет!
❯ Звучит интересно! Как заюзать твой клиент?
Тут всё очень и очень просто! В первую очередь, нам понадобится ПК с белым IP, роутер (если под него есть сборка dotnet), либо VDS. Виртуальные сервера сейчас стоят копейки, у ТаймВеба есть тариф за 188 рублей в месяц, которого с головой хватит для нашего сервера.
Такая вот рекламная интеграция (к слову, прокси для всех приложений уже более года крутятся именно на мощностях TimeWeb Cloud)!
Программа сначала запросит номер телефона, а затем код подтверждения Telegram. После этого будет создана папка tdlib/, где будут хранится данные вашей сессии, а также файл authkey.txt, где хранится случайный ключ для сессии (md5 phone_number + response code + псевдослучайное число). Не оставляйте его в /var/www/!
Если всё нормально, программа начнёт слушать порт 13377 на всех сетевых интерфейсах, в т.ч и в локальной сети. После этого, ставим уже предварительно собранный, либо собираем сами в Android Studio APK и в окне авторизации пишем адрес ноды и ключ авторизации. Если всё настроено верно — программа запомнит сервер и будет работать без проблем! Вот так всё легко :) Как видите — всё очень и очень просто!
Кроме того, буквально за пару дней до публикации статьи я сел вечерком из интереса что-нить под Java-телефоны попилить… и, как и обещал, реализовал Proof of Concept возможности работы Telegram даже на сонериках, которым скоро 20 лет стукнет! А ведь если ещё чуть заморочится, можно запустить приложение даже на преусловутых монохромных сименсах!
❯ Заключение
Вот такой у нас получился проект с реализацией лёгкого, примитивного, но тем не менее рабочего клиента Telegram, который на клиентской части вообще не использует никаких зависимостей. Вес собранного APK в release-версии — всего 54 килобайта! Понятное дело что с ростом функционала, вес программы будет увеличиваться, но я обещаю — больше 1Мб он не вырастет :)
Ну а вам, моим читателям, надеюсь было интересно прочитать такой «двойной материал» не только о разработке сетевой части без использования Apache/nginx/IIS, но и UI-фронтэнда для Android-смартфонов, которым уже более 10 лет! Исходный код проекта можно найти на моём GitHub: как приложения, так и сервера, а также убедиться в отсутствии каких либо закладок и, если совсем не доверяете, собрать бинарники сами! Для сборки понадобится VS2017 или свежее, а также Android Studio 2.3.2 (если собираете для Android 2.1 и ниже).
Друзья! Сейчас на Хабре опросы сломаны, поэтому если у вас есть желание, вы можете проголосовать в комментариях: какой стиль статей вам больше нравится — где больше конкретики и кода с пояснением как конкретно работает та или иная часть программы, или наоборот стиль ближе к научпопу, где фрагментов кода нет, или их значительно меньше? Пишите своё мнение о проекте в комментариях!
Кроме того, у меня есть канал в Telegram, куда я публикую бэкстейдж статей, ссылки на новый материал, свои наработки, а также посты о ремонте девайсов и различные мысли.
Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!
Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.
Действительно , если у вас мало энергии , то программы будут вас удерживать в старых парадигмах. Они виртуозно с этим справляются. И это легко проверить: если человек не имеет то , чего хочет , его поведением руководят страхи и сомнения 🕹
Это отвратительное ощущение , которое приводит к обесточености. Жить в нем невозможно.
Человек , который живет в режиме энергосбережения , обречен на бедность. Вспоминаем простую истину: "Деньги мы получаем через людей" Так вот. Люди избегают обесточенных людей.
Все действия неэффективные.
Такой человек сталкивается с последствиями:
люди не реагируют на контент и отписываются
притягиваются неплатежеспособная аудитория
нет результатов у клиентов
Я могла бы тут расписать 100 пунктов.
БЫТЬ В НИЗКОМ РЕСУРСЕ - ОЗНАЧАЕТ БЫТЬ БЕДНЫМ ВО ВСЕХ СМЫСЛАХ. Можно договориться с собой , что это норма и так жить. Примеров полно.
Зачем вы это дальше выбираете? Осознайте цены , которые вы платите за этот выбор. И да, в моменте неприятно.
Когда есть знания , что вы как личность даже не раскрылись на 3% вашего потенциала. И дальше выбираете вариться в страхах. Это здорово отрезвляет.
Это и есть первый шаг решения.
Когда-то и я это проживала. В моменте больно. Неприятно. Но по-честному,- призналась себе.
Дальше второй шаг: я выбрала быть энергичной , легкой , счастливой , нежной , заботливой ... и за этими качествами притягиваются люди .
Энергия есть. Люди на нее идут.
Я помню , как было раньше. Есть с чем сравнить) Когда я вижу грустные лица экспертов , которые ходят по кругу , то я знаю , что у них все лучшее впереди. Главное довериться и перестать держаться за старое. Кто отпускает старое, кайфует в новом.
Мне близко понятие энергия. Я эту тему освоила. Не в теории , ребят , на практике 😂
Чтобы освоить эту тему , далеко ходить не надо. Все просто. Сложно поверить , что все настолько просто.
Так вот.
Главная причина обесточености - человек не держит свое слово. Его слово ничего не стоит. Что-то себе пообещал , потом передумал. Что-то запланировал сделать , не выполнил.
Теперь.
Как человек может на себя опереться , если он перед собой не держит слово? В подсознание накопился огромный опыт , что человек сам себя на*ебывает и не достигает то , что ему важно. Регулярно. Даже не осознавая этого. Это привычка , которая разрушает личность каждый день.
Люди , буквально , превращаются психологически в инвалидов. Начинают верить в то , что ничего не могут. Кто не смотрел эфир... рекомендую... многое переосмыслите✌️: https://youtu.be/KvyzKSNJ3w4?si=wKdpqEASZ7HFoNMt
Именно отсюда возникает множество сомнений... а получится ли? а точно справлюсь? Как? Что? Где? Почему? Зачем? А вдруг?
Как видите , не только из-за отсутствия энергии нет продаж.🪫 Сами подумайте , как можно довериться человеку , который не держит слово? Вот пообещал и не выполни один раз. Один раз ладно... может быть случайность. А потом снова не сдержал свое слово.
Все. Доверие пропало. С таким человеком не хочется иметь дело. Тем более покупать у него. Услуга может оказаться некачественной. Скорее всего , услуга из дефицита.
Получается , человек себя загоняет в замкнутый круг: Нет энергии. Нет доверия. Нет уверенности. Нет продаж
Как же из этого выбраться?
1. Осознать 2. Выбрать как хотите по-другому. 3. Принять это решение.
Когда человек решение принял что-либо иметь в своей жизни. Неважно как. Главное решить, что это будет. Точка. (Не надо себя насиловать дедлайнами и как именно это должно произойти)
4. Дальше важно следовать этому решению и справляться со всеми сложностями на пути, а не жить в иллюзиях , что наступит момент, вы проработаетесь , и все на голову свалится
Это работа, родные.
Мой https://t.me/+_4b-Ow-ANOs0NTdi ТГ-канал , В закрепе ТГ- канала можете забрать связку по бесплатному трафику которая за год мне принесла 18 млн рублей ;)
В посте расскажу о наработанном за три года эффективном для нас способе участия в выставках, расскажу о лайфхаках экономии, поделюсь списком отраслевых выставок. А для начала посмотрите шутливый ролик, который мы записали перед одним мероприятием. Ролик также поможет вам лучше понять нашу специфику.
В 2023 году мы поучаствовали в 11 выставках и форумах, а на этот год запланировано еще больше, в том числе и ранее неизведанных.
Помимо такого рода мероприятий мы раз в неделю проводим мастер-классы в различных регионах России. Иногда спонсируем кулинарные конкурсы, стоим на велкоме с дегустацией на различных мероприятиях.
За 3 года такой работы мы выработали несколько фишек:
Берем самый маленький стенд со стандартной застройкой, но в хорошем месте. Деньги и время я трачу на мероприятия собственные, а поэтом тратить много и заморачиваться всякими согласованиями по застройке не хочется. Все силы на это уйдут. Или если это форум, то ставим просто стол для дегустации.
Оформляем стенд так, чтобы отличаться от других. У нас есть шкура волка и прикольный роллап, которые мы возим на выставки.
Шкуру волка, на которой стоит наша продукция, постоянно фотографируют
Наш роллап. Его тоже фотографируют и он привлекает внимание.
Сами тоже «оформляемся» так, чтобы быть максимально заметными. Ведь на выставке надо выставляться 😊 Раньше я ходил в ковбойской шляпе, а теперь супруга надыбала роуч с перьями, который выделяет нас еще сильнее.
Такой индейский роуч с нашим логотипом
Не участвуем во всяких дополнительных промо за исключением найма промоутера в некоторых случаях. Как правило он требуется на больших выставках типа ПродЭкспо.
Раздаем листовки, буклеты, визитки всем проходящим мимо и собираем контакты тех, кто заинтересовался.
На форумах (там, где народ тусуется продолжительное время), ставим лототрон и разыгрываем призы за визитку и подписку на наш телеграмм канал. Так собираем больше контактов, хотя они не очень целевые.
Работаем на стенде в количестве 2-3 человека. Больше на малой площади все равно не уместится, ну а одному вобще не вариант. Ни поесть, ни поссать. Моя супруга Юля помогает мне в работе на выставках, спасибо ей за это!
Постоянно что-нибудь даем дегустировать, причем все время разное: лосятину, оленину, бобрятину, нельму, омуля и т.д. Еда привлекает к стенду, и пока люди пробуют есть время рассказать им про нашу продукцию.
На выставка есть много профессиональных посетителей – бабки и деды с сумками на колесиках и рюкзаками, которые приходят на выставку со своими вилками бесплатно поесть. Поэтому много на дегустацию не нарезаем, так как иначе сразу налетят и все схавают. Когда на пробу выложено немного, такие коршуны стесняются забирать последнее (ну некоторые). Особые деликатесы, типа хамона, отрезаем персонально потенциальным клиентам.
Работа на выставке для собственника бизнеса – это не только продажи. Это и новые деловые знакомства с такими же предпринимателями. Это и поездки в места, где никогда раньше не был. Как правило мы захватываем несколько дней до или после мероприятия чтобы ознакомиться с новым городом, его окрестностями или даже со страной. Иногда это и способ повидаться с друзьями, которых раскидало по миру. Вообщем стараемся совмещать полезное с приятным.
Как мы экономим на выставочной деятельности
Субсидии Центра Поддержки Предпринимательства. Все меры поддержки можно посмотреть здесь https://мсп.рф/ Субсидируется не более 300т.р., не более 50% от стоимости участия, не более одного раза в год. В 2024 для Московской области есть программа «Подмосковный бренд» и участникам этой программы субсидируется 100%, а не 50%
Субсидии Российского Экспортного Центра. У каждого региона собственное финансирование и обращаться нужно в региональное отделение. Раньше финансировалось 100% участия в международных выставках, переводчик (платили сами только за билеты и проживание). Сейчас вроде немного усложнилось получение субсидии и частично надо оплачивать стенд.
Отрабатываем часть бартером. У нас посещаемый сайт, есть развитые соцсети и есть два телеграм канала, ориентированные на профессиональных поваров. Мы размещаем на своих ресурсах рекламу и получаем за это скидку.
Если позволяет багаж, то привозим с собой тушенку и паштеты из мяса дичи нашего производства и продаем во время мероприятия. Хотя официально торговать на выставках не разрешается, но по факту никто этого и не запрещает.
Выставки и форумы для продвижения продуктов питания
Информация об этих мероприятиях собиралась 3 года, многие из них вообще трудно найти и узнать о них, так как рекламируются они регионально или кулуарно.
Подписывайтесь на меня чтобы видеть мои последующие посты о том, как мы в Дикоеде работаем и через какие жопы прорываемся чтобы сделать мясо дичи доступным каждому.
А дальше список мероприятий, которые будут полезны при продвижении товаров в HORECA сегменте. И буду благодарен если в комментариях дополните его.
Это самая масштабная продовольственная выставка в России. В ней мы участвуем третий год. Первый раз участвовали бесплатно, получив поддержку Российского Экспортного Центра. В 2024 году было особенно много посетителей: магазины, рестораны, винотеки, дистрибьюторы, аудитория очень разнопрофильная. Стоит порядка 210т.р. за 6 кв.м. стенда стандартной застройки. Хорошо работает промоутер, который раздает листовки на входе в павильон и зазывает на дегустацию. Промоутер обходится еще около 30000 рублей. На выходе 135 контактов.
Ориентирован на кухни отелей и санаториев в первую очередь с линями раздачи. Участники (примерно 160) съезжаются со всей страны. Мы участвовали в 2023 году, были соорганизаторами BBQ вечеринки на мероприятии и ставили стол с дегустацией в велкам зоне. Но в 2024 году устроители задрали цену за участие (минимальный пакет 100т.р.), а BBQ вечеринку узурпировал Черкизово, и мы отказались. Ну и продукты у нас немного не санаторные и не для шведского стола. Основная аудитория – это управляющие служб питания гостиниц и санаториев.
Аудитория – представители отелей и ресторанов в окрестностях Челябинска, есть участники из Екатеринбурга, Кургана, Уфы. Шеф-повара, повара, рестораторы, управляющие отелями. Это не очень развитый регион с точки зрения туризма. Сама программа форума хорошая. У нас стоял только стол для дегустаций, долго выбивали скидку но в итоге договорились за 40т.р. На выходе получили 25 контактов.
Участвовали один раз в 2024 году. Организует компания Аква Байт (поставщики ПО), которая зовет туда видимо потенциальных клиентов. Участников мало, порядка 40 человек, на второй день форума еще меньше, программа слабовата. Стоимость около 40т.р. плюс подарки участниками. Участвовать больше не планируем.
Участвовали в Нижнем Новгороде в конце 2023 года. Мероприятие посетило около 400 человек: шеф-повара, рестораторы, управляющие, маркетологи. Стоимость участия 80т.р. Планируем поучаствовать и в этом году. А вот другие мероприятия от этих же организаторов, которые проводятся в 2024 году в Казани и Самаре для нас не в тему: маркетологи, специалисты по персоналу и менеджеры. Нам более интересны шеф-повара.
Ни разу не участвовали в этой выставке, но хотим попробовать. Регион для нас перспективный так как в Крыму находится большое количество ресторанов, хоть СВО и уменьшила посещаемость региона. Участие обходится нам в 65т.р. за стенд 4кв.м. со стандартной застройкой. Опасаюсь только, чтобы не превратилось это все ярмарку с толпой разных бабулек.
Мероприятие, которое проводит Metro и которое не проводилось со времен начала пандемии, но в этом году решено было его возобновить. По словам нашего бренд шеф-повара, который участвовал в нем в прежние годы, вполне достойное мероприятие. Смущала только стоимость – за минимальный стенд в 12 кв.м. выходило более 400т.р. Но мы подождали и нам сделали предложение на размещение холодильной витрины с площадью в 4кв.м. за 226т.р. Поучаствуем, посмотрим. Судя по массированной рекламе этого мероприятия, очень надеюсь, что аудитория соберется качественная и большая. Metro вобще умеет организовывать мероприятия для HORECA.
Ничего ранее не слышали об этом форуме, но Питер интересный для нас регион к тому же с хорошей логистикой туда из Москвы. Не увидишь – не узнаешь. Поэтому решили съездить и поучаствовать одним днем. Договорились за 50т.р.
Участвуем в этом году первый раз в данном мероприятии. Стоимость участия за площадь 6кв.м. – 100т.р. Но мы договорились отработать половину суммы бартером, размещая рекламу на своих онлайн ресурсах, так что сумма за эту темную лошадку выходит приемлемая.
В этом мероприятии будем участвовать в 2024 году уже третий раз. Первый раз попали туда случайно и взяли место под стол с продукцией в зале, где идут лекции. Это было плохим решением и в прошлом году разместились на улице, где находится общая зона мероприятия. Там удобнее общаться с шефами, можно чего-нибудь пожарить и угостить гостей. Организуют мероприятие те же люди, что и самую известную Российскую выставку индустрии гостеприимства ПИР. Основная аудитория – это шеф-повара, су-шефы, кондитеры. В 2023 году собрали более 50 контактов. Цена вопроса – 100т.р. за небольшой бовер на улице.
Кто-то из знакомых рекомендовал нам это мероприятие, но сами мы там ни разу не участвовали. Минимальная стоимость участия 100т.р., но тут мы тоже договорились отработать 40% стоимости бартером – рекламой на наших ресурсах. Съездим – посмотрим.
Наверное, самое пафосное и тусовочное мероприятие индустрии – более 5000 участников. Действо происходит на высоте 960 метров на Красной поляне, Сочи. На протяжении 5-ти дней и ночей проходят обучающие мероприятия, вечеринки, концерты, тусовки и конечно же пьянки. Ценник для партнеров начинается от 500т.р., плюс затраты на проживание, перелет, питание и т.д., что добавляет еще под 100т.р. на человека. В 2022 году мы интегрировались как партнеры welcome плова: выставили свои флаги на время приготовления, толкнули кратенькую речь, ведущий упомянул несколько раз нашу компанию, раздали визитки страждущим плова. Ну а дальше тусовались, знакомились, общались. Обошлось нам это около 300т.р. Ездили втроем и брали с собой детей, которые проводили время в детском лагере – Гастритике. В 2023 году пропустили это мероприятие, а в этом году думаем в каком формате его посетить. Возможно, просто возьмем два билета за 60т.р. плюс проживание и перелет. В 150т.р. думаю уложимся. Вообще направление для нас мега-интересное, хотя мы и работаем уже с большим числом ресторанов на этом курорте.
Гастрономический фестиваль организует Metro. Много обучающих программ для маркетологов, кадровиков, менеджеров и шеф-поваров. Участвовали в мероприятии уже два раза. Ставим там скромную дегустационную стойку, где угощаем деликатесами, струей бобра и желчью медведя. Много студентов, но и настоящих шефов тоже хватает. Стоимость участия обходится нам в 115т.р. Организаторы помимо деловой части проводят вечеринки и другую развлекуху для партнеров. В 2023 году собрали более 100 контактов.
Главная выставка индустрии гостеприимства собирает шефов, рестораторов, отельеров и всех, кто связан с отраслью HORECA. На выставки представлены продукты питания, напитки, оборудование. В 2023 проводили несколько мастер-классов совместно с поставщиками оборудования, но по ощущениям выхлоп с них не большой. Специально на них никто не идет, в основном просто стоят зеваки. Проходимость мероприятия довольно большая, в прошлом году собрали более 50 контактов. Стоимость участия 135т.р.
Участвовали в 2023 году, в том числе и мастер-класс проводили в рамках выставки. Не помню сколько заплатили, если вобще что-то заплатили. Выхлопа с выставки не почувствовали, слабовато.
Продуктовая выставка. В 2022 году участвовали в выставке в Краснодаре, нам не очень понравилось. Рядом был винный павильон с дегустацией и вокруг все ходили поддатые, лясы чесали. Но тем не менее какие-то сделки были и после нее заключены. Больше туда не поедем, но в этом году посмотрим, что происходит в Екатеринбурге. Екатеринбург для нас интересен тем, что там развивается направление Аутентичной Уральской Кухни, которая состоит в основном из предлагаемой нами продукции. Цена участия 136т.р. за 6 кв.м. стенда.
Продуктовая выставка. Три раза участвовали, работало нормально все, но в 2023 году 2/3 выставки заполонили китайцы, вьетнамцы, индусы с однообразной продукцией и все ищущие здесь дистрибьюторов. В этом году участвовать не планируем хотя и получали все время поддержку от центра поддержки предпринимательства в оплате 50% от стоимости. Стоимость участия в выставке от 208т.р.
Участвовали один раз и взяли дополнительный пакет – переговоры в центре закупок сетей. Получили поддержку от Центра Поддержки Предпринимательства и заплатили около 130т.р. в 2021 году. Выхлопа от мероприятия и от пакета не почувствовали. Сети – это все-таки пока не наше.
Участвовали в 2023 году за 105т.р., в этом году учатие стоило уже от 140т.р., хорошую скидку нам сделать отказались, и мы на мероприятие не пошли, но купили билет для нашего бренд шеф-повара. По его впечатлениям шеф-поваров мало. В основном все для маркетологов и менеджеров. Не совсем наша аудитория вобщем.
Участвовали в прошлом году в нем. Слет собрал около 100 участников. В этом году возможно будем участвовать если будут свободные даты. Стоимость участия порядка 40т.р.
Участвовали в 2021 и 2022 годах. Вобщем-то наше развите в сторону работы с HORECA сегментом и началось с этого мероприятия. Душевно, познавательно, весело. Аудитория – в основном шеф-повара и кондитеры. Фестиваль проводит Некоммерческая Ассоциация шеф-поваров и шеф-кондитеров России в которой около 2000 членов. В 2023 году мы посчитали, что со всеми уже знакомы и решили не участвовать в фестивале. К тому же он накладывался на какое-то еще мероприятие. В 2022 году для партнеров мероприятия ребята сделали ужин «Вкусы России» силами шефов ассоциации. С театрализованной постановкой и на высшем уровне. Действительно получил гастрономический оргазм.
Это обучающие двухдневные семинары для шефов и менеджмента ресторанов. Три раза мы участвовали в их мероприятиях. Нам интересен только день для поваров, на который как правило собирается 30-50 человек. Стоимость участия партнера в одном дне мероприятия 100т.р., что кажется дороговато для такой небольшой аудитории. Тем более что приходится ехать в другой город и командировочные расходы при этом не малые. Решили пока не участвовать в этих мероприятиях.
Неожиданно это оказалось не выставкой а ярмаркой ☹ Люди стояли в очередях за рыбой (и это на берегу моря-то), колбасой, сладостями и прочими секаторами и даже саженцами. Было еще пара экспонентов, которые тоже охреневали от такой «выставки». Но зато повезло с погодой (это был декабрь) и хорошо по вечерам потусили с супругой 😊 Больше в этом мероприятии не участвуем, хотя один дельный контакт с рестораном все-таки состоялся. Цена вопроса в 2022 году – 43т.р.
Фестиваль, ориентированный на конечного потребителя. Участвовали один раз в коллаборации с кафе. Раздавали свои листовки в расчете на то, что будут потом заказывать в нашем интернет-магазине. Но эффекта от этого не заметили. Люди идут на фестиваль чтобы поесть и повеселиться и им не до нас. Но бургеры с мясом дичи пользовались на фестивале успехом. Это мероприятие скорее для тех, кто хочет подзаработать на лоточной торговле.
Тоже фестиваль, в котором мы участвовали 2 раза выставляя свою продукцию. Так как у нас нет компетенций в лоточной торговле – оба раза не удачно. Если честно, то мне не совсем понятно зачем из-за куска сыра или мяса надо переться в Истринский район, стоять в пробке и торчать на жаре. Хотя продукты там встречаются довольно вкусные.
Участвовали также в международных выставках, когда не понимали еще как работает экспорт мясной продукции. Как оказалось это все не просто и на каждый вид мяса надо получать одобрение государственных ветеринарных служб, проходить проверку производства, что нашему небольшому на тот момент предприятию сложно осилить. Да и даже сейчас при очень хорошем раскладе мы можем открыть какое-то экспортное направление не ранее конца 2024 года.
Но по выставкам поездили, опыт приобрели. Все это делалось при поддержке Российского Экспортного Центра, который оплачивал коллективные стенды на этих выставках, а нам оставалось оплачивать перелет, проживание и командировочные расходы.
FoodExpo Qazaqstan, Алма-Аты, ссылку на нее не нашел.
Хорошая была выставка, много народу, но в силу причин, описанных выше, ничего не выстрелило. Я так понимаю, что организатором был Metro.
Есть, мягко говоря, совсем небедные клиенты которых ты знаешь много лет, знаешь что они скряги, но до поры до времени тебя это не касается... И вот очередной такой случай, когда хочется воскликнуть ты чего там совсем охуел??
Короче клиент постояник обеспеченный, домик на 500+кв.м рядом со мкадом, Порш Каен и BMW Z5, лям+ дохода в месяц и раньше как-то с ним было взаимопонимание... он обращается с проблемой, я решаю и озвучиваю сумму, суммы были вменяемые, поэтому заранее мы их не обсуждали, важнее была оперативность и качество работы... Он был человеком очень вовлеченным в бизнес, ему было интересно всё понять и сделать самому, поэтому он мне звонил за консультациями чаще чем меня вызывал, тарифа определенного не было, но после N-ого количества звонков я ему говорил с тебя пару тысяч на карту за консалтинг и он переводил без вопросов... но тут вдруг что-то сломалось...
Когда решил выйти из бизнеса и войти в Акции
Когда весь этот февральский пиздец начался, клиент решил что надо выходить из бизнеса и вкладываться в более ликвидные активы, акции... продал свой бизнес и закупился акциями на дне, а как знает любой инвестор, любому закупившемуся на дне положено второе дно в подарок... это и был классический маршрут, продать на втором дне осенью 2022 и войти в крипту, попробовать Luna(Terra) и Sun на вкус в 2023 на пике)), он все также продолжал мне звонить и количество вопросов только росло, прибавилось вопросов и про личный VPN сервер в Европе и про "надежные" азиатские криптобиржи и про вывод в кэш, я консультировал как мог... И в какой-то момент я понял что звонит он мне часто, но давно не платил и озвучил ему скромные 5тр за консалтинг, он промолчал и скинул мне 3тр на карту, на мой вопрос а с хуяли? нормально же общались... он ответил что извини неудачно вложился потерял треть сбережений и теперь решил экономить... Я ему культурно намекнул, что рядом с его СНТ есть Пятерочка и Магнит и они даже ближе чем Азбука Вкуса и Вкусвилл))) и скинул ему песню Семена Слепакова, с вопросом почему это круг замкнулся именно на мне?
С одной стороны клиента потерял, но с другой, ну ты сука когда миллионные прибыли греб, не платил же мне двойной тариф, так с какого я должен сейчас входить в твоё положение... короче сложные времена меняют людей... и зачастую не в лучшую сторону
> ПОЛУЧИТЬ | 9 999₽ 💁🏻♂️ Postaga — это платформа для продаж и построения ссылок на базе искусственного интеллекта, призванная помочь пользователям привлекать больше потенциальных клиентов, строить отношения и получать обратные ссылки. Платформа также включает в себя CRM-систему, которая позволяет пользователям эффективно управлять своей информационно-пропагандистской деятельностью. ↘️ Вы получаете пожизненный доступ к Postaga, но с определенными лимитами, а именно: 6 кампаний/месяц, рассылка 1 000 писем/месяц, поиск 100 возможностей, интеграция с Hunter.io для расширенного поиска контактов, доступ к будущим кампаниям Haro и Comment Outreach. ↘️ Подробный обзор возможностей, смотрите на YouTube:
Источник: t.me/freehvb/6442 , мы следим за всем, что можно забрать бесплатно.
Выкручивайте остроумие на максимум и придумайте надпись для стикера из шаблонов ниже. Лучшие идеи войдут в стикерпак, а их авторы получат полугодовую подписку на сервис «Пакет».
Кто сделал и отправил мемас на конкурс — молодец! Результаты конкурса мы объявим уже 3 мая, поделимся лучшими шутками по мнению жюри и ссылкой на стикерпак в телеграме. Полные правила конкурса.
А пока предлагаем посмотреть видео, из которых мы сделали шаблоны для мемов. В главной роли Валентин Выгодный и «Пакет» от Х5 — сервис для выгодных покупок в «Пятёрочке» и «Перекрёстке».
Реклама ООО «Корпоративный центр ИКС 5», ИНН: 7728632689