Pull to refresh
19
0

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

Send message

Черная магия метапрограммирования: как работают макросы в Rust 1.15

Reading time13 min
Views17K

В прошлой статье мы познакомились с одной из самых интересных возможностей языка Rust — процедурными макросами.


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


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

Читать дальше →
Total votes 52: ↑51 and ↓1+50
Comments76

Свершилось! Процедурные макросы в Rust 1.15

Reading time5 min
Views16K

Ребята, свершилось! После долгих шести недель ожидания наконец вышла версия Rust 1.15 с блекджеком и процедурными макросами.


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


А что же это дает простым смертным? Практически бесплатную [де]сериализацию, удобный интерфейс к БД, интуитивный веб фреймворк, выводимые конструкторы и много чего еще.


Да, если вы все еще не добрались до этого языка, то сейчас самое время попробовать, тем более, что теперь установить компилятор и окружение можно одной командой:


curl https://sh.rustup.rs -sSf | sh

Впрочем, обо всем по порядку.

Читать дальше →
Total votes 54: ↑53 and ↓1+52
Comments28

Нативный код Android и iOS в Qt на примере status bar

Reading time4 min
Views19K

Здравствуйте! Уверен, многие слышали о том, что Qt очень хорош для кросплатформенной разработки мобильных приложений. Однако, для решения некоторых задач приходится иметь дело с нативным кодом (Java, Objective-C), к примеру, вызов камеры, галереи, вызов стороннего api.


В этой статье на простом примере задания прозрачности для status bar я покажу, как осуществляется вызов нативного кода Java и Objective-C.


вжух

Читать дальше →
Total votes 28: ↑21 and ↓7+14
Comments17

Борьба с проверкой заимствования

Reading time6 min
Views7.1K

Один из наиболее частых вопросов у новичков «Как мне угодить проверке заимствования?». Проверка заимствования — одна из крутых частей в кривой обучения Rust и, понятно, что у новичков возникают трудности применения этой концепции в своих программах.


Только недавно на сабредите Rust появился вопрос «Советы как не воевать с проверкой заимствования?».


Многие члены Rust-сообщества привели полезные советы как избежать неприятностей связанных с этой проверкой, советы, которые проливают свет на то, как вы должны проектировать свой код на Rust (подсказка: не так, как вы это делаете на Java).


В этом посте я постараюсь показать несколько псевдо-реальных примеров распространенных ловушек.

Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments18

Сравнение методов распознавания сигналов. Нейронные сети против согласованного фильтра

Reading time4 min
Views17K

Я недавно опубликовал статью "Распознавание радиотехнических сигналов с помощью нейронных сетей"[1]. И там была довольно длинная и интересная дискуссия по поводу возможности использования для этих целей согласованного фильтра(СФ). Разумеется, использовать согласованные фильтры для той задачи, что решалась, проблематично. Но меня заинтересовал другой вопрос, что лучше использовать при незначительных колебаниях параметров сигнала, нейронные сети(НС) или СФ. В качестве генератора сигнала буду использовать обычный мультивибратор. Подавать сигнал буду через звуковую карту, а далее распознавать с помощью метода описанного в [1] и с помощью согласованного фильтра. Далее ПО сравнит результаты и даст ответ какой метод лучше.


Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments17

Распознавание радиотехнических сигналов с помощью нейронных сетей

Reading time4 min
Views33K

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


Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments32

Wi-Fi на Linux станет быстрее

Reading time5 min
Views32K
пусть лучше небольшая, но фейербаховская...
Виктор Пелевин «Поколение Пи»

Недавний релиз ядра Linux 4.9 отличный повод рассказать о предстоящем разгоне WiFi. Сразу оговорюсь — пост не о том, как увеличить зону покрытия или менять регуляторные домены. Ничего такого делать не надо, достаточно обновить ядро после того, как патчи буфероборца Dave Täht будут в стабильной ветке.



Значительное повышение скорости достигнуто за счет уменьшения задержки [1] и избыточной буферизации [2] в сети. Разработчикам пришлось ради этого перелопатить mac80211, убрать кое-что сверху, добавить снизу и после этого задержки в сети сократились на порядок. Цена вопроса? Патч в 200 строк. Подробности под катом.

Читать дальше →
Total votes 56: ↑55 and ↓1+54
Comments19

В копилку инструментов для прототипирования: Make My App

Reading time3 min
Views9.5K
Прототипирование давно стало одним из ключевых этапов разработки приложения. Введение визуальных образцов в обсуждение продукта снижает риски и устраняет неопределенность, тем самым позволяя сохранить время и деньги, которые были бы потрачены на разработку непроверенных решений. Прототипы могут с пользой применяться на разных этапах работы над продуктом — в частности, это отличное средство точно сформулировать техническое задание.



Если кратко суммировать все преимущества, прототипирование позволяет:

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

На сегодняшний день на рынке представлено такое изобилие решений для прототипирования всевозможных видов софта, что сориентироваться среди них непросто. На Хабре можно найти обзоры о множестве подобных программ. Как и многие другие разработчики, мы долгое время держались проверенного решения — небезызвестного Moqups — жалея времени тестировать многочисленные альтернативы. На Make My App — инструмент, о котором пойдет речь в обзоре, мы вышли случайно, благодаря рекомендации со стороны: в списках мы этот продукт не находили. Ниже представляем небольшой обзор, по которому можно составить общее представление о функционале приложения.
Читать дальше →
Total votes 11: ↑8 and ↓3+5
Comments9

Cicerone — простая навигация в Андроид приложении

Reading time8 min
Views85K


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


Читать дальше →
Total votes 35: ↑33 and ↓2+31
Comments29

OpenWeatherMap – как энтузиасты делают погоду

Reading time7 min
Views114K

Мы живем в удивительное время, то что раньше казалось очень сложным внезапно становится доступным и простым. Задачи для решения которых надо было создавать научные институты и крупные организации, сейчас решаются саморганизованными группами энтузиастов. Энтузиасты создают карты и энциклопедии снимают фильмы и разрабатывают software. Я хочу рассказать о той области, в которую этот свежий ветер перемен еще не подул в полную силу – это погода. И нашим проектом – OpenWeatherMap — мы хотим изменить эту ситуацию!

Читать дальше →
Total votes 110: ↑108 and ↓2+106
Comments100

Как устроен парсер Python, и как втрое уменьшить потребление им памяти

Reading time12 min
Views49K
Любой, кто изучал устройство языков программирования, примерно представляет, как они работают: парсер в соответствии с формальной грамматикой ЯП превращает входной текст в некоторое древовидное представление, с которой работают последующие этапы (семантический анализ, различные трансформации, и генерация кода).

КДПВ

В Python всё немного сложнее: парсеров два. Первый парсер руководствуется грамматикой, заданной в файле Grammar/Grammar в виде регулярных выражений (с не совсем обычным синтаксисом). По этой грамматике при помощи Parser/pgen во время компиляции python генерируется целый набор конечных автоматов, распознающих заданные регулярные выражения — по одному КА для каждого нетерминала. Формат получающегося набора КА описан в Include/grammar.h, а сами КА задаются в Python/graminit.c, в виде глобальной структуры _PyParser_Grammar. Терминальные символы определены в Include/token.h, и им соответствуют номера 0..56; номера нетерминалов начинаются с 256.

Проиллюстрировать работу первого парсера проще всего на примере. Пусть у нас есть программа if 42: print("Hello world").
Читать дальше →
Total votes 122: ↑116 and ↓6+110
Comments68

Изучаем Retrofit 2

Reading time8 min
Views211K


В мире Android разработки существует множество интересных библиотек, и сегодня мы рассмотрим детище компании SquareRetrofit. Что же это за зверь такой? Retrofit (согласно официальному сайту) — типобезопасный HTTP-клиент для Android и Java. Он является незаменимым инструментом для работы с API в клиент-серверных приложениях. Каких-то лет 5 назад Android-разработчикам для работы с сетью приходилось воротить горы кода с обратными вызовами, AsyncTask'ами и прочими «низкоуровневыми» вещами. И компания Square выпустила такую замечательную библиотеку — Retrofit.

В сети Интернет мне не удалось найти внятных туториалов по второй версии бибилиотеки, поэтому сегодня мы будем разбираться с ней на примере приложения, получающего посты с bash.im
Заходи, если интересно
Total votes 19: ↑15 and ↓4+11
Comments6

ГОСТ Р 34.12 '15 на SSE2, или Не так уж и плох Кузнечик

Reading time18 min
Views34K

На Хабре уже как минимум дважды упоминался новый отечественный стандарт блочного шифрования ГОСТ Р 34.12 2015 «Кузнечик», ru_crypt в своем посте рассмотрел основные механизмы и преобразования нового стандарта, а sebastian_mg занимался пошаговой трассировкой базового преобразования. Но многие вопросы остались без ответа. Насколько быстр новый ГОСТ? Можно ли его оптимизировать, эффективно реализовать, ускорить аппаратно?


GOST R 34.12 2015 with SSE2

А если можно, то как?
Total votes 55: ↑53 and ↓2+51
Comments47

learnopengl. Урок 1.4 — Hello Triangle

Reading time20 min
Views167K
В прошлом уроке мы таки осилили открытие окна и примитивный пользовательский ввод. В этом уроке мы разберем все азы вывода вершин на экран и воспользуемся всеми возможностями OpenGL, вроде VAO, VBO, EBO для того, чтобы вывести пару треугольников.
Заинтересовавшихся прошу под кат.
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments8

Введение в futures-rs: асинхронщина на Rust [перевод]

Reading time18 min
Views14K


Этот документ поможет вам изучить контейнер для языка программирования Rust — futures, который обеспечивает реализацию futures и потоков с нулевой стоимостью. Futures доступны во многих других языках программирования, таких как C++, Java, и Scala, и контейнер futures черпает вдохновение из библиотек этих языков. Однако он отличается эргономичностью, а также придерживается философии абстракций с нулевой стоимостью, присущей Rust, а именно: для создания и композиции futures не требуется выделений памяти, а для Task, управляющего ими, нужна только одна аллокация. Futures должны стать основой асинхронного компонуемого высокопроизводительного ввода/вывода в Rust, и ранние замеры производительности показывают, что простой HTTP сервер, построенный на futures, действительно быстр.


Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments7

Реактивное программирование под Android

Reading time10 min
Views90K
Отказоустойчивость, отзывчивость, ориентированность на события и масштабируемость — четыре принципа нынче популярного реактивного программирования. Именно следуя им создаётся backend больших систем с одновременной поддержкой десятков тысяч соединений.

Отзывчивость, простота, гибкость и расширяемость кода — принципы, которые можно закрепить за реактивным UI.

Наверняка, если совместить реактивные backend и UI, то можно получить качественный продукт. Именно его мы и попытались сделать, разрабатывая 2GIS Dialer — звонилки, которая работает через API и при этом должна оставаться быстрой и удобной.


Читать дальше →
Total votes 52: ↑49 and ↓3+46
Comments58

Shake Detector для Android на RxJava

Reading time9 min
Views17K


Вступление


Началось все с того, что была поставлена задача отменять последнее действие в приложении при встряхивании устройства. Но как понять, что случилось это самое встряхивание? Через пару минут изучения вопроса стало ясно, что надо подписываться на события от акселерометра и дальше пытаться как-то определить, что устройство встряхнули.
Обнаружились и готовые решения. Все они были довольно похожи, но в чистом виде они меня не устраивали, и я написал собственный «велосипед». Это был класс, который подписывался на события от сенсора и менял свое состояние по мере их поступления. Потом пару раз я и мои коллеги подкручивали шестеренки этого велосипеда, и в результате он стал напоминать нечто из «Безумного Макса». Я пообещал, что, как выдастся свободное время, приведу это безобразие в порядок.

И вот, читая недавно статьи по RxJava, я вспомнил про эту задачу. «Хм, — подумал я, — RxJava выглядит очень подходящим инструментом для такого рода проблем». Не откладывая в долгий ящик, взял и написал решение на RxJava. Результат меня поразил: вся логика заняла 8 (восемь!) строк! Я решил поделиться своим опытом с другим разработчикам. Так появилась на свет эта статья.

Надеюсь, этот простой пример поможет принять решение тем, кто размышляет о применении RxJava в своих проектах.

Статья ориентирована на читателей, имеющих базовый опыт разработки под Android. Исходный код готового приложения можно посмотреть на GitHub.

Приступим!
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments11

Пишем обертку для FUSE на Java Native Runtime

Reading time8 min
Views16K
В статье я расскажу как реализовать файловую систему в юзерспейсе на Java, без строчки ядерного кода. А также покажу как связать Java и нативный код без написания кода на C, при этом сохранив максимальную производительность.



Интересно? Добро пожаловать под кат!
Подробности
Total votes 26: ↑26 and ↓0+26
Comments8

Рендеринг в MAPS.ME

Reading time9 min
Views16K


Всем привет! Сегодня я бы хотел рассказать о рендеринге, который не имеет отношения к компьютерным играм, анимационным фильмам или промышленным системам проектирования. Речь пойдет о движке для рендеринга карт в реальном времени для проекта MAPS.ME. В данном посте я опишу общие принципы работы движка и некоторые грабли, на которые мы наступили (и те, которые успешно обошли). Если вы занимаетесь рендерингом больших объемов данных, в особенности картографического характера, наш опыт, надеюсь, будет полезен в ваших проектах или, по крайней мере, любопытен. Всех заинтересовавшихся прошу под кат.
Читать дальше →
Total votes 49: ↑46 and ↓3+43
Comments21

Механизмы контейнеризации: cgroups

Reading time11 min
Views106K
механизмы контейнеризации

Продолжаем цикл статей о механизмах контейнеризации. В прошлый раз мы говорили об изоляции процессов с помощью механизма «пространств имён» (namespaces). Но для контейнеризации одной лишь изоляции ресурсов недостаточно. Если мы запускаем какое-либо приложение в изолированном окружении, мы должны быть уверены в том, что этому приложению выделено достаточно ресурсов и что оно не будет потреблять лишние ресурсы, нарушая тем самым работу остальной системы. Для решения этой задачи в ядре Linux имеется специальный механизм — cgroups (сокращение от control groups, контрольные группы). О нём мы расскажем в сегодняшней статье.
Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments4

Information

Rating
Does not participate
Registered
Activity