• Работа с памятью (и всё же она есть)

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

      Читать дальше →
    • Переводим в код 5 действительно полезных шаблонов адаптивной разметки

        Приветствую всех.

        Недавно наш хабраколлега опубликовал интересную статью об адаптивной разметке.
        Уже не далеко то время, когда мы будем уделять верстке под все разрешения намного больше внимания, нежели делаем это сейчас. Посему считаю нужным подходить к этому периоду подкованным в данном вопросе, ну или хотя бы иметь четкое представление, что это такое и с чем его едят. Запасаемся смартфонами и таблетками.
        Читать дальше →
      • Возможно, вы идете не туда



          Анти-GTD


          Добро пожаловать в двадцать первый век! Вот ваш iPad, вот ваш кредит, получите — распишетесь, и вставайте в очередь за Успехом — главной ценностью современного Человечества! Если на пути к Успеху вы проголодаетесь, то перекусите бигмаком, запейте диетической колой и продолжайте дальше работать изо всех сил, так как на следующей неделе ваш iPad станет неактуальным и вам, вероятно, необходимо будет приобрести новую модель. Не забывайте, про ваш абонемент в наш фитнес-центр, который не позволит вам развалиться на полпути к Успеху. Удачи!

          — Именно так я бы сформулировал сообщение, которое каждый день доносит до нас общество. Нам больше не требуется думать, к чему нам идти, путь совершенно ясен и подсвечен яркими лампочками — нужно, во что бы то ни стало, быть Успешным, а опционально еще Лучшим и Эффективным. Теперь то, в третьем тысячелетии, это совсем не сложно, достаточно основать стартап и не вставая с кресла стать богатым персонажем кинофильма, с особняком и личным самолетом.
          Читать дальше →
        • Способы проектирования баз данных в Android

          Работая Android разработчиком мне пришлось столкнуться с двумя различными подходами к проектированию баз данных в мобильных приложениях. Возможно кому-то излагаемое здесь покажется очевидным, а возможно кому-то даст новую идею или убережет от ошибок. В общем, без длинных предисловий переходим к делу…

          Два взгляда на проблему


          Как известно, в университетах учат строить базы данных по всем правилам: декомпозировать предметную область на сущности, выделить атрибуты и определить первичные ключи, определить отношения между сущностями, привести все это, как минимум, к 3-ей нормальной форме и т.д. Один из “побочных” эффектов такого подхода — падение производительности на операциях чтения, при достаточно сильной декомпозиции и нормализации, так как в запросах необходимо выполнять большее количество джойнов. И чем больше у вас записей в таблицах, тем дольше они выполняются.

          Добавим сюда сильно ограниченные аппаратные возможности мобильных платформ, в частности крохотный объем оперативной памяти. Ее и без того мало, так в дополнение к этому, Android ограничивает количество доступной RAM на процесс в зависимости от версии ОС от 16 до 48 МБ. И даже из этих нескольких мегабайт СУБД получает лишь часть, ведь есть еще и само приложение. Ну и в заключение, сам SQLite, в виду своих особенностей поддерживает только два уровня изолированности транзакций. Они либо сериализуются, либо вообще отключены!

          В ситуации когда производительность приложения начинает упираться в производительность СУБД на помощь и может прийти альтернативный подход, назовем его key-value ориентированным. Вместо декомпозиции сущности на атрибуты и создания отдельных полей в таблице на каждый атрибут, сущность сохраняется “как есть” в одно единственное поле типа BLOB, иначе говоря сериализуется.
          Читать дальше →
        • Некоторые “подводные камни” разработки под Android

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

          В этой статье я бы хотел рассмотреть несколько реальных багов, которые возникли у наших пользователей и рассказать о путях их решения.

          Статья не претендует на подробный анализ потенциальных проблем, это просто рассказ из жизни одно реального Android приложения.

          Читать дальше →
        • Загрузка и инициализация JavaScript


            С появлением мобильного веба наш интернет стал снова плохим, а устройства медленными. 3G, 4G, Wi-Fi… — они, конечно, где-то есть, но когда очень надо, то как правило скорость падает до околомодемной и получается, что наши мобильный устройства «каменного века» попадают в условия современного объема информации. Даже в центре города (правда на 15-м этаже) значок мобильного интернета может показывать волшебную букву Е, намекающую о том, что уж лучше не тратить нервы и потерпеть. Лучше уж использовать нативную версию какого-то веб-сервиса, чем каждый раз ждать, загружать по мегабайту, чтобы отправить короткое сообщение. Нативную версию веб-сервиса... Понятное дело маркетинг, гонка приложений. Однако, же пользователи выбирают нативные веб-приложения, которые работают быстрее, не качают кучу ресурсов, хотя им приходится периодически его обновлять.

            Эта статья о том какими путями можно оптимизировать загрузку и инициализацию JavaScript.
            Читать дальше →
          • Создание композитных компонентов на Android

              Приветствую всех Хабра-жителей и Андроид-ценителей!
              Композитный в нашем случае означает «состоящий из нескольких», но вы это и так знаете.
              Итак, есть Задача:
              • Необходимо вывести блок данных, включающий в себя текст, картинки, кнопки и т.д.
                (В нашем случае это будет короткий анонс передачи по ТВ)
              • дизайн блока нарисован специально нанятым дизайнером и вам нельзя отсупать от него ни на пиксель
              • Это блок может иметь какую-то внутреннюю логику работы и компоненты могут влиять друг на друга (у нас «внутренней логикой», будет установка символа "*" в заголовок передачи и смена цвета фона если была нажата кнопка «Буду смотреть»)
              • Таких блоков может быть много и информация для них получается уже в процессе работы приложения
              • как всегда, в процессе работы, дизайн может быть пересмотрен, и вам надо быстро внести изменения в программу не переписывая все с самого начала


              Читать дальше
            • Маленькая хитрость для отображения большого объёма данных в ListView

              • Tutorial


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

              Проблема


              Стандартный механизм отображения списков из базы данных в Android выглядит примерно так:
              • Activity содержит ListView
              • ListView обращается к экземпляру CursorAdapter
              • CursorAdapter получает данные из объекта, реализующего интерфейс Cursor
              • Cursor получен либо из ContentProvider, либо сразу из SQLiteDatabase


              Всё работает нормально ровно да тех пор, пока количество строк в Cursor сравнительно небольшое. Но если в нём 50 тысяч, 100 тысяч и более строк (хотя дело не только в количестве строк, но об этом чуть позже), время от времени список будет притормаживать. Особенно это заметно при «быстрой прокрутке», если у ListView установлено в true свойство fastScrollEnabled.
              Читать дальше →
            • CSS/JS библиотека в стиле Metro, совместимая с Twitter Bootstrap

                Не так давно я писал на хабре о Bootmetro — дизайне Twitter Bootstrap в стиле Windows 8. Эта разработка хороша идеей, но на практике все работает очень коряво. К счастью, есть качественно сделанный аналог от Ace Subido — CSS3 Microsoft Metro Buttons.



                По сути это набор стилей для кнопок и форм, который можно использовать вместе с Twitter Bootstrap.
                Читать дальше →
              • CSS кнопки с помощью псевдо-элементов

                • Translation
                • Tutorial


                Здравствуйте, друзья. За последний месяц я экспериментировал с псевдо-элементами, особенно, с их использованием в создании кнопок. Таким образом, удалось создать крутые эффекты, которые раньше можно было сделать только со спрайтами.

                В этом уроке я покажу как создать кнопку с изюминкой, используя только якорный тег и мощь CSS.

                Читать дальше →
              • Красивые чекбоксы и радиокнопки на CSS3 без JavaScript

                • Tutorial
                Благодаря псевдоклассу :checked, появившемуся в CSS3, можно стилизовать формы с чекбоксами и радиокнопками как угодно. В этом топике рассмотрен один очень простой способ, причем без использования JavaScript.



                Демонстрация Скачать исходники
                Читать дальше →
              • Набор инструментов для построения графиков, блок-схем и диаграмм



                  Есть много разных сервисов, облегчающих жизнь веб-разработчику или дизайнеру, в том числе создающих разные графики, диаграммы, блок-схемы и т.д. Ниже представлена небольшая подборка.
                  (Осторожно, много изображений)
                  Читать дальше →
                • Lift: самый мощный и безопасный веб фреймворк из всех?

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



                    Самое важное, что нужно отметить — это отсутствие утверждения «лучший из всех». И это понятно, хотя бы потому, что Lift — сложнее большинства фреймворков. Во-первых, потому что он активно использует функциональную сторону Scala, во-вторых, потому что Scala — язык с сильной статической типизацией. Но, для тех, кто готов учиться, Lift — инструмент действительно адски мощный (знаю по опыту, последние несколько месяцев использую его в работе).
                    Читать дальше →
                  • Еще один способ отладки Android приложений на виртуальном устройстве

                    • Tutorial
                    Дожил я до такой жизни, что мне понадобилось написать программку для android с поддержкой bluetooth. Все время мучать планшет ради отладки не хотелось, поэтому самый естественный путь — воспользоваться эмулятором. И вот, когда я установил Adk и idea, на лбу образовались 3 шишки от граблей:
                    • Основной эмулятор ADK жутко медленный
                    • Интеловский нативный эмулятор не работает на компьютере с процессором AMD
                    • ADK вообще не поддерживает эмуляцию bluetooth


                    Мы живем не в самом худшем из миров, и поэтому мне удалось довольно быстро найти приемлемое решение.
                    Мало букв, много картинок
                  • Добавление настроек приложения в Settings

                      Если у вас есть неигровое приложение (в игровых принято размещать настройки в самом приложение, хотя нет правил без исключений) с некоторым количеством настроек, то вместо того, чтобы реализовывать выбор и хранение настроек в самом приложении можно добавить их в приложение «Настройки/Settings» самого телефона, причем делается это очень быстро и легко.

                      Image Hosted by ImageShack.us

                      Я столкнулся с необходимостью добавить к приложению несколько настроек, просмотрел некоторое количество уроков и статей, но почти везде описания были какие-то обрывочные и слишком запутанные, поэтому сейчас я попытаюсь вкратце и доступно изложить основные принципы создания окошка настроек своего приложения в Settings.
                      Читать дальше →
                    • Google’s Mod_Pagespeed вышел из беты


                        Для тех, кто как я, не знал, что такое mod_pagespeed — это модуль для Apache, собравший в себе очень много механизмов оптимизации. На страничке приводятся:
                        • Оптимизация изображений, их ресайз и компрессия
                        • Сращивание и минификация JS и CSS
                        • Отложенная загрузка JS и изображений

                        И многое-многое другое.
                        Читать дальше →
                      • Apple, Facebook, Google, Microsoft запускают ВебПлатформу

                          Apple, Adobe, Facebook, Google, HP, Microsoft, Mozilla, Nokia, и Opera присоединились к консорциуму W3C для запуска нового сайта, названного ВебПлатформой:

                          www1.webplatform.org

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

                          Уже сейчас там можно найти кое-что полезное — а именно, форум в стиле StackOverflow (есть надежда, что там можно будет получить ответ от спецов из перечисленных выше компаний):

                          talk.webplatform.org/forums

                          А также уютный чатик (вcпомним молодость):

                          talk.webplatform.org/chat

                          Самой главной неожиданностью оказался не сам факт появления ВебПлатформы, а список компаний, обьединившихся под одним флагом (сплошные конкуренты!).