Pull to refresh
-7
0.2
Send message

Специалисты по информатике изобрели новый эффективный способ подсчёта уникальных элементов

Reading time4 min
Views18K

Представьте, что вас отправили в девственный тропический лес, чтобы провести перепись диких животных. Каждый раз, когда вы видите животное, вы делаете снимок. Ваша цифровая камера будет фиксировать общее количество снимков, но вас интересует только количество уникальных животных — всех тех, которых вы ещё не посчитали. Как лучше всего получить это число? «Очевидное решение — запомнить всех животных, которых вы уже видели, и сравнивать каждое новое животное с этим списком», — говорит Лэнс Фортноу, специалист по информатике из Иллинойского технологического института. Но есть и более умные способы, добавил он, потому что если у вас тысячи записей, то очевидный подход далеко не так прост.

Всё становится ещё хуже. Что, если вы — Facebook, и вам нужно подсчитать количество отдельных пользователей, которые заходят на сайт каждый день, даже если некоторые из них заходят с нескольких устройств и в разное время? Теперь мы сравниваем каждый новый вход со списком, который может исчисляться миллиардами.

Читать далее
Total votes 72: ↑71 and ↓1+81
Comments50

Интуитивное понимание пространств и ядер в машинном обучении: Часть 1

Level of difficultyHard
Reading time9 min
Views6.7K

При изучении темы ядер (kernel) в ML/DS программы вузов, роадмэпы и видео на YouTube обычно рассматривают её через призму SVM, не говоря уже о всеми любимых курсах:). Казалось бы, это неплохо: вот тебе краткое объяснение и модель, которая использует ядра. Но, увы, в этих областях желательно понимать многие процессы интуитивно, так сказать — «тяжело в учении, легко в бою». К тому же, эта тема нечто большее, чем просто метод; она позволяет связать многие вещи в машинном обучении в единую картину через пространство, что я и хочу показать в этой статье.

Читать далее
Total votes 20: ↑18 and ↓2+20
Comments12

Как я разработал квадрокоптер на ESP32 с нуля (ушло 4 года)

Level of difficultyMedium
Reading time12 min
Views46K

При сборке квадрокоптеров и других БПЛА обычно используют готовую плату полетного контроллера, содержащую все необходимые датчики и периферию, и готовую полетную прошивку, например, Betaflight, ArduPilot или PX4. Полетный контроллер управляет моторами квадрокоптера и обеспечивает стабильный полет.

Занимаясь БПЛА с 2016 года, я решил разобраться в устройстве полетных контроллеров максимально глубоко и создать квадрокоптер с нуля, не используя готовый полетный контроллер и готовый софт. Спустя долгое время разработки мне удалось это сделать. Я написал прошивку с максимально простым исходным кодом и выложил ее на GitHub. В этой статье я расскажу о теории и практике разработки полетного софта для квадрокоптера и проиллюстрирую это на примере своего дрона на базе микроконтроллера ESP32, который можно увидеть на картинке выше.

Читать далее
Total votes 312: ↑312 and ↓0+371
Comments132

Теория типов

Level of difficultyMedium
Reading time43 min
Views30K

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

Что можно узнать из этой статьи?
Total votes 75: ↑75 and ↓0+75
Comments70

Как пытались (пере)программировать мозги, и что из этого получилось? Часть 7: спецобъект во Фриско и шаманы Мексики

Level of difficultyEasy
Reading time13 min
Views9K

Итак, увлечённый экспериментами по контролю над разумом глава проекта ЦРУ MKUltra Сидни Готтлиб в своём стремлении максимально расширить опытную базу не придумал ничего лучше, чем сначала создать сеть тайных и довольно жестоких опытов над пациентами и заключёнными, а затем организовать систему легальных грантов на исследования влияния ЛСД на человеческую психику в университетах и клиниках США. Но совсем уж лютый угар у участников проекта начался тогда, когда новые площадки для секретных экспериментов были развёрнуты в Сан-Франциско, а специальные агенты ЦРУ отправились в Мексику в поисках индейских шаманов.

Все части цикла статей о Сидни Готтлибе и проекте MKUltra:
Читать дальше →
Total votes 45: ↑43 and ↓2+65
Comments8

Цвет волшебства: медитирующий мозг в прицеле энцефалографа

