CTO On Live


Гео и язык канала: Россия, Русский
Категория: Технологии


Ok, google. I'm CTO. What's next?
Интересные инструменты, механики и рассуждения из опыта технического директора и архитектора-удаленщика накопленные за последние 10 лет в таких проектах, как amoCRM, VCV и крупных ИМ
Связь с автором: @ea_realleo

Связанные каналы

Гео и язык канала
Россия, Русский
Категория
Технологии
Статистика
Фильтр публикаций


🏗Начинай с начала (ч.2)
#Архитектура #ПилюСтартап

📈Перескакивая ступени
Сразу откину предложения вида: "А давайте заменим автоинкременты на uuid и потом будем просто оттягивать данные в нужный момент в другие базы (шардироваться)" или "Давайте пачками отселим часть аккаунтов" и т.д. Но если вы хотите по ним подискутировать, то милости прошу в личку 👌

На текущий же момент я склонен верить и это подтверждается личной практикой, что нет ничего более правильного, как делать схему 1 аккаунт = 1 БД + центральная база содержащая базовую информацию для авторизации, которая в последствии просто станет вашим OAuth2 сервисом авторизации. И это далеко не только мои мысли, так как тот же mysql начиная с 8 версии внес много изменений, чтобы такая схема работала быстро без открытия тысячи файлов при запуске инстанса.

➕Плюсы
- Легко масштабировать (в любой момент времени вы можете взять данные конкретного аккаунта и перенести на выделенные мощности или нарастить мощности именно на той виртуалке где лежит "проблемная" база)
- Меньше данных - быстрее выборки. Как не крути, но иногда без джоинов не обойтись и если делать джоин между таблицами миллионниками, в которых содержаться данные сотен компаний, то рано или поздно это ударит. Либо покрывающие индексы будут настолько огромными, что просто перестанут влезать и интерпретатор будет их откидывать, либо индексов вообще хватать не будет и все начнет лагать. Но в схеме когда данные компании хранятся в отдельной бд (и значит в более маленьких таблицах) можно отделаться сильно меньшей кровью
- Если в вашей системе можно удалить самому аккаунт или же вы удаляете его при бездействии, сделать это можно просто дропнув базу (предварительно забекапив ее 😉 )
- Безопасность - данные изолированы и если у вас вдруг появится дырка в виде sql инъекции, то добраться до чужих данных будет сильно сложнее, особенно если вы еще под каждую компанию заводите помимо отдельной базы еще и отдельного пользователя базы, а не используете общий логин и пароль для подключения
- Бекап - тут есть как плюс так и минус. Бекапов будет очень много и это для кого-то может показаться минусом, но при правильном хранении такой проблемы не будет, но также увеличится и ОБЩЕЕ время снятие бекапов, особенно еcли вы криптуете их, хотя можно сделать это многопоточно и тогда тоже проблема снимется. А плюс заключается в том, что вы можете бекапится чаще, так как базы маленькие и снимаются дампы быстрее и можете более оперативно развернуть бекап конкретного клиента. Ну и нельзя исключать редкого случая, когда к вам могут прийти за данными по решению суда (какой-нибудь клиент вел через вас нелегальную деятельность и эти данные нужны следствию)
- AB тесты - вы сможете накатывать обновления только части пользователей, не мигрируя всем сразу (а на огромных базах, это может растянутся и на неделю)

➖Минусы
- Если вы используете индексаторы - sphinx/elastic и т.д. вам придется вероятно повозиться чтобы правильно забирать эти данные, либо создавать промежуточную базу с общими данными
- Мониторинг - настройка мониторинга должна быть более тонкой, чтобы вы не видели все миллион баз на графиках, но видели только проблемные
- Чуть более сложный поиск нужных данных. Допустим к вам пришли и сказали что в аккаунте с таким доменом что-то не так. И если у вас одна база, вы нашли по домену компанию и там же смотрите что не так с данными, то в случае разделения вам надо будет понять, а куда собственно подключиться и потом уже выяснять или создать скрипт коннектор который это сделает за вас, но все равно получается лишний шаг
- Больше точек отказа. Если у вас настроена реплика базы, то в случае отказа железки, на которой крутилась сотня другая баз. Возни с восстановлением (если нет автоматики) будет сильно больше.


🏗Начинай с начала (ч.1)
#Архитектура #ПилюСтартап

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

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

Допустим вы делаете b2b проект. У вас появляются сразу же две сущности пользователи и аккаунты компании. И казалось бы нужно просто две таблицы: аккаунт (информация по компании) и пользователи, содержащие id компании с внешним ключом.

🤔И вроде бы да, но нет...

