Pull to refresh
20
0
Андрей Цветков @AndreyTS

User

Send message

Библиотека «Jetpack Compose» для начинающего Android-разработчика

Level of difficultyEasy
Reading time13 min
Views7.8K

Здравствуй, дорогой читатель. Каждому Android-разработчику во время разработки своего приложения необходимо сталкиваться с созданием пользовательского интерфейса. Для этого существует несколько способов, и сегодня будет рассмотрен один из них - Jetpack Compose UI.

Jetpack Compose - это библиотека, которую представила Google в 2019 году. Данная библиотека позволяет удобным способом создавать и организовывать интерактивный UI, облегчает тестирование и дает возможность грамотно использовать ресурсы устройства.

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

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

Обзор кросс-платформенных решений для разработки мобильных приложений

Reading time7 min
Views80K
В этой статье мы сравним 6 решений для кросс-платформенной разработки, которые были популярны в 2016 году и попытаемся найти лучшее решение.

Кросс-платформенные фреймворки PhoneGap, Xamarin, Unity, Qt и Appcelerator Titanium, Telerik Platform на сегодняшний день занимают 80% рынка кросс-платформенной разработки для мобильных устройств.


Читать дальше →
Total votes 55: ↑49 and ↓6+43
Comments119

Руководство по работе с Redux

Reading time80 min
Views283K
Сегодня Redux — это одно из наиболее интересных явлений мира JavaScript. Он выделяется из сотни библиотек и фреймворков тем, что грамотно решает множество разных вопросов путем введения простой и предсказуемой модели состояний, уклоне на функциональное программирование и неизменяемые данные, предоставления компактного API. Что ещё нужно для счастья? Redux — библиотека очень маленькая, и выучить её API не сложно. Но у многих людей происходит своеобразный разрыв шаблона — небольшое количество компонентов и добровольные ограничения чистых функций и неизменяемых данных могут показаться неоправданным принуждением. Каким именно образом работать в таких условиях?

В этом руководстве мы рассмотрим создание с нуля full-stack приложения с использованием Redux и Immutable-js. Применив подход TDD, пройдём все этапы конструирования Node+Redux бэкенда и React+Redux фронтенда приложения. Помимо этого мы будем использовать такие инструменты, как ES6, Babel, Socket.io, Webpack и Mocha. Набор весьма любопытный, и вы мигом его освоите!
Читать дальше →
Total votes 65: ↑59 and ↓6+53
Comments51

Reinforced.Typings — больше деталей

Reading time17 min
Views8.9K
И снова здравствуйте.
Кто о чем, а я снова о Reinforced.Typings — своей библиотеке для генерации TypeScript-ового glue-кода из C#-сборок, краткое введение в которую я сделал в предыдущем посте. После чего немедленно получил ряд вопросов и комментариев (не только на Хабрахабре, к слову — многие из заинтересовавшихся просто на нем не зарегистрированы). За это, конечно, всем огромное спасибо, но исходя из проанализированной информации, я понял что одного краткого поста не достаточно, чтобы описать как и что реализуется. Получается что люди задают вопросы «а вот это вот поддерживается?» и каждому приходится объяснять раз за разом, одно и то же. Так что в этой статье я сделаю небольшой cheatsheet по атрибутам, fluent-конфигурации и расскажу про дополнительные возможности. В общем, милости просим. Осторожно, лонгрид и справочная информация!
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments2

Как я перестал беспокоиться и полюбил React

Reading time6 min
Views37K
Предлагаю читателям «Хабрахабра» перевод статьи «How I learned to stop worrying and love React».

Если вы спросите меня, что я думал о React два месяца назад, я бы сказал…
Где мои шаблоны? Что этот сумасшедший HTML делает в моем JavaScript? JSX выглядит странно! Скорее! Сжечь это!



Это потому, что я его не понял.

Но я уверяю, React — это определенно правильный путь. Пожалуйста, выслушайте меня.
Читать дальше →
Total votes 30: ↑25 and ↓5+20
Comments35

Забудьте САР теорему как более не актуальную

Reading time12 min
Views65K
или «Прекратите характеризовать хранилища данных как CP или AP»

capДжеф Ходжес в своем прекрасном посте «Заметки о распределенных системах для новичков» рекомендует использовать САР теорему для критики найденных решений. Многие, похоже, восприняли этот совет слишком близко к сердцу, описывая свои системы как «СР» (согласованность данных, но без постоянной доступности при сетевой распределенности), «АР» (доступность без согласованного состояния при сетевой распределенности), или иногда «СА» (означает «Я всё ещё не читал статью Коды (Coda Hale) почти 5-летней давности»).

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

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

САР использует слишком узкое определение


Если вы хотите ссылаться на САР как на теорему (а не на расплывчатый концепт в маркетинговых материалах к вашей базе данных), вы должны быть точны. Математика требует точности. Доказательство сохраняется только если вы вкладывается в слова, то же самое значение, что было использовано при доказательстве. И оно опирается на очень точные определения:
Еще 3000 слов увлекательного чтива
Total votes 70: ↑66 and ↓4+62
Comments23

Прототип. От идеи до опытной партии. Литье в силикон

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


Читать дальше →
Total votes 168: ↑166 and ↓2+164
Comments75

Когда this == null: невыдуманная история из мира CLR

Reading time5 min
Views33K
Довелось как-то раз отлаживать вот такой код на C#, который «на ровном месте» падал с NullReferenceException:

	public class Tester {
		public string Property { get; set; }
		public void Foo() {
			this.Property = "Some string"; // NullReferenceException
		}
	}

Да, вот на этой самой строчке с присвоением свойства падал NullReferenceException. Что за дела, думаю — неужели рантайм перестал проверять наличие экземпляра перед вызовом экземплярных методов?

Как оказалось — в некотором роде да, перестал. Правда, и компилятор оказался не тем, за кого себя выдаёт, да и проверки вовсе не гарантированы рантаймом… Подробнее — под катом.
Читать дальше →
Total votes 41: ↑38 and ↓3+35
Comments67

ECMAScript 6

Reading time7 min
Views135K
Границы моего языка олицетворяют границы моего мира.
— Людвиг Витгенштейн

Последние несколько месяцев я пишу только ECMAScript 6 код, воспользовавшись трансформацией [1] в поддерживаемые в настоящее время версии JavaScript.
Читать дальше
Total votes 39: ↑36 and ↓3+33
Comments34

Краткая история освоения космоса

Reading time25 min
Views256K


За последние пол года на хабре появилось заметное количесво первоклассных постов о космосе, начал пожалуй Zelenyikot нашедший на марсе станцию Марс-3, продолжили Kamalesh, jeston, Sulentium и @DaryaZ. Некоторый итог подвелlozga, но мне кажется все эти посты несколько поверхностны и не отражают того уровня, который достигла наша космонавтика. По этому я собрался духом и написал очень длинный пост о подлинной истории освоения космоса — думаю приведенные мной факты позволят многим по-новому взглянуть на саму тему космоса. Писал сжато, по этому за пояснениями прошу в каменты.

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

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

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

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



Читать дальше →
Total votes 432: ↑262 and ↓170+92
Comments371

Текущая картина образования

Reading time1 min
Views1.2K
Всё больше и больше встречаю в Сети и в СМИ оценки современного образования. Каждое мнение отрицает предыдущее и претендует на истину последней инстанции. И всё больше и больше запутываешься в новых терминах и определениях… Но определённо становится очевидным, что наступает смена парадигмы образования в целом… И тут как никогда кстати на помощь приходит Сеть с её безграничными возможностями — почему не использовать имеющийся инструмент?!!! Вот я и предлагаю провести первый этап исследования, направленный на выявление положительных и отрицательных образов наших университетов, а также образов университетов будущего. Не задумывайтесь глубоко над вопросами — пишите сразу то, что приходит в голову — для чего вы идёте в университет, что вам больше всего не нравится в университете и что нравится.
До 30 ноября я буду собирать ваши мнения, а потом в течении 2х дней подытожу их и выложу на всеобщее обозрение (3 декабря, пятница). Картинка обещает быть интересной :)
Прошу разослать анкету своему окружению. Заранее спасибо.
университет
Анкета
Результаты работы будут обобщены при помощи сервиса wordle
Total votes 66: ↑51 and ↓15+36
Comments82

HTC Desire: Беспроблемный «OTA-апдейт» до Froyo без WiFi/3G соединений

Reading time2 min
Views5.4K
В последнее время HTC, Motorola и другие производители с подачи Google начали практиковать OTA-апдейты прошивок. Теоретически подобный метод обновлений прошивки обязан облегчить жизнь пользователям, так как для обновления смартфона больше не нужно участие компьютера, после обновления сохраняются все настройки, приложения и многое другое. Однако на практике зачастую возникают затруднения.

Итак, если у вас по какой-либо причине не выходит обновить свой смартфон Over The Air существует второй, вполне легальный способ прошить своего карманного друга. Метод прошивки телефона посредством SD-карты используют СЦ для восстановления окирпиченных телефонов.

Для начала вам необходимо скачать подписанный zip-файл с серверов HTC:
  • Для тех, кто в августе успел обновится до версии 2.09.405.8 необходимо скачать следующую заплатку, которая обновит ваш смартфон до версии 2.10.405.2 — OTA_Bravo_HTC_EU_2.10.405.2-2.09.405.825 Мб
  • Если ваш смартфон работает под управлением стокового Eclair (1.21.405.2) для обновления на 2.10.405.2 необходимо скачать OTA_Bravo_HTC_EU_2.10.405.2-1.21.405.291.82 Мб
Читать дальше →
Total votes 63: ↑48 and ↓15+33
Comments57

Улучшаем производительность: boxing в .NET, которого можно избежать

Reading time5 min
Views24K
Мы в своем проекте занимаемся разработкой сервера на C#. Этот сервер должен выдерживать очень высокие нагрузки, по этой причине мы стараемся написать код как можно оптимальней. C# редко ассоциируют с высокой производительностью, но если с умом подходить к разработке, то можно достичь очень даже неплохого уровня.

Одним из недешевых процессов с точки зрения производительности является boxing и unboxing. Напоминалку о том, что это такое, можно найти тут. Недавно я решил посмотреть весь IL код наших проектов и поискать инструкции box и unbox. Нашлось достаточно много участков, boxing'а в которых можно избежать легким движением руки. Все случаи, приводящие к ненужному boxing'у, очевидны, и допускаются по невнимательности в моменты концентрации на функциональности, а не на оптимизации. Я решил выписать наиболее часто встречающиеся случаи, чтобы не забывать о них, а затем автоматизировать их исправление. В данной статье и перечислены эти случаи.
Читать дальше →
Total votes 39: ↑37 and ↓2+35
Comments35

C#. Сортировка членов типа с помощью ReSharper

Reading time6 min
Views15K

Существуют некоторые соглашения касаемые структуры класса, и того, в каком порядке должны располагаться его члены.
Вот, например, правила которые использует StyleCop, возможно, в вашей компании есть свои собственные.
Поддерживать структуру вручную довольно тяжело, скучно и отнимает много времени, особенно когда в классе довольно большое количество свойств, полей, методов и.т.д.
В этом посте речь пойдет о том, как с помощью ReSharper автоматизировать этот процесс.
Читать дальше →
Total votes 31: ↑28 and ↓3+25
Comments11

Моноиды и их приложения: моноидальные вычисления в деревьях

Reading time20 min
Views23K
Приветствую, Хабрахабр. Сегодня я хочу, в своём обычном стиле, устроить сообществу небольшой ликбез по структурам данных. Только на этот раз он будет гораздо более всеобъемлющ, а его применения и практичность — простираться далеко в самые разнообразные области программирования. Самые красивые применения, я, конечно же, покажу и опишу непосредственно в статье.