Level of difficultyEasy
Reading time9 min
Views14K

«Любая достаточно развитая технология неотличима от магии». (с). 

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

Читать далее
Total votes 22: ↑17 and ↓5+17
Comments54

Многокритериальная оптимизация для ранжирования и отбора торговых систем

Level of difficultyMedium
Reading time7 min
Views2.3K

Отбор торговых систем: как выбрать лучшие из произвольного количества имеющихся

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

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

Читать далее
Total votes 6: ↑5 and ↓1+7
Comments2

Как языковая модель предсказывает следующий токен (часть 1)

Reading time27 min
Views7.1K

Я обучил небольшой (порядка 10 миллионов параметров) трансформер по превосходному туториалу Let’s build GPT: from scratch, in code, spelled out Андрея Карпати. После того, как он заработал, я захотел максимально глубоко понять, как он устроен внутри и как создаёт свои результаты.

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

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

Если вы знакомы с трансформерами и хотите сразу узнать вывод, то он таков: каждый блок трансформера (содержащий слой многоголового внимания и сеть с прямой связью) изучает веса, связывающие конкретный промт с классом строк, найденных в обучающем корпусе. Распределение токенов, соответствующее этим строкам в обучающем корпусе, и есть приблизительно то, что блок выводит как прогноз для следующего токена. Каждый блок может ассоциировать один и тот же промт со своим классом строк обучающего корпуса, что приводит к другому распределению следующих токенов, а значит, и к другим прогнозам. Окончательный результат работы трансформера — это линейное сочетание прогнозов каждого блока.

Читать далее
Total votes 27: ↑27 and ↓0+27
Comments5

Утечки памяти, которые не утечки

Level of difficultyMedium
Reading time10 min
Views20K

Что случилось? Авария, ужас-ужас

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

В один прекрасный день боевое сопровождение приходит с ужасной проблемой — память в контейнерах Node.js течёт, сервисы падают с OOM каждый день, все пропало!

Да, картинка действительно удручающая. Всё время, когда есть нагрузка, память в контейнере прирастает и почти не очищается при снятии нагрузки. Все остальные метрики, которые мы собирали были в норме: event loop lag, использование CPU, active request, open handles. Прирастала только используемая память и незначительно увеличивалось время отклика сервиса.

Что-ж, выглядит как классическая утечка, надо искать источник.

Читать далее
Total votes 95: ↑94 and ↓1+106
Comments15

Разбираемся с работой брокеров, или Что такое гарантия доставки сообщений и как с этим жить…

Level of difficultyMedium
Reading time12 min
Views4.8K

В эпоху мгновенной коммуникации, гарантия доставки сообщений становится не просто плюсом, но и неотъемлемой частью репутации сервиса. Как быть уверенным, что ваше сообщение дойдет до адресата именно тогда, когда это нужно? Привет, Хабр, меня зовут Сергей Коник, я работаю в Самолете на должности старшего разработчика и одна из проблем, с которой сталкивались наши команды, – это потеря важных сообщений при общении между сервисами. Расскажу сегодня основы, как с этим работать.

Читать далее
Total votes 15: ↑14 and ↓1+13
Comments10

С новым годом: GPT в 500 строках на SQL

Reading time42 min
Views38K

В минувшем году все только и говорили об ИИ и о том, как он может всё за вас сделать.

Мне нравится, когда кто-то или что-то работает за меня. Поэтому решил: попрошу-ка ChatGPT написать за меня новогодний пост:

«Эй, ChatGPT. А ты можешь реализовать большую языковую модель на SQL?»
«Нет, SQL не подходит для реализации больших языковых моделей. Язык SQL предназначен для выполнения запросов к данным, хранящимся в РСУБД и для управления этими запросами. Для реализации большой языковой модели требуются сложные алгоритмы, обширные датасеты, а зачастую — и фреймворки для глубокого обучения. SQL всеми этими возможностями не обладает.»

Что ж, лишний раз убеждаешься, что, если хочешь что‑то сделать хорошо – сделай это сам.

Давайте же воодушевимся этим оптимистическим планом и реализуем большую языковую модель на языке SQL.

Читать далее
Total votes 180: ↑176 and ↓4+206
Comments21

Пишем gRPC сервис на Go — сервис авторизации

Level of difficultyMedium
Reading time63 min
Views44K

