Search
Write a publication
Pull to refresh
3
0

Разработчик(в основном на С#)

Send message

Разрабатываем свой браузер с нуля. Часть первая: HTML

Reading time15 min
Views64K


Всем привет!


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


В данной статье я расскажу как создать самый быстрый HTML-парсер c DOM. Мы рассмотрим HTML спецификацию и чем она плоха относительно производительности и потребления ресурсов при разборе HTML.


С данной темой я докладывался на прошедшем HighLoad++. Конференцию не каждый может посетить, плюс в статье больше деталей.


Я предполагаю, что читатель обладает базовыми знаниями об HTML: теги, ноды, элементы, пространство имён.

И так, начнём!

Разрабатываем свой браузер. Часть вторая: CSS

Level of difficultyEasy
Reading time15 min
Views4K


Всем привет!


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


Да, лучше поздно, чем никогда. Да, перерыв был большой.


В конце статьи я опишу, как поживает проект lexbor, что с ним происходит.


В этой статье я постараюсь раскрыть особенности парсинга Cascading Style Sheets (CSS). Расскажу, как вывернуть «ежа» наизнанку и как тестировать полученный результат.


В CSS спецификациях всё разжевано, ну, или почти всё, тут я расскажу, как всё устроено, куда смотреть и с чего начать.


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


И конечно, как это обычно бывает, мы замахнёмся на звание самого быстрого парсера CSS.

И так, начнём!

Создание масштабируемой и высокодоступной системы Postgres с помощью Patroni 3.0 и Citus

Reading time16 min
Views19K

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

Читать далее

Vue 3 на Typescript

Reading time10 min
Views58K

vue3+ts


Популярность Typescript растет день ото дня. Javascript нетипизированный язык(или слабо типизированный, если точнее), и одна и та же переменная способна принимать и строку, и число, и даже объект. С одной стороны, это делает язык гибким, с другой, потенциально ведет к многочисленным ошибкам. Typescript создан, чтобы решить эту проблему. Vue старается не отставать от моды, и в новой версии фреймворка была значительно улучшена поддержка языка. Теперь переход на Typescript проще и приятнее, чем был раньше. Хороший повод научиться чему-то новому, тем более, что в требованиях к вакансиям он встречается все чаще и чаще.


В этой статье мы перепишем тестовое задание, которое я разбирал ранее, на Vue 3 и Typescript и вдобавок используем обновленные Vue-Router и Vuex(критики, вы были услышаны).


Update: код в статье был улучшен в соответствии с пожеланиями.

Читать дальше →

GitOps c ArgoCD для конфигурации кластеров K8S/OKD/Openshift и приложений, размещаемых в них

Reading time10 min
Views4K

Всем привет, у нас в НЛМК создается множество приложений и систем для производства и поддержки бизнеса. Большинство размещаются в нашей Единой Цифровой Платформе (коротко ЕЦП), а по-современному: Internal Developer Platform.

Мы с коллегами как раз занимаемся развитием Единой Цифровой Платформы НЛМК, частью которой являются кластеры Openshift/OKD/K8S, количество которых постепенно увеличивается, что требует понятного, прозрачного подхода к управлению и конфигурированию как самих кластеров, так и различных приложений, работающих в них. Далее я расскажу, как мы это делаем с помощью ArgoCD и подхода GitOps

Читать далее

9 аналогов известных сервисов (Google Analytics, Slack, GitHub, ChatGPT) с открытым исходным кодом

Reading time3 min
Views12K

Все мы пользуемся разными сервисами — какими именно, зависит от специальности и текущей необходимости. GitHub, ChatGPT, Tableau и другие давно и прочно вошли в нашу жизнь. Но есть и аналоги этих востребованных сервисов, причём аналоги с открытым исходным кодом. Эта статья посвящена таким альтернативным сервисам и ПО. Вероятно, многие из них могут оказаться полезны для читателей. Если же у вас есть собственный вариант, расскажите о нём в комментариях.

Читать далее

Как я познакомился с BouncyCastle в .NET 7

Level of difficultyMedium
Reading time6 min
Views6.6K

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

Данная работа написана исключительно в рамках моих рабочих будней и не является профессиональным гайдом.

Читать далее

Делаем многопользовательскую кроссплатформенную RPG с нуля

Level of difficultyMedium
Reading time14 min
Views17K

Когда-то давно меня очаровал ADOM. Я даже и близко не подошёл к прохождению игры, но мне нравилось бродить по этому миру, собирать предметы с эффектом, который не прочувствуешь, пока не используешь. Нравилось, что монстры в подземельях имели какие-то зачатки собственного интеллекта, подбирали с пола вещи и использовали их. Всё время что-то происходило и менялось, проходишь по тому же месту – смотришь кто-то уже подобрал с пола монеты. Или предметы в инвентаре испортились. Мир как будто живёт своей жизнью. В пещерах можно идти по коридорам, а можно наугад пробивать туннели заклинанием в надежде отыскать потайную комнату, оставляя на полу груду камней. Мир полный возможностей и способов взаимодействия.

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

Читать далее

Пройди свой путь в ширину: библиотеки для графов из инди-игры TESTAMENT

Level of difficultyEasy
Reading time11 min
Views2.6K

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

Когда я начал работать над своим пет-проектом TESTAMENT, мне нужно было генерировать и отображать произвольные графы. Я хотел, чтобы локации были в виде простых шагов-событий, соединенных между собой. Примерами могут послужить проекты Slay The Spire, Cult of the Lamb, Darkest Dungeon и другие. Исследовав вопрос, я увидел, что существующие библиотеки слишком тяжелые и сложные для моих нужд.

Читать далее

Классификация аудиофайлов с библиотекой Librosa

Level of difficultyMedium
Reading time10 min
Views14K

Привет Хабр! В этой статье поработаем с аудиофайлами, используя библиотеку librosa и алгоритмы Machine learning.

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

Читать далее

Создание сервера для онлайн ММО игр на PHP ч. 7 — Игровые локации (тайловые карты)

Level of difficultyEasy
Reading time3 min
Views3.1K

Продолжая рассказывать о своем пути создания ПО для догружаемого контента в играх в этой статье хотел бы остановится на игровых картах (локациях).

Читать далее

Как айтишник гигантские арбузы в средней полосе выращивал. Часть 1

Level of difficultyEasy
Reading time8 min
Views27K

Хобби коллег очень многогранны. Сегодня расскажем об ИТ-шном подходе к выращиванию арбузов в регионе, где, казалось бы, нормально вызревать они не должны. Наш девопс, Игорь Иванов, объединил системный подход к сбору информации и комплектующие с AliExpress и из магазинов для садоводов, и уже не первый год собирает отличный урожай. 

Своеобразная “инструкцию для начинающих” получилась довольно объемной. Мы  разделили ее на две части: в первой автор разбирает теоретические основы, а во второй переходит к практике.

Осторожно, много фото!

Читать далее

Книга «ASP.NET Core Security» в правильном переводе команды DotNetRu

Reading time4 min
Views6.2K

Сообщество DotNetRu совместно с издательством ДМК Пресс договорились на доработку и проверку перевода очередной книги. Напомним, что мы уже помогли выпустить три книги: «Управление памятью в .NET для профессионалов» Конрада Кокосы,  «ASP.NET Core в действии» Эндрю Лока и «EF Core в действии» Джона Смита. Издатель делает первоначальный перевод, а ребята из сообщества в качестве экспертов корректируют текст, придавая переводу оригинальный и непротиворечивый смысл.

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

Рады представить вам очередной результат совместных усилий: книга Кристиана Венца «Безопасность ASP.Net Core» в правильном переводе DotNetRu. В продолжении поста — впечатления о процессе перевода от непосредственных участников и промокод на скидку от издательства.

Читать далее

Управлять инструментом, который управляет всем: наш путь к GitOps

Reading time5 min
Views4.9K

Вадим Гедзь, ведущий DevOps инженер, Dyninno Technologies

Всем привет! Сегодня я хотел бы рассказать о том, как в компании, где я работаю, происходит переход к GitOps. В команде разработки больше 300 человек, поэтому остро стоит вопрос управления конфигурациями и непрерывной интеграции кода. В этом кейсе я расскажу о том, как при переходе на GitOps мы исключили дрифт конфигурации между git репозиториями и инфраструктурой, отмечу преимущества и недостатки ArgoCD, как решили задачу secret management при использовании ArgoCD. Также затрону вопрос обратной связи после того, как Docker Image залит в Docker Register и до того, как ArgoCD начинает deployment, рассказав, как мы с коллегами в свое свободное время написали сервис Argo Watcher. 

Эта статья может быть интересна тем, кто задумывается о внедрении GitOps в свою инфраструктуру.

Читать далее

Алгоритмы балансировки нагрузок

Level of difficultyMedium
Reading time8 min
Views51K

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

В этом посте мы рассмотрим способы, которыми один балансировщик нагрузок может распределять HTTP-запросы на множество серверов. Мы начнём снизу и проделаем весь путь вверх до современных алгоритмов балансировки нагрузок.
Читать дальше →

Ломаем текстовую капчу на примере VK или брутфорсинг до сих пор актуален

Level of difficultyMedium
Reading time52 min
Views26K

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

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

А ну-ка поподробнее

11 полезных AI сервисов + Plasma AI Telegram бот с 160 ролевыми моделями, эксклюзивом от chatGPT 4 и MidJourney 5

Level of difficultyEasy
Reading time10 min
Views51K

После моей предыдущей статьи про 30+ задач, которые может выполнять chatGPT, мы решили запустить своего чат бота в Телеграм, которые за 3 месяца вырос до более 1 миллиона активных пользователей. Сегодня мы запустили большое обновление и функционал "Ролевых" моделей chatGPT 4, который превращает чат бота в продвинутого AI ассистента. Я хочу поделиться с вами новыми фичами и полезными возможностями бота, которые помогут каждому оценить потенциал AI технологий.

Читать далее

Своя альтернатива Google Maps: хостим сервер OpenStreetMap

Level of difficultyMedium
Reading time7 min
Views17K

Зачем? Это странно...


Нет, не странно! Google Maps — это, наверно, самый потрясающий сервис, который мы получаем бесплатно [в обмен на свои персональные данные].

Я пользуюсь им почти каждый день, он невероятно полезен для ориентирования на местности.

Но что, если бы нам вообще не нужен был Google?

OpenStreetMap бесплатно предоставляет всему миру данные карт, собранные при помощи краудсорсинга. Но я не имею в виду, что можно просто воспользоваться OSM. Эта организация предоставляет данные, однако политика использования стимулирует пользователей не полагаться на её серверы при личном пользовании, а брать на себя ответственность за хостинг. И глядя на этот проект, я понимаю, почему. Его аппаратные требования не для слабонервных.
Читать дальше →

Создаем свой собственный язык программирования с использованием LLVM. Часть 3: Генерация кода

Reading time29 min
Views6.7K

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

Читать далее

Создаем свой собственный язык программирования с использованием LLVM. Часть 4: Поддержка составных типов

Reading time54 min
Views4.3K

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

Читать далее

Information

Rating
4,597-th
Registered
Activity