Сразу надо задать себе и бизнесу (если это не вы сами) вопросы:
- А может ли один пользователь быть в нескольких аккаунтах?
- Какой сегмент бизнесов мы хотим охватить и насколько он большой (ака нужно ли закладывать масштабирование)?
- Если это энтерпрайз, что мы можем сделать чтобы сразу обезопасить данные клиентов, так как требования корпораций очень строгие и зачастую абсурдные, но без их соблюдения ты им не продашь.

И если с аккаунтингом все довольно просто, добавил кросс таблица для связей М-М компаний и пользователей, то масштабирование и безопасность данных более тонкий вопрос.


Кризис? Давайте запускать проекты! 🎬
#ПилюСтартап

Очень долгое время мы создавали продукт, который помогал бизнесам отбирать кандидатов, используя видеоинтервью, тесты, отсекающие анкеты и что немаловажно AI. Но еще в конце прошлого года мы начали задумываться, над тем чтобы посмотреть на всю ситуацию с наймом с обратной стороны и собирались делать b2c продукт для соискателей летом, но карантин и следующий за этим кризис, меняет сейчас многим планы и мы решили, что запускаться надо сейчас, быстро и глобально.

Месяц назад мы запустили vcvpages (лендинги вакансий) и сразу стали собирать из b2b продукта MVP версию для сервиса видеорезюме, которую запускаем сразу на четырех языках (английский, русский, японский и испанский) и будем стараться сделать его максимально простым, удобным и что важно бесплатным. Мы хотим, чтобы любой человек за пару минут мог записать такие вот "инстаграм сторис" про себя и свой опыт работы и отправить в любую компанию, тем самым получая внимание рекрутеров и возможность получить работу быстрее, да еще и в удаленном формате, когда не надо сверять временные зоны и календари.

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

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

Лайфхак

Найдите HR ваших компаний мечты на LinkedIn/Facebook/VK и отправьте им ссылку на свое vcv в личку

Обратная связь

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


🕵️‍♂️Как обезопасить GitHub
#Безопасность

Дойдя до определенного уровня разработчики начинают активно заботится о безопасности проектов на уровне серверов и приложения, но очень часто забывают, что также надо держать и свой код в безопасности, особенно если он хранится на GitHub/GitLab/BitBucket и т.д.

На днях мне попался, как мне кажется, отличный набор правил от создателя GitHub'a Тома Престон-Вернера и разработчиков snyk.io

Там всего 10 пунктов, но возможно кто-то из вас о них не в курсе и они окажутся полезными

Читать про GitHub security best practices


🧠Чужой опыт важен, не меньше личного
#Обучение

Когда ты доходишь до определенной планки в развитии (допустим становишься СТО), то тебе всегда приходится делать над собой личностные усилия, чтобы не останавливаться в развитии и не отставать от "молодых". Мне лично в этом всегда помогает общение с другими компаниями или же различные лекции.

И вот как раз сегодня мне напела одна птичка о том, что Microsoft for Startups запускает серию онлайн мероприятий в стиле "Диалоги с CTO европейских (и не только) стартапов о влиянии текущей ситуации на их бизнесы".

Думаю многим будет полезно и интересно послушать иностранный опыт развития в эпоху карантина, ну и может получить какие-то инсайты. Первая трансляция уже в 18:00 по МСК. Смотреть можно на Youtube

🍩Плюшка
Бонусом к обучению ловите еще один вариант на финансирование от AWS. Добавил его сразу в свой файл плюшек для стартапов


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

23 апреля в 18:00 (Мск) эксперты SimbirSoft технический директор Пётр Урваев и директор по качеству Екатерина Ремизова расскажут:

• Как изменились условия в нынешней ситуации: удаленная работа, рост трафика, пик нагрузки, модель потребления и скорость принятия решений пользователями.
• Что делать, если у вас «горящая» проблема: каких специалистов можно подключить в команду, на каком стеке технологий, когда это необходимо (разбор на живых примерах и кейсах SimbirSoft).
Бонусом участники получат чек-лист по выбору подрядчика в сжатые сроки.

Стоимость — бесплатно 🙂 Обязательное условие — регистрация: https://simbirsoft-events.timepad.ru/event/1298271


Выход на глобальный рынок. Часть 2 👣
#ПилюСтартап

Итак наш опыт
Готовились мы где-то месяц. Пообщались с опытными коллегами, написали экшен план, составили списки журналистов, инфлюенсеров, тематических групп, но хантеру не писали - и это было ошибкой - вплоть до последнего дня, так как не был готов лендинг (хотя надо было не ждать). Не смотря на это нам все же повезло и хантер второй в списке самых крутых (https://500hunters.com/) согласился, но поскольку у него уже было все расписано, то мы были у него вторыми в день запуска и в популярное попали не сразу, а только набрав нужное кол-во голосов.

За сутки набрали 700 голосов и стали продуктом дня, нас твитнул и запостил на facebook Продакт Хант (даже 2 раза - до победы и после), а также нас включили в рассылку на 100 тыс чел.

Какие цели мы ставили и что это дало в реальности?

Думая о запуске, мы хотели получить:

- реальные лиды в Америке
- пиар и внимание прессы в Америке
- пиар в России (косвенно)
- статусность
- победу как продукт дня, недели и месяца и как следствие внимание инвесторов
- опыт запуска (никогда раньше не делали)

Что в итоге?

- лиды пришли, всего за 2 дня их пришло 80, из них половина - просто побаловаться с фейковыми почтами. Но 40 было реальных. Для нас это неплохо, так как такого раньше не было на глобальном рынке у нас и уже есть с чем работать. Сейчас стабильно получаем 3-4 лида в день из разных стран, раньше это было 2 лида в неделю.
- про нас написали 1 краткую заметку и были интересующиеся журналисты, но дальше дело пока что не пошло
- неожиданно - много пиара в России. Нас и так все знали, но тут мы подчеркнули свой фокус на глобал и сделали то, что никто из HR стартапов обычно не делает.
- получили награду Продукт дня, теперь это можно упоминать к месту и не к месту) - хороший инфоповод например для рассылки клиентам и инвесторам
- понимание, как тяжело дается продукт дня и развеивание иллюзий по поводу недели, месяца и года)
- опыт - крутой! Так как хоть и можно прочитать 100 чек-листов, но некоторые шишки надо набить самим
- знакомства с лидерами мнений. Попутно познакомились с хантером номер 1 и побеседовали с ним в твиттере на тему схожих с нами продуктов, что дало свои инсайты.
- стали регулярно вести и прокачивать соцсети - так что для бренда тоже хорошо.
- возможность получить честный фидбэк, если много органики

🌐 Ссылки по теме

- Как правильно выходить на PH
- Гайд от Serpstat

P.s.
Мы все еще хотим побороться за продукт недели, будем очень признательны за голоса https://www.producthunt.com/posts/vcv-pages


Выход на глобальный рынок. Часть 1 👣
#ПилюСтартап

В начале недели я писал про наш выход на Product Hunt и обещал вам рассказать о том как, для чего и что дало нам это, но прежде всего хочу вам сказать СПАСИБО, так как ваши голоса в частности помогли нам стать продуктом дня! Вы красавчики и это первое место ваша заслуга. А теперь по порядку:

Что такое Product Hunt?
Product Hunt - это топовая площадка для размещения информации о новых продуктах. Причем размещение продуктов не только создателями, но и кем угодно. Отсюда пошел этот принцип, что тот, кто размещает продукт - называется хантер. То есть охотник за классными продуктами. И изначально, как мы поняли логика именно и была та, что хантеры (фанаты классных продуктов) ищут свежие идеи и инструменты, а потом рассказывают о них на платформе, но теперь это переросло в то, что уже все сами стали запускаться. Поэтому иногда бывают кейсы, когда создатели не планировали запуск, хантер узнает об их продукте, хантит его, и создатели уже по факту это видят. Так было с продуктом Krisp. Их захантил случайный человек и они получили кучу наград. Продукт может быть и как только что созданным, а также уже стабильно несколько лет работающим, но просто желающим получить свою долю пиара.

В чем принцип?
Продукт размещается и за него можно голосовать. По результатам суток (это полночь по PST и 10 утра в Мск) считаются голоса и определяется 5 продуктов дня: от 1 до 5. Алгоритм считает голоса не по кол-ву, но по весу голосов. Так допустим голос только что зарегистрировавшегося человека почти ничего не значит. Также меньше весит голос, если человек сразу кликнул на upvote, не сходив на ваш сайт. Исходя из голосов есть несколько типов наград: продукт дня, недели, месяца и года.

Считается, что хорошо, если тебя добавляет топовый хантер, тогда твой продукт попадает сразу на главную страницу в "Популярное" и ты быстро набираешь голоса, но это работает только для одного продукта. Если хантер запускает в день два и больше продуктов, то второй в "популярное" не попадает и надо выводить самим. также при запуске всем подписчикам хантера придет уведомление об этом, но как мы увидели, эффекта это не дает. Технически делается так: при размещении продукта необходимы лого, название, описание до 60 символов, описание в 2-3 предложения и визуал (видео и картинки) + ссылка на сайт/сторы и соцсети. Все это подготавливается и направляется хантеру. Кто-то просит эксель, где будут ссылки на файлы, а у кого-то тайпформы и т д.


Сказ о том, как Zoom ломали и не только 🤖
#Безопасность

Отличная статья на @s3c/how-i-hacked-worldwide-zoom-users-eafdff94077d' rel='nofollow'>medium о том, как человек искал уязвимость в Zoom и нашел. И замечательная она прежде всего тем, что показывает, как мыслит пентестер и на что обращает внимание. Автоматическое тестирование, конечно, не способно закрыть такие уязвимости пока что. Но хочется верить что может быть однажды, когда нейронки будут достаточно умными интернет станет безопаснее.

На что в первую очередь обращают внимание пентестеры

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

Вторым скорее всего для исследования будут места, где вы используете id особенно если он у вас auto increment и есть в ссылках (явных или неявных типа post/put/delete запросы).

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

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

Несколько рекомендаций

Закрыться от базовых проблем можно еще на этапе проектирования приложения. Допустим, если строить приложение по принципу прослоек (middleware), работающих как LIFO (last in first out), то вы получите весьма обособленные куски кода, которые делают необходимые проверки и которые можно прицепить в любой последовательности к любому из ваших роутов, либо сделать автоматическое добавление самых важных прослоек ко всем роутам.

Также при построение архитектуры, где у вас есть компании и ее пользователи поможет разбиение данных по отдельным базам (1 кампания = 1 база), что как минимум закроет возможность перебором по id (без лишних махинаций) получить чужие данные, но и вообще эта схема даст много плюшек, о которых я напишу отдельную статью

Хакеров можно нанять

Если вам уже позволяют бюджеты, то вы можете сделать свою bug bounty программу и опубликовать ее на соответствующих форумах, таких как например hackerone, там же можно посмотреть и примерные цены

Подводя итог

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


Let's rock the global market 🤘

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

Наш сервис уже давно не только про видеоинтервью, а в принципе используется, как инструмент помогающий легко найти и отобрать нужных кандидатов (через тестирование, отсечение с использованием AI и прочими интересными штуками), а также мы помогаем ВУЗам проверять лабы, делать видеоразборы материалов, тестов и т.д.

Недавно мы решили попробовать сделать бота, который будет создавать лендинги вакансий в автоматическом режиме и оказалось в России это довольно востребованный функционал. Поэтому теперь мы решили пойти на глобал с ним и запостится на Product Hunt (самой известной платформе для анонсирования проектов). Обо всех этапах (как запускали, чего добились и какую обратную связь получили) я буду писать отдельные посты и держать вас в курсе того, как можно, ну или не нужно раскручивать свои стартапы 😄 А также что было MVP версией продукта, как строилось взаимодействие отделов и как мы вообще прокачиваем дальше эту идею

Если у вас есть желание поддержать нас, то сделать это вы можете просто проголосовав за нас на ProductHunt. Всем откликнувшимся благодарчик и постараюсь вас радовать интересными деталями :)


Нужно больше... плюшек 🍩💰
#ПилюСтартап

Ловите еще пару программ поддержки от Amazon и Nvidia для стартапов.

AWS Activate

Если вы являетесь выходцем из инкубатора, то есть все шансы получить вплоть до 100 тысяч $ на 1 год, но если развиваетесь на свои, то 1 тысячу $ (иногда можно и на 5 договориться в личной беседе), точно также на год. При этом потратить эти кредиты можно на любые продукты AWS, а не только на сервера.

Nvidia

Технические консультации от специалистов Nvidia, различные мероприятия и скидки на оборудование (обсуждается с каждым индивидуально)

🌐 Ссылки

- AWS Activate
- Nvidia
- И напомню про файл с плюшками для стартапов


Гюльчатай закрой личико или базовая защита веб-морды 🙈
#Безопасность

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

Прежде всего начнем с тюнинга Nginx (у вас же он, правда?)

Про самое очевидное: сразу забудьте про то, что такое сайт без SSL, купите хоть самый дешевый или сделайте бесплатный через let's encrypt

Все запросы, что прилетают на http сразу отправляйте редиректом на https. Как вариант запись эта может выглядеть так:

return 301 https://$host$request_uri;

А чтобы браузер в последствии всегда автоматически переходил на https добавьте заголовок HSTS

add_header Strict-Transport-Security 'max-age=31536000';

Помимо этого заголовка неплохо было бы включить и встроенные механизмы защиты браузера

add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "sameorigin";

Старайтесь использовать актуальные настройки ssl_protocols и ssl_ciphers (их, как и вообще весь ssl конфиг можно сгенерить на мозиле)

Проверить уровень настройки SSL можно на ssllabs и там же посмотреть рекомендации по улучшению

Я тебя не знаю, уходи!

Закройте обращения по ip или любому непонятному адресу к вашему приложению. Для этого просто последним в sites-enabled у вас должен быть конфиг default_server

server {
listen 80 default_server;
return 444;
}

Ответ 444, сразу же скидывает соединение не возвращая никакого тела, что позволит помимо мусорного трафика, также снизить и нагрузку. (Для https подключения можно сделать похожий конфиг)

С базовыми вещами по nginx разобрались, теперь возьмем уровень чуть повыше.

Любые запросы к своему API пропускайте через модуль лимитов nginx и отдавайте код 429. После чего обязательно настройте мониторинг на отлов ответов с этим кодом. Это даст вам возможность оперативно поймать потенциальный брутфорс или кривые интеграции, когда сторонний разработчик запустил while (true) и ушел пить кофе.

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

Access-Control-Allow-Origin: *

Так как данный заголовок поддерживает, либо доступ с любого домена, либо только с одного, без перечислений. Решается проблема, либо через map в nginx с установкой нужной переменной (сравниваем желаемый хост с http_origin) и последующей передачей через add_header того же домена в заголовке Access-Control-Allow-Origin либо проще это контролировать через конфиги приложения, как по мне.

Перебейте заголовок Server, который по дефолту отдает Nginx. Сделать это можно либо через server_tokens off; (который при этом все равно будет показывать, что используется nginx, но без версии), либо через бекенд часть приложения, заменив его на то, что вашей душе угодно.

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

Горшочек с медом

Техника honeypot не новая, но почему-то многие ей пренебрегают. Заключается она в том, чтобы добавить стандартные для всех сканеров или ручных тестеров роуты при попадании на которые вы получите тем или иным способом оповещение и включите более детальную аналитику по запросам злоумышленника.

Допустим вы можете оставить "открытым" cgi-bin или pma (phpmyadmin) или любой другой дефолтный url, да хоть .git (главное чтобы реального git'а там не было:)) и как только получаете туда обращение, значит кто-то проверяет пути, которые обычный человек точно не будет смотреть, а это повод задуматься.

На этом, пожалуй, пока что всё. Конечно подход должен быть более комплексным, как с точки зрения защиты доступов к серверам (vpn, ssh-ключи, iptables и т.д.), анализ трафика и прочее, но это уже другая история


А ты точно из IT? 🤔

Месячная (а может и больше) самоизоляция вынудит многих переходить на удаленку, даже если вы этого и не хотели. Поэтому встает актуальный вопрос: "Где найти работу?"

Ребята, создавшие известный канал @profunctor_io, решили помочь всем, кто сейчас заинтересован в том, чтобы инвестировать свое время в познание дзен IT или уже его познал и просто ищет новую компанию, где смог бы показать и/или прокачать свои навыки. Как знать может эта компания будет даже и со смузи с печеньками, не смотря на кризис? 🍪🥤

Вакансии есть на любой вкус и цвет: фронт, бэк, мобайл, DevOps, DS, ML, QA и прочие непонятные сокращения. 😎

Если ты давно откладывал возможность найти работу своей мечты, то вполне вероятно здесь у тебя появится возможность осуществить свою мечту. А если ты вдобавок еще и интроверт, то общаться с рекрутером можно прямо в телеге, даже если это будет рекрутер из Facebook, Yandex, Revolut и других известных компаний.

Подписывайтесь и дерзайте!

Канал: @profunctor_jobs
Сайт: https://profunctor.io
#ДружескойРекламыПост


🕵️‍♂️ Шеф нас вскрыли, что будем делать?
#ПилюСтартап #Безопасность

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

Как только сервис начнёт хайпить все ваши силы будут тратиться на поддержание и оптимизации, но никак не на безопасность, а с любым ажиотажем, как известно приходят те, кто хочет на нем заработать и часто это не самые честные люди. Текущая история с Zoom является очень показательной в этом плане. Сначала им наверняка начали присылать отчеты по безопасности, но в связи с возрастающей каждый час нагрузкой (у меня даже знакомые бабушки начали спрашивать про Zoom) они просто не успевали их закрывать, как следствие вся эта информация выплеснулась в открытый доступ. Теперь ребят вероятно будут ждать суды, так как американское общество/правительство любит погреться на таких штуках (последние скандалы с facebook и google тому пример), особенно учитывая современную экономическую ситуацию.

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

Вообще есть много способов отловить процентов 40 злоумышленников aka мамкиных хакеров еще на входе и об этом я напишу более развернутый пост, а пока...

Вот несколько инструментов для тестирования:

- Nessus - даже бесплатная версия даст вам много информации по проекту
- Vega - мощный и бесплатный инструмент, но возможно придется помучиться с установкой
- Kali - не просто инструмент, а полноценная ось для пентестеров включающая в себя кучу уже предустановленных инструментов
- Nikto - самые простые вещи поможет выявить
- nmap - сканер сетей
- JMeter - поможет проверить какую нагрузку сервис сможет держать
- Siege и AB - похожи на JMeter но послабее, хотя для базового тестирования производительности вполне пригодятся

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


ℹ️ #ВопросОтвет #ПилюСтартап (ч.2)

Запускайте завтра

С момента как вы поняли, что люди на лендинг идут и регистрируются (даже если это было человек 30-100) до запуска MVP должно пройти не больше 2-3 месяцев иначе вы не почувствуете вкуса победы и перегорите. Понятно дело что за 2-3 месяца продумать всю архитектуру высоконагруженного проекта, да еще и разработать его по ней невозможно (конечно если вы не гений, хотя нет все равно невозможно). Если это не так и у вас есть примеры, то милости прошу в личку с проектом и я разберу его по полочкам. Быстрый запуск нужен по простой причине, когда в вашу светлую голову пришла идея гениального проекта, ровно в это же время идея такого же проекта пришла еще в десяток ничуть не менее светлых голов.

Команда
Старайтесь НЕ запускаться в одиночку. Если вы технарь, найдите себя того кто смог бы взять на себе PM'о, маркетинг и вот это всё гуманитарное, а если наоборот, то вам безусловно нужен разработчик :) Почему это важно? Ведь разработчик может всё сделать сам, зачем ему "нахлебник"? На самом деле такой человек нужен по ряду причин:
- Вы несете ответственность за проект не только перед собой, но и перед ним
- Он может смотреть на ваш проект не как технарь, а как обычный пользователь и то что вам: "Да чего тут непонятного?! Идешь сюда, жмешь там, а вот тут можно написать в поиск команду @give_me_banana" для него будет "Ты со мной вообще говорил сейчас?". Считайте такого человека вашим первым пользователем, который вам скажет о том, что действительно сложно или непонятно и даст отстраненный фидбек
- Будет кому вам сказать: "Слушай как круто все получается". И поверьте это очень драйвит

А мой сервис будет уметь это, это и это... а еще вот пожалуй это

Не усложняйте. Составляя карту проекта выкиньте 90% всех ваших идей в бэклог они вам понадобятся только месяцев через 6 (три месяца на разработку и три месяца на исправление багов первой версии). Но при этом очень важно не просто выкинуть эти идеи, а записать, чтобы не потерялись, хоть в тот же Trello

Эпилог

Прочитав эти советы вы возможно скажите себе, да хрень он все говорит: "Мой проект будет без багов с идеальной архитектурой!" Поздравляю вас, вы только что приняли решение, что никогда не запуститесь. Багов нет на проекте, где нет никакого развития. Не будьте перфекционистом-прокрастинатором: "Лучше сделать хорошо, но никогда, чем кое-как и сегодня". На что, конечно, можно возразить, "но нам же потом с этим жить и плеваться", да... вам потом с этим жить, плеваться, решать проблемы, менять инструменты, опять плеваться и т.д., но в этом ведь вся суть и кайф! Это называется стартап и развитие. И даже если вы не запустите свой первый стартап, то по теории вероятности раза с 20-ого непременно стартанете)


ℹ️ #ВопросОтвет #ПилюСтартап (ч.1)

На днях подписчик канала задал вопрос: "А на каком технологическом стеке работают стартапы?"
Ответ, как бы он не был банален - на любом. И на самом деле нет большой разницы какой у вас стек, когда вы стартап, но есть несколько основных правил, которые я вывел для себя.

Целевая аудитория

Прежде всего определитесь в какой области ваш стартап и какая ЦА и есть ли вообще в той проблеме, что вы хотите решить боль?
Сделать это можно даже не создавая стартап, как таковой. Для проверки теории нужен проект или нет, можно сделать на коленке лендинг на той же Тильде и пустить на него трафик любым способом, будь то сарафан или посты на хабр/ТГ/stackoverflow и т.д. Если есть свободные финансы (тысяч 10 на проверку теории будет за глаза), то можно пустить рекламу на ФБ/Google Adwords

Пару слов про backend

Когда вы убедитесь, что ЦА есть и трафик на самом деле идет (можно оставить кнопку "зарегистрироваться"" и просто собрать email'ы с сообщением), можно переходить к реализации. Используйте тот стек, который вы знаете, хотя я склонен верить, что для быстрого запуска веб-приложения нет ничего лучше PHP/NodeJS для бека и базы MySQL/Postgres. По очень простым причинам: недорогих разработчиков на php и js вы найдете даже, если не будете искать, а для запуска и выживания в первые два года проекта нанимать крутых перцев с хайлоад опытом у вас просто не будет возможности. А также потому что они вообщем-то и создавались для этого, чтобы делать быстро веб-проекты и многое прощать. И нет это не призыв к говнокоду, хотя для запуска вы будете его писать и много, но кто же в этом себе признается?) И да есть много прекрасных языков разработки: Go, Python, Java, Dart, Ruby и прочие Rust'ы, но сделать на них быстро бекенд для веба, да еще чтобы не жрал как не в себя, да еще чтобы память не контролить, да еще чтобы имел огромное число готовых модулей... ну такое, для всего нужен свой инструмент и для MVP веба это извините, но PHP или NodeJS в связке с простейшими в настройке и обслуживании MySQL/PG

Frontend

Что использовать на фронте? Лично я фанат VueJS, но сколько бы я не пытался найти на фрилансе более менее сносных ребят в свой проект на Vue это была боль (может не там искал, но 4 команды просто откровенно налажали). В итоге пришлось многое изучить самому и допиливать по ходу действия пьесы. По факту же куда проще найти того кто склепает фронтовую часть на Angular/React/JQuery + Bootstrap подобный css фреймфорк

Комбайн

Не давайте вариантов изобретать что-то разработчику (или себе если вы сами разработчик), используйте комбайн фреймворки (если PHP то Laravel, Symfony) или если достаточно опыта соберите свой комбайн из микрофреймворка (ZendExpressive, который теперь Laminas супер удобный, так как поддерживает все что связано с PSR и модифицируется фактически на лету). Нужно чтобы ваш комбайн мог делать всё, буквально всё я не шучу. В ближайший год скорее всего вы не получите такую нагрузку, чтобы что-то стало работать медленно, а если хайпанете и к вам повалят толпы регистраций, то в любом случае упадете и будете многому учиться. Основное развитие всегда происходит в условиях боевых действий, когда что-то отваливается и вам надо днями и ночами чинить, оптимизировать и вообще шевелить извилинами, даже когда хочется тупо закрыть все и убежать.

Тесты

Было бы круто, конечно, код покрывать сразу тестами, но если вы один, то к сроку разработки можно смело докинуть еще месяца полтора-два... Хм а достаточно ли у меня большое покрытие, пойду еще покрою. А потом он покрыл еще немного, пока от проекта ничего не осталось. Первые тесты начните писать в тот момент, когда уже запуститесь и будете править баги, не раньше. Почему? Потому что читайте следующий пункт. Ну а если мы рассматриваем веб-проект на PHP, то советую интуитивно понятный Codeception, который поможет и юнит и функциональные тесты напистаь.
Единственное что точно стоит сделать и это не займет много времени, так это прикрутить к проекту линтеры и код-сниферы (опять-таки если php то phpstan, phpcs с максимальными правилами жесткости)


Идея для IT бизнеса 🤘

Так как во всем мире люди повально переходят на удаленку, то безусловно сейчас в цене все сервисы, которые помогают коммуницировать, как между собой, так и с клиентами (Zoom, Teams, Slack и т.д.). Как я писал ранее мы сейчас плотно работаем с Microsoft в рамках Global Pilots и на днях обсуждали возможности по взаимной интеграции. После разговора с ребятами в голове навязчиво начала крутится такая идея:

Их продукт (Microsoft Teams) пока довольно сильно отстает от Slack по числу готовых интеграций, а между тем их клиентская база растет сейчас в бешенных темпах (так как MS открытая компания, то все данные по росту легко можно найти на просторах интернета). А это значит, что часть этой базы будет конвертироваться в платных и платежеспособных. И сейчас самое время для того, чтобы найти популярные сервисы и сделать качественную интеграцию, которую потом можно будет продавать либо непосредственно в их маркетплейсе, либо через какие-либо другие каналы.

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

Помимо этого хотел бы поделиться с вами презентацией возможностей платформы, которую нам провели. Найти её можно в моем драйве. Enjoy!


🏗 Архитектура API и велосипеды (ч.2) 🚲

11. По той же причине, что и в пункт 10 можно передавать обратно заголовок с используемой часовой зоной и текущим временем на сервере
12. Маркируйте ответ уникальным id в заголовке, чтобы было проще найти его в случае проблем
13. Крайне желательно отдавать реальное время отработки бекенда (можно также в заголовке) В этом случе риск, что к вам придут в ТП и будут говорить, что запрос долго отрабатывает (тогда как это не так) сойдут на нет.
14. Уберите из заголовков любое описание используемых технологий (заголовки Server/Powered-By) или же перебейте их кастомом
15. Лимитируйте запросы к API. Прекрасно для этих целей подходит nginx limit req module, а главное напишите это сразу в доку в ограничениях API
16. Исходя из пункта 15, не забудьте про документацию и пропишите регламент обновления документации по изменению API
17. Сделайте Zapier к своему сервису

На этому пока что всё, если у вас есть вопросы по теме, то всегда можете задать их мне лично @ea_realleo

🌐Ссылки по теме

- application/hal+json
- application/problem+json
- http status codes
- json web token
- ETag/Last-modified
- OAuth2
- ngx_http_limit_req_module


🏗 Архитектура API и велосипеды (ч.1) 🚲

Самая успешная модель развития SaaS сервиса это наличие открытого API, так как именно оно помогает вашему сервису получить функции, которыми обладают другие и наоборот. Многие называют его REST API, сами правда не понимая, какие именно парадигмы и ограничения должны накладываться на такое API. За свою карьеру я поучаствовал во многих проектах и прорабатывал интеграции между различными сервисами или внутренними элементами системы (микросервисами). И к сожалению вынужден сказать, что подавляющее большинство разработчиков не считают необходимым посмотреть, а был ли уже изобретен велосипед до них и продолжают делать свои вариации протоколов взаимодействия с сервисом. Сказать по правде я и сам был таким, но возможно пост ниже поможет вам перешагнуть сразу через этот этап и открыть для себя стандарты.

💻 Разрабатывая API

Здесь я не буду писать о том, как надо проектировать базу и код, это отдельная огромная тема, но расскажу основные аспекты того, как могло бы работать ваше API

1. Всегда контролируйте код ответа. Не допускайте, чтобы сервис отвечал "200 OK", но при этом в теле ответа был допустим JSON { status: "error" } или вообще пустой ответ
2. Используйте правильные методы передачи данных (GET - выборка, POST - создание чего-либо и добавление файлов, PATCH/PUT - обновление, DELETE - удаление), это поможет вам самим гораздо правильнее роутить ваше приложение, а также проще отслеживать запросы по типам, через любой лог коллектор. Допустим пришел к вам запрос в ТП: "Аааа удалили важные данные, но мы не знаем когда". А у вас в логах все как POST /api/1.0/entity/123, что в этот момент происходило обновление или удаление? От какого метки надо восстановить данные? Правильный метод передачи вам поможет найти место гораздо быстрее
3. Не придумывайте свой формат ответов, а используйте стандарты. Если мы рассматриваем именно JSON over HTTP (что по факту сейчас стандарт отрасли, хотя как по мне лучше бы был gRPC+protobuf), то для меня лично самый удобный формат - это HAL в случае успешного ответа и Problem detail в случае какой-либо ошибки. Но стоит обратить сразу внимание, что некоторые статусы ответа не должны вообще содержать body, такие как например "204 No content"
4. Приложение должны быть stateless. Всю необходимую информацию для получения верного контекста запроса приложение должно получить из того же JWT токена
5. Не делайте универсальных методов, выгружающих все и сразу (если конечно это не какой-нибудь экспортер), а делайте ссылки от одного элемента в другой (смотри HAL)
6. В случае, если контент обновляемый, то не забывайте про заголовок ETag или Last-Modified, чтобы у того, кто запрашивает было ясное понимание, обновились данные или нет и надо ли запускать какие-то процессы у себя. Также как и заголовок If-Modified-Since с правильным ответом поможет сторонним командам обуздать ваше API легко и непринужденно
7. Крайне желательно потратить время и заиметь свой OAuth2-сервер для авторизации сторонних приложений
8. Ответ от вашего метода GET должен приниматься вашим же PATCH, то есть: Стороннее приложение запрашивает GET /api/1.0/entity/1, получает данные, как-то их модифицирует и отправляет обратно туже структуру на PATCH /api/1.0/entity/1, все проходит успешно и все счастливы и никаких конвертаций
9. Поддерживайте версионность API, либо через ссылку /api/{VERSION} или через обязательный заголовок, это избавит вас от огромного геморроя в будущем
10. Если в ответе есть дата и время, либо явно указывайте часовой пояс и сдвиг, либо используйте timestamp и работайте с utc.


Стартапы в России и плюшки 🇷🇺 + 🍩 = 📈

А вот о чем действительно немногие знают, что в России у стартапов тоже периодически появляются довольно большие бонусы от мировых брендов. Ярким примером этому служит программа Microsoft Global Pilots.

Да, безусловно, чтобы туда отобраться надо постараться и попотеть, хотя в тот же 500 startups и прочие акселераторы долины попасть даже труднее, но и бонусов такая программа может дать немало. Как минимум с вами будут работать архитекторы Microsoft, отвечающие за Azure и все что связано ML/AI + есть большая вероятность получить грант на использования Microsoft Azure (и возможно других проектов), а для стартапа это бесценные ресурсы, которых всегда будет не хватать на первых этапах жизни.

Подробнее о том, кто в этом году отобрался можно прочитать здесь. И не могу не отметить, что мы одни из тех, кто это сделал и будет плотно сотрудничать с ребятами из Microsoft. Ждите подробностей :)

Показано 20 последних публикаций.

667

подписчиков
Статистика канала