Нам понадобится капелька абстрактного мышления, знание какого-нибудь сбалансированного дерева поиска (например, описанного мною ранее декартова дерева), умение читать простой код на C#, и желание применить полученные знания.

Итак, на повестке сегодняшнего дня — моноиды и их основное применение для кеширования вычислений в деревьях.

Моноид как концепция


Представьте себе множество чего угодно, множество, состоящее из объектов, которыми мы собираемся манипулировать. Назовём его M. На этом множестве мы вводим бинарную операцию, то есть функцию, которая паре элементов множества ставит в соответствие новый элемент. Здесь и далее эту абстрактную операцию мы будем обозначать "⊗", и записывать выражения в инфиксной форме: если a и b — элементы множества, то c = ab — тоже какой-то элемент этого множества.

Например, рассмотрим все строки, существующие на свете. И рассмотрим операцию конкатенации строк, традиционно обозначаемую в математике "◦", а в большинстве языков программирования "+": "John""Doe" = "JohnDoe". Здесь множество M — строки, а "◦" выступает в качестве операции "⊗".
Или другой пример — функция fst, известная в функциональных языках при манипуляции с кортежами. Из двух своих аргументов она возвращает в качестве результата первый по порядку. Так, fst(5, 2) = 5; fst("foo", "bar") = "foo". Безразлично, на каком множестве рассматривать эту бинарную операцию, так что в вашей воле выбрать любое.

Далее мы на нашу операцию "⊗" накладываем ограничение ассоциативности. Это значит, что от неё требуется следующее: если с помощью "⊗" комбинируют последовательность объектов, то результат должен оставаться одинаковым вне зависимости от порядка применения "⊗". Более строго, для любых трёх объектов a, b и c должно иметь место:
(ab) ⊗ c = a ⊗ (bc)
Легко увидеть, что конкатенация строк ассоциативна: не важно, какое склеивание в последовательности строк выполнять раньше, а какое позже, в итоге все равно получится общая склейка всех строк в последовательности. То же касается и функции fst, ибо:
fst(fst(a, b), c) = a
fst(a, fst(b, c)) = a
Цепочка применений fst к последовательности в любом порядке всё равно выдаст её головной элемент.

И последнее, что мы потребуем: в множестве M по отношению к операции должен существовать нейтральный элемент, или единица операции. Это такой объект, который можно комбинировать с любым элементом множества, и это не изменит последний. Формально выражаясь, если e — нейтральный элемент, то для любого a из множества имеет место:
ae = ea = a
В примере со строками нейтральным элементом выступает пустая строка "": с какой стороны к какой строке её ни приклеивай, строка не поменяется. А вот fst в этом отношении нам устроит подлянку: нейтральный элемент для неё придумать невозможно. Ведь fst(e, a) = e всегда, и если ae, то свойство нейтральности мы теряем. Можно, конечно, рассмотреть fst на множестве из одного элемента, но кому такая скука нужна? :)

Каждую такую тройку <M, ⊗, e> мы и будем торжественно называть моноидом. Зафиксируем это знание в коде:
public interface IMonoid<T> {
    T Zero { get; }
    T Append(T a, T b);
}

Больше примеров моноидов, а также где мы их, собственно, применять будем, лежит под катом.
Читать дальше →
Total votes 127: ↑124 and ↓3+121
Comments27

Под капотом у Dictionary и ConcurrentDictionary

