• Обзор java.util.concurrent.*

    • Tutorial
    В повседневной работе не так уж часто приходится сталкиваться с пакетом для многопоточности java.util.concurrent. Иногда существуют проектные ограничения по использованию java 1.4.2, где нет данного пакета, но чаще всего хватает обычной синхронизации и не требуется ничего сверхъестественного. К счастью, периодически возникают задачи, заставляющие немного пораскинуть мозгами и либо написать велосипед, либо порыться в javadoc'ах и найти что-то более подходящее. С велосипедом проблем нет — просто берешь и пишешь, благо ничего суперсложного в многопоточности нет. С другой стороны, меньше кода — меньше багов. Тем более, что на многопоточность никто в здравом уме юнит тестов не пишет, т.к. это уже полноценные интеграционные тесты получаются со всеми вытекающими последствиями.

    Что выбрать для конкретного случая? В условиях запарки и deadline'ов довольно сложно охватить весь java.util.concurrent. Выбирается что то похожее и вперед! Так, постепенно, в коде появляются ArrayBlockingQueue, ConcurrentHashMap, AtomicInteger, Collections.synchronizedList(new LinkedList()) и другие интересности. Иногда правильно, иногда нет. В какой то момент времени начинаешь осознавать, что более 95% стандартных классов в java вообще не используются при разработке продукта. Коллекции, примитивы, перекладывание байтиков с одного места на другое, hibernate, spring или EJB, еще какая то библиотека и, вуаля, приложение готово.

    Чтобы хоть как то упорядочить знания и облегчить вхождение в тему, ниже идет обзор классов для работы с многопоточностью. Пишу прежде всего как шпаргалку для себя. А если еще кому сгодится — вообще замечательно.
    Читать дальше →
  • 8 фактов, которые вы, возможно, не знали о C#

    • Translation
    Вот несколько необычных фактов о языке C#, о которых знают лишь немногие разработчики.

    1. Индексаторы могут использовать params параметры


    Мы все знаем, как обычно выглядят индексаторы x = something["a"], а так же код необходимый для его реализации:

    public string this[string key]
     {
       get { return internalDictionary[key]; }
     }
    

    Но знали ли вы, что для доступа к элементам вы можете использовать params параметры x = something["a", "b", "c", "d"]?
    Просто напишите ваш индексатор следующим образом:
    Читать дальше →
  • Безопасная работа с исключениями в C#

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

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

    Отдельные поля. Создавайте отдельные поля в собственном классе для передачи существенной информации, вместо сериализации и десериализации данных в поле Message. Несмотря на то, что идея упаковки в Message сложных данных в виде строки типа JSON выглядит соблазнительно, это редко является удачной идеей, поскольку добавляет дополнительный расход ресурсов на кодирование, локализацию, декодирование.
    Читать дальше →
  • Objective-C Runtime. Теория и практическое применение

    В данном посте я хочу обратиться к теме, о которой многие начинающие iPhone-разработчики часто имеют смутное представление: Objective-C Runtime. Многие знают, что он существует, но каковы его возможности и как его использовать на практике?
    Попробуем разобраться в базовых функциях этой библиотеки. Материал основан на лекциях, которые мы в Coalla используем для обучения сотрудников.
    Читать дальше →
    • +20
    • 51.4k
    • 8
  • Шпаргалка по графическому дизайну Android-приложений

      Разработчик и дизайнер Питер Ноэджл опубликовал «Шпаргалку по графическому дизайну для Android». В ней практически все, что вам необходимо знать для создания графических элементов приложений и оформления страниц в Google Play.

      Тут описаны размеры, DPI, цвета, соглашения по именам и много другой важной информации.

      Кроме того даются ссылки на все важные ресурсы, такие как стандартные гайдлайны и инструменты, шаблоны и заготовки для Photoshop.

    • StringBuilder прошлое и настоящее

        Вступление


        Моя прошлая статья была посвящена особенностям строкового типа данных String в .NET. Эта статья продолжает традицию, однако на этот раз мы рассмотрим класс StringBuilder.

        Как известно, строки в .NET являются неизменяемыми (не используя unsafe), а поэтому проводить с ними операцию конкатенации в больших количествах не самая лучшая идея. Это значит, что следующий код имеет весьма серьезные проблемы с нагрузкой на память:

        string s = string.Empty;
        for (int i = 0; i < 100; i++)
         {
            s += "T";
         }
        
        Читать дальше →
      • Минифест (манифест разработчиков-минималистов)

        • Translation
        От переводчика

        На днях в сети появился минисайт minifesto.org со здравой, на мой взгляд, тезисной выжимкой опыта подхода к стартапам (да и к разработке в целом). Манифестность текста смягчается от начала к концу, но это не делает его хуже.

        Снова прошу прощения за отсутствие перевода словосочетания “computer science”.


        Кратко


        • Боритесь за закон Парето, следите за тем, чтобы 20% вашего труда давало вам 80% результата;
        • Расставляйте приоритеты, ведь минимализм нужен для того, чтобы делать то, что нужно, а не распыляться по мелочам;
        • Лучшее — враг хорошего: сначала просто сделайте, потом сделайте правильно, потом сделайте лучше;
        • Убивайте в зародыше, не бойтесь начать всё сначала. Чем быстрее ошибётесь, тем быстрее научитесь;
        • Повышайте свою ценность. Постоянно думайте о том, чем можно помочь команде, — и развивайтесь в этом направлении;
        • Сперва основы. Мыслите последовательно, ориентируясь на лучшие практики мира Computer Science;
        • Посмотрите с разных сторон. Простое получается тяжелее, чем сложное, поэтому включайте воображение;
        • Синтаксис — основа взаимодействия. Мы пишем код для людей, а не для машин;
        • Не запутывайте. Старайтесь проектировать слоями, по мере возможности не зависящими друг от друга;
        • Вычищайте оставленное-на-всякий-случай. Минимализм борется с отвлекающим от основного.

        Читать дальше
      • Создание нестандартного компонента с нуля. Часть 1

          Вступление


          Приветствую, коллеги!

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

          В серии статей я постараюсь осветить такие вопросы, как:

          1. отрисовка компонента
          2. добавление скроллинга с использованием стандартных скроллбаров
          3. взаимодействие, использование селекторов для клавиш
          4. Сохранение состояния компонента при повороте экрана
          5. добавление подсветки при оверскролле
          6. передача параметры в XML
          7. pinch zoom


          Первая статья будет о первых трёх пунктах.

          Если Вам интересны эти темы, добро пожаловать под кат.
          Читать дальше →
          • +56
          • 37.2k
          • 5
        • 65 статистик из мира мобильных игр, чтобы впечатлить друзей

          • Translation
          Мы любим игры для мобилок, а ещё очень ценим цифры. Но когда мы ищем в вебе статистику о трендах в разработке мобильных игр, мы быстро понимаем, что в общем-то нет единого места, где бы всё это добро было собрано. Так что вот оно, куча статистики индустрии мобильных игр, которая сделает вас очень популярным на следующей игровой конференции, или коктейльной вечеринке, когда вас спросит какой-нибудь скептик…

          “Неужели люди действительно тратят так много времени на видео-игры?” Да, мы действительно тратим.

          (прим. переводчика: автор частенько повторяется, простим ему это)


          (Примечание к фото: мы никогда не смотрим выше)
          Читать дальше →
        • Основы безопасности операционной системы Android. Native user space, ч.1

            Вступление


            В этой статье я попробую рассмотреть безопасность чуть-чуть повыше ядра, а именно: как работает безопасность в Native user space. Мы коснемся темы процесса загрузки операционной системы и рассмотрим структуру файловой системы Android. Как я уже говорил, я не очень силен в Linux, поэтому если заметите неточности, то исправляйте — меня научите и статью улучшите. Так как эта тема довольно обширная, я решил разбить её на две части. В первой части мы рассмотрим процесс загрузки операционной системы и особенности файловой системы. Всем кому интересно, добро пожаловать!
            Читать дальше →
          • Особенности строк в .NET

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

              Итак, начнем с представления строк в памяти


              В.NET строки располагаются согласно правилу BSTR (Basic string or binary string). Данный способ представления строковых данных используется в COM (слово basic от языка программирования VisualBasic, в котором он первоначально использовался). Как известно в C/C++ для представления строк используется PWSZ, что расшифровывается как Pointer to Wide-character String, Zero-terminated. При таком расположении в памяти в конце строки находится null-терминированный символ, по которому мы можем определить конец строки. Длина строки в PWSZ ограничена лишь объемом свободной памяти.
              Читать дальше →
            • Основы безопасности операционной системы Android. Уровень ядра

                Вступление


                Самой распространенной операционной системой для смартфонов на сегодняшний день является Android. Но не только этот факт подогревает интерес к ней. Открытость, возможность что-то настроить, подкрутить, и, естественно, сломать тоже в немалой степени способствуют увеличению популярности этой платформы. Я попробую поделиться опытом, как устроена эта операционная система, а так же рассмотреть систему безопасности. Всем, кому интересно, добро пожаловать! В этой статье я рассмотрю безопасность на уровне ядра.
                Читать дальше →
              • Ресурсы, о которых должен знать каждый Android-разработчик

                • Translation
                Сегодня я хочу поделиться с вами моим вольным переводом статьи, написанной Сергеем Повзнером (Sergey Povzner). Сергей ведёт блог bongizmo.com и занимается разработкой туристических гидов под общим названием Citybot.

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

                Статья будет полезна как новичкам, так и опытным разработчикам. Это гид по миру Android-разработки.
                Читать дальше →
              • Блоки в Objective-C

                • Tutorial
                В этом небольшом 15-минутном видео Юра Digal Буянов (ведущий iOS-разработчик e-Legion) расскажет о тонкостях работы с блоками в Objective-C.



                Мы решили сделать целый ряд коротких видео о разработке (не только мобильной), дизайне и маркетинге. Чтобы не пропустить выход новых материалов, вы можете подписаться на Хабра-блог или на youtube-канал.

                Принимаются советы, рекомендации, а также заявки на интересующие темы, которые можно раскрыть в следующих видео.
                • +36
                • 11.3k
                • 4
              • Regexponline – интерактивный анализатор и редактор регулярных выражений

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

                  (<([a-z]+[^>]*)>)(.*)(</\2>)

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

                  image

                  Когда-то и мне пришлось по долгу службы подружиться с регулярными выражениями. Прочитав Фридла и несколько статей на Хабре, я, конечно, начал понимать этот синтетический язык. Тем не менее, каждый раз, когда приходилось написать очередную регулярку, я быстро закапывался в нагромождении скобок, слешей, точек, плюсов, знаков вопроса, и других хорошо вам знакомых конструкциях. Разобраться в этой каше было очень сложно, особенно если возвращаешься к задаче месячной давности. Я мечтал об инструменте, который помог бы мне разобраться в собственном творении. Приблизительно подходящих по смыслу сервисов нагуглилось с десяток, но все они приносили мало пользы. Как раз тогда я и начал разрабатывать этот проект.

                  Итак, regexponline – инструмент, способный наглядно изобразить структуру регулярного выражения, разобрав его по элементарным компонентам; продемонстрировать совпадающие и не совпадающие его части; помочь в написании и отладке выражения, которое почему-то не совпадает с нужной строчкой.
                  Читать дальше →
                • Continuous Integration для мобильных и веб-проектов

                  Добрый день, в своей статье, хочу рассказать, всем известную практику разработки ПО — Continuous Integration или Непрерывная интеграция.
                  Чтобы сразу пояснить в чем особенность статьи объясню, что в нашей команде стояла задача построить единый процесс для всех наших проектов. А проекты у нас бывают как мобильные (iOS, Android) и веб (верстка, сервисы, сайты).
                  Читать дальше →
                • Тонкости оператора switch

                  • Tutorial
                  Да, это целая статья по самому обычному switch в JDK 7. Бывает так, что накопленный материал кажется интересным и малоизвестным, а потом оказывается, что любая бабка у подъезда уже 50 лет знает об особенностях реализации switch. Но я попробую. Для затравки, предлагаю 3 вопроса:

                  1. (Простой) Каков результат работы этого кода?
                    switch(5){
                    default: System.out.print(0);
                    case 1: System.out.print(1); break;
                    case 4: System.out.print(4);
                    case 2: System.out.print(2);
                    }

                  2. Следующие 2 варианта практически одинаковы. Немного отличаются литералами.
                    //Вариант 1
                    switch("BBBBBB"){
                    case "AaAaAa": break; 
                    case "AaAaBB": break;
                    case "AaBBAa": break;
                    case "AaBBBB": break;
                    case "BBAaAa": break;
                    case "BBAaBB": break;
                    case "BBBBAa": break;
                    case "BBBBBB": break;
                    }
                    //Вариант 2
                    switch("BBBBBB_8"){
                    case "AaAaAa_1": break;
                    case "AaAaBB_2": break;
                    case "AaBBAa_3": break;
                    case "AaBBBB_4": break;
                    case "BBAaAa_5": break;
                    case "BBAaBB_6": break;
                    case "BBBBAa_7": break;
                    case "BBBBBB_8": break;
                    }
                    Почему первый switch выполняется в несколько раз медленнее, по крайней мере, с отключенным JIT (-Djava.compiler=NONE)? Сами проверьте в цикле! JIT таким кодом не проведешь, но если немного пошаманить, то небольшая разница будет заметна.
                  3. Какова вычислительная сложность алгоритма нахождения совпадающего значения среди n case-ов (по крайней мере, в JDK 7)?
                  Читать ответы и статью
                • Использование Razor отдельно от ASP.NET MVC

                  • Tutorial
                  По роду деятельности студентом мне часто приходится писать различные лабораторные и курсовые работы. Неотъемлемая часть этих работ(как и в 80% задач бизнес-программирования) — код составления отчета о найденных элементах в базе данных или выполненной длительной и сложной операции. В десктопном программировании в рамках .NET Framework есть различные способы решения подобных проблем:
                  • Старая школа: формат RTF никто не отменял, однако вручную составить что-либо сложнее цветного текста со шрифтами разного цвета и ссылками лично у меня не получалось. Способ действенный, но стандарт не самый легкий для понимания, на последнюю версию даже смотреть страшно
                  • Для Silverlight/WPF — формирование FlowDocument своими руками. Объектная модель однозначно удобнее формирования старого формата вручную, но вариант тоже только для смелых
                  • Сторонние решения вроде Crystal Reports, возможно и очень мощный инструмент для создания отчетов, но не всегда в этом есть необходимость, к тому же не всегда есть возможность тянуть пару-тройку дополнительных программных продуктов1
                  • Использование Microsoft Office Interop. Нет, это издевательство. Ручная работа с памятью в управляемой среде вызывает лишь бурю радости. Начинающий программист выпьет не одну упаковку кофе, прежде чем смирится с подобным принципом работы.
                  • Формирование HTML. На нашу радость, стандарт позволяет создать документы средней степени форматированности, с помощью CSS можно довести до ума. Минусы — оформить документ по всем требованиям крайне затруднительно. Но это если в этом есть необходимость. Плюсы: простота стандарта и всеобщий переход «в облака и браузеры» стимулирует развитие HTML.

                  О последнем я и буду вести речь.
                  Читать дальше →
                  • +20
                  • 9.9k
                  • 9
                • Полезные советы новичкам в дизайне под Android

                  • Translation
                  • Tutorial
                  Этот пост послужит своеобразным началом серии публикаций на тему «как я учусь дизайну под Android». Никогда не уделял гайдлайнам достаточно внимания, считая их скучными и неинтересными, но все изменилось. Сейчас я начинаю понимать, платформа достигла своей зрелости и предлагает ряд интересных решений.
                  Читать дальше →
                • Вывод текста в iOS: CoreText, NSAttributedString

                  Я хотел бы Вам рассказать про вывод текста на экран в iOS. Вначале это задумывалось как туториал, затем как сбор неочевидных фактов, а получилось что получилось.

                  Способы вывода текста условно можно разделить на несколько категорий:

                  • UIKit — привычные UI контролы. Дают только базовые возможности по отображению, совсем мало возможностей по форматированию
                  • UIKit + NSAttributedString — привычные UI контролы с возможностью установки строки с атрибутами отображения. Куча возможностей по форматированию
                  • CoreText — фреймворк для работы с текстом и текстовыми представлениями. В связке с NSAttributedString дает массу возможностей по форматированию текста и, благодаря нескольким уровням абстракций над элементами текста, расширенные методы по их отображению
                  • CoreGraphics — с помощью него тоже можно отрисовывать текст

                  Читать дальше →
                  • +29
                  • 6.9k
                  • 9