Search
Write a publication
Pull to refresh
3
0

Пирожочек

Send message

GraphQL для C#. БД прилагается

Level of difficultyEasy
Reading time10 min
Views3.4K

Приветствую, Хабр! Относительно недавно я решил влиться в С# и его технологию для создания веб-приложений ASP.NET. До этого писал в основном на С++ и Python с Django. Ну а так как я по жизни практик, то и чтоб чему-то научиться, надо что-то сделать, пусть и корявенькое (хотя пару книжек, конечно, прочитал). Выбор пал на стандартное приложение магазина книг, а точнее его бэк составляющую, ибо с дизайном и любыми, даже базовыми, проявлениями фронтовой части я не дружу от слова совсем)

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

Читать далее

Как создавать lock-free структуры данных в C# на базе CAS и Thread.Volatile

Level of difficultyEasy
Reading time5 min
Views2.6K

Привет, Хабр!

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

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

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

Читать далее

Умный принт-сервер: печать и скан без драйверов на старых принтерах + финансирование опенсорса

Level of difficultyEasy
Reading time18 min
Views39K

TL;DR: из-за отсутствия «умных» принт-серверов на рынке сделал собственное устройство, позволяющее печатать и сканировать на старых USB-принтерах через Wi-Fi и Ethernet, с любого смартфона и компьютера под любой ОС, без установки драйверов (AirPrint/Mopria). Девайс включает не только распространённые открытые драйверы, но и проприетарные, в режиме эмуляции x86-кода, plug&play.

Особенностью проекта является со-финансирование открытого ПО: разработчики сервера печати CUPS и сканирования SANE/AirSane получают по $2 с каждого проданного устройства, а оставшиеся деньги формируются в пул, для улучшения существующих открытых драйверов и написания новых.

Читать далее

Пишем свой PyTorch на NumPy. Часть 1

Level of difficultyEasy
Reading time16 min
Views9K

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

В этой статье мы реализуем собственную библиотеку машинного обучения на NumPy!

Читать далее

Пишем свой PyTorch на NumPy. Часть 2. Добавляем новые слои

Level of difficultyEasy
Reading time21 min
Views4.2K

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

В этой статье мы продолжим реализовывать собственную библиотеку машинного обучения на NumPy!

Читать далее

Мы ускорили JOIN в ClickHouse… в 100 раз

Level of difficultyMedium
Reading time8 min
Views18K

Недавно мы представили два новых пул-реквеста в ClickHouse, которые будут доступны в ClickHouse 24.4. Эти изменения повышают производительность JOIN'ов во многих производственных сценариях, в некоторых случаях увеличивая скорость выполнения запросов на несколько порядков.

Читать далее

Немного об отладке. Часть 1

Level of difficultyMedium
Reading time127 min
Views7.6K

Приветствую.

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

Но вот знаете ли вы как отладка устроена: точки останова, шаги, бэктрейс, чтение переменных?

Нет или да - ответ не важен. Эта статья даст ответы на многие вопросы об отладке, которые вы, возможно, и не задавали себе.

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

Путешествие на 20 минут

Что читали на Хабре в 2024 году: анализ статей с Node.js, Google Sheets и каплей ChatGPT

Level of difficultyEasy
Reading time13 min
Views8.7K

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

Всё началось с простого вопроса: «Как узнать, какие статьи на Хабре самые популярные?» Казалось бы - просто посмотреть на рейтинг или количество просмотров? Но ведь тут есть куча нюансов: например, у некоторых статей большой рейтинг, но они почти не комментируются. Или наоборот – комментов много, а рейтинга нет.

В общем, я решил выйти за рамки простого просмотра и создал систему для анализа данных Хабра за 2024 год. Использовал Node.js для парсинга, Google Таблицы для анализа и даже задействовал нейронную сеть, чтобы выявить скрытые тенденции.

Парсим и анализируем 🤖

Создаём CRUD REST API в Spring Boot быстро и просто вместе с Amplicode

Level of difficultyEasy
Reading time9 min
Views5.5K

Не так давно на нашем канале вышло видео, в котором Георгий Власов рассказывал, как с помощью Amplicode можно сгенерировать CRUD Rest Controller сразу со всеми необходимыми методами.  

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

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

Давайте посмотрим как эти фичи выглядят на практике!

Читать далее

Реверс-инжиниринг формата данных кабельного канала Sega

Level of difficultyEasy
Reading time9 min
Views5.5K

Sega Channel — это сервис games-on-demand, предоставлявший абонентам кабельного телевидения ежемесячный доступ к библиотеке из примерно пятидесяти игр для Sega Genesis за помесячную оплату (обычно 10-15 долларов, в зависимости от поставщика услуг кабельного телевидения). Он работал с июня 1994 года (общий доступ по всем США включили в декабре 1994 года) по июнь 1998 года. Абонентам предоставлялся картридж-адаптер, подключавший их консоль Genesis к линии кабельного телевидения. При включении консоли картридж искал сигнал Sega Channel, а затем скачивал меню игр. Этот процесс обычно занимал примерно двадцать секунд. Затем пользователь выбирал игру и примерно минуту ждал, пока она загрузится в ОЗУ адаптера. Далее игра работала точно так же, как картридж из магазина. Отключение системы или нажатие кнопки меню на адаптере удаляло скачанную игру, но данные сохранений игры оставались в нём, пока пользователь не скачивал другую игру. Наряду с продававшимися в рознице играми в Sega Channel был раздел «Test Drives», в нём пользователи могли играть в урезанные по времени или контенту версии игр, которые позже выпускались в розничную продажу. Кроме того, было несколько игр, доступных только через Sega Channel, хотя по большей мере это были проекты, в качестве которых Sega или издатель были не уверены, а потому не хотели выпускать их на физических картриджах. Успех Sega Channel был довольно умеренным, на пике популярности на него были подписаны примерно 250 тысяч абонентов.

Читать далее

ZIP-бомба в формате Apache Parquet

Reading time5 min
Views6K


Давние хаброжители помнят, как в 2015 году ZIP-бомба в формате PNG ненадолго вывела из строя Habrastorage. С тех пор появились новые разновидности этого «оружия»: например, разработаны нерекурсивные и компиляторные бомбы (29 байт кода → 16 ГБ .exe).

Подобного рода экспоиты можно встроить не только в формат ZIP или PNG, но и в других форматы файлов, которые поддерживают сжатие. Например, в формате Apache Parquet.
Читать дальше →

На чём учатся современные модели машинного перевода: опыт команды Яндекс Переводчика

Reading time17 min
Views6K

В сервисе Яндекс Переводчик мы поддерживаем перевод между 102 языками. Наша цель — обеспечивать качественный перевод для самых разных типов данных: текстов, документов, HTML, изображений и видео. Сегодня обсудим ключевой компонент для обучения моделей машинного перевода — данные для обучения.

Современные нейросетевые подходы очень требовательны как к объёму данных в обучении, так и к их качеству. Для получения хорошей переводной модели требуются сотни миллионов, а в идеале миллиарды параллельных предложений (пар из предложения и его перевода). Возникает вопрос: откуда их взять и что это за данные?

В этой статье я расскажу о том, как из текстов интернета в 100 ПБ найти терабайты суперчистых данных с переводами между любыми языками. Вы узнаете, почему эта задача требует обучения больше десятка различных вспомогательных ML‑моделей. А ещё коротко подсвечу, какое место в этом процессе занимает наша YandexGPT и что это за зверь такой — YandexGPT‑MT.

Читать далее

Лямбда-выражения в Java

Level of difficultyEasy
Reading time5 min
Views5.3K

Статья кратко описывает основные концепции и преимущества использования лямбда-выражений в Java, а также их применение в сочетании с функциональными интерфейсами и новыми возможностями, такими как stream() и ссылки на методы. Она будет особенно полезна начинающим тестировщикам-автоматизаторам, знакомящимся с современными подходами к работе с кодом.

Читать далее

Оптимизация ядра WebGPU для перемножения матриц и достижения производительности свыше 1ТФЛОПС

Reading time12 min
Views2.3K

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

Я работаю в компании Nomic, и многие из моих коллег заняты созданием больших TSNE-подобных визуализаций, работающих в браузере. При визуализации таких двумерных карт возникает две проблемы: проецировать эти конструкции (напр. TSNE и UMAP) в 2D-координатную систему протекает медленно и требует больших затрат оперативной памяти, особенно по мере того, как вы увеличиваете датасет и пытаетесь визуализировать в браузере миллионы точек данных, не расплавив при этом ноутбук невзначай.

Отобразить в браузере миллионы точек данных, не расплавив компьютер — та ещё задача. Мне доводилось слышать, что многие проблемы с масштабированием удаётся решать при помощи инструмента Deepscatter, разработанного Беном Шмидтом.

Но многие из таких разговоров, которые мне известны, вертятся вокруг Typescript и великолепия WebGPU как такового. Готовя эту статью, я не смог найти ни одной библиотеки для автоматического дифференцирования выражений, которая была бы написана с применением WebGPU. Но было бы упущением не назвать здесь два репозитория с функционально схожим наполнением: webGPT (библиотека на основе трансформеров, приспособлена только для логического вывода) и webgpu-blas (ядра для быстрого перемножения матриц под webGPU). Поэтому, в качестве самообразования и желая получше изучить WebGPU и Typescript, я решил написать Surfgrad, высокопроизводительную библиотеку для автоматического дифференцирования выражений под управлением WebGPU. Она обеспечивает тензорные операции в браузере. Как понятно по названию и по принципу работы, она во многом сделана по примеру tinygrad и micrograd.

Читать далее

constexpr Game of Life

Level of difficultyMedium
Reading time20 min
Views22K

В C++ уже больше 10 лет существует constexpr, который позволяет программисту ушло возложить часть вычислений на компилятор. В свое время это взорвало мне мозг, ведь компилятор может посчитать какие-то достаточно сложные вещи еще до запуска программы!

В какой-то момент я подумал: если компилятор сможет сам посчитать все за тебя, то зачем тогда тебе вообще рантайм? Что ты там будешь делать — ответ выводить что ли? Глупости какие-то. Это неспортивно.

На этом моменте и зародился мой челлендж:

"Без рук" или "даже не думай запускать exe-файл"

Челлендж принят!

Воспоминания о GeoCities, предтече социальных сетей из 1990-х годов

Level of difficultyEasy
Reading time6 min
Views2K

Если в 90-е годы вам приходилось пользоваться интернетом, возможно, вы помните сайты на домене GeoCities. Это популярный веб-хостинг, действовавший в США с 1994 по 2009 год включительно. В Японии он и вовсе продержался вплоть до 2019 года. На пике популярности хостинг GeoCities обслуживал десятки миллионов персональных сайтов. В сегодняшней статье мы кратко пройдемся по истории компании и в заключение посмотрим на наиболее «характерные» сайты ушедшей эпохи 90-х.

Читать далее

Доверяй, но проверяй: Как парсинг помогает выявить фейки в НСИ

Level of difficultyEasy
Reading time3 min
Views2.5K

Меня побудило написать статью желание прежде всего поделиться файлом Excel, содержащим информацию о состоянии всех ГОСТов на текущий момент. О парсинге сайтов в открытых источниках, включая сам Хабр, достаточно информации. Кроме того, мне хотелось немного порассуждать о том, где и как можно применить эти данные и на что они могут повлиять.

Для проверки определенных типов данных я предлагаю парсинг сайтов, а автоматизация исправления уже на ваш вкус. Например, различные языки программирования. Лично я за весь свой опыт использовал: C#, Python, VBA для работы с Excel, в зависимости от ситуации.

Читать далее

Работа с RISC-V контроллерами на примере GD32VF103 и CH32V303. Часть 1: введение и Hello world

Reading time16 min
Views9.5K

Макетная плата GD32VF103


Часть 1. Введение


Часть 2. Память и UART


Часть 3. Прерывания


Часть 4. Си и таймеры


Часть 5. DMA


Начинаю выкладывать курс по изучению контроллеров RISC-V на примере GD32VF103 и чуть более мощного CH32V303. Основной упор будет скорее на теорию и технологии, чем на "быстрый старт" и "электронику для домохозяек". То есть ассемблер, регистры и самодельные печатные платы.

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

Разработка Task Manager с нуля до полнофункционального продукта

Level of difficultyHard
Reading time13 min
Views9.7K

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

Мы пройдём весь путь — от установки необходимых инструментов и настройки окружения до разработки интерфейса и деплоя приложения на сервере. Каждый этап будет сопровождаться объяснениями и примерами кода, которые вы сможете найти в репозитории на GitHub.

Читать далее

Простой телеграмм бот на sh, или ещё одно применение старому роутеру

Level of difficultyEasy
Reading time4 min
Views3.9K

Лежит старый роутер без дела. Почему бы ему не стать сервером для простого телеграмм бота?

В моём случае роутер — копеечный tp link tl-wr740N 4/32 мегабайта, поэтому наш бот не будет использовать каких-либо фреймворков или библиотек. Благодоря telegram api нам достаточно уметь отправлять и принимать https запросы. Поэтому вместо использования какого-либо ЯП мы будем использовать обычный скрипт(однако я изначально планировал использовать с++, потому что мне он роднее).

Читать далее

Information

Rating
Does not participate
Registered
Activity