Совсем недавно появилась информация о том, что IBM планирует выпустить мейнфрейм-серверы под управлением Linux. Кратко об этом под катом.
Максим Буньков @Bimawa
iOS Developer
Дайджест продуктового дизайна, июнь 2015
18 min
12KУже пять лет я публикую регулярные обзоры свежих статей по теме интерфейсов, новых инструментов и коллекций паттернов, интересных кейсов и исторических рассказов. Из лент нескольких сотен тематических подписок отбирается примерно 5% стоящих публикаций, которыми интересно поделиться. Предыдущие материалы: апрель 2010-май 2015.
+21
Метапрограммирование: какое оно есть и каким должно быть
11 min
37KМетапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы (wiki). Это достаточно общий термин, к которому, согласно той же википедии, относится и генерация исходного кода внешними инструментами, и различные препроцессоры, и «плагины к компилятору» — макросы с возможностью модификации синтаксического дерева не посредственно в процессе компиляции, и даже такая экзотическая возможность, как самомодифицирующийся код — модификация программы самой программой непосредственно во время выполнения.
Хотя, конечно, самомодифицирующийся код — это скорее отдельная большая тема, достойная отдельного исследования; здесь под метапрограммированием мы будем понимать процессы, происходящие во время компиляции программы.
Метапрограммирование реализовано в той или иной мере в очень разных языках; если не рассматривать экзотические и близкие к ним языки, то самым известным примером метапрограммирования является С++ с его системой шаблонов. Из «новых» языков можно рассмотреть D и Nim. Одна из самых удачных попыток реализации метапрограммирования — язык Nemerle. Собственно, на примере этой четверки мы и рассмотрим сабж.
Метапрограммирование — интереснейшая тема; в этой статье я попытаюсь разобраться, что же это такое, и каким оно должно быть в идеальном случае.
+18
Управляем зависимостями в iOS-приложениях правильно: Устройство Typhoon
8 min
12KВ прошлой части цикла мы познакомились с Dependency Injection фреймворком для iOS — Typhoon, и рассмотрели базовые примеры его использования в проекте Рамблер.Почта. В этот раз мы углубимся в изучение его внутреннего устройства.
+10
Управляем зависимостями в iOS-приложениях правильно: Знакомство с Typhoon
8 min
36K«Any magic, sufficiently analyzed is indistinguishable from technology.»
Артур Кларк
(эпиграф в официальной wiki проекта Typhoon Framework)
Цикл «Управляем зависимостями в iOS-приложениях правильно»
- Знакомство с Typhoon
- Устройство Typhoon
- Модульность Typhoon
- Typhoon Tips & Tricks
- Альтернативы Typhoon
- (Дополнительно) Rambler.iOS #3. Dependency Injection в iOS. Слайды
- (Дополнительно) Rambler.iOS #3. Dependency Injection в iOS. Видео
Введение
В рамках этого цикла статей я не буду углубляться в теорию, рассматривать Dependency Inversion Principle или паттерны Dependency Injection — примем за данность, что читатель уже достаточно подготовлен к тому, чтобы познать дзен, и перейдем сразу к практике (ссылки для знакомства с теорией даны в самом конце поста).
Typhoon Framework — это самая известная и популярная реализация DI-контейнера для Objective-C и Swift приложений. Проект достаточно молодой — первый коммит был сделан в самом конце 2012 года, но уже обзавелся большим количеством поклонников. Отдельного упоминания заслуживает активная поддержка проекта его создателями (один из которых, между прочим, живет и работает в Омске) — на большинство создаваемых Issue отвечают в течение десяти минут, а уже через несколько часов к обсуждению присоединяется вся команда.
+18
Pull request'ы на GitHub или Как мне внести изменения в чужой проект
6 min
496KTutorial
По просьбе tulskiy делаю вольный перевод частей официальной документации GitHub'а Fork A Repo и Send pull requests.
Итак, что же такое «запрос на включение (сделанных вами изменений)» (именно так я перевёл pull request)? В официальной документации гитхаба говорится следующее:
Говоря своим языком: Посылая pull request, вы говорите автору изначального репозитория (и всем заинтересованным лицам): «Смотрите, что я сделал, не хотите ли принять мои изменения и влить их в проект?»
Итак, что же такое «запрос на включение (сделанных вами изменений)» (именно так я перевёл pull request)? В официальной документации гитхаба говорится следующее:
Pull request'ы позволяют вам рассказать другим о тех изменениях, которые вы разместили в своём GitHub-репозитории. Как только pull request отправлен, заинтересованные стороны рассматривают ваши изменения, обсуждают возможные правки или даже добавляют дополняющие коммиты, если нужно.
Говоря своим языком: Посылая pull request, вы говорите автору изначального репозитория (и всем заинтересованным лицам): «Смотрите, что я сделал, не хотите ли принять мои изменения и влить их в проект?»
+76
Прощай, Zen Coding. Привет, Emmet!
5 min
249KTranslation
Еще в 2009 году, Сергей Чикуёнок опубликовал статью, в которой представил новый способ написания HTML и CSS кода. Этот революционный плагин, назывался Zen Coding, он помогал многим разработчикам на протяжении многих лет и в настоящее время вышлел на новый уровень.
Emmet, ранее известный как Zen Coding, является самым производительным и экономным во времени плагином для текстового редактора. Простые сокращения мгновенно расширяются в сложные фрагменты кода, Emmet превратит вас в более продуктивного разработчика.
Для тех, кто предпочитает смотреть, а не читать, вот видео любимых трюков автора.
+94
Многопоточность в Rust
14 min
38KTranslation
Rust начинался как проект, решающий две трудные проблемы:
Изначально эти проблемы казались не связанными друг с другом, но к нашему удивлению, их решение оказалось одинаковым — проблемы с многопоточностью решают те же самые инструменты, которые обеспечивают безопасность.
Ошибки работы с памятью и ошибки при работе с несколькими потоками частно сводятся к тому, что код обращается к некоторым данным вопреки тому, что он не должен этого делать. Секретное оружие Rust против этого — концепция владения данными, способ управления доступом к данным, которого системные программисты стараются придерживаться самостоятельно, но который Rust проверяет статически.
С точки зрения безопасности работы с памятью это означает, что вы можете не использовать сборщик мусора и в то же время не опасаться сегфолтов, потому что Rust не даст вам совершить ошибку.
С точки зрения многопоточности это означает, что вы можете пользоваться различными парадигмами (передача сообщений, разделяемое состояние, lock-free-структуры данных, чистое функциональное программирование), и Rust позволит избежать наиболее распространённых подводных камней.
Вот какие особенности у многопоточного программирования в Rust:
- Как обеспечить безопасность (работы с памятью) в системном программировании?
- Как сделать многопоточное программирование безболезненным?
Изначально эти проблемы казались не связанными друг с другом, но к нашему удивлению, их решение оказалось одинаковым — проблемы с многопоточностью решают те же самые инструменты, которые обеспечивают безопасность.
Ошибки работы с памятью и ошибки при работе с несколькими потоками частно сводятся к тому, что код обращается к некоторым данным вопреки тому, что он не должен этого делать. Секретное оружие Rust против этого — концепция владения данными, способ управления доступом к данным, которого системные программисты стараются придерживаться самостоятельно, но который Rust проверяет статически.
С точки зрения безопасности работы с памятью это означает, что вы можете не использовать сборщик мусора и в то же время не опасаться сегфолтов, потому что Rust не даст вам совершить ошибку.
С точки зрения многопоточности это означает, что вы можете пользоваться различными парадигмами (передача сообщений, разделяемое состояние, lock-free-структуры данных, чистое функциональное программирование), и Rust позволит избежать наиболее распространённых подводных камней.
Вот какие особенности у многопоточного программирования в Rust:
+61
Objective-C Runtime для Си-шников. Часть 2
8 min
20KСнова здравствуйте. Мой цикл статей посвящён тем программистам, которые перешли с языка C на Objective-C, и хотели бы ответить для себя на вопросы «каким именно образом Objective-C основывается на языке C?» и «как это все происходит изнутри?».
Большое спасибо всем за обратную связь, именно проявленный вами интерес служит для меня стимулом продолжать свои статьи по доскональному изучению Objective-C Runtime. Я начал эту часть именно с тематики своих статей, потому что хочу сделать пару уточнений:
- Мои статьи — не руководство по Objective C. Мы изучаем именно Objective-C Runtime настолько низкоуровнево, чтобы понимать его на уровне языка C.
- Мои статьи — не руководство по языку C и дебаггерам. Мы опускаемся до уровня языка C, но не ниже. Поэтому такие вопросы, как представление данных в памяти, я не затрагиваю. Предполагается, что вы знаете все это и без меня.
Конечно, статьи будут интересны так же и другим категориям программистов. Но имейте ввиду эти два пункта.
Если вы еще не читали первую статью, то настоятельно рекомендую прочитать сначала её: http://habrahabr.ru/post/250955/. А если уже читали, то добро пожаловать под кат.
+36
300 потрясающих бесплатных сервисов
11 min
1.6MTranslation
Автор оригинальной статьи 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: Невероятно простой счет.
+309
Музыка как инфраструктура: выбор наушников
10 min
86KКак выбрать наушники? Прежде всего нужно прикинуть бюджет, выбрать, какого размера и типа наушники вам нужны, а затем оценить качество звучания подходящих моделей. Наушников сейчас выпускается огромное количество, и подобрать подходящие лично вам очень непросто. Надеюсь, этот гид по моделям и типам наушников поможет сделать вам правильный выбор.
А вот и нет, не поможет! Выбирая наушники для себя, я однажды понял, что несмотря на огромное количество ресурсов – статей, обзоров, тестов, обсуждений на форумах – вроде бы старающихся мне помочь, я на самом деле страшно одинок. Если статья или пост написаны с максимально нейтральной позиции, то они полезны разве что для самообразования, но не для выбора. Все остальное – форумы, советы продавцов, даже искренне старающихся помочь, друзей и знакомых – зачастую «помогают» выбрать наушники, от которых страшно болит голова и никакого кайфа. А что делать-то?
А вот и нет, не поможет! Выбирая наушники для себя, я однажды понял, что несмотря на огромное количество ресурсов – статей, обзоров, тестов, обсуждений на форумах – вроде бы старающихся мне помочь, я на самом деле страшно одинок. Если статья или пост написаны с максимально нейтральной позиции, то они полезны разве что для самообразования, но не для выбора. Все остальное – форумы, советы продавцов, даже искренне старающихся помочь, друзей и знакомых – зачастую «помогают» выбрать наушники, от которых страшно болит голова и никакого кайфа. А что делать-то?
+9
Apple App Store. Получаем ERN
4 min
28KTutorial
Перед загрузкой приложения на ревью в Apple App Store нам задают неожиданный вопрос, а не использует ли наше приложение криптографию?
И хотя соблазн ответить «нет» и загрузить наконец-то очень велик, и кто-то тихо шепчет, что ты мог и забыть про https или вообще не знать, как он работает, но совесть советует разобраться и в этом.
У меня много сил ушло, чтобы получить ERN(Encryption Registration approval from BIS), и я решил написать инструкцию.
И хотя соблазн ответить «нет» и загрузить наконец-то очень велик, и кто-то тихо шепчет, что ты мог и забыть про https или вообще не знать, как он работает, но совесть советует разобраться и в этом.
У меня много сил ушло, чтобы получить ERN(Encryption Registration approval from BIS), и я решил написать инструкцию.
+62
Six Towers. История успеха?
3 min
78KЗа три года я выложил в Apple Appstore центнер приложений.
Большинство из них интересны лишь моему воспаленному мозгу.
Некоторые приносят до 100 долларов в год. Не надо ржать, слушайте дальше.
Число игр с ежегодным доходом в 1000 долларов равно числу пальцев на руке английского программиста.
И одно приложение из сотни выстрелило. На сегодняшний день 19 декабря оно заработало 248 457 денег и к Новому 2013 году обещает преодолеет четверть-миллионный рубеж.
Согласно опросу, проведенному на Хабре, 82% местных жителей считают это успехом.
Я вынужден с ними согласиться.
В статье веселый рассказ, как и почему это произошло.
Примеров программного кода не будет. За примерами программного кода идите Вы на stackoverflow.com.
Строгих редакторов предупреждаю, что приложение бесплатное, а статья бессыльная. Значит, без ссылок.
Редакция выбрасывает меня в пятый раз из хаба Game Development. Я в недоумении. .
+222
Используем замыкания в Swift по полной
6 min
42KTutorial
Несмотря на то, что в Objective-C 2.0 присутствуют замыкания (известные как блоки), ранее эппловский API использовал их неохотно. Возможно, отчасти поэтому многие программисты под iOS с удовольствием эксплуатировали сторонние библиотеки, вроде AFNetworking, где блоки применяются повсеместно. С выходом Swift, а также добавлением новой функциональности в API, работать с замыканиями стало чрезвычайно удобно. Давайте рассмотрим, какими особенностями обладает их синтаксис в Swift, и какие трюки можно с ними «вытворять».
Продвигаться будем от простого к сложному, от скучного к веселому. Заранее приношу извинения за обильное использование мантр «функция», «параметр» и «Double», но из песни слов не выкинешь.
Продвигаться будем от простого к сложному, от скучного к веселому. Заранее приношу извинения за обильное использование мантр «функция», «параметр» и «Double», но из песни слов не выкинешь.
+13
Автоматизация тестирования iOS-приложений с применением Calabash и Cucumber
13 min
33KВ процессе разработки любого приложения наступает момент, когда в связи с ростом функциональности трудозатраты на регрессионное тестирование становятся непомерно велики. Другая причина значительной трудоемкости тестирования iOS-приложений (так же как и любых других мобильных приложений) — разнообразие линейки поддерживаемых устройств и версий ОС, необходимость тестирования в альбомном и портретном режимах, а также при различных условиях соединения с интернетом. Стремление оптимизировать процесс тестирования приводит нас к необходимости его полной или частичной автоматизации.
В этой статье я расскажу о том, как мы автоматизируем тестирование наших приложений (ICQ и Агент Mail.Ru), поделюсь нашими наработками в этой области и упомяну о проблемах, с которыми мы сталкиваемся.
+44
Опыт использования MVVM в реальных проектах
1 min
26KTutorial
Мы продолжаем выкладывать видео выступлений с нашей первой конференции мобильных разработчиков #MBLTDev. Следующий доклад — от iOS-разработчика компании «Одноклассники» Юрия Буянова «Опыт использования MVVM в реальных проектах».
Презентация.
Доклад был посвящён практическим аспектам разработки iOS-приложений с использованием архитектуры MVVM. В частности рассматривались способы осуществления навигации и реализации списков в рамках такой архитектуры. Для слушателей, незнакомых c предметом, в начале доклада было сделано небольшое введение в MVVM и ReactiveCocoa. Также были показаны слайды с белочкой, совушкой и единорогом.
Презентация.
Доклад был посвящён практическим аспектам разработки iOS-приложений с использованием архитектуры MVVM. В частности рассматривались способы осуществления навигации и реализации списков в рамках такой архитектуры. Для слушателей, незнакомых c предметом, в начале доклада было сделано небольшое введение в MVVM и ReactiveCocoa. Также были показаны слайды с белочкой, совушкой и единорогом.
+17
10 языков, на которые стоит перевести вашу мобильную игру
3 min
36KКаждый третий заказчик, приходящий к нам в Alconost за локализацией, задает один и тот же вопрос: “а на какие еще языки посоветуете сделать перевод моей игры/приложения/сайта?”.
Чтобы ответить на этот вопрос хотя бы для разработчиков мобильных игр, мы изучили объемы продаж мобильных игр в Google Play и App Store в разных странах. Результат нас так удивил, что вместо обычной статьи мы захотели сделать видеоролик:
Чуть больше информации про топ-10 языков для локализации мобильных игр — под катом.
Чтобы ответить на этот вопрос хотя бы для разработчиков мобильных игр, мы изучили объемы продаж мобильных игр в Google Play и App Store в разных странах. Результат нас так удивил, что вместо обычной статьи мы захотели сделать видеоролик:
Чуть больше информации про топ-10 языков для локализации мобильных игр — под катом.
+21
За один проход
7 min
155KСреди задач по программированию часто попадаются такие: дана последовательность однотипных элементов (обычно это числа), требуется за один проход по ней найти какую-нибудь характеристику (среднее квадратическое отклонение, количество минимальных элементов, непрерывный участок с наибольшей суммой...) Дополнительное ограничение — последовательность может быть очень длинной, и в память не поместится. Других ограничений на элементы последовательности, обычно, не накладывается.
С этими задачами всё, более или менее, понятно: нужно найти то, что на мехмате МГУ называют «индуктивным расширением» искомой функции, и реализовать её вычисление. Если найти не удалось (требуемый объём памяти слишком велик), то задача не решается.
Но попадаются и другие задачи. В них есть дополнительные ограничения на элементы последовательности в совокупности, и эти ограничения приходится существенно использовать для решения (и проверять их не надо). Простейшая такая задача выглядит так:
Задача 1. В последовательности записаны целые числа от 1 до N в произвольном порядке, но одно из чисел пропущено (остальные встречаются ровно по одному разу). N заранее неизвестно. Определить пропущенное число
Решение очевидно: просматриваем числа, находим их количество K и сумму S. По условию, N=K+1, значит, сумма чисел от 1 до N будет равна (K+1)*(K+2)/2, и пропущенное число равно (K+1)*(K+2)/2-S. Если вы почему-то боитесь переполнений, то работайте с беззнаковыми числами (там переполнения не страшны — но будьте осторожны при вычислении (K+1)*(K+2)/2 :) ), или вместо суммы ищите XOR всех чисел.
С этими задачами всё, более или менее, понятно: нужно найти то, что на мехмате МГУ называют «индуктивным расширением» искомой функции, и реализовать её вычисление. Если найти не удалось (требуемый объём памяти слишком велик), то задача не решается.
Но попадаются и другие задачи. В них есть дополнительные ограничения на элементы последовательности в совокупности, и эти ограничения приходится существенно использовать для решения (и проверять их не надо). Простейшая такая задача выглядит так:
Задача 1. В последовательности записаны целые числа от 1 до N в произвольном порядке, но одно из чисел пропущено (остальные встречаются ровно по одному разу). N заранее неизвестно. Определить пропущенное число
Решение очевидно: просматриваем числа, находим их количество K и сумму S. По условию, N=K+1, значит, сумма чисел от 1 до N будет равна (K+1)*(K+2)/2, и пропущенное число равно (K+1)*(K+2)/2-S. Если вы почему-то боитесь переполнений, то работайте с беззнаковыми числами (там переполнения не страшны — но будьте осторожны при вычислении (K+1)*(K+2)/2 :) ), или вместо суммы ищите XOR всех чисел.
+71
Мой опыт размещения игры в App Store
7 min
53KПривет, Хабрахабр!
В этом топике я хотел бы рассказать о своем первом опыте размещения и продвижения игры в App Store. Не могу назвать его удачным, но, по крайней мере, само по себе наличие опыта, набитые шишки и сделанные выводы — это уже плюс. Я довольно давно занимаюсь разработкой Android-игр, поэтому это будет еще и взгляд со стороны Android-разработчика, который надеюсь, тоже будет кому-то интересен.
+22
Русский перевод Apple iPhone Developer Program License Agreement + Schedule 2 v19
1 min
15KВсем привет!
На прошлой неделе появилась необходимость предоставить в банк договор, по которому были получены деньги из App Store. Если перевод оригинального iPhone Developer Program License Agreement нашелся в сети довольно быстро, то перевода последней версии Schedule 2 (на текущий момент v19) нигде не было. Мы доперевели разницу и готовы поделиться этими документами.
На прошлой неделе появилась необходимость предоставить в банк договор, по которому были получены деньги из App Store. Если перевод оригинального iPhone Developer Program License Agreement нашелся в сети довольно быстро, то перевода последней версии Schedule 2 (на текущий момент v19) нигде не было. Мы доперевели разницу и готовы поделиться этими документами.
+20
Information
- Rating
- Does not participate
- Location
- Екатеринбург, Свердловская обл., Россия
- Date of birth
- Registered
- Activity