Обновить
4
0

Пользователь

Отправить сообщение

Как онтология помогает представить структуру данных и семантику приложения

Время на прочтение11 мин
Просмотры1.7K

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

Меня зовут Алексей Гуляев. Я архитектор решений в команде VK Tech. В этой статье я расскажу об онтологии в ИТ, вариантах ее использования и нашем кейсе применения онтологического подхода для решения внутренней задачи.

Читать далее

История статической и динамической типизации

Уровень сложностиПростой
Время на прочтение14 мин
Просмотры6.7K

Привет, Хабр! Меня зовут Глеб, я Java-разработчик в Сбере. Сегодня я хочу рассказать про исторический контекст двух фундаментальных подходов к системе типов в программировании.

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

При динамическом же подходе эта информация для нас открывается только во время выполнения программы (run-time) — это даёт больше гибкости и потенциального удобства при написании кода, однако влечёт за собой множество очевидных проблем: любая ошибка, связанная с типами данных, просто не будет выявлена на этапе компиляции и потребует дополнительного тестирования.

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

Читать далее

Санпросвет о плавающей точке, статья первая: компьютеры и числа

Уровень сложностиПростой
Время на прочтение9 мин
Просмотры13K

Недавно мне понадобилось сэмулировать работу с плавающей точкой только при помощи целочисленной арифметики, поскольку флоаты были недоступны. Полез я было в интернет за готовой библиотекой, и чуть не утонул. Мало того, что я не нашёл того, что искал, это бог с ним. Я обнаружил, что в интернете кто-то неправ. :)

Оказалось, что форумы кишат людьми, которые не до конца понимают, как компьютеры манипулируют числами. Например, мемасик с КПДВ я стянул с реддита (перечеркнул его я). Кто-то настолько был напуган страшными ошибками округления чисел с плавающей точкой, что даже смешную картинку смастерил. Только вот проблема в том, что 0.5 + 0.5 в точности равно 1.0.

Таким образом, я решил засучить рукава, и изобрести велосипед. То есть, написать самую неоптимизированную C++ библиотеку для эмуляции IEEE754 32-битных чисел с плавающей точкой при помощи исключительно 32-битной целочисленной арифметики. Библиотека уложится в несколько сотен строк кода, и в ней не будет никакого битхакинга. Задача написать понятный код, а не быстрый. А заодно хорошенько его документировать серией статей.

Итак, этим полукреслом мастер Гамбс начинает новую партию мебели, или статья первая: поговорим о числах и компьютерах.

Читать далее

Как быстро собрать прототип AI-продукта на n8n.io

Время на прочтение5 мин
Просмотры4.7K

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

Сейчас задачи внедрения GenAI стали актуальными для множества организаций. В одном из проектов по созданию приложения на базе AI-сервисов было потрачено немало времени на формализацию и постановку задачи разработчикам, а потом еще много времени на последующую разработку прототипа.

Стремясь сократить время от идеи до рабочего прототипа, я стал искать no-code решение, которое позволит мне самостоятельно, без привлечения разработки, создавать не только AI – агентов, но и подключать различные инструменты к AI-агентам, а также организовывать взаимодействие между AI-агентами.

Читать далее

Одноразовый вейп в качестве веб-сервера

Уровень сложностиПростой
Время на прочтение5 мин
Просмотры92K

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

Предыстория

Уже пару лет я собираю коллекцию одноразовых вейпов, полученных от друзей и членов семьи. Поначалу я только извлекал аккумуляторы для «будущих» проектов (это точно не синдром Плюшкина), но в последнее время одноразовые вейпы стали гораздо более продвинутыми. Не хотел бы я быть юристом, которому придётся доказывать, что устройство с разъёмом USB C и перезаряжаемым аккумулятором можно классифицировать, как «одноразовое». К счастью, в ближайшее время я не планирую подаваться в юриспруденцию.

В прошлом году я разбирал одну из этих технологичных сосок для взрослых и заметил нечто любопытное: вместо обычной чёрной капли, которой заливают ASIC (Application Specific Integrated Circuit), я увидел небольшую интегральную схему с маркировкой «PUYA». Не буду винить читателей, если это название не вызвало у вас того же восторга, что и у меня — большинство людей никогда его не слышало. Эта компания больше всего знаменита своими флэш-чипами, но впервые я узнал о них из поста Джея Карлсона о самом дешёвом флэш-микроконтроллере. Это довольно мощные крошечные микроконтроллеры ARM Cortex-M0+.

За последний год у меня скопилось довольно много таких одноразок с PY32; это были разные модели вейпов одного производителя. Я не буду бесплатно рекламировать табачный бренд, но выражу благодарность проектировщику за маркировку на отладочных контактах!

Читать далее

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

Время на прочтение15 мин
Просмотры16K

В Си стандарта 2011 года добавили небольшую возможность "перегрузки" функций с помощью макроса. (Generic selection) Мне, очень интересно стало написать какую-нибудь функцию, которая максимально использовала бы эту возможность

Задумка: написать (макро) функцию print, которая выводит через пробел все переданные в нее аргументы. Звучит невероятно для Си, где обычно указывают тип принимаемого аргумента одной буквой в имени, и явно указывают число переданных аргументов. Но с джейнериками из C11 это возможно

Читать далее

Собираем комплекс для качественного офлайн-перевода текстов, работающий на самом обычном игровом компьютере

Уровень сложностиПростой
Время на прочтение11 мин
Просмотры9.3K

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

Читать далее

Bellmac-32: первый 32-битный процессор на CMOS-транзисторах

Время на прочтение9 мин
Просмотры5.7K

Во второй половине 70-х годов самыми популярными моделями процессоров были 8-битные Intel 8080, Motorola MC6800, MOS Technology 6502 и Zilog Z80. Но AT&T — телекоммуникационного гиганта, который хотел ворваться на рынок компьютеров, — такое положение не устраивало.

Руководство решило сделать ставку на производительность и обойти конкурентов, с ходу создав первый 32-битный процессор (16-битные 8086 только-только появлялись) на тогда еще достаточно «сырой» технологии CMOS транзисторов, когда весь мир использовал NMOS. Вот что из этого вышло.

Читать далее

Электроника в вопросах и ответах 3

Уровень сложностиСложный
Время на прочтение26 мин
Просмотры16K

Очередной электроквиз достиг публикации.
На этот раз состав участников весьма полярный: есть как обладатель кармы +525 и автор свыше 100 статей, так и участник с кармой +2 и нулём статей; как DIY-любители, так и представитель бизнеса, связанного с электроникой; как завсегдатаи Хабра, так и человек, узнавший об электроквизе на JoyReactor.

В остальном всё как и в предыдущие раз: 15 участников, 15 электротехнических вопросов и ответы на них.

Ответить на вопросы смежников

Как метод из аниме Mononoke помогает техническому писателю найти информацию

Уровень сложностиПростой
Время на прочтение7 мин
Просмотры9.3K

Технический писатель — своего рода проводник между разработчиками и пользователями. Мы берём техзадания, обрывочные комментарии, макеты, проходим процессы в продукте и создаем понятные инструкции. Часто на стадии подготовки возникают вопросы: «Где искать информацию — и какую?»

В некоторых командах проблема решается с помощью продактов, тимлида или автоматизации распределения задач. Однако так бывает далеко не всегда, и ответы могут найтись не сразу, особенно при высокой загруженности и в хаосе задач. Неожиданно, простая подсказка пришла из мира аниме: в сериале Mononoke (не путать с Принцессой Мононоке) персонаж по имени Аптекарь изгоняет злых духов, используя метод: «форма, суть, причина». Если не смотрели — не беда, в первую очередь мы говорим о структурированном подходе к поиску информации.

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

Читать далее

Аналог вложенным функциям на языке программирования Си

Уровень сложностиСредний
Время на прочтение5 мин
Просмотры6.1K

Полноценной замены вложенным функциям в языке программирования Си нет, но есть несколько способов, как их можно симулировать. Чаще всего в вложенных функциях нам важно то, что код определяется там же, где передаётся в качестве функции обратного вызова. Иногда этот код бывает настолько мал, что выносить его в отдельную функцию в глобальной области видимости смысла нет. Например, для сортировки массива по возрастанию с помощью функции типа qsort чаще всего достаточно такого кода: return e1 - e2;. Вынести его в отдельную функцию в глобальной области видимости, а затем ещё придумывать корректное название — так себе удовольствие. Вложенные функции, добавленные в GCC как расширение, могли бы решить эту проблему, но такой код не будет работать на других компиляторах языка Си.

Читать далее

Как я понял гипотезу Римана, и почему вы тоже можете

Уровень сложностиПростой
Время на прочтение16 мин
Просмотры21K

Если вы не поняли гипотезу, значит вам её плохо объясняли. И да, если что-то хочешь сделать хорошо, сделай это сам.

Читать далее

Василий и теория вероятностей. Показываю решение задачи

Время на прочтение5 мин
Просмотры4.8K

Привет! К первому сентября я публиковала задачку «Василий и теория вероятностей: а не решить ли задачку в честь 1 сентября?». Самое время обсудить решения.

Читать далее

Василий и теория вероятностей: а не решить ли задачку в честь 1 сентября?

Время на прочтение2 мин
Просмотры5.4K

Привет, меня зовут Диана, я математик и пишу для хабраблога МТС. Моя прошлая публикация была про скутоиды и набрала больше 40к просмотров — спасибо вам за ваш интерес!

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

Читать далее

Как устроена память внутри микропроцессора и при чем тут компиляторы

Уровень сложностиСредний
Время на прочтение12 мин
Просмотры26K

Помните, как в школе, решая примеры «в столбик», мы бормотали себе под нос: «один пишем, два в уме»? У процессора при вычислениях возникает похожая ситуация — где-то нужно хранить промежуточные результаты. В современных микропроцессорах работает множество различных блоков, обрабатывающих числа, — их называют исполнительными устройствами. Чтобы все они могли временно «складывать» свои «два в уме», требуется достаточно большой объем быстрой вспомогательной памяти.

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

Читать далее

Минимальный «эксплойт» на Си, который научил меня любить защиты

Уровень сложностиПростой
Время на прочтение3 мин
Просмотры12K

Я всегда считал, что взлом — это магия адресов и байтов. А потом я написал десять строчек на C и понял, что настоящая магия — это защиты компилятора и ОС. В этой статье я сознательно построю крохотный уязвимый пример, добьюсь управляемого падения (это и будет мой «эксплойт»), а затем превращу баг в безопасный и быстрый код. Ни одного шага против чужих систем — только локальная лаборатория и гигиена памяти.

Читать далее

Reverse Engineering для самых маленьких

Уровень сложностиПростой
Время на прочтение4 мин
Просмотры2.9K

В этой статье мы разберём самую базу реверс‑инжиниринга на примере простого crackme — программы, созданной для практики «хацкинга». Ничего серьёзного.

Читать далее

Гипотеза Гольдбаха

Время на прочтение1 мин
Просмотры6K

Сегодня попалось видео на ЮТ по данной гипотезе. Если кто не в курсе, эта гипотеза является открытой математической проблемой. Ее суть заключается в следующем: каждое чётное натуральное число больше 2 можно представить в виде суммы двух простых чисел. По состоянию на 2025 год утверждение не доказано.

Что меня в ней заинтересовало? Решение, как мне кажется, лежит на поверхности.

Сумма двух нечетных чисел, каждое из которых больше 2 всегда является четным числом. Доказательства простые и есть в сети. Все простые числа являются нечетными. Отсюда следует, что сумма двух простых чисел всегда будет давать четное число.

Скажите, я где-то что-то не понимаю? Ведь не может быть так просто....

Читать далее

Демистификация unaligned access undefined behavior в C

Уровень сложностиСредний
Время на прочтение7 мин
Просмотры2.7K

Неопределённое поведение (Undefined Behavior, UB) в C и C++ — одна из причин, по которым разработчики всё чаще ищут языки с полностью определённой семантикой. Одним из самых коварных UB является unaligned access, с точки зрения стандарта C это, например, когда происходит попытка разыменовать указатель как uint32_t, а значение указателя (адрес) не кратно четырём. Один из частых сценариев использования, приводящих к такому UB - получение данных по сети и их интерпретация как чисел.

Читать далее

Сколько информации содержится в ДНК?

Уровень сложностиСложный
Время на прочтение15 мин
Просмотры6.5K

Вам нравится теория информации? Вам нравится молекулярная биология? Вам нравится идея объединить их и посмотреть, что из этого получится? Если да, то вот вам вопрос: сколько информации содержится в вашей ДНК?

Когда я впервые заинтересовался этим вопросом, я думал, что ответ прост:

Человеческая ДНК содержит около 3,1 миллиарда пар оснований.

Каждая пара оснований может принимать одно из четырёх значений (A, T, C или G).

Для кодирования одного из четырёх возможных значений (00, 01, 10 или 11) требуется 2 бита.

Таким образом, ДНК человека содержит 6,2 миллиарда битов.

Просто, правда? Конечно, за исключением следующего:

У вас есть две версии каждой пары оснований, по одной от каждого из ваших родителей. Следует ли считать обе?

Все люди имеют почти идентичную ДНК. Имеет ли это значение?

ДНК можно сжать. Следует ли рассматривать сжатое представление?

Неясно, какая часть нашей ДНК действительно выполняет полезную функцию. Внутри ваших клеток царит бардак из взаимодействующих «хаков» и «костылей», предназначенных для поддержания работы даже в условиях постоянных мутаций, которые нарушают структуру самой ДНК. Следует ли учитывать только «полезные» части?

Читать далее

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность