Как стать автором
Обновить
6
0
Александр @Sash0k_k

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

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

Распарсить HTML в .NET и выжить: анализ и сравнение библиотек

Время на прочтение8 мин
Количество просмотров126K

В ходе работы над одним домашним проектом, столкнулся с необходимостью парсинга HTML. Поиск по гуглу выдал комментарий Athari и его микро-обзор актуальных парсеров HTML в .NET за что ему огромное спасибо.

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

Сегодня я протестирую популярные, на данный момент, библиотеки для работы с HTML, а именно: AngleSharp, CsQuery, Fizzler, HtmlAgilityPack и, конечно же, Regex-way. Сравню их по скорости работы и удобству использования.


TL;DR: Код всех бенчмарков можно найти на github. Там же лежат результаты тестирования. Самым актуальным парсером на данный момент является AngleSharp — удобный, быстрый, молодежный парсер с удобным API.

Тем, кому интересен подробный обзор — добро пожаловать под кат.
Читать дальше →
Всего голосов 31: ↑26 и ↓5+21
Комментарии36

Немного о сборке мобильного приложения

Время на прочтение23 мин
Количество просмотров28K
image

Я помню то замечательное время, когда сборка релизной версии мобильного приложения сводилась к тому, что нужно было выставить debug = false и запустить экспорт apk-файла. Проходит 2 минуты, пока пыхтит IDE, и все готово. Все усилия сосредотачивались на необходимости указать данные сертификата подписи. Это было совсем недавно. Cейчас процесс сборки того самого приложения разросся настолько, что, если мне, вдруг, потребуется выполнить все операции самостоятельно, и даже если я все вспомню и проделаю безошибочно (во что я не верю), то это займет не час, который сегодня кажется непозволительно долгим, а, скорее всего, сутки, после чего терапевт обязан будет прописать мне больничный по усталости недели на две.

Итак, процесс сборки мобильного приложения. Попробую рассказать, из чего он у нас состоит — не потому, что в последнее время стало модным катать посты о CI той или иной мобильной команды (с покером, русалками и прочими обязательными атрибутами), а потому, что это отличный опыт, который я получил, работая над Почтой Mail.Ru для Android, и потому, что этой возможности, вероятнее всего, не было бы, работай я в другой команде, над другим проектом или в другой компании.
Читать дальше →
Всего голосов 25: ↑23 и ↓2+21
Комментарии18

GDG DevFest Воронеж 2015: фото- и видеоотчёт с мероприятия

Время на прочтение4 мин
Количество просмотров4.7K


Привет, Хабр! Как мы и обещали, выкладываем фото и видео-отчёт с прошедшего ивента. Воронежские GDG продолжают традицию и уже четвертый год подряд проводят DevFest, чтобы обсудить самое важное и актуальное в Google-мире. В этом году конференцию посетили более 500 участников, что почти вдвое больше, чем в прошлом. Ну а организаторами, как обычно, выступили DataArt и ВГУ.

Читать дальше →
Всего голосов 10: ↑7 и ↓3+4
Комментарии0

Регулярные выражения Oracle. Опасный диапазон

Время на прочтение4 мин
Количество просмотров47K


Разработчик Oracle, часто использующий в коде регулярные выражения, особенно на базах с православными настройками, рано или поздно может столкнуться с явлением, которое, кроме как мистикой, никак не назовешь. Длительные поиски причин возникновения проблемы могут привести к потере веса, аппетита и спровоцировать различного рода психосоматические расстройства — все это я сейчас и попробую предотвратить. А поможет мне в этом функция regexp_replace. Она может иметь до 6 аргументов:

REGEXP_REPLACE (
  1. исходная_строка,
  2. шаблон,
  3. заменяющая_строка,
  4. позиция начала поиска совпадения с шаблоном (по умолчанию 1),
  5. номер вхождения шаблона в исходную строку (по умолчанию 0 – все вхождения),
  6. модификатор (пока что темная лошадка)
)
Возвращает измененную исходную_строку, в которой все вхождения шаблона заменены значением, переданным в параметре заменяющая_строка. Зачастую пользуются короткой версией функции, где заданы 3 первых аргумента, что бывает достаточно для решения многих задач. Я тоже так сделаю. Допустим, нам нужно в строке 'MASK: lower case' замаскировать все строчные символы звездочками. Для задания диапазона строчных символов должен подойти шаблон '[a-z]'. Проверяем

select regexp_replace('MASK: lower case', '[a-z]', '*') as result from dual

Ожидание
+------------------+
| RESULT           |
+------------------+
| MASK: ***** **** |
+------------------+

Реальность
+------------------+
| RESULT           |
+------------------+
| *A**: ***** **** |
+------------------+

Если на вашей базе это явление не воспроизвелось, значит вам пока повезло. Но чаще начинаются копания в кодировках, конвертации строк из одного набора символов в другой и со временем наступает примерно такое состояние
Читать дальше →
Всего голосов 32: ↑19 и ↓13+6
Комментарии6

Сборка кастомной прошивки OpenWRT

Время на прочтение3 мин
Количество просмотров67K
Не так давно озадачился поднятием на своем роутере D-Link DIR-320 сервера OpenVPN. Но после установки прошивки OpenWRT оказалось, что на 4-х мегабайтной флешке роутера не осталось достаточно места для установки OpenVPN. Выходом из ситуации стала сборка собственного варианта прошивки с помощью Image Generator, что позволило при том же наборе пакетов получить прошивку меньшего размера.
Читать дальше →
Всего голосов 39: ↑36 и ↓3+33
Комментарии10

Как мы превратили телефон в банковскую карту

Время на прочтение8 мин
Количество просмотров132K
image

Недавно мы приглашали владельцев HTC One принять участие в тестировании NFC платежей и теперь хотим поблагодарить всех, кто включился и поспособствовал развитию бесконтактных платежей в нашей стране. Сегодня приложение «Кошелек» уже стало доступно для всех владельцев HTC One и Philips Xenium W336 после обновления прошивки, а в ближайшее время им также смогут пользоваться обладатели HTC One Dual SIM, HTC One Max, HTC One SV, HTC Desire 500, HTC Desire 600 и Philips Xenium W8555.

В комментариях к предыдущему посту и хабродиалогах было много вопросов о том, как работает «Кошелек» и что нужно сделать, чтобы поместить в него банковскую карту или проездной билет, не снимая задней крышки телефона и не используя двухсторонний скотч. В данном посте я попробую ответить на эти вопросы и рассказать, как это работает.
Читать дальше →
Всего голосов 68: ↑47 и ↓21+26
Комментарии135

Material Design: на Луну и обратно

Время на прочтение11 мин
Количество просмотров389K
“Это унылое диалоговое окно действительно нужно?”



В этой статье я изложил главные принципы Material Design и дал советы по их воплощению. Текст написан по следам мастер-класса для разработчиков, который мы, Роботы, устраивали совместно с российским офисом Google (Think Mobile).


Когда-то все продукты Google выглядели по-разному плохо. Даже один продукт на разных платформах выглядел неконсистентно.

Все стало меняться в 2011 году, когда в Google начали усиленно работать над унификацией визуальной части экосистемы своих продуктов и назвали все это Project Kennedy.

При чем тут Кеннеди?
Легенда такова: президент Кеннеди инициировал программу полёта человека на Луну (если верить, что этот полёт когда-либо был). А большой начальник в Google Ларри Пейдж исповедует принцип, что продукты нет смысла улучшать на 10% — они должны быть в 10 раз лучше, чем у конкурентов. Если уж запускать продукт, то сразу на Луну. Вот и здесь было решено круто всё переделать.

Читать дальше →
Всего голосов 146: ↑135 и ↓11+124
Комментарии120

Набор иконок Material Design от Google

Время на прочтение1 мин
Количество просмотров105K


В списке самых популярных репозиториев Github за неделю на первое место вышел набор иконок Material Design, разработанный в компании Google.

Набор содержит аж 750 (!) глифов. Это пиктограммы, часто используемые в различных мобильных приложениях для воспроизведения медиа, коммуникаций, редактирования контента, установки соединения и т.д.
Читать дальше →
Всего голосов 66: ↑60 и ↓6+54
Комментарии16

AppCompat v21 — Material Design для пре-Lollipop устройств

Время на прочтение8 мин
Количество просмотров92K
image
17 октября был опубликован Android 5.0 SDK, который принес новые виджеты и материальный дизайн. Мы расширили библиотеки поддержки, чтобы вы могли использовать ваши последние разработки и на предыдущих версиях Android. Это изменения включают в себ крупное обновление для AppCompat, а так же библиотеки RecyclerView, CardView и Palette.

В этом посте мы взглянем, что нового появилось в AppCompat и как это использовать для поддержки материального дизайна в ваших приложениях.
Читать дальше →
Всего голосов 18: ↑16 и ↓2+14
Комментарии22

Иконка бокового меню из Material Design (как в Google Play)

Время на прочтение4 мин
Количество просмотров43K
Привет, Хабражители!

Наверное, многие заметили, что в последних версиях приложений Google Play и Google+ Фото для Android иконка бокового меню (NavigationDrawer) имеет красивую анимацию (переход из трёх полосок в стрелку). Пример здесь. Мне стало интересно, как это реализовано, и я отправился в путешествие по просторам Всемирной паутины в поисках ответа на этот вопрос. Теперь же спешу поделиться с вами этим рецептом.

Кому интересно, прошу под кат.
Читать дальше →
Всего голосов 28: ↑19 и ↓9+10
Комментарии36

Что такое утечки памяти в android, как проверить программу на их отсутствие и как предотвратить их появление

Время на прочтение14 мин
Количество просмотров88K
В этой статье для начинающих android-разработчиков я постараюсь рассказать о том, что такое «утечки памяти» в android, почему о них стоит думать на современных устройствах, выделяющих по 192МБ на приложение, как быстро найти и устранить эти утечки в малознакомом приложении и на что нужно обращать особое внимание при разработке любого приложения.


Конечная цель этой статьи — ответ на простой вопрос:
Куда нажать, чтобы узнать, какую строчку в приложении поправить?

Читать дальше →
Всего голосов 65: ↑64 и ↓1+63
Комментарии36

Анимации c помощью Transitions API

Время на прочтение11 мин
Количество просмотров70K
Привет!

На хабре ещё не была освещена тема Transitions API для анимаций, которые появились в Android начиная с 4.4 (KitKat) и продолжили свое развитие в 5.0 (Lollipop). В своей статье я расскажу о том, как упростить работу с анимациями с их использованием и как применять их на любом устройстве с версией Android 4.0 и выше.


Читать дальше →
Всего голосов 34: ↑31 и ↓3+28
Комментарии20

Google: рекомендации для приложений в Google Play

Время на прочтение4 мин
Количество просмотров24K
Тема приложений является одной из самых обсуждаемых и «трендовых», а тема фичиринга и успешности приложения в том или ином сторе — самая обсуждаемая в ней подтема.

На днях было опубликовано руководство The Secrets to App Success on Google Play, которое, если переводить практически дословно, поможет вашему приложению или игре стать успешными в Google Play (кстати, скачать книгу можно из Google Play).

image

Кто-то подумает, что это, конечно, здорово, но вряд ли станет волшебной палочкой-выручалочкой для приложения. Определенно в руководстве есть советы, которые могут быть интересны и полезны начинающим разработчикам, пишущим не только под Android, но и под iOS, Windows или для магазина Amazon и т.п. Разработчики, которые уже не первый год в индустрии, смогут найти для себя рекомендации, применительные именно к Google Play.
Дальше
Всего голосов 18: ↑12 и ↓6+6
Комментарии18

Автоматическое тестирование Android приложений c любовью

Время на прочтение1 мин
Количество просмотров16K
Новая видеозапись одного из докладов с нашей конференции мобильных разработчиков #MBLTDev. На этот раз мы решили выложить видео для Android-разработчиков и тестировщиков «Автоматическое тестирование Android приложений c любовью» от Алексея Коровянского.

Алексей является Android-разработчиком и основателем некоммерческого сообщества разработчиков Google Developer Group Омск.


Презентация

В своем докладе Алексей рассказал про проблемы и трудности, с которыми сталкиваются при автоматизации тестирования. Привел примеры, исходя из своего опыта, решение проблем, примеры того, что было раньше, что есть сейчас и сделал прогноз того, что нас ожидает в будущем. Кроме того, Алексей рассказал про тестирование на примере двух фреймворков и про Espresso и Robolectic.
Читать дальше →
Всего голосов 22: ↑18 и ↓4+14
Комментарии0

Внедряем материальный дизайн

Время на прочтение7 мин
Количество просмотров52K
Настало время переходить на Lollipop, друзья. Как бы смешно это не звучало.

image

Буквально вчера мы в Surfingbird обновили дизайн приложения и сегодня, по свежим следам, хотелось бы поделиться впечатлениями от перехода на material design.
Читать дальше →
Всего голосов 31: ↑27 и ↓4+23
Комментарии33

Локализация приложений для китайского рынка-2. Блок-листы

Время на прочтение5 мин
Количество просмотров9.3K
В предыдущей теме я лишь сделал краткий обзор требований к разработчику, который хочет выпустить свое приложение на рынке КНР. Из всех полученных вопросов два основных касались именно блок-листов и вывода денег из Китая. Первый пункт я и хочу рассмотреть более подробно.

禁 — значит «запрещено»

Читать дальше →
Всего голосов 29: ↑26 и ↓3+23
Комментарии6

Как мы учили кнопку плавать

Время на прочтение4 мин
Количество просмотров17K
Сразу, наверное, стоит предупредить, что мы сделали плавающую кнопку немножко по-своему и собственно до релиза библиотеки, реализующей материальный дизайн как таковой. Но обо всем по порядку.

В нашей концепции (приложений, сайта surfingbird.ru) активно используется такое понятие как «сёрф». Сервис генерирует для пользователя набор релевантных его интересам статей и переход к следующей, рекомендуемой статье мы называем «сёрфом». После очередного редизайна мы кнопку сёрф потеряли (раньше она была сверху, в акшенбаре, и до неё было не очень удобно тянуться), чем пользователи были очень возмущены. После просмотра ролика с превью материального дизайна мы загорелись идеей реализовать нечто подобное в приложении.

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

image
Читать дальше →
Всего голосов 21: ↑15 и ↓6+9
Комментарии14

Используем стандартные элементы ListFragment по назначению

Время на прочтение3 мин
Количество просмотров18K
В одном из проектов столкнулся с тем, что в приложении нужно было отображать списки результатов для различных запросов (поиск по словам, датам, тегам и т.п.). Так как списки повторялись в разных Activity, самым очевидным решением было использовать фрагменты, а конкретно создать свой класс ListFragment и повторно использовать его в проекте.

image

ListFragment как раз предназначен для отображения различных списков и примечателен тем, что имеет свои поля и методы для работы со списком, а также XML-разметку с минимальным набором представлений. Благодаря всему этому, мы можем даже не создавать свою XML-разметку для фрагмента, используя стандартную.

Прежде, чем начать работать с ListFragment, давайте немного изучим, что же находится внутри?
Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии13

Архитектурный дизайн мобильных приложений

Время на прочтение9 мин
Количество просмотров98K
Признак плохого дизайна №1:
Наличие объекта-«бога» с именем, содержащим «Manager», «Processor» или «API»


Ведущий iOS-разработчик Redmadrobot Егор BepTep Тафланиди — о том, как добиться стройного архитектурного дизайна мобильного приложения, используя классические шаблоны проектирования и логическое разделение исходного кода на модули.

Читать дальше →
Всего голосов 43: ↑33 и ↓10+23
Комментарии26

Художественные и документальные фильмы о космонавтике

Время на прочтение4 мин
Количество просмотров69K

Статьи о книгах и играх требуют «третьего кита» — рассказа о фильмах на космическую тему. Тем более, что я «заболел» космонавтикой именно после просмотра нескольких фильмов подряд. В данной статье я хочу рассказать о лично виденных достойных упоминания художественных (не фантастических) и документальных фильмах о космонавтике.
Что бы посмотреть на выходных?
Всего голосов 49: ↑44 и ↓5+39
Комментарии37

Информация

В рейтинге
Не участвует
Откуда
Киров (Кировская обл.), Кировская обл., Россия
Зарегистрирован
Активность