Пишем gRPC сервис на Go — сервис авторизации


В этой статье мы научимся писать полноценный gRPC сервис на Go на примере сервера авторизации с полноценной архитектурой, готовой к продакшену. Мы напишем как серверную часть, так и клиентскую. В качестве клиента мы возьмём мой сервис — URL Shortener, о котором у меня также есть статья и видео-гайд на ютубе. Попутно мы познакомимся с базовыми подходами к работе с авторизацией. И в конце настроим автоматический деплой сервиса с помощью GitHub Actions на удалённый сервер.


Видео-версия этого гайда с более подробными объяснениями

Исходный код проекта: https://github.com/GolangLessons/sso


Итого, наш план:


  • Напишем простой, но полноценный gRPC-сервис
  • Разберемся с базовыми принципами работы авторизации — чтобы не было скучно
  • Настроим автоматический деплой в прод — потому что руками деплоить лень
  • Подружим его с уже готовым сервисом URL Shortener — чтобы был практический смысл
  • Напишем полноценные функциональные тесты

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


Кратко обо мне: меня зовут Николай Тузов, я много лет занимаюсь разработкой на Go, очень люблю этот язык. Также веду свой YouTube-канал.

Читать дальше →
Total votes 62: ↑60 and ↓2+66
Comments44

Как я с 0 поднял свой уровень английского до B2 и подтвердил этот уровень на экзамене IELTS Academic

Level of difficultyEasy
Reading time10 min
Views157K

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

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

Начнем с бекграунда и причин.

Я – инженер машиностроитель (мой профиль – торцевые уплотнения вращающихся валов). Я начал работать в своей отрасли сразу после бакалавра, параллельно заканчивая магистратуру, и как только я начал работать, я стал стараться впитать как можно больше теоретических знаний по моей специальности из академических источников. Достаточно бысто я понял, что последняя серьезная книга по моей специальности на русском языке была написана в 1978 году. И спустя больше чем 40 лет технологии сильно поменялись, а вот их описание на русском языке отсутствовает. Зато я нашел на reddit людей работающих в штатах в моей же отрасли. Они мне насоветовали кучу классной литературы. Разумееется, она вся на английском, и русского перевода не имеет.

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

Конечно, перед началом обучения я прочитал много статей на хабре о том как люди учат языки. Некоторые из них поражали скоростью овладения материалом (что-то вроде с нуля до fluent за 4 месяца). Но одна вещь была неизменна – у всех был какой-то план изучения языка.

Читать далее
Total votes 150: ↑146 and ↓4+165
Comments220

Торговые роботы на Golang

Level of difficultyEasy
Reading time9 min
Views10K

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

Я Александр Парфенов, бэкенд-разработчик в Тинькофф Инвестициях и автор InvestAPI SDK для языка Go. Расскажу о том, как автоматизировать торговые стратегии при помощи Tinkoff INVEST API и языка Go.

Читать далее
Total votes 14: ↑12 and ↓2+14
Comments7

Локальные нейросети. Аналог ChatGPT-3.5 на домашнем ПК: OpenChat 7B превосходящая 70B, DeepSeek для кода уровня ChatGPT

Reading time8 min
Views84K

Есть много локальных аналогов ChatGPT, но им не хватает качества, даже 65B модели не могут конкурировать хотя бы с ChatGPT-3.5. И здесь я хочу рассказать про 2 открытые модели, которые всё-таки могут составить такую конкуренцию.

Речь пойдет о OpenChat 7B и DeepSeek Coder. Обе модели за счет размера быстры, можно запускать на CPU, можно запускать локально, можно частично ускорять на GPU (перенося часть слоев на GPU, на сколько хватит видеопамяти) и для такого типа моделей есть графический удобный интерфейс.

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

UPD: Добавлена информация для запуска на Windows с ускорением на AMD.

Читать далее
Total votes 88: ↑86 and ↓2+102
Comments87

Корутины для Go

Level of difficultyMedium
Reading time21 min
Views8.6K

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

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

В отличие от подпрограмм, корутины выполняются конкурентно на разных стеках, но все равно верно, что одновременно выполняется только одна функция, а ее вызывающая сторона ждет. F запускает G, но G не выполняется немедленно. Вместо этого F должен явно возобновить (resume) выполнение G, который затем начинает выполняться. В любой момент G может развернуться и вернуться (yield) назад к F. Это приостановит G и продолжит F операцию возобновления. В конце концов F снова вызывает resume, который приостанавливает F и продолжает G после выхода. И так далее, туда-сюда, пока G не вернется, что приведет к очистке G и продолжению F с последней операции возобновления, с некоторым сигналом для F, что G закончена и F больше не должна пытаться возобновить G. В этом паттерне одновременно выполняется только одна корутина, а ее вызывающая сторона ждет на другом стеке. Они выполняются по очереди в четко определенном, скоординированном порядке.

Это несколько абстрактно. Давайте посмотрим на реальные программы.

Читать далее
Total votes 13: ↑11 and ↓2+9
Comments5

Эксперимент: сделать Telegram канал и зарабатывать на рекламе больше 500 тысяч в месяц

Reading time8 min
Views126K

Привет! Меня зовут Аня!
Хабр я читаю уже давно, решила что теперь и у меня есть интересный материал, чтобы с вами поделиться :)

В начале 2023 года начала заниматься Telegram каналами и за 10 месяцев я создала 6 каналов в Telegram, на которые подписано уже более 70 000 подписчиков.

До Telegram я занималась парсингом данных сайтов на VB, созданием сайтов (wordpress, tilda) и бизнес-презентациями. Был даже свой собственный интернет-магазин детских товаров 2 года (опыт был неудачным, тогда еще нельзя было продавать через маркетплейсы )) 

Я расскажу вам о своем опыте создания и монетизации Telegram-каналов, об ошибках, которые я допустила в начале своего пути, и постараюсь сформулировать основные принципы и возможности заработка в этой сфере (кстати считаю, что IT -тематика одна из самых перспективных сегодня для создания телеграм-канала) 

Читать далее
Total votes 149: ↑35 and ↓114-72
Comments81

15 примеров задач по SQL на собеседовании по вакансии системного аналитика

Level of difficultyMedium
Reading time15 min
Views58K

Привет, Хабр! Если вы читаете этот материал, скорее всего, вы готовитесь к собеседованию. Важным аспектом работы системного аналитика (СА) является умение эффективно работать с базами данных, и SQL — это ключевой инструмент для этого. Будьте готовы, что на техническом собеседовании вас могут попросить назвать операторы SQL, написать запросы для извлечения, обновления или удаления данных, создания новых таблиц и многого другого. Давайте посмотрим на некоторые примеры таких заданий.

Читать далее
Total votes 13: ↑7 and ↓6+2
Comments17

Это мы пишем и обслуживаем банковский процессинг, нам надо серьёзно поговорить

Reading time11 min
Views22K
В марте-22 внезапно отключились Visa и MasterCard. Это посредники передачи информации между разными банками. По сути, системы обеспечивают маршрутизацию сообщений между банками и позволяют вам использовать карту любого банка с банкоматом или платёжным терминалом другого, а заодно проверяют операции на фрод и делают ещё много чего.

Потом было 2–3 дня, когда мы не спали. Мы — это разработчики компании Мультикарты (входит в Холдинг T1) — одного из самых крупных процессингов в России, да и в мире, пожалуй.

Потом система восстановилась (не сама собой, конечно), и конечные пользователи (вы) практически не почувствовали проблем с сервисом.

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

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

Поэтому ниже — общий рассказ про принципы процессинга. Пойдёмте ковыряться под капотом.

image
Читать дальше →
Total votes 78: ↑71 and ↓7+74
Comments37

Как выстроить удобные процессы в работе с монорепой

Level of difficultyMedium
Reading time14 min
Views6.1K

Как настроить общее рабочее пространство для команды без запуска сборки в watch-режиме и ожидания старта dev-сервера, чтобы подхватить изменения? Для этого нужно удобным для всех образом настроить переиспользование кода внутри монорепы.

Нам поможет Андрей Кочеров, старший разработчик интерфейсов в Яндекс Такси и техлид фронтэнд команды партнёрских продуктов. Он расскажет как сделать готовый к работе репозиторий сразу после чекаута, на основе методологии Trunk Based Development.

Читать далее
Total votes 11: ↑8 and ↓3+7
Comments1
1

Information

Rating
2,417-th
Registered
Activity