Цель данной публикации – комплексное рассмотрение строения искусственных нейронных сетей c точки зрения и математики и программного кода. В данной работе нейронная сеть реализуется на языке Python с использованием библиотеки tensorflow.keras. Статья сосредоточена в основном на строении и функционировании искусственной нейронной сети, поэтому такие этапы как обучение и т.д. в ней не затрагиваются.
Пользователь
Простой backend на C++: это возможно?
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/89e/d3f/82f/89ed3f82fdf38cd3d994500070b5c8e8.jpeg)
Была у меня мечта - писать backend на C++. А вот разбираться в unix socket'ах, TCP, многопоточной/асинхронной обработке запросов и во многом другом совсем не хотелось. Не верил я, что до сих пор нет каких-то минималистичных фреймворков. И сегодня я вам расскажу, как можно просто сделать HTTP API микросервис на C++ с помощью фреймворка Drogon.
Новинки CSS и UI: I/O 2023
![](https://habrastorage.org/webt/ma/po/lv/mapolvqq4uunxfqoaviv3g9km9y.jpeg)
Последние несколько месяцев открыли золотую эру веб UI (User Interface — пользовательский интерфейс).
Вот 20 самых захватывающих и впечатляющих возможностей, которые появились недавно или появятся в ближайшем будущем:
- запросы контейнера (container queries);
- запросы стиля (style queries);
- селектор
:has()
; - микросинтаксис
nth-of
; text-wrap: balance
;initial-letter
;- динамические единицы измерения области просмотра (viewport);
- цветовые пространства с широкой гаммой;
color-mix()
;- вложенность селекторов (nesting);
- каскадные слои (cascade layers);
- стили с ограниченной областью видимости (scoped styles);
- тригонометрические функции;
- индивидуальные свойства трансформации;
popover
;- позиционирование якоря (anchor positioning);
selectmenu
;- дискретные свойства переходов;
- анимации, управляемые прокруткой (scroll-driven animations);
- переходы отображения (view transitions).
GUI для Git: подборка популярных решений
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/369/e2f/abd/369e2fabd7092186e580262421880d0c.jpg)
Разработчикам несомненно надо уметь работать с Git и делать это через командную строку. Иногда бывают ситуации, когда просто нет возможности установить на машину альтернативный инструмент с графическим интерфейсом. При этом некоторые задачи удобнее выполнять в специализированных приложениях, и никто не запрещает использовать GUI в собственных проектах.
В этой статье собраны самые популярные графические интерфейсы Git. Есть как бесплатные инструменты с открытым исходным кодом, так и проприетарные решения с дорогими лицензиями. Некоторыми клиентами из статьи я пользовался сам, чтобы в итоге выбрать удобный вариант для своих задач.
SectorC: компилятор Си в пределах 512 байт
![](https://habrastorage.org/webt/vk/65/ce/vk65ceohtfeswuirx-od3517kda.png)
SectorC (github) – это компилятор Си, написанный на ассемблере x86-16 и умещающийся в загрузочный сектор 512 байт машины x86. Он поддерживает достаточно обширную функциональность Си для создания реальных и интересных программ, являясь при этом, пожалуй, самым миниатюрным компилятором Си из когда-либо написанных.
ECMAScript 2015, 2016, 2017, 2018, 2019, 2020, 2021
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/57d/1c4/bfc/57d1c4bfc6cb4f883ae80fd09aba0c1f.png)
ES3, ES5, ES6, ES7, ES8, ES2015, ES2016, ES2017, ES2018, ES2019, ECMAScript 2015, ECMAScript 2016, ECMAScript 2017, ECMAScript 2018, ECMAScript 2019 — как разобраться во всем этом?
Подробно поговорим про историю создания и развития стандарта JavaScript
Своя библиотека под Android за один вечер
Что, если у вас появилась потребность использовать один и тот же код на Jetpack Compose между несколькими проектами, да еще так, чтобы он импортировался одинаково и автоматически на нескольких машинах? Такая ситуация может возникнуть с большой вероятностью, потому что Compose не блещет обилием предоставляемых из коробки виджетов и тулзов (хотя их количество постоянно растет). Быть может, ваш дизайнер пришел к вам с чем-то настолько диковинным, что готовыми компонентами просто не обойтись. Тогда тот пайплайн разработки и публикации собственной библиотеки, который я опишу ниже, может оказаться для вас полезным.
В качестве примера возьмем не самый очевидный элемент интерфейса — кнопку с движущейся синусоидоподобной волной. Отлично подойдет для управления, например, голосовым вводом.
SwiftUI по полочкам
То же самое, но в меньшем масштабе, происходит и с фреймворками. Появление SwiftUI — не исключение. Вероятно, я — представитель первого поколения разработчиков, кто стартовал с изучения SwiftUI, проигнорировав UIKit. У этого есть своя цена — обучающих материалов и примеров работающего кода пока очень мало. Да, в сети уже есть некоторое количество статей, рассказывающих о той или иной особенности, том или ином инструменте. На том же www.hackingwithswift.com уже довольно много примеров кода с объяснениями. Однако, они слабо помогают тем, кто решил изучать SwiftUI с нуля, как я. Большинство материалов в сети — это ответы на конкретные, сформулированные вопросы. Опытный разработчик легко разберется, как все устроено, почему именно так, и зачем это нужно применять. Новичку же, сначала нужно понять, какой вопрос задать, и только тогда он сможет добраться до этих статей.
![](https://habrastorage.org/webt/1u/td/t6/1utdt6xa6tcsov4biwj2ura36s0.png)
Под катом я попробую систематизировать и разложить по полочкам то, что сам успел усвоить на текущий момент. Формат статьи — почти гайд, хотя скорее, шпаргалка, составленная мной в том виде, в котором я сам бы хотел ее прочитать в начале своего пути. Для опытных разработчиков, еще не вникавшим глубоко в SwiftUI, тоже найдется пара интересных примеров кода, а текстовые пояснения можно читать по-диагонали.
Надеюсь статья поможет вам сэкономить некоторое время, когда вы тоже захотите ощутить немного магии.
SQL миграции в Postgres. Часть 2
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/a79/2e8/14e/a792e814e425810ed5ef6005b7864870.jpg)
В первой части мы рассмотрели базовые операции, такие как добавление новых атрибутов, создание индексов и ограничений и т.д.
Эта статья посвящена двум более сложным миграциям:
- обновление большой таблицы
- разделение таблицы на две
Рассмотрим подходы, которые позволяют провести миграции с минимальным простоем для приложения.
25 советов для начинающего верстальщика
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/10f/f8d/596/10ff8d596bf314a92f827e49353bd8fa.jpg)
В статье собраны 24 совета для новичков-верстальщиков которые возможно сделают ваш код чище и приятнее.
Трассировка запросов в Node.js
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/0d7/194/d02/0d7194d02a5ed5017cc9c73004e63912.png)
Существует расхожее мнение, что мы, как разработчики программного обеспечения, тратим 90% нашего времени на отладку и только 10% непосредственно на написание кода. Конечно, это соотношение слишком преувеличено! Но это правда, что отладка занимает значительную часть нашего рабочего времени, особенно в эпоху расцвета микросервисных архитектур. На сегодняшний день уже никого не удивишь тем, что на наших производственных серверах одновременно работают сотни или даже тысячи микросервисов.
Пишем простой docker-compose.yml для контейнеризации приложения (React, Spring Boot, PostgreSQL, pgAdmin)
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/409/b53/db2/409b53db29c56147a322842884dddbc1.png)
В данной статье описан простой пример написания docker-compose.yml файла на примере контейнеризации приложения с использованием Spring Boot на бэкенде, React на фронте, PostgreSQL в качестве базы данных и pgAdmin - для просмотра данных в базе.
Как стать iOS-разработчиком?
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/7d5/2de/078/7d52de07811002ae8256e0e3ec3855a0.png)
Мобильные устройства помогают оставаться на связи с друзьями, работать, развлекаться и повышать продуктивность. iOS, несмотря на введенные санкции и сокращение продаж техники в РФ, остается популярной платформой, пользователи которой ожидают качественные и стабильные приложения для смартфонов, планшетов, умных часов и ТВ‑приставок.
Насколько востребована позиция iOS‑разработчика на рынке РФ, какие риски с выбором этого направления для старта карьеры наиболее актуальны, что именно надо изучать и где искать нужные материалы — в этой статье.
Как писать BRD документ и какие инструменты вместо этого предлагает Agile?
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/d93/7f3/cd8/d937f3cd87547140a34f698cc2990aca.png)
В этой статье я расскажу как правильно писать бизнес требования, создавая BRD, а также разберем какую альтернативу предлагает Agile довольно нагруженному способу управления требованиями. Но начнем с инструкции как писать BRD.
BRD (Business Requirements Document) — это документ, который описывает бизнес-требования для проекта или продукта. BRD используется для установления и документирования функциональных и нефункциональных требований, целей и ожиданий заказчика. Вот некоторые шаги, которые помогут вам написать BRD:
Почему работать с OAuth сложно даже сегодня?
![](https://habrastorage.org/webt/r_/c_/it/r_c_its-jq1nol54aaepihwajtq.jpeg)
OAuth — это стандартный протокол. Ведь так? И для OAuth 2.0 есть клиентские библиотеки практически на всех языках программирования, которые можно представить.
Вероятно, вы подумаете, что имея клиентскую библиотеку, можно реализовать OAuth для любого API буквально за десять минут. Или хотя бы за час.
Если вам это удастся, то, пожалуйста, сообщите об этом нам — мы угостим вас изысканным ужином и послушаем, как у вас это получилось.
Swift async/await на примерах
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/967/508/125/967508125e06f8512051472c9b354acc.png)
В предыдущей части мы разобрали преимущества работы с async/await по сравнению с GCD. В этой части мы более подробно рассмотрим ключевые слова async и await (и не только). Разберемся в том, как они работают, что означает "неблокирующее ожидание" и самое главное рассмотрим это все на примерах.
Искусство парсинга или DOM своими руками
Сразу оговорюсь, — если ваша цель — свой скриптовый язык или что ещё сложнее, этой статьи будет недостаточно для его реализации. В идеале нужно на отлично знать теорию автоматов и дискретные структуры. Но в качестве отправной точки можно пока ограничиться и моим опытом, которым я щедро поделюсь под катом. Это не совсем то, что я задумывал изначально, зато идеально подходит для примера. Парсить мы будем HTML, как простой и всем знакомый язык.
Лайфхак: как спарсить гигабайт double-ов в секунду
![](https://habrastorage.org/webt/vc/ki/as/vckiasdbxysxni8bknycwy3spgg.png)
Как в коде на C++ прочитать значение double из строки?
std::stringstream in(mystring);
while(in >> x) {
sum += x;
}
На Intel Skylake с компилятором GCC 8.3, такой код парсит 50 МБ/с. Жёсткие диски запросто обеспечивают последовательное чтение со скоростью в несколько ГБ/с, так что вне всякого сомнения, нас ограничивает не скорость чтения с диска, а именно скорость парсинга. Как его ускорить?
Первое, что напрашивается – отказаться от удобств, предоставляемых потоками в C++, и вызывать strtod(3) напрямую:
do {
number = strtod(s, &end);
if(end == s) break;
sum += number;
s = end;
} while (s < theend);
Скорость вырастает до 90 МБ/с; профайлинг показывает, что при чтении из потока выполняется ~1600 инструкций на каждое читаемое число, при использовании strtod – ~1100 инструкций на число. Стандартные библиотеки Си и C++ можно оправдать требованиями универсальности и переносимости; но если ограничиться парсингом только double и только на x64, то можно написать намного более эффективный код: хватит 280 инструкций на число.
Парсинг формул в 40 строк
В этот раз такой это стала задача от Яндекса. В самом посте и в комментариях было предложено несколько вариантов решения, темой этого топика станет поиск короткого решения в функциональном стиле.
IO_URING. Часть 1. Введение
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/2a7/191/91c/2a719191cf975270d237a82542041316.jpg)
Всем привет! Наверное, многие уже слышали о новом интерфейсе ядра Linux — io_uring. Это новый способ работы с асинхронным I/O (и не только) в Linux. Кстати, новый он не только из-за даты выхода в свет, но и в плане подходов, которые предлагает разработчику.
Заинтересовало? Более подробно разберемся под катом.
Информация
- В рейтинге
- 5 558-й
- Откуда
- Нижегородская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность