![](https://webcf.waybackmachine.org/web/20231203191746im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/a56/1b9/cf0/a561b9cf0817030d23b0160065feb537.png)
Разбираемся, что же такое conditional types и как написать свои утилиты, такие как ReturnType, InstanceType, NonNullable и др., при помощи ключевых слов infer и extends.
Разбираемся, что же такое conditional types и как написать свои утилиты, такие как ReturnType, InstanceType, NonNullable и др., при помощи ключевых слов infer и extends.
В последнее время достаточно много выступлений, посвященных реализации подходов Domain Driven Design(DDD) в golang.
Я не буду останавливаться на value object, они в golang хорошо реализуются с помощью type defintions. А разберу работу с изменением аггрегатов.
Попытаюсь разобрать какие подходы распространены сейчас и почему DDD в go это сложнее, чем в других языках.
Продолжить цикл статей о подходах к структурированию сервисов поддержки и развития приложений мы с Михаилом Ковешниковым решили размышлением о ресурсной модели, а точнее о балансе между внутренней командой и аутсорсингом.
Довольно редко встречается ресурсно-сервисная модель, в которой все работы выполняются только штатными сотрудниками либо наоборот только субподрядчиками. Обычно выбор конкретного решения о балансировке ресурсов зависит от сложности бизнес-приложения, ситуации на рынке труда и особенностей клиента.
Мы хотим описать ключевые факторы, влияющие на выбор модели сорсинга, преимущества и недостатки использования внешних ресурсов.
Это пятая, заключительная статья из серии. В ней мы выложим получившегося бота на сервер.
Эта статья направлена именно на новичков, в ней я постараюсь объяснить тему ботов на примере сбора обратной связи.
Есть отечественный файрвол (NGFW) и есть документация для пользователей powered by GitBook. В этой документации работает простой поиск — только по словам и словосочетаниям. И это плохо, потому что нет ответов на вопросы: "Какие алгоритмы шифрования ipsec поддерживаются у вас?", "Как заблокировать ютуб?", "Как настроить DMZ?".
Хочется, чтобы поиск был “умным” и чтобы пользователи могли обращаться с подобными вопросами именно к поиску, а не к инженерам тех. поддержки. AI или ML внутри — не важно, как это называть. Но на простые вопросы из списка выше поиск должен отвечать.
Я решил эту задачу (Retrieval Question Answering), используя OpenAI API. Казалось бы, уже опубликованы сотни похожих инструкций, как это сделать. Но под катом будет не инструкция, а рассказ про сложности, которые пришлось решить на пути от идеи до запуска поиска.
Как известно любая большая программа на Си содержит много программных компонентов и, как следствие, много настроек: констант, макросов, конфигурационных структур и прочего. Всё это можно назвать одним словом: конфиги.
Все передают конфиги по-разному.
В этом тексте представлен способ передавать конфиги через скрипты сборки.
Crackme (как, впрочем, следует из названия) это программы, созданные специально для того, чтобы их взломать (понять алгоритмы, заложенные разработчиком, и используемые для проверки введенных пользователем паролей, ключей, серийных номеров). Подходы и методики, использованные в статье, ни в коем случае не должны применяться к программному обеспечению, производителями которого подобные действия не одобрены явно (например, в лицензионных соглашениях, договорах, и т.д.). Материал опубликован исключительно в образовательных целях, и не предназначен для получения нелегального доступа к возможностям программного обеспечения в обход механизмов защиты, установленных производителем.
Исследуемая crackme является оконным приложением, и написана на assembler. Наша задача состоит в том, чтобы понять алгоритм генерации ключа, найти валидный серийный номер (или номера), и написать кейген.
RAG (Retrieval Augmented Generation) - это популярный подход, объединяющий извлечение данных из баз и генерацию текста, позволяя моделям AI давать ответы на вопросы, основанные на информации, которую они не видели в процессе обучения. Важным этапом в развитии RAG является его эффективная оценка, и именно здесь на сцену выходит RAGAS (Retrieval Augmented Generation Automated Scoring) - метод автоматизированной оценки, который позволяет не только оценить качество ответов, но и анализировать процесс генерации в деталях.
Сейчас мы крупная федеральная компания с миллиардным оборотом, с устоявшимися процессами и высоким уровнем корпоративной культуры, но 15 лет назад все было иначе.
Давайте сразу вопрос на засыпку: может ли быть так, что клиент подключается, ну, например, к серверу www.python.org (самому настоящему, тому, к которому обращаются еще миллионы клиентов со всего мира), а потом использует его как прокси и гоняет через это подключение трафик до своего VPS для доступа в неподцензурный интернет? Если вы не уверены в ответе на этот вопрос или почему-то ответили "нет", то добро пожаловать в статью.
Я уже не раз рассказывал здесь о технологии XTLS-Reality (1, 2, 3) суть которой в том, что ваш прокси-сервер VPS может очень достоверно маскироваться под какой-нибудь популярный веб-сайт - принимать подключения, которые будут выглядит точно так же, как обращения к настоящему сайту, отвечать на них полностью аутентичным TLS-сертификатом, и в целом вести себя как тот настоящий сайт. Единственная проблема - сам IP-адрес. Немного подозрительно, когда к какому-нибудь якобы www.google.com постоянно обращается только один пользователь, а IP-адрес этого сервера на самом деле даже не относится к автономной сети Google.
Еще я рассказывал о разных вариантах проксировать трафик посредством вебсокетов и простых HTTP-туннелей через различные CDN
, такие как Cloudflare и Gcore. Вероятность того, что под блокировку попадет вся CDN гораздо ниже, чем что забанят какой-то один сервер или диапазон хостера, но та схема требовала регистрацию своего домена для работы через CDN.
И наверняка многим в голову приходила идея, а нельзя ли как-нибудь совместить эти два механизма? Проксироваться через CDN, но при этом "прикрываясь" каким-нибудь чужим доменом? Ответ: да, можно, и сейчас мы посмотрим, как именно.
Всем доброго дня! Комментарии к моей предыдущей статье о том, как я развиваю свой pet-проект, а также различные законы, подразумевающие локализацию персональных данных на серверах, размещенных на территории РФ (в частности Федеральный закон от 21.07.2014 № 242-ФЗ «О внесении изменений в отдельные законодательные акты Российской Федерации в части уточнения порядка обработки персональных данных в информационно-телекоммуникационных сетях»), озадачили меня идеей постепенного перевода всех данных приложения в РФ. В качестве сервера БД я отдал предпочтение сервису Supabase, который легко разворачивается в Docker на сервере.
В данном туториале я хочу обзорно пройтись по сравнению двух сервисов, представляющих собой не только СУБД, а BaaS (backend as a service), но внимание заострю именно на работе с данными, постараясь сравнить их функционал, производительность и простоту использования. Также приведу примеры обработки получения, обновления и удаления данных в Google Firebase Realtime Database и Supabase Realtime Database на JavaScript.
Стоит сразу сделать оговорку, что Realtime Database от Firebase - это облачная БД для хранения и синхронизации данных в реальном времени, в то время как БД от Supabase хоть и является её аналогом, но позволяет хостить базу данных самостоятельно ("под капотом" у Supabase располагается объектно-реляционная СУБД PostgreSQL).
Мы рассмотрим шаги, необходимые для переноса данных и обсудим примеры кода для реализации этого процесса.
За годы работы разработчиком iOS, я собрал множество инструментов и полезных штук, которые облегчают процесс разработки. В этой статье, я хочу поделиться одним из таких инструментов. Это будет не большая статья. Я покажу, как пользоваться этой утилитой, продемонстрирую её в действии. Надеюсь, что статья окажется полезной для вас.
Как можно начать переезжать на SwiftUI? Постепенно. Переписывать целый экран слишком дорого по времени, а вот переписать ячейку или кнопку куда быстрее. Таким способом можно мигрировать на SwiftUI, постепенно переписывая экран. В этом поможет класс HostingView.
Пьеса в трех актах. Акт 1.
399 год с апокалипсиса, подземный бункер.
Действующие лица:
Сократ - ИИ
Платон – 60 лет, главный создатель ИИ
Деймона – 35 лет, жена Платона
Анит – 30 лет, хранитель мира между полисами
Мелет –30 лет, главный торговый представитель полиса
Биос – 50 лет, глава суда присяжных
Дедал – 50 лет, главный инженер
Аполлодор – 20 лет, слушатель Сократа
Херомонт –20 лет, свидетель по делу Сократ
Мои фантазийные размышления, после прочтения “Гладь, люби, хвали” за авторством Насти Бобковой и Нади Пироговой. Будут дельные цитаты из книги. Мои размышления и параллели с офисной работой. Картинки. Ссылки, что почитать. И всё это под вкусный чаёк или кофеёк, который, я надеюсь, вы себе уже налили.
Погнали!
Добрый вечер ребята, листая хабр я заметил тенденцию к отсутствию качественного, авторского, и связанного с IT контента, поэтому расскажу о том кто такой хакер, опишу несколько приёмов читерства, и попробую дать представление об этом легендарном термине (разумеется в рамках моих способностей).
Возникла задача проверки нескольких типов пользовательских документов Excel. Проверка должна покрывать такие аспекты как корректность шаблона (наличие ожидаемых страниц, колонок таблиц) и корректность данных (присутствие обязательных значений, корректность значений точки зрения форматов, отсутствие дубликации, итд).
Пользователю нужно возвращать информацию "что не так с файлом": какую проверку не прошел файл и где конкретно в файле проблемные данные.
Эта задача - про качество данных и очень напоминает тестирование. Так почему не использовать фреймворк тестирования pytest, и не написать тесты на каждый проверяемый аспект и для каждого типа файлов? Однако, есть небольшое "но". проверка должна быть реализована в качестве сервиса, чтобы встраиваться в более широкий процесс обработки пользовательских документов.
Давайте посмотрим, как заставить pytest работать внутри сервиса. Это не так тривиально, как может показаться на первый взгляд.
Использование спецификации открыло для меня новый мир в создании приложений.
Репозитории предоставляют удобное решение для доступа к данным.
Однако за многолетний опыт разработки, побывав в нескольких компаниях, сменив кучу проектов я НЕ ВСТРЕЧАЛ паттерн "Спецификация" совместно с паттерном "Репозиторий".
Ваш аккаунт