This media is not supported in your browser
VIEW IN TELEGRAM
Хоть и не успел ничего такого реализовать, но идея для следующей механики уже есть.
Как думаете, что это будет?
Как думаете, что это будет?
Сегодня довелось много писать на NestJS и делюсь парой удобных штук:
1. Prisma Studio - довольно удобно можно запустить одной командой в папке проекта и не нужно настраивать подключение через сторонние клиенты.
2. Bull - очереди поверх редиса с довольно удобным синтаксисом и простой установкой. Для него есть дашборд, но так как там для подключения нужно было немного заморочиться, то пока хватило AnotherRedisDesktopManager.
3. Ну и bcrypt для хеширования паролей.
P.S. Статья со скриншота
1. Prisma Studio - довольно удобно можно запустить одной командой в папке проекта и не нужно настраивать подключение через сторонние клиенты.
2. Bull - очереди поверх редиса с довольно удобным синтаксисом и простой установкой. Для него есть дашборд, но так как там для подключения нужно было немного заморочиться, то пока хватило AnotherRedisDesktopManager.
3. Ну и bcrypt для хеширования паролей.
P.S. Статья со скриншота
В предыдущем посте упоминал Prisma Studio, классная вещь, но есть проблема, что её можно запустить только указав путь до схемы базы данных и поднять локально, а вот подключиться к серверу нет. А так же, так как пока для тестирования используем sqlite, то соответствено нужно иметь доступ к файлу дб.
Можно поднять локально на сервере спуллив проект или скачав схему, но возникает проблема, что сервис безальтернативно поднимается на 5555 порту без какой-либо авторизации.
Сталкиваясь на работе с nginx-ом часто встречал конструкцию с
1. Ставим ufw - это firewall, который блокирует куда можно отправять трафик и куда нельзя в обе стороны (на приём и передачу). Классная инструкция здесь. На самом деле, я бы всегда рекомендовал блокировать всё, что не используется, так как нас однажды хакнули, когда использовали слабый пароль от ssh и очень много трафика шло через наш сервер, ufw такое бы заблокировал. Правда в любом случае после такой атаки только переустановка сервера или восстановления из бекапа, когда точно он не был взломан.
2. В нашем случае блокируем доступ к порту 5555
3. Устанавливаем nginx, если не был установлен. Способ установки зависит от системы.
4. После меняем конфиг для nginx, чтобы он проксировал другой порт с Basic Authentication (связка логин/пароль).
4.1 Как сделал я на тестовом сервере - просто в
4.2 Конфиг получился
4.3 А чтобы создать связку логин и пароль, то используем htpasswd
В итоге после таких манипуляций и нас будет закрыт порт 5555, он будет доступен только из внутренней сети и мы сможем заходить в prisma studio на 3100 порту с аутентификацией.
Можно поднять локально на сервере спуллив проект или скачав схему, но возникает проблема, что сервис безальтернативно поднимается на 5555 порту без какой-либо авторизации.
Сталкиваясь на работе с nginx-ом часто встречал конструкцию с
proxy_pass, которая позволяет проксировать данные с одного url на другой. И зная это придумал забавное решение. 1. Ставим ufw - это firewall, который блокирует куда можно отправять трафик и куда нельзя в обе стороны (на приём и передачу). Классная инструкция здесь. На самом деле, я бы всегда рекомендовал блокировать всё, что не используется, так как нас однажды хакнули, когда использовали слабый пароль от ssh и очень много трафика шло через наш сервер, ufw такое бы заблокировал. Правда в любом случае после такой атаки только переустановка сервера или восстановления из бекапа, когда точно он не был взломан.
2. В нашем случае блокируем доступ к порту 5555
sudo ufw deny 5555
3. Устанавливаем nginx, если не был установлен. Способ установки зависит от системы.
4. После меняем конфиг для nginx, чтобы он проксировал другой порт с Basic Authentication (связка логин/пароль).
4.1 Как сделал я на тестовом сервере - просто в
/etc/nginx/sites-enabled/default заменил конфиг. А по хорошему, нужно в sites-available добавить новый домен и потом слинковать его в sites-enabledbash
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
4.2 Конфиг получился
server {
listen 3100 default_server;
listen [::]:3100 default_server;
location / {
proxy_pass http://127.0.0.1:5555/;
auth_basic "Restricted area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}4.3 А чтобы создать связку логин и пароль, то используем htpasswd
sudo htpasswd -c .htpasswd user_name
В итоге после таких манипуляций и нас будет закрыт порт 5555, он будет доступен только из внутренней сети и мы сможем заходить в prisma studio на 3100 порту с аутентификацией.
Prisma
Prisma Studio | Next-generation ORM for Node.js and TypeScript
The easiest way to explore and manipulate your data in all of your Prisma projects.
👍1
В общем, как показала практика sqlite не очень удобен для разработки, если тебе нужно иметь базу на сервере и разрабатывать локально. Поэтому поднял PostgreSQL. Сейчас пока напрямую открыл доступ в интернет защитив паролем учётки, но по уму нужно какой-нибудь VPN до сервера прокинуть, чтобы никто не пытался пароли перебирать к бд. Пришлось потратить некоторое время, чтобы открыть доступ к базе из вне и когда всё сделал по разным статьям, увидел, что всё есть в этой. Главное, не забудьте ставить сложный пароль, так как боты довольно быстро могут перебрать базовые комбинации.
TecAdmin
How To Configure PostgreSQL to Allow Remote Connections – TecAdmin
An open-source, object-based relational database PostgreSQL, provides the user with the implementation of SQL and is commonly hosted on Linux. With PostgreSQL users can expand the system by defining self-data types, functions, and operators. PostgreSQL is…
👍2
И ещё немного настроил CI/CD через github actions. В общем довольно удобная штука. Теперь с помощью .env файла можно указать куда писать на проде и при локальной разработке. Для работы с .env файлами в среде ноды уже есть довольно много решений: native (node 20+), dotenv и @nestjs/config (так как сейчас пишу на nest).
На проде этот .env файл собирается из секретов в репозитории и для деплоя использую ssh-action, так как пока идёт активная фаза разработки, то там просто запускаются миграции и перезапускаются необходимые вещи через pm2, возможно потом выберем более production-ready решение. Ну и конечно при каждом деплое приходит сообщение с помощью telegram-action.
На проде этот .env файл собирается из секретов в репозитории и для деплоя использую ssh-action, так как пока идёт активная фаза разработки, то там просто запускаются миграции и перезапускаются необходимые вещи через pm2, возможно потом выберем более production-ready решение. Ну и конечно при каждом деплое приходит сообщение с помощью telegram-action.
nodejs.org
Node.js — How to read environment variables from Node.js
Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and noscripts.
Если кто-то пользуется Godot 4, то сегодня в мастер слили возможность сбилдить проект, который можно будет потом загрузить в Я.Игры и которые будут запускаться в safari 🎉
https://github.com/godotengine/godot/pull/85939#event-11522059935
https://github.com/godotengine/godot/pull/85939#event-11522059935
GitHub
Add `THREADS_ENABLED` macro in order to compile Godot to run on the main thread by adamscott · Pull Request #85939 · godotengine/godot
Context
This PR adds the THREADS_ENABLED macro and the use_threads=yes|no threads=yes|no build option.
There could be a way to make the THREADS_ENABLED modifications run time instead of build time,...
This PR adds the THREADS_ENABLED macro and the use_threads=yes|no threads=yes|no build option.
There could be a way to make the THREADS_ENABLED modifications run time instead of build time,...
🔥1
Недавно реализовывал схему с access и refresh токенами на бекенде и нашёл картинку, которая довольно очевидно обозначает схему взаимодействия. Раньше думал, что это сложнее будет работать, но на самом деле всё довольно просто.
1. При логине/регистрации генерируем access и refresh token. У access токена время жизни меньше получаса, а у refresh дольше.
2. При рефреше токена закидываем access и refresh токен в blacklist и выдаём новые. Здесь могут попробовать рефрешнуть с помощью access токена, тогда просто его закидываем в blacklist и отдаём 401 ошибку и согласно схеме попробует рефрешнуть с помощью рефреш токена.
В принципе всё :)
Есть ещё сценарии удаления аккаунта или условного логаута, но там уже логика зависит от потребностей в работе приложения.
1. При логине/регистрации генерируем access и refresh token. У access токена время жизни меньше получаса, а у refresh дольше.
2. При рефреше токена закидываем access и refresh токен в blacklist и выдаём новые. Здесь могут попробовать рефрешнуть с помощью access токена, тогда просто его закидываем в blacklist и отдаём 401 ошибку и согласно схеме попробует рефрешнуть с помощью рефреш токена.
В принципе всё :)
Есть ещё сценарии удаления аккаунта или условного логаута, но там уже логика зависит от потребностей в работе приложения.
misha98857
И ещё немного настроил CI/CD через github actions. В общем довольно удобная штука. Теперь с помощью .env файла можно указать куда писать на проде и при локальной разработке. Для работы с .env файлами в среде ноды уже есть довольно много решений: native (node…
Активная фаза разработки почти подходит к концу, поэтому переезжаем на более production-ready решение. Докеризирую всё приложение, чтобы посмотреть как в итоге будет работать и уже настраивать бекапы/репликацию базы через конфиг.
Когда сделаю и результат будет такой, что мне понравится, то обязательно напишу постик об этом с шагами и ссылками, которые могут пригодится. Может даже в отдельную репу закину workflows и докерфайлы, чтобы можно было целиком на всё посмотреть
Когда сделаю и результат будет такой, что мне понравится, то обязательно напишу постик об этом с шагами и ссылками, которые могут пригодится. Может даже в отдельную репу закину workflows и докерфайлы, чтобы можно было целиком на всё посмотреть
🔥2
Появилось немного времени, попробуем сделать заход на подготовку приложения по React к open-source
https://youtube.com/live/5Ssy3ic5RIc?feature=share
https://youtube.com/live/5Ssy3ic5RIc?feature=share
Youtube
- YouTube
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
👍1
В общем не всё успел, что планировал, поэтому остались очевидно реализованные так себе вещи. Будем действовать итеративно :D
А так. Жду ваши ⭐
https://github.com/misha98857/react-handbook
А так. Жду ваши ⭐
https://github.com/misha98857/react-handbook
GitHub
GitHub - misha98857/react-handbook
Contribute to misha98857/react-handbook development by creating an account on GitHub.
Я раскатил версию из репозитория на всех и вчера после релиза столкнулся с очень странным багом, который появлялся только при скачивании из google play. Ни эмулятор, ни реальное устройство не показывало такого поведения, да и в коде логики, которое могло привести к такому результату не было. Да ещё и приложение скачанное из google play не продебажить.
В итоге убил часа 4 на то, чтобы пофиксить. А причина оказалась в простом. В настройках есть "Automatic restore", которое бекапит данные и если эта опция включена, то при переустановке из google play он восстановит sharedPreferencies и из-за этого там будет язык, который я когда-то натыкал в релизной версии.
Поэтому, если такой баг при разработке своего приложения поймаете, то сначала можете глянуть включена ли у вас эта фича или нет
В итоге убил часа 4 на то, чтобы пофиксить. А причина оказалась в простом. В настройках есть "Automatic restore", которое бекапит данные и если эта опция включена, то при переустановке из google play он восстановит sharedPreferencies и из-за этого там будет язык, который я когда-то натыкал в релизной версии.
Поэтому, если такой баг при разработке своего приложения поймаете, то сначала можете глянуть включена ли у вас эта фича или нет
Forwarded from WOMAN.IN.TECH (Irina Shanina)
История Росграма, построенного на энтузиазме
В марте 2022 года появились новости о том, что компания ООО «Айти Истории» планирует создать российский аналог Инстаграма* — Россграм. Первый релиз приложения обещали сделать 28 марта. Но ни в марте, ни в апреле приложение так и не появилось. А 26 мая в AppStore появилось приложение Росграм (именно с одной «с») с возможностью публиковать фото, ставить лайки и тп, как в заблокированном Инстаграме*. Вот только авторами приложения были совсем другие люди - Михаил Ефанов и Владислав Климов, которые вдвоем в свободное от работы время собрали свой аналог Инстаграма*. Приложение стало быстро набирать популярность, пользователи активно скачивали его, публиковали фото, ставили лайки и просили дополнительный функционал.
Ниже подробности этой истории, рассказанные Михаилом.
https://telegra.ph/Istoriya-Rosgrama-postroennogo-na-ehntuziazme-02-10
В марте 2022 года появились новости о том, что компания ООО «Айти Истории» планирует создать российский аналог Инстаграма* — Россграм. Первый релиз приложения обещали сделать 28 марта. Но ни в марте, ни в апреле приложение так и не появилось. А 26 мая в AppStore появилось приложение Росграм (именно с одной «с») с возможностью публиковать фото, ставить лайки и тп, как в заблокированном Инстаграме*. Вот только авторами приложения были совсем другие люди - Михаил Ефанов и Владислав Климов, которые вдвоем в свободное от работы время собрали свой аналог Инстаграма*. Приложение стало быстро набирать популярность, пользователи активно скачивали его, публиковали фото, ставили лайки и просили дополнительный функционал.
Ниже подробности этой истории, рассказанные Михаилом.
https://telegra.ph/Istoriya-Rosgrama-postroennogo-na-ehntuziazme-02-10
Telegraph
История Росграма, построенного на энтузиазме
В марте 2022 года появились новости о том, что компания ООО «Айти Истории» планирует создать российский аналог Инстаграма* — Россграм. Первый релиз приложения обещали сделать 28 марта. Но ни в марте, ни в апреле приложение так и не появилось. А 26 мая в AppStore…
🔥3
Мне брат сказал, что здесь посты только с ссылками, поэтому попробуем немного разбавить контент.
👻1
Например, короткий пост.
Когда я учился проводить собеседования, то ментор сказал, что не нужен бояться тех кого собеседуешь, это они тебя боятся. Эта фраза так запала мне в душу, что после этого стало гораздо проще проводить собеседования :)
Когда я учился проводить собеседования, то ментор сказал, что не нужен бояться тех кого собеседуешь, это они тебя боятся. Эта фраза так запала мне в душу, что после этого стало гораздо проще проводить собеседования :)
Заметил, что в жизни бывает, что сделаешь буквально минорную вещь, а потом тебя захлестнёт водоворот событий, как 2 примера из жизни:
1. Записался на хакатон без команды -> поучаствовали на хакатоне -> прошли на всероссийский этап (он ещё назывался "Цифровой прорыв") -> с участником команды попилили баннеры для "сбербанка" -> меня рекомендуют, как программиста, чтобы сделать сайт -> обсуждения проекта в кальянной -> отказ от проекта и возврат денег, так как понял, что не успею реализовать -> позже от того же человека заказ на аналитику по KazanExpress -> аналитику сделали и он в итоге со временем продаёт суши-бар в Ижевске и устраивается в KE, как один из самых успешных продавцов -> пилим лендинг для академии KE -> рекомендация меня одному из основателей -> приглашение на работу от одного из основателей KE (Кевин Ханда) -> Отказ с моей стороны, так как там нужно было писать на Vue, а я тогда только прошёл стажировку в EPAM.
2. Разработал приложение с документацией по React на flutter -> около года постепенных улучшений -> изучил Angular и Ionic -> переписал на Ionic и приложение стало топ 1 в google play по тематике -> написал человек с запросом о помощи насчёт React -> пишем приложение для MIREA -> пишем Росграм -> пишем следующий проект.
Этим хотел написать, что всё начинается с супер маленького шага и неизвестно куда придёт. Поэтому, если появляется шанс в жизни сделать что-нибудь, то можно его не упустить и сделать, возможно это будет ключом к успеху в будущем :)
1. Записался на хакатон без команды -> поучаствовали на хакатоне -> прошли на всероссийский этап (он ещё назывался "Цифровой прорыв") -> с участником команды попилили баннеры для "сбербанка" -> меня рекомендуют, как программиста, чтобы сделать сайт -> обсуждения проекта в кальянной -> отказ от проекта и возврат денег, так как понял, что не успею реализовать -> позже от того же человека заказ на аналитику по KazanExpress -> аналитику сделали и он в итоге со временем продаёт суши-бар в Ижевске и устраивается в KE, как один из самых успешных продавцов -> пилим лендинг для академии KE -> рекомендация меня одному из основателей -> приглашение на работу от одного из основателей KE (Кевин Ханда) -> Отказ с моей стороны, так как там нужно было писать на Vue, а я тогда только прошёл стажировку в EPAM.
2. Разработал приложение с документацией по React на flutter -> около года постепенных улучшений -> изучил Angular и Ionic -> переписал на Ionic и приложение стало топ 1 в google play по тематике -> написал человек с запросом о помощи насчёт React -> пишем приложение для MIREA -> пишем Росграм -> пишем следующий проект.
Этим хотел написать, что всё начинается с супер маленького шага и неизвестно куда придёт. Поэтому, если появляется шанс в жизни сделать что-нибудь, то можно его не упустить и сделать, возможно это будет ключом к успеху в будущем :)
🏆4👍2
В продолжении прошлого поста. Ну и условно вот такая штука позволила мне выиграть международную конференцию, попробовать выбить деньги из инвесторов в Самаре (iВолга) и попытаться модернизировать экспериментальную газогенерирующую установку на водоканале.
👍3