Reading time5 min
Views168K
Некоторое время назад, я решил, что хочу знать больше подробностей о работе многопоточности в .NET и что я уделял этому незаслуженно мало внимания в прошлом. Информации на эту тему великое множество (отправной точкой я для себя выбрал этот раздел книги «C# in a nutshell»), но, как оказалось, только малая часть ресурсов пытаются объяснить что-то в деталях.

Каждый мастер должен знать свои инструменты, а что может использоваться чаще коллекций? Поэтому я решил сделать небольшой обзор многопоточных коллекций и начать с ConcurrentDictionary (беглый обзор уже встречался здесь, но его там совсем мало). Вообще, я несколько удивился, что такой статьи для .NET еще нет (зато хватает по Java).

Итак, поехали.
Читать дальше →
Total votes 58: ↑57 and ↓1+56
Comments31

Построение масштабируемых приложений на TypeScript. Часть 1 — Асинхронная загрузка модулей

Reading time9 min
Views20K
Идея данной статьи родилась после тяжелого рабочего дня при 30 градусах в офисе и тяжких раздумий и холиваров на тему: «А как должно строиться современное веб-приложение?»

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

О чем пойдет речь в данной статье? Я напишу (не)большое приложение на TypeScript, которое будет реализовывать модульную архитектуру, асинхронную загрузку модулей, абстрактную событийную модель и обновление состояния модулей по наступлению определенных событий. Эта статья будет выступать как бы дневником и журналом моих действий и размышлений. Моя личная цель — создать некоторый рабочий прототип, опыт создания которого я потом мог бы использовать в рамках реального проекта. Код будет писаться максимально аккуратно и близко к требованиям реальной разработки. Пояснения будут даваться так, будто это потом будут читать работающий под моим руководством джуниоры, которые вообще до этого никогда такие системы не писали.

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

Итак, дав себе и сообществу эти обещания, включив AC/DC и собравшись с мыслями я приступаю.
Читать дальше →
Total votes 28: ↑22 and ↓6+16
Comments12

Автоматизация тестирования Web-приложений

Reading time13 min
Views106K


Автоматизация тестирования – место встречи двух дисциплин: разработки и тестирования. Наверное поэтому, я отношу эту практику к сложным, но интересным.

Путем проб и ошибок мы пришли к следующему технологическому стеку:
  1. SpecFlow (опционально): DSL
  2. NUnit: тестовый фреймворк
  3. PageObject + PageElements: UI-абстракиця
  4. Контекст тестирования (информация о целевом окружении, пользователях системы)
  5. Selenium.WebDriver

Для запуска тестов по расписанию мы используем TFS 2012 и TeamCity.
В статье я опишу, как мы к этому пришли, типовые ошибки и пути их решения.
Читать дальше →
Total votes 39: ↑29 and ↓10+19
Comments21

#FailOverConf — как это было, презентации и видео

Reading time5 min
Views12K


4 апреля мы провели первую FailOver Conference — конференцию, целиком и полностью посвященную отказоустойчивости сайтов и их бесперебойной работе.

Целый день, более 7 часов, мы слушали доклады от разработчиков и архитекторов облачных сервисов, системных администраторов хостинг-провайдеров, опытных DBA, обсуждали их, спорили…

Тема оказалась очень важной и востребованной — более 1200 человек зарегистрировались на онлайн-трансляцию.

Конечно, сложно сразу «переварить» такой большой объем информации. К чему-то хочется вернуться позже, попробовать применить к конкретному проекту. Именно поэтому один из самых часто звучащих вопросов как из зала, так и в онлайне (в твиттере): «А будут ли опубликованы материалы?»

Да, конечно! Мы публикуем и презентации, и видео докладов, и с удовольствием делимся ими с вами!
Читать дальше →
Total votes 30: ↑26 and ↓4+22
Comments8

Обзор JS-фреймворков. Путешествие через джунгли JavaScript MVC. Ч. 2

Reading time15 min
Views124K
(Окончание перевода статьи Эдди Османи о сравнении и выборе библиотеки для проекта со значительной ролью JS на клиенте.)
Содержание первой части:

■ Что такое MVC или, лучше сказать, MV*?
■ Когда нам нужен MV*-фреймворк JS?
■ Где же мы будем нуждаться в MV*, а где нет?
■ Проблема выбора: слишком много вариантов?
■ TodoMVC: общее приложение для обучения и сравнения
■ Предложенные нами критерии выбора фреймворка
■ Dojo и усложнение фреймворков на JavaScript
■ Коллекция TodoMVC (фреймворки, на которых сделаны реализации тестового приложения Todo)
Читать дальше →
Total votes 87: ↑78 and ↓9+69
Comments18
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity