Как стать автором
Обновить
28
0
Vlad Papko @visput

Director of Engineering at Union POS

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

Путь постижения AppStore или сколько стоит опыт?

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


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

Ниже я описал путь от мечты о создании приложения и огромном заработке до суровой реальности всех инди-разработчиков.
Читать дальше →
Всего голосов 34: ↑26 и ↓8+18
Комментарии37

Шпаргалка для кандидата: какие вопросы задать потенциальному работодателю на собеседовании

Время на прочтение6 мин
Количество просмотров393K
У каждого кандидата в конце собеседованию рекрутер обычно спрашивает, есть ли вопросы. Часто люди теряются и не находят, что спросить. И лишь по прошествии некоторого времени (часто, когда человек уже работает в компании) сами собой всплывают вопросы, о которых нужно было поинтересоваться заранее, а не брать кота в мешке и удивляться «Как я сюда попал? Куда я смотрел? Почему я об этом не подумал?». Это так называемый «эффект лестницы». Я подготовил шпаргалку, что ты, %habrauser%, не растерялся.

Общее


1. Рабочий график и можно ли его двигать?
Я люблю поспать. Но на моей прошлой работе «рабочее утро» начиналось в 7:30. Мало того, что я довольно часто не мог прийти к этому времени, я еще пол дня занимался тем, что пытался привести себя в рабочую форму. Где то до 10:00. С 10:30 до 11:30 я усердно работал. Потом был обед. А потом мне хотелось спать, а не работать, т.к. я не высыпался еще с утра. Надо ли говорить, что вместо 8 часов, на которые меня нанял работодатель, я работал в «потоке» только часа 3-4. Так что для себя нужно решить вопрос – когда я наиболее трудоспособен? И обговорить рабочий график с руководством. И еще один нюанс. Попробуйте закрепить обговоренный график в трудовом договоре или контракте (далее ТД), если работодатель идет на персональный рабочий график для Вас. Никаких устных договоренностей. Иначе Вам начнут крутить руки уже в процессе работы (как это было со мной).
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии30

Записки iOS программиста о его молотках, кувалдах и микрометрах

Время на прочтение20 мин
Количество просмотров32K
В один прекрасный момент, когда на собеседованиях меня уже убеждали, что я senior iOS developer — у меня возникло ощущение, что я уперся. Пишу похожий код, решаю задачи похожими способами и ощущение, что непонятно, куда развиваться дальше. Я думаю, с этой проблемой сталкивался не один я — нехваткой новых идей, концепций, направлений. Я бы хотел рассказать вам о тех инструментах и фреймворках, которые помогли преодолеть мне это ощущение.

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


Читать дальше →
Всего голосов 27: ↑26 и ↓1+25
Комментарии13

99 ресурсов для продвижения стартапов

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


В адаптированной нами подборке вы сможете найти множество полезных источников по ряду маркетинговых задач, которые приходится решать всем бизнесам без исключения. Уверены, что каждый сможет найти что-то подходящее для своих проектов.
Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии1

Как легко расшифровать TLS-трафик от браузера в Wireshark

Время на прочтение2 мин
Количество просмотров159K
Многим из вас знаком Wireshark — анализатор трафика, который помогает понять работу сети, диагностировать проблемы, и вообще умеет кучу вещей.

image

Одна из проблем с тем, как работает Wireshark, заключается в невозможности легко проанализировать зашифрованный трафик, вроде TLS. Раньше вы могли указать Wireshark приватные ключи, если они у вас были, и расшифровывать трафик на лету, но это работало только в том случае, если использовался исключительно RSA. Эта функциональность сломалась из-за того, что люди начали продвигать совершенную прямую секретность (Perfect Forward Secrecy), и приватного ключа стало недостаточно, чтобы получить сессионный ключ, который используется для расшифровки данных. Вторая проблема заключается в том, что приватный ключ не должен или не может быть выгружен с клиента, сервера или HSM (Hardware Security Module), в котором находится. Из-за этого, мне приходилось прибегать к сомнительным ухищрениям с расшифровкой трафика через man-in-the-middle (например, через sslstrip).

Логгирование сессионных ключей спешит на помощь!


Что ж, друзья, сегодня я вам расскажу о способе проще! Оказалось, что Firefox и Development-версия Chrome поддерживают логгирование симметричных сессионных ключей, которые используются для зашифровки трафика, в файл. Вы можете указать этот файл в Wireshark, и (вуаля!) трафик расшифровался. Давайте-ка настроим это дело.
Читать дальше →
Всего голосов 83: ↑82 и ↓1+81
Комментарии22

«Выглядит похоже». Как работает перцептивный хэш

Время на прочтение6 мин
Количество просмотров122K
За последние несколько месяцев несколько человек спросили меня, как работает TinEye и как в принципе работает поиск похожих картинок.

По правде говоря, я не знаю, как работает поисковик TinEye. Он не раскрывает деталей используемого алгоритма(-ов). Но глядя на поисковую выдачу, я могу сделать вывод о работе какой-то формы перцептивного хэш-алгоритма.
Читать дальше →
Всего голосов 149: ↑145 и ↓4+141
Комментарии46

11 крутых сайтов для iOS разработчиков

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


Чтобы оставаться профессионалом в разработке iOS приложений, нужно постоянно учиться у других и узнавать о новейших инструментах и приемах. Кроме сайта Apple с документацией, существуют несколько ресурсов с ценными статьями и уроками, которые помогут нам стабильно развиваться. О них и пойдет речь в этой статье.
Читать дальше →
Всего голосов 30: ↑21 и ↓9+12
Комментарии9

100 ресурсов для технологических предпринимателей

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


На сегодняшний день существенное внимание уделяется советам для тех, кто занимается технологическими стартапами, но в большей степени нам бы пригодились ресурсы, сервисы и все, что помогает создавать, продавать и развиваться. Именно в этом и заключается суть нашей (дополненной и адаптированной) подборки – никаких советов, только инструментарий.
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии3

Сделай сам: MSc Computer Science на уровне топ американских университетов из дома

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

Вступление


Давно хотел написать статью про образование в Computer Science, но руки не доходили. Решил все-таки это наконец сделать. Итак, о чем пойдет речь? Речь о том, что из себя представляет диплом MSc Computer Science топовых университетов США (во всех подробностях, включая основные курсы, книги и проекты) и как ему соответствовать.

Почему именно MSc? Это — некая развилка: с одной стороны после MSc — вы уже готовый к жизни инженер (да, речь идет о инженерной подготовке, как мне кажется это самое больное место в нашей системе образования), с другой — можно спокойно идти по пути PhD. Как известно, в PhD программу можно попасть и не особо умея программировать — особенно это касается теоретического Computer Science. С другой стороны найти работу программиста тоже дело не очень сложное, и часто не требует мощного образования. Но достигнув уровня MSc — вы получаете возможность разбираться как во всех новый идеях в Computer Science, так и возможность их воплотить в практику. То есть с одной стороны круто разобраться в каком-нибудь deep learning и сделать в нем что-то новое, а также взять и написать свою операционную систему (кто так сделал?). Причем вы не зажаты в рамки узкой специализации (если конечно продолжаете учиться). То есть вы теперь — универсальный солдат, готовый на все.

Надеюсь что эта статья будет полезна:
1. Студентам, которые хотят соответствовать высоким стандартам топ вузов США, или собирающиеся туда в аспирантуру по Computer Science
2. Профессионалам, которые хотят закрыть «дыры» и пробелы
3. Может кто-то из преподавателей возьмет на заметку для своих курсов.
4. Студентам, аспирантам американских вузов — хотелось бы тоже получить фидбэк, особенно касается последних трендов в образовании

Что же здесь будет написано? Минимум философии и общих мыслей: конкретная программа undergraduate и graduate курсов, конечно из дисциплин наиболее мне близких. Все курсы были лично прочувствованы на собственной шкуре, по этому и пишу. (Я пытался записаться на все интересные курсы, которые были, но мой основной упор — системное программирование, базы данных и искусственный интеллект. Отсюда конечно некий bias, но пытаюсь предложить более-менее универсальную программу).
Читать дальше →
Всего голосов 86: ↑81 и ↓5+76
Комментарии64

16 месяцев функционального программирования

Время на прочтение16 мин
Количество просмотров67K
Предлагаю читателям «Хабрахабра» перевод статьи «16 Months of Functional Programming». Все мои замечания будут выделены курсивом.

В этой статье я хочу поделиться с вами моим опытом в функциональном программировании. Я чувствую, что в целом за прошедшие 16 месяцев стал лучше разбираться в информатике и компьютерах, чем за предыдущие 10 лет и всё это благодаря моему погружению в Scala и мир функционального программирования. Причина по которой функциональное программирование побуждает вас к постоянному развитию заключается в том, что каждую задачу необходимо переосмысливать заново. Порой невозможно поверить в то, что большинство стандартных задач могут быть решены иным путём и — бум! — функциональный подход предлагает лучшее решение и это шокирует.
Читать дальше →
Всего голосов 57: ↑56 и ↓1+55
Комментарии97

ARM-ы для самых маленьких

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


Пару дней назад я опубликовал и потом внезапно убрал в черновики статью о плане написать про создание своей ОС для архитектуры ARM. Я сделал это, потому что получил много интересных отзывов как на Хабре, так и в G+.

Сегодня я попробую подойти к вопросу с другой стороны, я буду рассказывать о том, как программировать микроконтроллеры ARM на нарастающих по сложности примерах, пока мы не напишем свою ОС или пока мне не надоест. А может, мы перепрыгнем на ковыряние в Contiki, TinyOS, ChibiOS или FreeRTOS, кто знает, их там столько много разных и интересных (а у TinyOS еще и свой язык программирования!).

Итак, почему ARM? Возиться с 8-битными микроконтроллерами хотя и интересно, но скоро надоедает. Кроме того, средства разработки под ARM обкатаны долгим опытом и намного приятнее в работе. При этом, начать мигать светодиодами на каком-то «evaluation board» так же просто, как и на Arduino.

Читать дальше →
Всего голосов 129: ↑124 и ↓5+119
Комментарии66

86 бесплатных площадок для продвижения стартапов на международном рынке

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


Мы дополнили и адаптировали оригинальную подборку, выбрав исключительно бесплатные ресурсы для продвижения стартапов на международном рынке. Помимо этого мы переработали первоначальную классификацию, ввели ранжирование по потенциальному охвату аудитории (для площадок с обозначенным охватом) и распределили соответствующие ресурсы в тематические категории.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии9

Потенциальная уязвимость в Telegram Android

Время на прочтение9 мин
Количество просмотров40K
Дисклеймер: Описанная ниже потенциальная уязвимость на данный момент исправлена: 18 декабря 2014 была обновлена версия на Google Play, 3 января 2015 были внесены правки в публичный код на GitHub.

Так сложилось, что мне необходимо было изучить исходные коды механизма шифрования, передачи и дешифрования сообщений в Telegram для мобильных платформ iOS и Android. То есть речь идет о клиентских приложениях, именно их исходники (iOS, Android) находятся в свободном доступе.

Так как я больше специализируюсь в iOS, то в первую очередь приступил к изучению версии для этой платформы. Потратив около дня на чтение исходников и на работу с отладчиком, я сообразил что к чему и приступил к Android версии. Несложно догадаться, что механизмы и принципы работы должны быть идентичны в силу совместимости всех платформ между собой. Но к своему удивлению я обнаружил несколько отличий в алгоритме дешифрования сообщений в Android версии, что и породило уязвимость, если можно так выразиться. Общая суть уязвимости заключается в том, что в клиентском приложении отсутствует сравнение хеша дешифрованного сообщения с оригинальным хешем, передаваемым вместе с зашифрованным сообщением. По сути отсутствует проверка подписи сообщения. Отсутствие такой проверки может позволить третьим лицам, имеющим доступ к серверу, создавать рандомную активность от лиц участвующих в секретном чате. При этом доступ к общему секретному ключу не требуется, и он остается неуязвим для третьих лиц.
Больше деталей под катом
Всего голосов 74: ↑72 и ↓2+70
Комментарии30

300 потрясающих бесплатных сервисов

Время на прочтение11 мин
Количество просмотров1.6M


Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

  • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
  • Bootswatch: Бесплатные темы для Bootstrap.
  • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
  • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
  • Strikingly.com Domain: Конструктор веб-сайтов.
  • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
  • Withoomph: Мгновенное создание логотипов (англ.).
  • Hipster Logo Generator: Генератор хипстерских логотипов.
  • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
  • Invoice to me: Бесплатный генератор счета.
  • Free Invoice Generator: Альтернативный бесплатный генератор счета.
  • Slimvoice: Невероятно простой счет.

Читать дальше →
Всего голосов 341: ↑325 и ↓16+309
Комментарии107

Что каждый программист должен знать про оптимизации компилятора

Время на прочтение17 мин
Количество просмотров80K
Высокоуровневые языки программирования содержат в себе много абстрактных программистских конструкций, таких как функции, условные операторы и циклы — они делают нас удивительно продуктивными. Однако одним из недостатков написания кода на высокоуровневом языке является потенциальное значительное снижение скорости работы программы. Поэтому компиляторы стараются автоматически оптимизировать код и увеличить скорость работы. В наши дни логика оптимизации стала очень сложной: компиляторы преобразуют циклы, условные выражения и рекурсивные функции; удаляют целые блоки кода. Они оптимизируют код под процессорную архитектуру, чтобы сделать его действительно быстрым и компактным. И это очень здорово, ведь лучше фокусироваться на написании читабельного кода, чем заниматься ручными оптимизациями, которые будет сложно понимать и поддерживать. Кроме того, ручные оптимизации могут помешать компилятору выполнить дополнительные и более эффективные автоматические оптимизации. Вместо того чтобы писать оптимизации руками, лучше бы сосредоточиться на дизайне архитектуры и на эффективных алгоритмах, включая параллелизм и использование особенностей библиотек.

Данная статья посвящена оптимизациям компилятора Visual C++. Я собираюсь обсудить наиболее важные техники оптимизаций и решения, которые приходится применить компилятору, чтобы правильно их применить. Моя цель не в том, чтобы рассказать вам как вручную оптимизировать код, а в том, чтобы показать, почему стоит доверять компилятору оптимизировать ваш код самостоятельно.
Читать дальше →
Всего голосов 46: ↑42 и ↓4+38
Комментарии4

Литературно-фантастические новинки 2014 года. Чем пополнить домашнюю библиотеку фантастики

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


Мы уже давно хотели сделать подобный пост, но всё ждали подходящего случая. И вот он подвернулся — Новый год, время подведения всевозможных итогов и создания рейтингов. И мы решили вспомнить о вечном — о фантастической литературе. Вряд ли найдётся среди нас хоть кто-то, кто не любит фантастику. Какой же айтишник не хранит в душе, в укромном уголке, воспоминания о книгах, которые когда-то потрясли его воображение своими вымышленными историями?!

И если в суете будней вы подзабросили чтение книг, то это вы зря. Высокие технологии пока не задушили писательское ремесло (надеемся, этого и не произойдёт), и ежегодно выходит немало интересных книг, достойных того, чтобы выкроить полчаса-час в день на чтение. Быть может, эти книги станут для вас некой отправной точкой. Кстати, в конце ноября теперь уже прошлого года Урсула Ле Гуин сказала:

