Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Новое яркое приключение в волшебной стране пасьянса Эмерлэнде!

Эмерланд пасьянс

Карточные, Головоломки, Пазлы

Играть

Топ прошлой недели

  • Animalrescueed Animalrescueed 54 поста
  • paranoidLynx paranoidLynx 11 постов
  • AlexKud AlexKud 35 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
79
imctobitch
imctobitch
20 дней назад
Программисты шутят
Серия I'm CTO, bitch

Типовая архитектура⁠⁠

Типовая архитектура
Показать полностью 1
[моё] I`m CTO bitch Архитектура IT юмор Скриншот Идиотизм Страх и ненависть в Лас-Вегасе Golang Kubernetes Mvp Архитектор Программирование
5
imyodo
imyodo
28 дней назад

Курс программирования на GO на Stepik⁠⁠

Сделал курс и выложил на Stepik. Ссылка тут: https://stepik.org/252828

Формат и что предстоит делать
— Ежедневные короткие уроки в виде чат-бота. Делаешь практическую задачу, а ИИ помогает + практические задания, которые ИИ проверяет.
— Написание кода локально, запуск примеров, разбор типичных ошибок.
— Домашние проекты с чек-листами, шпаргалки и вопросы для самопроверки.
— Средняя нагрузка: 60–90 минут в день.

Практический интенсив на 100 дней, который доведёт вас от нуля до уверенного backend-разработчика на Go. Каждый день вы получаете короткое объяснение и выполняете мини-проект — от базового синтаксиса до конкурентности, работы с PostgreSQL, проектирования REST API и упаковки сервиса в Docker. Итог — портфолио из 100 работ и финальный рабочий сервис.

Для кого этот курс

— Абсолютные новички без опыта программирования — Начинающие разработчики с базой в Python/JS/Java, кто хочет перейти на Go — Джуны и стажёры backend, которым нужен «боевой» стек Go + PostgreSQL + Docker — QA/DevOps/инженеры, кому нужен Go для утилит, сервисов и CLI — Студенты тех. направлений и те, кто меняет профессию на IT — Занятые специалисты: уроки рассчитаны на 60–90 минут в день, можно идти в своём темпе

Начальные требования

— Можно учиться с мобильного телефона!

ПК с Windows/macOS/Linux и стабильный интернет
— Умение пользоваться терминалом на базовом уровне (cd, ls, mkdir) — разберём в курсе
— Установим Go, Git и Docker в первую неделю (подробные инструкции внутри)
— Аккаунт GitHub для портфолио (подскажем, как оформить)
— Английский на уровне чтения документации — дадим русские конспекты и шпаргалки
— Готовность уделять 60–90 минут в день

Показать полностью
Программирование Golang Обучение Фриланс Текст
1
2
sobolevn
1 месяц назад
Лига программистов

EasyP – тулбокс для работы с ProtoBuf⁠⁠

Ссылка на проект: https://github.com/easyp-tech/easyp

Документация: https://easyp.tech

easyp – пакетный менеджер, билд-система и линтер для .proto файлов.

Хоть easyp и написан на #go 😱, одна из его фишек в том – что вы можете использовать любые плагины для генерации финального кода: он может быть хоть на #python, хоть на #rust.

Если много используете ProtoBuf – обязательно для ознакомления!

EasyP – тулбокс для работы с ProtoBuf

Прощайте огромные Makefile с кучей скриптов для сборки.

Показать полностью 1
[моё] YouTube IT Программирование Golang DevOps Linux Программист Разработка Python Видео
0
Andrey.Walz
Andrey.Walz
1 месяц назад
IT-юмор

Чо кодеры, кто где на этом графике?⁠⁠

<!--noindex--><a href="https://pikabu.ru/story/cho_koderyi_kto_gde_na_yetom_grafike_13160573?u=https%3A%2F%2Fx.com%2Fkai_fall%2Fstatus%2F1964686027005870278&t=https%3A%2F%2Fx.com%2Fkai_fall%2Fstatus%2F1964686027005870278&h=c2862a29505903a7a19e8e27b87c8acd7226abeb" title="https://x.com/kai_fall/status/1964686027005870278" target="_blank" rel="nofollow noopener">https://x.com/kai_fall/status/1964686027005870278</a><!--/noindex-->

https://x.com/kai_fall/status/1964686027005870278

X (Twitter) Юмор Golang Rust Typescript C++ Csharp Perl Java Си
44
5
jurkarorku
2 месяца назад

Поиск работы IT⁠⁠

У меня стаж около 4 лет, стек go+все актуальные технологии под него.
И какой-то треш. Вакансии вроде публикуются новые, но тупо 95% - игнор или отказы даже если я на 100% подхожу. Потом убил полтора месяца на прохождение отбора в одной конторе в 4 этапа чтобы в конце они мне дали какую-то убогую отписку.
Со мной что-то не так или с рынок вообще сдох? Резюме то же, что было 2 года назад, и тогда всё было сильно лучше по откликам, плюс сейчас опыта и технологий больше соответственно.

IT Рынок труда Golang Текст
17
21
CGAleksey
CGAleksey
3 месяца назад
IT-юмор

GO - время давно настало⁠⁠

Мы с одногрупником в вузе изучали С++ и немного завидовали разработчикам на Java. Ну как немного, порой очень даже и много.

Нам казалось что в Java все работает максимально автоматизированно, так: ".сделай (аргументы)"
Если принимающему лабораторную не нравится, то делали так: ".сделай_лучше (аргументы)"
А если вообще по-царски нужно было сделать: ".сделай_вообще_супер_чтобы_было (аргументы)"

Сегодня дожили, заехал в Go... Так мне делать там почти ничего не надо кроме как знать какие пакеты подключать и вообще понимать что и как работает в этой жизни. Copilot вон, зависимости добавляет, куски кода пишет ДО того как я еще начинаю думать о них. Остается только смотреть верно среда догадывается о том, что мне нужно или нет.

Да, Go - совсем не C++ и далеко не Java.

[моё] Golang C++ Java Опыт Личный опыт Текст
35
pankovri
pankovri
3 месяца назад

Думаешь, ты всё знаешь про defer в Go?⁠⁠

А знаешь ли ты, что за этим простым словом скрывается целый внутренний механизм с собственным стеком и хитрыми оптимизациями?

Думаешь, ты всё знаешь про defer в Go?

💡 В нашем новом посте я разбираю:

- В какой момент вычисляются параметры для defer

- Как defer устроен внутри Go runtime — с реальными структурами и флагами

- Какие крутые оптимизации появились в последних версиях Go, чтобы defer не тормозил программу

- В каких случаях стоит использовать этот механизм, а когда лучше этого не делать

Ссылка на пост https://teletype.in/@pankovri/t7rZdUQ5FqG

Показать полностью 1
[моё] IT Golang
1
4
pankovri
pankovri
3 месяца назад

Пишем desktop приложение на Golang + небольшой реверс инжениринг API POS-системы⁠⁠

Вводная часть

Зачем я вообще взялся за всё это? В одном небольшом розничном магазине стоит POS-система с не самыми гибкими настройками. Нужно было сделать так, чтобы продавец не видел остатки товаров в магазине — он продаёт только то, что отображается. Но! В некоторых разделах каталога остатки всё же должны быть видны. Для чего — это уже вопрос бизнес-логики.

Конечно можно было бы использовать API POS-системы, но они нагло запросили за это денег😁

Реверс инжениринг API POS-системы

Логинюсь в POS-систему под админом и открываю dev-tools браузере. Вижу, что используется reactjs, что для меня было хорошо. Перехожу в каталог. В каталоге все товары разбиты по категориям, открываю категорию и вижу, что данные приходят по Ajax. Соответственно, если данные приходят через ajax, то на бэкенд должен отправляться какой-то ключ аутентификации (jwt, access-token и т.д.). Это в общем база при HTTP запросах. Остаётся понять, как это работает.

Запросы уходят на https://my-pos-system.ru/service/?x_version=25.2155-162.10 с помощью HTTP POST метода. Долго не думая, кликнул правой кнопкой мыши на запросу Copy -> Copy as cURL

curl 'https://my-pos-system.ru/service/?x_version=25.2155-162.10' \

-H 'accept: application/json, text/javascript, */*; q=0.01' \

-H 'accept-language: ru-RU;q=0.8,en-US;q=0.5,en;q=0.3' \

-H 'cache-control: no-cache' \

-H 'content-type: application/json; charset=UTF-8' \

-H 'origin: https://my-pos-system.ru' \

-H 'pragma: no-cache' \

-H 'priority: u=1, i' \

-H 'referer: https://my-pos-system.ru/page/nomenclature-catalog' \

-H 'sec-ch-ua: "Google Chrome";v="137", "Chromium";v="137", "Not/A)Brand";v="24"' \

-H 'sec-ch-ua-mobile: ?0' \

-H 'sec-ch-ua-platform: "macOS"' \

-H 'sec-fetch-dest: empty' \

-H 'sec-fetch-mode: cors' \

-H 'sec-fetch-site: same-origin' \

-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36' \

-H 'x-calledmethod: Nomenclature.List' \

-H 'x-originalmethodname: Nf32Jkl4342nafi4=' \

-H 'x-requested-with: XMLHttpRequest' \

-b $'lang=ru; region=RU; DeviceId=qqqq-qqqq-qqqq-qqqq-qqqq; _ym_uid=123; _ym_d=1234; ... и далее много чего в куках' \

--data-raw '{"jsonrpc":"2.0","protocol":7,"method":"Nomenclature.List","params": ... и далее большой json в теле запроса'

Выполнил в консоли запрос и пришёл необходимый мне ответ от POS-системы. Это было небольшой успех, т.к. значит, можно отравлять и получать запросы.

Изучив curl запрос, предположил, что данные для аутентификации передаются через cookie. Удалил всё лишнее и выполнил запрос

curl 'https://my-pos-system.ru/service/?x_version=25.2155-162.10' \ -b $'lang=ru; region=RU; DeviceId=qqqq-qqqq-qqqq-qqqq-qqqq; _ym_uid=123; _ym_d=1234; ... и далее много чего в куках' \ --data-raw '{"jsonrpc":"2.0","protocol":7,"method":"Nomenclature.List","params": ... и далее большой json в теле запроса'

В ответ пришел 403 HTTP код. Значит удалил, что-то лишнее. Начал потихоньку пробовать возвращать параметры в curl и через пару минут понял, что не хватает заголовка -H 'content-type: application/json; charset=UTF-8'

Добавил в запрос и выполнил

curl 'https://my-pos-system.ru/service/?x_version=25.2155-162.10' \ -H 'content-type: application/json; charset=UTF-8' \ -b $'lang=ru; region=RU; DeviceId=qqqq-qqqq-qqqq-qqqq-qqqq; _ym_uid=123; _ym_d=1234; ... и далее много чего в куках' \ --data-raw '{"jsonrpc":"2.0","protocol":7,"method":"Nomenclature.List","params": ... и далее большой json в теле запроса'

Необходимый ответ пришёл. Это успех. Значит можно переходить к кодингу.

Ответ в JSON там очень большой, подробно разбирать его не будет, это не сильно интересно. Много полей с названиями полей f, a, t и т.д., но опытным путём нашёл какие поля необходимы. Мне нужно было найти только название номенклатуры, описание и остаток. Кто в своей юности использовал ArtMoney для получения бесконечных жизней и ресурсов в играх меня поймут. Взял первоначальный ответ, потом поправил в необходимые параметры в POS-системе и снова сделал запрос. Нашёл поля, которые изменились, они то мне и нужны.

Стек

К выбору стека исходил из своих навыков. Можно было конечно взять C++ и начал писать, но это не мой случай. Нужно быстро и чтобы я мог поддерживать это. Оценив свои навыки PHP, Golang, JS (TS), немного reactjs, начал гуглить, что вообще есть. Есть отличный фреймворк electron на котором написано ряд популярных приложений (slack, postman).

В общем взял electron начал создавать проект и компилировать его. Из плюсов, он очень мощный, можно копилить сразу под разные платформы. Развернул проект, начал компилить и у меня упорно не хотела происходить сборка. Потратив вечер на борьбу с electron, не хотел тратить много времени, решил погуглить ещё варианты. Нашёл фреймворк Wails на котором можно писать на Golang + JS (TS). Развернул и скомпилировал пустой проект за 5 минут. Было принято решение использовать его.

По итогу экспериментов на пустом проекте у меня получился такой стек:

  • Golang — backend-прослойка и основа приложения.

  • Wails — фреймворк для сборки desktop-приложений с UI на web-технологиях и backend на Go.

  • React — библиотека для построения интерфейсов.

  • TypeScript — типизированное надмножество JavaScript, упрощающее разработку и отладку.

  • MUI (Material UI) — готовый набор компонентов интерфейса в стиле Material Design.

Такой стек позволяет быстро разрабатывать современное desktop-приложение с мощной логикой на Go и удобным интерфейсом на React.

Инициализация wails

Первым шагом создадим базовый каркас desktop-приложения с использованием Wails

Установка Wails

Перед установкой убедитесь, что у вас установлен Go (версия 1.20+) и Node.js. Затем установим сам CLI:

go install github.com/wailsapp/wails/v2/cmd/wails@latest

Проверьте, что всё установилось корректно:

wails doctor

Если появилась надпись SUCCESS Your system is ready for Wails development! значит всё установилось и готово к работе

Создание проекта каркаса проекта

Создаём новый проект с шаблоном React + Vite + TypeScript:

wails init -n catalog-desktop -t react-ts

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

Запуск в режиме разработки

Перейдём в директорию проекта и запустим в dev-режиме:

cd catalog-desktop

wails dev

Эта команда одновременно запускает frontend (с hot reload через Vite) и backend на Go. Любые изменения в интерфейсе или логике пересобираются автоматически.

При успешной сборке у вас откроется окно приложения

👨‍💻 Код по итогу итерации

Создание UI

Для начала установим зависимости которые нам необходимы для UI.

Переходим в папку frontend и выполняем команду

npm install --save typescript @types/react @types/react-dom @emotion/styled @mui/material axios

Требования у меня были следующие:

- Отобразить данные в виде таблицы

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

- Необходимо обновлять данные из POS-системы раз в 1 минуту

- Отобразить кнопку обновить, чтобы кассир мог вручную обновить данные из POS-системы

Вот так я это примерно видел

Постараюсь описать в статье как можно меньше кода, т.к. в конце будет репозиторий со всем кодом.

Отобразить данные в виде таблицы

Для начала набросал UI, как это должно выглядеть.

Особо красивый код я не стал делать, поэтому пошло как пошло.

По итогу получился вот такой "дизайн"

👨‍💻 Код по итогу итерации

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

Забегая немного вперед, после написания кода для получения необходимых данных из POS-систему я столкнулся с CORS проблемой. Как я это решал, будет позже, пока пишем код.

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

Так же решил добавить лоадер и вывод ошибок

👨‍💻 Код по итогу итерации

Необходимо обновлять данные из POS-системы раз в 5 минут

Тут всё просто, особо говорить нечего. Запускаем таймер и дёргаем handleRequest

👨‍💻 Код по итогу итерации

Отобразить кнопку обновить, чтобы кассир мог вручную обновить данные из POS-системы

Тут ещё проще, берём handleRequest и навешиваем на событие onClick единственной кнопки UI

👨‍💻 Код по итогу итерации

Проблема с CORS

Как я уже упоминал, столкнулся с проблемой CORS — политики безопасности браузеров, которая блокирует запросы между разными доменами. Из-за этого нельзя напрямую отправлять запросы в POS-систему. Чтобы обойти это, сервер должен возвращать в заголовках значение Access-Control-Allow-Origin, разрешающее такие запросы.

Чтобы обойти эту проблему, нужен был прокси. Самый простой вариант — поднять веб-сервер прямо в приложении и ходить через него в POS-систему. Но у Wails есть одна интересная фишка: можно писать логику на Go и вызывать её из JavaScript. Магия, подумал я — и решил попробовать.

Немного вайбкодинга(да я вначале хотел проверить теорию, сработает ли и только потом углубляться в технические составляющие) и у меня получился вот такой комит.

👨‍💻 Код по итогу итерации:
https://github.com/roman-pankov/catalog-desktop/commit/7a1d2902f4fdab3933c93bc3ae9699f0426e4fdd

Немного теории о Wails и IPC

Wails для этой магии использует IPC(Inter-Process Communication). IPC (Inter-Process Communication) — это набор механизмов, позволяющих двум или более процессам обмениваться данными между собой.

В случаем wails используется WebView messaging. WebView messaging — это механизм обмена сообщениями между веб-содержимым (WebView) и внешним приложением. Он позволяет вызывать действия на стороне приложения в ответ на события, происходящие в WebView, и наоборот. При этом запрос не отправляется через сеть.

Примерно так выглядит жизненный цикл запроса

[Frontend] window.backend.MyService.Hello("World")

↓ (WebView messaging)

[Nativе Bridge] Получаем JSON: {service: "MyService", method: "Hello", params: ["World"]}

↓

[Go] Выполняем метод MyService.Hello("World") → "Hello World"

↓

[Nativе Bridge] Возвращаем результат

↓

[Frontend] Promise resolved → "Hello World"

Сборка

Для сборки приложения достаточно выполнить команду wails build. В результате в папке build/bin будет создан исполняемый файл.

Главное преимущество Wails в том, что он не включает в себя целый браузер, как это делает Electron. Благодаря этому итоговый размер моего приложения составил всего 9.5 МБ.

Но есть нюанс — для каждой платформы (Windows, Linux, MacOS) придётся собирать приложение в её родной среде.

Итоги

После нескольких вечеров экспериментов с Electron и Wails мне удалось решить поставленную задачу. Код, конечно, пока далёк от идеала — многое можно переписать и оптимизировать. Кто-то может указать на небезопасность хранения авторизационной куки прямо в приложении, но в моём случае вопрос безопасности был не приоритетом: приложение должно работать в единственном экземпляре на рабочем месте кассира.

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

Код на github https://github.com/roman-pankov/catalog-desktop

👉 Подписывайтесь на по ТГ буду стараться писать что-то полезное и интересное https://t.me/+fhVmaCi66s9kMDBi

Показать полностью 4
Golang API Компьютер Telegram (ссылка) Длиннопост
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии