Pull to refresh
1
0
Send message

Сборщик почты (делаем простые вещи сложно)

Reading time21 min
Views27K

В качестве предисловия


Наверное, многие из вас в своей практике сталкивались с задачей сбора почты с ряда ящиков. Зачем это может быть нужно? Наверное, потому что это универсальный механизм обмена данными между системами. Множество библиотек под любые языки, реализующих SMTP, POP3, IMAP, готовые решения по реализации стэка сообщений (как я сложно назвал почтовый ящик...) и т.д.

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

Кому достаточно приведенного ниже кода — дальше могут не читать:

         foreach (var mailbox in mailboxes)
                using (var client = new Pop3Client())
                {
                    client.Connect(Hostname, Port, false);
                    client.Authenticate(User, Password);

                    var count = client.GetMessageCount();
                    for (var i = 0; i < count; i++)
                    {
                        Mail = client.GetMessage(i + 1);
                        var cat = SortMail(Mail);
                        DoSomething(Mail, cat);
                    }
                }

Читать дальше →

iOS Инструменты разработчика

Reading time26 min
Views36K

Вступление


Всем привет, меня зовут Григорий, последние 5 лет занимался программированием под iOS. Сейчас решил сменить сферу деятельности и ударился в веб, но чтобы добро не пропадало, хочу поделиться с сообществом своими наработками, накопившимися за это время. Библиотеки выложены на GitHub и добавлены в CocoaPods. Инструкции по установке и использованию вы сможете найти по ссылкам на GitHub, здесь же будет краткое описание.

Минимальная поддерживаемая версия — iOS 6.0.
Читать дальше →

Пишем для Apple Watch что-нибудь сложнее Hello, world

Reading time6 min
Views12K
Уже прошло много времени, с моменты выпуска компании Apple ее нового продукта — часов Apple Watch. Уже скоро выйдет финальная версия операционной системы для них — Watch OS 2.0. А на Хабре до сих пор нет более-менее развернутой статьи о том, как написать что-нибудь сложнее “Hello, world!” для Apple Watch. И в этой статье мы постараемся это исправить и написать приложение из нескольких экранов со списком, загрузкой данных и взаимодействием с основным приложением.
Читать дальше →

Руководство по оптимизации сайтов для начинающих. Часть 2

Reading time6 min
Views15K
Часть 1

Процесс оптимизации


Установить в организации хорошо прописанный и формальный процесс оптимизации – это очень полезная практика, поскольку она:

  1. организует рабочий процесс и задаёт реальные сроки окончания
  2. устанавливает стандарты контроля качества и уменьшает количество ошибок
  3. добавляет веса всей операции – логику процесса можно объяснить владельцам компании


На общем уровне планирования я бы рекомендовал устраивать совещания по планированию оптимизации 1-2 раза в неделю, на которых необходимо:

  1. Просмотреть текущие тесты, чтобы понять, нужно ли их остановить или признать «завершёнными» (см. ниже). Для законченных тестов есть две возможности:
    1. есть явный победитель. В этом случае необходимо разработать его вывод в продакшн
    2. нет явного победителя в текущей контрольной группе. В этом случае нужно определить, требуется ли дополнительное изучение вопроса, или же нужно просто прекращать эксперимент.

  2. Рассмотреть источники данных и подумать над новыми идеями для тестов
  3. Обсудить и назначить приоритет любым новым идеям.


Как же понять, когда тест завершён?


Критерии завершённости – вещь сложная и даже являются коммерческими секретами. Определю минимальные необходимые условия для объявления теста «завершённым». Общепринятых стандартов не существует, и критерии зависят в основном от представлений вашей команды. Мы для себя выработали следующие критерии:
Читать дальше →

Как убрать зависания UIPickerView в симуляторе iOS

Reading time3 min
Views3.4K
Время от времени замечаю, что случаются зависания, когда в симуляторе пытаюсь выбрать элемент в UIPickerView. Но в той степени, в которой тормоза проявляются сейчас, стало невыносимо наблюдать: изменение выбранного элемента в «барабане» может занять до минуты, в течение которой интерфейс ни на что не реагирует.

Возможно, это недоработка бета-версий.
На чистом проекте специально для исследования этой проблемы наблюдается всё точно то же.

Данная проблема проверялась на 4 вариантах запуска:
Xcode 6.4 + 8.1 проявляется
Xcode 6.4 + 8.3 проявляется
Xcode 7.0 + 8.3 проявляется
Xcode 7.0 + 9.0 не проявляется

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

Попробуем устранить проблему.
Читать дальше →

Управляем зависимостями в iOS-приложениях правильно: Модульность Typhoon

Reading time12 min
Views10K


В предыдущей статье цикла мы кратко рассмотрели основные принципы устройства и функционирования Typhoon Framework — Dependency Injection контейнера для iOS. Тем не менее, мало понимать, как устроен инструмент — важнее всего правильно его использовать. В первой части мы рассматривали различные примеры настройки конфигураций создаваемых зависимостей, то теперь разберемся с более высоким уровнем — разбитием на модули самих TyphoonAssembly и их тестированием.
Читать дальше →

UITableView: добавляем иконку в UITableViewRowAction

Reading time4 min
Views8.9K
iOS SDK дает нам «из коробки» два варианта настроить кнопку, которая будет показана при сдвиге UITableViewCell влево.




Первый вариант, доступный с первых версий и до наших дней, мало привлекателен для обычных кнопок, поскольку предназначен именно для «опасных» действий, ибо фон окрашивается системой в красный цвет и не поддается легкому изменению через публичный API.

- (NSString *)tableView:(nonnull UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    return @"Настроить";
}


Второй вариант, доступный с iOS 8, больше привлекает, поскольку есть возможность указать стиль кнопки (Destructive, Normal), а также в случае надобности установить конкретный цвет фона через backgroundColor.

- (NSArray<UITableViewRowAction *> *)tableView:(nonnull UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    UITableViewRowAction *configureAction;
    configureAction = [UITableViewRowAction
                       rowActionWithStyle:UITableViewRowActionStyleNormal
                       title:@"Настроить"
                       handler:^(UITableViewRowAction * __nonnull action, NSIndexPath * __nonnull indexPath) {
                          // handle
                       }];
    
    return @[ configureAction ];
}


Ни первый, ни второй варианты не дают возможности назначить иконку, что довольно неприятно.
Но мы всё равно попробуем что-нибудь сделать.
Читать дальше →

Семь удивительных «возможностей» Javascript

Reading time5 min
Views66K
За последние несколько месяцев я сделал несколько доработок для JSHint, в основном с целью изучить ES6 (я особенно горжусь тем, как переделано обнаружение областей видимости для переменных). Во время этого процесса я наткнулся на несколько вещей, которые меня удивили — в основном, в ES6, однако есть и кое-что про ES3, что я до этого никогда не использовал.

Break из любого блока


Наверняка вы знаете, что в любом цикле можно использовать ключевые слова break и continue — это стандартная возможность в современных языках программирования. Однако не все знают, что циклам можно давать метки и с их помощью прерывать любой конкретный цикл:

outer: for(var i = 0; i < 4; i++) {
    while(true) {
        continue outer;
    }
}
Читать дальше →

Что нужно знать о работе с текстом превью email-писем

Reading time6 min
Views19K


Вы потратили много времени на оптимизацию своих email-писем, и уверены что сообщения почтовой рассылки хорошо написаны, приятно выглядят и, что еще важнее, нормально отображаются в большинстве почтовых клиентов. Проблема в том, что даже самые идеальные письма с большой долей вероятности никогда не будут даже открыты получателем. Они просто попадут в папку «Входящие», где уже и так похоронено огромное количество текста.

Папка входящи сообщений — это первое, что видит пользователь почтовой программы, но это также часто и последний фактор, рассматриваемый при принятии решения о том, открывать ли письмо. Все почтовые клиенты в обязательном порядке показывают, от кого пришло письмо (поле “from”) и тему сообщения. Некоторые программы также показывают небольшой текст превью.

Оптимизация этого текста может приносить отличные результаты и значительно увеличивать процент открытых писем (иногда, до 45%).
Читать дальше →

Интересное для iOS-разработчиков за неделю

Reading time2 min
Views8.6K
Чтобы преуспевать в своем деле, разработчикам важно быть в курсе последних нововведений. За неделю накапливается несколько десятков полезных статей, видео-лекций и записей в блогах гуру iOS-разработки — только и успевай отслеживать! Чтобы в цейтноте вы не пропустили ничего важного, мы создали MBLTdev Digest, который работает уже 21 неделю.

Подписывайтесь на email рассылку, push notifications для Safari или RSS. Под катом — выпуск этой недели.



Читать выпуск

Как работает Wargaming Common Menu

Reading time7 min
Views15K
Доброго времени суток!

Хочу поделиться с сообществом опытом разработки JS-виджета межпроектной навигации. Он представляет собой модуль, который подключается на большинство сайтов вселенной Wargaming (Порталы, Wiki, WarGag и пр.).

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


Читать дальше →

Самообучение английскому — оптимальная организация времени. Практика занятий по методу Умин для компьютера и смартфона

Reading time15 min
Views63K
Метод Умин является одной из наиболее популярных альтернативных методик изучения иностранного языка, он известен уже более 20 лет и имеет многие сотни отзывов в прессе и интернете. Метод был опубликован в 1993 году в книге Умин Е. А. “Иностранный легко и с удовольствием” (50 стр., доступно в интернете). Автор метода, член-корреспондент РАМН Евгений Алексеевич Умрюхин, в интервью рассказывает о его возможностях так:
— Я видел много примеров, когда после полугода изучения языка моим методом человек получал возможность общаться на нем, может несовершенно, допуская отдельные ошибки или испытывая иногда трудности в выражении сложных мыслей. Но в общении, восприятии речи и чтении книг на иностранном языке эти трудности быстро преодолевались. Предложенный метод эффективен, потому что он существенно отличается от многих стандартных.

Сам метод основан на научных исследованиях Е. А. Умрюхина по функционированию мозга, изложенных, например, в книгах “Механизмы мозга: информационная модель и оптимизация обучения” (1999 г.), “Медико-биологические аспекты интеллектуальной деятельности” (2004 г.), а также в преподаваемых им учебных курсах, в том числе и в МГТУ им. Баумана, где я и познакомился с ним самим и с его исследованиями.
Читать дальше →

NGINX изнутри: рожден для производительности и масштабирования

Reading time8 min
Views149K
NGINX вполне заслуженно является одним из лучших по производительности серверов, и всё это благодаря его внутреннему устройству. В то время, как многие веб-серверы и серверы приложений используют простую многопоточную модель, NGINX выделяется из общей массы своей нетривиальной событийной архитектурой, которая позволяет ему с легкостью масштабироваться до сотен тысяч параллельных соединений.

Инфографика Inside NGINX сверху вниз проведет вас по азам устройства процессов к иллюстрации того, как NGINX обрабатывает множество соединений в одном процессе. Данная статья рассмотрит всё это чуть более детально.
Поехали!

Прием платежей по банковским картам в приложениях на iOS

Reading time7 min
Views30K
Вслед за разработанными ранее SDK для Windows Universal App (о чем мы уже рассказывали на Хабре) и node.js, в мае мы разработали и опубликовали SDK для iOS. О том, какие приложения на iOS могут принимать платежи через сторонний платежный сервис, зачем это нужно и как интегрировать платежный сервис в мобильное приложение, читайте под катом. А еще — вкусная свежая статистика по доле мобильных пользователей в платежном трафике PayOnline за последние 3 года. Только для жителей ХабраХабр!


Читать дальше →

Как независимый разработчик прикоснулся к легенде. Часть первая

Reading time10 min
Views38K

1


В новый офис бывших коллег я попал под аккомпанемент дождя. Вот-вот начался май, пора к такому привыкать. Отряхиваюсь от влаги, жму руку бывшему руководителю, через просторный холл поднимаюсь на второй этаж, дальше по коридору, затем направо или налево — уж и не вспомню — и вот она, цитадель геймдева. Знакомые лица, знакомые рукопожатия, всё как в старые добрые времена. За три месяца инди-плавания я уже успел подзабыть, что такое офисные кресла, кофемашина и фритуплей.
Читать дальше →

Как быстро собрать мейлер для колл-центра

Reading time3 min
Views11K
Мы организуем конференцию для веб-разработчиков и решили обзвонить Челябинские веб-студии. Нужно было как-то сразу после звонка отправить красивое письмо. Также важно получать отчеты о доставке писем и “кликабельности” ссылок (первое на случай опечатки, а второе для оценки затеи). Да, и это все нужно “еще вчера”, а программисты не доступны.

Челлендж принят! И элегантное решение уже под катом…
Читать дальше →

Создание простого приложения для Apple Watch. Личный опыт на примере Рамблер.Новостей

Reading time9 min
Views13K
24 апреля 2015 года Apple выпустила в продажу умные часы Apple Watch, спустя полгода после их первого анонса на презентации в Калифорнии. Рамблер не мог остаться в стороне. Ознакомившись с WatchKit SDK и гайдлайнами нам стало ясно, что на данный момент возможностей немного и в целом, разработка не должна занять много времени.

image  image  image  image  

Читать дальше →

Семейный бизнес в IT. Как мы собирали команду

Reading time8 min
Views19K


Предисловие


Примерно год назад мы решили, что днем рождения нашего Энергослона будет 8-е мая. Как-то так само собой сложилось и, признаться, я не очень хорошо помню почему. То ли в этот день мы начали приглашать первых тестеров, то ли это был день, когда мы создали первую запись в блоге, то ли произошло какое-то другое событие… Не помню. Но так или иначе именно 8-го мая наш Слоник задувает свечи на именинном торте и с удовольствием принимает подарки.

И так случилось, что в преддверии Слоновьего дня рождения Мегамозг преподнес нам неожиданный и очень приятный сюрприз: возможность писать статьи в корпоративный блог. Именно этот подарок подтолкнул меня к написанию очередной статьи из цикла «Семейный бизнес в IT». А рассказать в этой статье я хочу о том, как мы собирали команду.
Читать дальше →

В чем сила настоящего UX?

Reading time7 min
Views4.1K
Начнем с основ – разберемся что же такое UX. Очередная секта, которая с помощью красивых картинок и магических заклинаний умеет удваивать продажи любого товара или научная методология управления людскими массами? Эффективное превращение любой личности в товарозависимого покупателя или способ накладывать тени в графическом редакторе? Кого ищут работодатели и почему лишь в супергероях нуждается бизнес? И главное — как избавиться от агрессивных гопников? Fill the power of the true ux!

Читать дальше →

«7 Принципов юзабилити от Джесси Хауслера» — краткая выжимка из статьи

Reading time5 min
Views6.4K


На днях мое внимание привлекла одна статья от Джесси Хауслера, который является главным специалистом по юзабилити в компании Salesforce. В статье он написал про 7 принципов юзабилити, который должен знать каждый дизайнер.
Читать дальше...

Information

Rating
Does not participate
Registered
Activity