«Наступают трудные времена, когда мы будем нуждаться в голосах писателей, которые смогут предложить альтернативы нашей сегодняшней жизни. Которые сквозь наше пронизанное страхом общество и навязчивые технологии смогут увидеть другие виды бытия, и, может быть, даже дадут нам надежду. Мы будем нуждаться в писателях, поэтах и мечтателях, помнящих о свободе реалистах».

Читать дальше →
Всего голосов 67: ↑51 и ↓16+35
Комментарии45

Тренды iOS–разработки 2014 года

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

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

Functional Reactive Programming


Благодаря фреймворку ReactiveCocoa, новая парадигма программирования все чаще используется среди iOS разработчиков.

Отказоустойчивость, отзывчивость, ориентированность на события и масштабируемость — вот четыре принципа реактивного программирования. Подробности можете узнать в реактивном манифесте (перевод на Хабре).

Для себя я выделил следующие преимущества реактивного подхода:
  • loose coupling — потоки события позволяют уменьшить связанность между различными частями кода;
  • explicit state — состояние программы определяется набором событий, и поэтому им становится легко управлять.

В качестве альтернативы реактивному подходу рекомендую посмотреть на Futures. Есть как минимум два интересных фреймворка: PromiseKit и CollapsingFutures
Читать дальше →
Всего голосов 39: ↑34 и ↓5+29
Комментарии28

Как собрать собственный фреймворк для iOS

Время на прочтение9 мин
Количество просмотров16K
Среди задач мобильного разработчика, помимо самой частой (написания, собственно, приложений) периодически появляется и такая, как создание sdk.

Примерами такой задачи может быть создание sdk, использующего REST API какого-либо сервиса (реклама, аналитика, погода), библиотека реализаций алгоритмов, обработка изображений… Список практически неограничен.

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

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

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

image

Читать дальше →
Всего голосов 19: ↑15 и ↓4+11
Комментарии9

Итоги года для Android-разработчиков

Время на прочтение3 мин
Количество просмотров27K
Подходит к концу 2014 год, и прежде чем отправиться на длительные новогодние праздники, наш Android-техлид Алексей Журавлев подвел итог уходящего года с точки зрения Android-разработки.

image

Android L
Самую ожидаемую версию операционной системы теперь можно установить на мобильное устройство.
Основные изменения:
  • ART вместо Dalvik: Google полностью отказался от Dalvik подхода c JIT компилятором в пользу компиляции приложений при установке, тем самым увеличив производительность приложений. Более подробно про ART тут.
    Правда, как показывает практика, некоторые приложения с использованием Native библиотек перестали корректно работать.
  • Material Design: полностью обновленный подход к формированию дизайна.
  • Battery Saver: теперь при слабом заряде батареи, устройство можно перевести в режим экономии. Достигается путем понижения частоты процессора.
  • Notification: новый подход к системе нотификаций. Подробнее.
  • Keyboard: новая клавиатура в стиле material design.
  • Еще некоторые изменения.

Стоит отметить, что на сегодняшний день, пока только владельцы Nexus устройств имеют возможность получить обновление. Для большинства пользователей официальных прошивок пока нет.
Читать дальше →
Всего голосов 43: ↑35 и ↓8+27
Комментарии20

Игра с «материальными» цветами стала ещё проще

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


Не так давно вышла пятая по счёту версия Android, к которой разработчики системы подошли весьма кардинально. Было обновлено и добавлено множество функционала и API. Но для пользователей и разработчиков релиз всё таки наиболее отличился своим редизайном. Дизайнеры из Google быстро покорили сердца пользователей новым Material design.
Подробности
Всего голосов 27: ↑27 и ↓0+27
Комментарии9

Информация

В рейтинге
Не участвует
Откуда
Austin, Texas, США
Дата рождения
Зарегистрирован
Активность