• Swift улучшаем performSegueWithIdentifier или удобный роутер со сторибордами

      Редкий разработчик под iOS или OS X не использовал сториборды и еще меньше программистов не передавали данные между экранами.
      Все мы знаем метод performSegueWithIdentifier и трудности работы с ним.

      Начав проект на Swift в один момент мне стало обидно: «Почему мы должны в строго-типизированном языке использовать обертку для передачи данных?»
      Через пару минут сформировалось видение решения и в скором времени реализация.

      Долго думал, стоит ли писать об этом, поскольку материал крайне небольшой, но эти 50 строк могут вам очень сильно помочь

      menuController?.performSegueWithIdentifier(changeItemIdentifier, sender: nil) { segue in
          let controller = segue.destinationViewController as! ChangeMenuItemController
          controller.viewModel.sourceMenuItem = item
      }
      


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

      Разберемся как это работает? Не претендую на уникальность, но мне кажется подход интересным.
      Читать дальше →
    • Создаем быстрый прототип мобильного приложения

        На хабре уже присутствует некоторое количество статей, посвященных процессу прототипирования в разработке программного обеспечения. Есть достаточно фундаментальные статьи с обзорами стандартов и расчетами, есть статьи про прототипирование устройств, есть цикл из двух статей про процесс выбора инструмента для прототипирования. К сожалению, процесс создания прототипов мобильных приложений освещен очень скудно – в виде единственной статьи в 2010 году, и пара слов в статье Разработка мобильных приложений: с чего начать.

        Хотелось бы исправить эту ситуацию, и предложить вашему вниманию большой обзор доступных инструментов для прототипирования мобильных приложений.
        Читать дальше →
      • Как я делал веб-версию KeePass

          Как-то мне надо было добавить в админку просмотр списка паролей. База хранилась на сервере в формате KeePass (kdbx v2), сервер был на ноде — недолго думая, я взял первый попавшийся пакет и сделал. А потом понадобилось то же самое, но прямо у пользователя в браузере, без сервера. Ничего не нашлось. Первым желанием было форкнуть либу и заменить использование node api, но от первого просмотра кода желание пропало, решил сделать сам.



          Под катом расскажу о проблемах, с которыми я столкнулся, и способах их решения
          Читать дальше →
        • Дайджест новостей для iOS-разработчиков

            Уильяму Генри Гейтсу III 60 лет. Да-да, так его зовут полностью. Хотите проникнуться духом того времени — прочтите «Сотворение Microsoft». Сердечно поздравляем и желаем долгих лет и новых рабочих свершений. Тем временем в App Store появляется категория Shopping. Разработчики получили соответствующее письмо.



            Читать дальше
          • Собеседование на должность Automation QA Engineer

            image

            Вот и у меня нашлась тема, которой я могу поделиться с Хабр сообществом. Надеюсь, данная статья получится не только познавательной, но и интересной.

            Входные данные:
            Локейшн: Днепропетровск.
            Позиция: Junior Automation QA Engineer.
            Технологии: C#, Selenium, MSTest, TeamCity, Hibernate.


            Так получилось, что пару месяцев назад я оказался на лавке запасных в одной большой компании. Клиент решил поделить нашу команду автотестеров на 2 (хорошо, что не на ноль) и так как у меня на этом проекте срок работы был невелик, то я попал в резерв. Внутренних проектов не ожидалось, а в резерве обычно сидеть скучно и невыгодно в денежном плане. Так я начал ходить на интервью.
            Читать дальше →
          • Что такое Selenium?

              Время от времени мне приходится распутывать терминологические хитросплетения, связанные с употреблением словосочетаний, в которых встречается слово Selenium – Selenium 2.0, Selenium IDE, Selenium RC, Selenium WebDriver, Selenium Server, Selenium Grid.

              Путаница возникает во многом из-за того, что нигде нет чёткого описания всех этих терминов на одной страничке, и я постараюсь восполнить этот информационный пробел.
              Читать дальше →
            • Математическая задача о 100 коробках и спасении заключенных

              Предлагаю читателям «Хабрахабра» перевод публикации «100 Prisoners Escape Puzzle», которую я нашел на сайте компании DataGenetics. Все ошибки по данной статье присылайте, пожалуйста, в личные сообщения.

              По условию задачи в тюрьме находится 100 заключенных, каждый из которых имеет личный номер от 1 до 100. Тюремщик решает дать заключенным шанс на освобождение и предлагает пройти придуманное им испытание. Если все заключенные справятся, то они свободны, если хотя бы один провалится — все умрут.


              Читать дальше →
            • Футуристическое мышление

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

                Привет! Меня зовут Саня, и я вижу будущее. Вы только не подумайте: я не какой-нибудь там маг-экстрасенс пятой категории гильдии Ардуины второго пришествия. Я действительно вижу будущее, когда сосредоточусь. Я не знаю, кто посылает мне эти видения: бородатый дядька на небе, аццкий сцотона, или дух Ричарда Фейнмана просачивается сквозь швы пространства-времени и подсовывает мне в голову эти картинки. Я также не знаю, как вся эта бодяга согласуется с многомировой теорией, принципом неопределённости Гейзенберга и пророчеством Ванги.

                Многие спросят: «Эй чувак! Если ты действительно видишь будущее, то какого чёрта ты тратишь время на пост в хабр вместо того, чтобы спасать мир?!» Проблема в том, что я не вижу глобальных событий. Я не могу предсказать эпидемию или войну; не могу знать о том, что Северная Корея запустит ядерную ракету; даже вымирание популяции бородатых хомячков в африканских саваннах я не могу предотвратить. Вот я и решил устроиться на работу, где мои скромные умения точно пригодятся.
                Читать дальше →
              • Пять ошибок анонимности, которые стоили главе Silk Road свободы

                  Дело Росса Ульбрихта наглядно показывает, как пренебрежение несколькими банальными мерами защиты собственной анонимности может вылиться в огромный срок тюремного заключения. Владельца подпольной биржи по продаже наркотиков Silk Road признали виновным по всем пунктам. Похоже, за решёткой ему предстоит провести от 30 лет до всей оставшейся жизни. И этого можно было избежать.

                  Рыночная площадка, которую выстроил Ужасный Пират Робертс, была основана на неплохих технологиях обеспечения анонимности: сервера были надёжно спрятаны посредством луковой маршрутизации сети Tor, а транзакции оплаты между покупателями и продавцами проводились с помощью криптовалюты Bitcoin. Внешне отследить что-либо невозможно. Но Ульбрихт допустил несколько нелепых ошибок, которые вылились в огромный список цифровых доказательств на судебном процессе.

                  Всего было допущено пять основных ошибок. Глупость некоторых из них поражает, но их легко понять — скорее всего, излишняя самоуверенность накапливалась годами.

                  Bitcoin. Анонимность биткойнов часто сравнивают с анонимностью передачи наличных денег. Но это не совсем корректное сравнение: абсолютно все транзакции находятся в публичном доступе. Некоторые веб-сайты (к примеру, Blockchain.info) позволяют легко отслеживать транзакции на любом кошельке.
                  Читать дальше →
                • STM32 и FreeRTOS. 1. Развлечение с потоками

                  • Tutorial
                  Данный цикл из 5 статей рассчитан на тех, кому стало мало возможностей привычных «тинек» и ардуинок, но все попытки перейти на более мощные контроллеры оканчивались неудачей или не приносили столько удовольствия, сколько могли бы. Все ниженаписанное проговаривалось мной много раз на «ликбезе» программистов нашей студии (которые часто сознавались, что переход с «тинек» на «стмки» открывает столько возможностей, что попадаешь в ступор, не зная за что хвататься), поэтому смею надеяться, что польза будет всем. При прочтении подразумевается, что читающий — человек любопытный и сам смог найти и поставить Keil, STM32Cube и понажимать кнопки «ОК». Для практики я использую оценочную плату STM32F3DISCOVERY, ибо она дешевая, на ней стоит мощный процессор и есть куча светодиодиков.

                  Каждая статья рассчитана на «повторение» и «осмысление» где-то на один околовечерний час, ибо дом, семья или отдых…



                  Читать дальше →
                • Самые популярные торрент-сайты: рейтинг на начало 2015 года

                  • Translation
                  В начале 2015 года KickassTorrents вырвался на первое место по трафику, а следом за ним идёт Torrentz. «Икона» файл-шаринга The Pirate Bay пока ещё не работает, но его суммарные клоны, копии и последователи участвуют в рейтинге совместно.

                  Остальные пункты списка заняты уже известными сайтами. С прошлого года произошла лишь одна замена – место выбывшего Bitsnoop.com занял Limetorrents.cc. Один из старейших сайтов, Demonoid, вернувшийся в онлайн после долгого отсутствия, хоть и не попал в рейтинг, но неуклонно карабкается вверх. Мы ещё можем увидеть его в чарте.

                  Итак, сам чарт (основан на данных от Alexa и U.S. Compete, и некоторых других показателях):
                  Смотреть чарт
                  • +18
                  • 51.5k
                  • 6
                • 02 Ссылки для UX-специалистов

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


                    Читать дальше →
                  • Docker: интересные особенности базовых образов

                    • Tutorial
                    Когда вы указываете в Dockerfile:
                    FROM ubuntu
                    
                    то к вам на машину стягивается официально-поддерживаемый базовый образ Ubuntu (на сегодняшний день это 14.04 LTS). Мне стало интересно, чем образ этот отличается от «настоящей» чистой системы.

                    В процессе pull можно заметить, что он состоит из 5 слоёв:
                    docker pull ubuntu
                    
                    ubuntu:latest: The image you are pulling has been verified
                    511136ea3c5a: Pull complete
                    3b363fd9d7da: Downloading 8.641 MB/197.2 MB 3m18s
                    607c5d1cca71: Download complete
                    f62feddc05dc: Download complete
                    8eaa4ff06b53: Download complete
                    
                    Чтобы понять содержание каждого слоя, можно выполнить команду:

                    docker history --no-trunc ubuntu > history.txt
                    

                    либо посмотреть исходный Dockerfile на GitHub. Каждый слой соответствует отдельной строке в Dockerfile:

                    511136ea3c5a — это отправная точка, пустой образ под названием scratch (строка FROM scratch).

                    3b363fd9d7da«вливание» официального образа Ubuntu из файла ubuntu-trusty-core-cloudimg-amd64-root.tar.gz
                    Далее начинается интересное
                    • +54
                    • 23.8k
                    • 3
                  • Реализация словаря в Python 2.7

                    В этой статье пойдёт речь о том, как реализован словарь в Python. Я постараюсь ответить на вопрос, почему элементы словаря не упорядочены, описать, каким образом словари хранят, добавляют и удаляют свои элементы. Надеюсь, что статья будет полезна не только людям, изучающим Python, но и всем, кто интересуется внутренним устройством и организацией структур данных.
                    Читать дальше →
                  • Первый опыт разработки iOS-приложения и размышления о маркетинге и рекламе

                    … в общем создал я игру. А дело было так.

                    Несколько месяцев назад подошёл мой начальник и обрадовал, что с сегодняшнего дня, в дополнение к своим основным обязанностям, я должен буду делать iOS-приложения (не сильно сложные, но по работе необходимые), что Mac mini мне купили и что я самый опытный из всех по части продукции Apple (это правда, т.к. ваш скромный слуга уже четвёртый год ходит с 1-м iPad). Ну ладно.
                    Что было дальше?
                  • 01 Ссылки для UX-специалистов

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


                      Читать дальше →
                    • Интерактивные карты кибератак в реальном времени

                      «Кибервойны — это уже реальность и нам, простым смертным, остается только наблюдать за ними...»

                      Да, начало, пожалуй, вышло пафосным и больше подходит для заголовка какой-нибудь газетной статьи или как раз для ресурса, который в визуальной форме показывает нам происходящие в мире кибератаки.
                      В этой статье будут описаны известные и, возможно, малоизвестные ресурсы, демонстрирующие происходящие в мире кибератаки в режиме реального времени.
                      Читать дальше →
                    • Marxico — markdown редактор для Evernote

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

                        Однако, когда нужно записать формулу, черкануть пару строк кода или сделать набросок технической статьи, то тут Evernote уже не так удобен. Здесь на помощь приходит Marxico — markdown редактор для Evernote.



                        Узнать больше
                      • Portaller — теперь с поддержкой Pandora, Spotify, Rdio, Netflix и Amazon Video на всех устройствах

                          Привет.
                          Хочу рассказать вам несколько интересных новостей о том, что происходит с Portaller — небольшим сервисом для использования Pandora, Spotify, Netflix и еще нескольких сервисов за пределами США.

                          Одной строкой, если у вас нет времени идти под кат — кроме Pandora и Spotify теперь поддерживается Netflix и Amazon Video, сервис работает на всех устройствах, включая клиентов на Android (почему на нем такой акцент — читайте ниже) и к нему можно присоединиться на GitHub.

                          Читать дальше →
                        • Почему OpenVPN тормозит?

                            Описанная проблема присуща только ветке OpenVPN 2.3, в 2.4 размеры буферов не меняются без требования пользователя.

                            Время от времени, мне встречаются темы на форумах, в которых люди соединяют несколько офисов с использованием OpenVPN и получают низкую скорость, сильно ниже скорости канала. У кого-то это может быть 20 Мбит/с при канале в 100 Мбит/с с обеих сторон, а кто-то еле получает и 400 Кбит/с на 2 Мбит/с ADSL/3G и высоким пингом. Зачастую, таким людям советуют увеличить MTU на VPN-интерфейсе до чрезвычайно больших значений, вроде 48000, или же поиграться с параметром mssfix. Частично это помогает, но скорость внутри VPN все еще очень далека от канальной. Иногда все сваливают на то, что OpenVPN — userspace-решение, и это его нормальная скорость, учитывая всякие шифрования и HMAC'и. Абсурд!

                            Немного истории

                            На дворе июль 2004 года. Типичная скорость домашнего интернета в развитых странах составляет 256 Кбит/с-1 Мбит/с, в менее развитых — 56 Кбит/с. Ядро Linux 2.6.7 вышло не так давно, а 2.6.8, в котором TCP Window Scale включен по умолчанию, выйдет только через месяц. Проект OpenVPN развивается уже 3 года как, к релизу готовится версия 2.0.
                            Один из разработчиков добавляет код, который устанавливает буфер приема и отправки сокета по умолчанию в 64 КБ, вероятно, чтобы хоть как-то унифицировать размер буфера между платформами и не зависеть от системных настроек.
                            Читать дальше →