Пользователь
Пишем, собираем и запускаем HelloWorld для Android в блокноте. Java 8 и Android N
![](https://habrastorage.org/files/a0b/9ab/7d7/a0b9ab7d773e46a2acef4fbed3d6a63a.png)
Два с половиной года назад я опубликовал статью Пишем, собираем и запускаем HelloWorld для Android в блокноте. Она стала пользоваться огромной популярностью и набрала около 80 000 просмотров. С появлением новых инструментов, таких как Jack ToolChain, возникла необходимость переиздания и обновления статьи.
Когда я начал изучать Android, захотелось полностью написать и скомпилировать Android-приложение вручную — без использования IDE. Однако эта задача оказалась непростой и заняла у меня довольно много времени. Но как оказалось — такой подход принёс большую пользу и прояснил многие тонкости, которые скрывают IDE.
Используя только блокнот, мы напишем совсем маленькое учебное Android-приложение. А затем скомпилируем его, соберём и запустим на устройстве — и всё через командную строку. Заинтересовало? Тогда прошу.
HolyJS в Москве: первые доклады и CallForPapers
![](https://habrastorage.org/files/c33/3f0/b9e/c333f0b9e8fb42549650db3b7f94e0de.jpg)
Если вы следите за событиями, то знаете, что в июне в Питере прошла первая в России масштабная профессиональная конференция по JavaScript – HolyJS. Все тогда прошло хорошо, а сама конференция 11 декабря приедет в Москву, об этом и поговорим.
Руководство по работе с Redux
![](https://habrastorage.org/files/64b/d36/ae7/64bd36ae7bfe47d1a2ed255031ba6762.png)
В этом руководстве мы рассмотрим создание с нуля full-stack приложения с использованием Redux и Immutable-js. Применив подход TDD, пройдём все этапы конструирования Node+Redux бэкенда и React+Redux фронтенда приложения. Помимо этого мы будем использовать такие инструменты, как ES6, Babel, Socket.io, Webpack и Mocha. Набор весьма любопытный, и вы мигом его освоите!
Как настроить расширяемую систему для регрессионного тестирования на телефонах: опыт мобильной Почты Mail.Ru
![](https://habrastorage.org/files/89a/b1f/e9b/89ab1fe9bced4e8095d268578b03bfc4.jpg)
Привет, Хабр! Сегодня я хочу рассказать, как мы построили с нуля гибкую и расширяемую систему для выполнения автотестов на Android-смартфонах. Сейчас у нас используется около 60 устройств для регрессионного тестирования мобильного приложения Почты Mail.Ru. В среднем они тестируют около 20 сборок приложения ежедневно. Для каждой сборки выполняется около 600 UI-тестов и более 3500 unit-тестов.
Автотесты доступны круглосуточно — они экономят очень много времени тестировщиков и позволяют нам выпускать качественное приложение. Без них мы бы тестировали каждую сборку 36 часов (с учетом ожидания) или примерно 13 часов без ожидания. Вместе со сборкой, актуализацией переводов, при рабочей загрузке агентов с автотестами тестирование в среднем занимает 1.5 часа, что ежедневно позволяет нам экономить недели работы тестировщиков.
Мы рассмотрим, как всё делать с самого начала тем, кто занимается написанием автотестов, а не инфраструктурой: начиная от покупки телефона, его перепрошивки и заканчивая созданием docker-контейнеров, внутри которых будет доступен телефон для автотестов.
Android WebView: актуальные проблемы и их решение
Что такое WebView?
WebView — это компонент платформы Android, который позволяет встраивать web-страницы в Android-приложения. По сути, это встраиваемый браузер. При помощи WebView примерно год назад мы решили создать ICQ Web API для интеграции web-приложений в наш мессенджер. Что представляет собой web-приложение? По сути, это HTML-страница, которая содержит JavaScript и работает внутри ICQ. Используя ICQ Web API, web-страницы через JavaScript могут отдавать ICQ разные команды, допустим, на отправку сообщений, открытие чата и т.п.
![](https://habrastorage.org/files/200/78a/cab/20078acab2454a9d98b7aa93e542bcde.jpg)
Интерполяция: рисуем гладкие графики средствами PHP и GD
![](https://habrastorage.org/storage1/695e8c6f/51e0e054/64d0158d/7016da93.png)
Интерполяция — построение кривой, проходящей через заданные точки.
Аппроксимация — приближение кривой к исходной, но не обязательно проходящей через заданные точки.
В этом топике я хочу продемонстрировать свою библиотеку для PHP, которая производит интерполяцию с помощью многочлена Лагранжа, C-сплайна и сплайна Акимы, а также аппроксимацию кривой Безье. Дополнительно в ней реализована отрисовка отрезка со сглаживанием (антиалиасингом).
Кратко рассмотрим методы интерполяция и аппроксимации.
Как мы выходили в ТОП-3 украинского App Store
![](https://habrastorage.org/files/884/041/00a/88404100af0847b09eaef8a2e6ae18de.jpg)
Если вы iOS-разработчик, работаете в компании по разработке iOS-приложений или любым другим образом связаны с этой сферой, то знаете приблизительное количество скачек, необходимое для выхода в топ. Цифры разнятся от категории к категории, каждый использует собственную стратегию, поэтому любой опыт важен. Ниже я хочу поделиться нашим опытом. Надеюсь, он будет полезен читателям. Хочу предупредить, кейс нетипичный. Мы выходили в топ украинского App Store, а не российского. Тут вы не найдёте магических "тысяч скачек с нулевым бюджетом на маркетинг". У нас так не получилось, и бюджет был хоть и небольшой, но уж точно не нулевой.
Использование стандарта ES2015 в рамках библиотеки Backbone.js
В то время, как ребята из команд, работающих над Angular, React, мягко, но уверенно пересаживают разработчиков на ES2015, я хотел бы немного рассказать о возможностях использования нового стандарта спецификации с библиотекой Backbone.js. На сегодня основной подход к использованию ES2016 в браузерах один и не зависит от используемого фреймворка/библиотеки. И заключается он в следующем: пишем код на ES2015 и с помощью транспайлера (напр., Babel) получаем код (который и выполняется в браузере) на предыдущем стандарте ES5.
Но как модули, классы и прочие "фишки" из ES2015 использовать в рамках сущностей библиотеки Backbone.js? Об этом речь пойдет под катом.
5 достойных изучения проектов с открытым исходным кодом на React Native
Я хочу представить 5 проектов с открытым исходным кодом, которые я изучаю сам и советую остальным.
![](https://habrastorage.org/files/6ca/b4e/12d/6cab4e12d821474882de1e9fdcae811d.jpg)
Дайджест интересных материалов для мобильного разработчика #145 (14-20 марта)
![](https://habrastorage.org/files/5f8/2f1/677/5f82f1677e9d4c0fa2219c09a3b752c4.png)
Web-приложения в режиме offline. ServiceWorker и CacheStorage
![](https://habrastorage.org/files/e8c/4df/605/e8c4df605ccd442e91ef667cf17cb64d.png)
О чём речь?
Всё чаще возникает задача научить frontend-приложение работать в автономном режиме. Это значит придать web-приложению свойство mobile- или desktop-программы — функционировать в отсутствии связи с Интернет, а также в случае отказа сервера.
Цель — оградить пользователя от проблем соединения на его устройстве. Как было бы обидно не сохранить созданные в google docs таблицы из-за потери wi-fi в ближайшем фастфуде!
Для этого нужно инициализировать приложение в браузере и затем закэшировать ресурсы, минимально необходимые для функционирования. После этого приложение возможно запустить из кэша в случае недоступности сервера.
Решение задачи заключается в следующем:
Кризис ожирения сайтов
![](https://habrastorage.org/files/f61/a82/54d/f61a8254d6af471f85102bc2c6f18f7c.jpg)
Перед началом тирады я хотел бы обратить внимание на то, что прекрасные сайты бывают любых форм и размеров. И я здесь не собираюсь кого-то пристыживать за количество использованных бит, объём использованных ресурсов и так далее. Я люблю большие сочные галереи изображений, мне нравятся огромные эксперименты на JavaScript, я смотрю онлайн-видео в высоком разрешении, как и все вы. Я считаю, что подобное замечательно.
Выступление совсем не об этом. Я хотел бы поговорить об этом общественном кризисе здоровья, этом ожирении сайтов. Отличные дизайнеры, которые задумываются о вебе как я или даже больше, почему-то делают страницы, которые становятся больше. Речь пойдёт о текстовых в своей основе сайтах, которые по каким-то непостижимым причинам с каждым годом становятся всё больше и больше.
Тестирование JS. Кармический Webpack
![image](https://habrastorage.org/files/c6e/12e/df3/c6e12edf3c1f4fcca6f97ae78888f482.png)
Привет!
Пару месяцев назад я писал пост, о том как научить webpack для spa.
С того момента инструмент шагнул вперед и оброс дополнительным количеством плагинов, а так же примерами конфигураций.
В этой статье хочу поделиться опытом смешивания гремучей смеси webpack + jasmine + chai + karma.
Amelisa. Оффлайн и реалтайм движок для React и Mongo
![](https://habrastorage.org/files/bcf/c20/1a6/bcfc201a6a49445780d45a32a6b0294a.png)
Написал недавно движок для синхронизации данных, имеющий первоклассную поддержку оффлайна. Например, можно уйти в оффлайн, изменять данные, закрыть браузер, открыть браузер, открыть сайт (выйти в онлайн) и данные смержатся без потерь. Также во время онлайна данные между клиентом и сервером синхронизируются в реальном времени. Хочу рассказать, в чём была идея, какие есть подобные решения/технологии и кому это может пригодиться.
Камасутра Start-up-а. Чеклист из 5 поз, без которых 70% проектов разваливаются менее чем за год
![](https://habrastorage.org/files/1ee/ac9/9c0/1eeac99c0505434fa4da13b27be6c29e.jpg)
При запуске нового проекта, всегда есть очень много специфических моментов, от которых зависит его жизнеспособность. Если покопаться в Google по запросам «Как запустить стартап», «Проблемы старапов» или «Опыт запуска стартапа», можно найти кучу статей, описывающих гору проблем в начинающихся проектах. Не смотря на свою непохожесть, они все объединены одной общей историей: «детские болезни» и ошибки, которые приводят к феерическому «сексу» с внезапно взбесившимся проектом и кучей неприятностей в придачу. Посему, сегодня будет краткий экскурс в прикладную «сексологию стартапов» с максимально подробным разбором практических моментов.
Опыт переезда для работы программистом в Берлин (часть 1)
Представляю на суд общественности материал о том, как я за четыре месяца получил визу, переехал в Германию и нашел там работу.
Считается, что для переезда в другую страну нужно сначала долго искать работу удаленно, потом, в случае успеха, ждать решения по визе, и лишь после паковать чемоданы. Я решил, что это далеко не оптимальный способ, поэтому пошел другим путем. Вместо того, чтобы искать работу удаленно, я получил так называемую «визу на поиск работы», въехал в Германию, нашел здесь работу и уже после подал документы на Blaue Karte. Во-первых, в этом случае документы не ездят из страны в страну, и время ожидания визы значительно уменьшается. Во-вторых, поиск работы на месте радикально повышает ваши шансы, и это тоже заметно ускоряет процесс.
Тестирование вёрстки на визуальные регрессии с помощью PhantomCSS
И такие ситуации возникают довольно часто. Не каждый клиент имеет потребность, желание или бюджет переписывать весь проект с нуля.
Недавно наша команда получила код от нового клиента, и нам было поручено после небольшого рефакторинга быстро переходить к реализации нового функционала. Мы понимали, что могли бы улучшить код, перенеся клиентские стили на Sass, и это упростило бы нам поддержку в будущем.
С другой стороны, мы могли просто переименовать файлы и включить их в один прекомпилированный css (без какого-либо рефакторинга). Но для улучшения кода было бы хорошо порефакторить стили. Эта работа более затратная, но в будущем себя бы окупила. И, что самое важное — это позволило бы нам работать быстрее, с большей уверенностью что мы что-то не сломаем.
Раньше я рассматривал такие изменения как большие риски. В конце концов, C в CSS это каскадирование, где порядок абсолютно важен. Реструктуризация нескольких стилей означает изменение порядка, что, естественно, приводит к большому риску что-то сломать.
В результате, мы должны были либо дополнительно тестировать наши изменения вручную, либо выставлять такой счет заказчику, который сразу бы отпугивал его своей стоимостью.
На этот раз было решено построить визуально регрессионный набор тестов.
Реакция на долголетие: как мы обновили фронтенд Lingualeo
![image](https://habrastorage.org/files/b14/6d6/afe/b146d6afe09f422eb354e0baff04d317.png)
«Если вам не стыдно за первую версию своего продукта, то вы опоздали с выходом на рынок»
Эти слова оправдывают развитие фронтенда Lingualeo с самого начала, с 2010 года. В сложном многоплатформенном продукте с 5-летней историей код наслоился чуть толще, чем пласты почвы над археологической Трипольской культурой. И вот, этот день настал: мы решили разбежаться и прыгнуть как следует, обновив платформу web-клиента. Ниже мы расскажем, что сделали, чтобы приземлиться как можно дальше от точки отсчета.