• Весёлые (сосисочные) рефакторинги



      Привет, %habrausername%. Я хочу сыграть с тобой в игру.

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

      От предыдущего разработчика осталась кучка кода и домашние тапочки. Ты осторожно кладёшь тапочки в мусорную корзину и начинаешь рефакторинг.

      Этот код ужасен. Во-первых, нет никого, кто мог бы сказать, зачем этот код писался. Во-вторых, нет никакой документации. Нет даже комментариев, не говоря уже о юнит-тестах. В-третьих, код не структурирован, а имена классов и методов ни о чём не говорят. И, наконец, работать это должно начать не сегодня, и даже не вчера, а внезапно.
      Ну как, %habrausername%, пробежал холодок по спине?
      Читать дальше →
    • IT AS IS



        Привет, Хабр!
        Я автор нескольких рассказов, самый известный из которых — «Энергонезависимое решение». Меня много раз спрашивали, когда же я напишу книгу (раз, два, три и тд). Так вот, я её написал. Под катом будет история создания, благодарности и конкурс. А в самом конце — ссылки для покупки бумажной версии и анонс версии бесплатной электронной.
        Читать дальше →
      • Как я встретил новый год



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



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

            • Tutorial


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

            Проблема


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


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



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

              Итак, представим себе, что есть два программиста. Один из них умный, прочёл кучу статей на Хабре, знает каталог GoF наизусть, а Фаулера — в лицо. Другой же делает всё просто. Первого будут звать, например, Борис Н., а второго — Маркус П. Само собой, имена вымышленные, и все совпадения с реальными людьми и программистами случайны.

              Итак, к ним обоим приходит проектный менеджер (если в вашей вселенной PM не ходит сам к программистам, назовите его как-то иначе, например BA или lead, сути это не изменит) и говорит:
              — Ребята, нам нужно, чтобы делался хлеб.

              Именно так, «делался», без уточнения способа производства.

              Как же поступят наши программисты?
              Читать дальше →
            • КАД: все арбитражные суды России в одном Android-устройстве



                Картотека арбитражных дел — ещё один проект компании Parcsis, для которого был создан клиент под ОС Android. Это третий по счёту проект, и в нём был учтён весь имевшийся на тот момент опыт разработки Selloby и СПС.
                Читать дальше →
                • +13
                • 4,4k
                • 7
              • Selloby: как мы делали слонов под Android



                  Selloby — это сервис частных объявлений в стиле Твиттера и наш самый первый проект под Android. Несмотря на сравнительно небольшой объём кода (чуть более 8 KLOC), в процессе реализации проекта Selloby мы опробовали ряд техник и методологий, которые пригодились в дальнейшей работе. Также Selloby дал нам возможность почувствовать, пускай и в миниатюре, как устроен Твиттер, что, помимо саморазвития, добавило интереса нашей работе.
                  Читать дальше →
                • СПС «Право.ru» для Android — как это было



                    Почти год назад, а именно 12 сентября 2011 года, мы выложили на Google Play тогда ещё Android Market клиент для справочно-правовой системы «Право.ru». Этот проект был первым крупным приложением от компании Parcsis под ОС Android. Забегая вперёд, скажу, что разработка шла совсем не так гладко, как хотелось бы. Далеко не все идеи, предложенные дизайнерами, удалось воплотить, да и не все инженерные решения удовлетворяли требованиям бизнеса. Android преподнёс нам немало неожиданностей.

                    Но, тем не менее, благодаря сплочённости и самоотверженности команды, мы прошли этот путь длиной более чем в год, выпустив и поддерживая продукт, входящий в ТОП-10 бесплатных приложений в категории «Бизнес».

                    Читать дальше →
                  • Десктоп – давай, до свидания!



                      Мы живём в удивительное время. На наших глазах происходит революция — на смену громоздким настольным компьютерам и тяжёлым ноутбукам приходят мобильные устройства — планшеты и телефоны. Область применения этих устройств постоянно растёт. Сейчас планшеты используются, в основном, для работы с электронной почтой и новостными лентами, а так же для общения в социальных сетях, чтения книг и просмотра видео. Назначение телефонов примерно тоже, плюс звонки и смс. Вообще говоря, грань между телефоном и планшетом весьма условна, и существует она больше в сознании покупателей и в прайс-листах компьютерных магазинов. В реальности же имеет место целый класс устройств, которые нельзя однозначно отнести ни к планшетам, ни к телефонам. Например, PadFone или Eee Pad MeMO 171. Поэтому вместо «телефон» или «планшет» лучше говорить «мобильное устройство».

                      Вопрос, которым я хотел бы задаться — могут ли мобильные устройства полностью заменить рабочие станции для IT-специалистов? Можно ли с помощью одного только планшета разрабатывать сайты, сервисы и приложения для этих же планшетов? И я уверенно отвечаю — да можно. И если не сейчас, то в ближайшем времени такая возможность однозначно будет. В этой статье я постараюсь обосновать свою точку зрения.
                      Читать дальше →
                    • ООП. Неспешная беседа возле кулера



                        Юрий Моисеевич (ЮМ) — невысокий, гладко выбритый молодой человек лет сорока пяти, всё ещё подающий надежды. Имеет горделивый изгиб спины и маслянистый взгляд. Говорит тихо, почти шепчет.
                        Михаил Валерьевич (МВ) — широкоплеч и пузат, с окладистой кучерявой бородой. Говорит зычным, густым басом. Являясь признанным профессионалом, невольно вызывает уважение сам у себя.

                        Офисная кухня: небольшая каморка без окон, в центре стоит пластмассовый стол, в углу — кулер с водой, вдоль стен — табуретки. Около кулера затаился Юрий Моисеевич. На кухню заходит Михаил Валерьевич, чтобы попить воды. В правой руке он несёт чашку.

                        ЮМ (преграждая дорогу к кулеру, заискивающе): — Позвольте поинтересоваться!
                        МВ (учтиво кланяясь): — Прошу вас, Юрий Моисеевич, я всецело к вашим услугам.
                        ЮМ: — Не поведаете ли вы мне, любезный друг, о тонкостях своей столь нелёгкой работы?
                        МВ: — С превеликим удовольствием. Но моя работа столь многогранна, и, как вы сейчас верно заметили, столь нелегка, что я, право же, не знаю, с чего начать.
                        ЮМ: — А начните, пожалуй, с самых, так сказать, основ. Поведайте, какие технологии вы используете?
                        Читать дальше →
                      • Устройство интернетов



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

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

                          Открыв любимый поисковик, я хотел было уже ввести «автоматизированное создание скриншотов», как вдруг моё внимание привлёк новый элемент управления на этой странице. Вообще, главная страница этой поисковой системы настолько минималистична, что каждое её изменение, даже на пару пикселей, сразу бросается в глаза. А сейчас там под строкой поиска появилось самое настоящее окно чата. Внизу вертелась анимированная иконка с изображением карандаша, символизирующая, должно быть, то, что собеседник пишет мне сообщение. Через пару секунд анимация исчезла, и в окне чата появилась надпись: «привет как дела».
                          Читать дальше →
                        • Как мы в Parcsis разрабатываем программы под Android



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

                            Конечно, начать рассказ о разработке ПО следует с описания бизнес-процессов. Итак, начнем!
                            Читать дальше →
                          • Энергонезависимое решение



                              Понедельник. Постановка задачи


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



                                «Две тропинки идут рядом: путь жизни и путь смерти… Люди не идут никаким путём, ни путём жизни, ни путем смерти. Вихрь носит их, как солому.»
                                Густав Майринк, «Голем»

                                В офисе было тихо и темно, лишь стук клавиш и редкие щелчки мыши нарушали едва различимое жужжание кулера, да широкоформатный монитор освещал измождённое лицо regular developer'а Миши. Сторонний наблюдатель мог бы подумать, что идёт обычная рабочая ночь с пятницы на субботу. Так оно и было для тысяч других разработчиков по всему миру, но только не для Миши. Поставив очередную пустую бутылку под стол, он внезапно почувствовал, что граница, отделяющая его от гордого титула «senior developer», не так уж и далека.

                                «Я встаю не раньше полудня, работаю до двух часов ночи и выпиваю за раз до трёх литров пива. Наверное, я становлюсь профессионалом», — подумал Миша, и в этот самый момент почувствовал на себе чей-то тяжёлый взгляд. То, что он увидел, подняв глаза от монитора, заставило его замереть от ужаса. Две фигуры в серых балахонах стояли по обоим сторонам его стола. Лица, скрытые низко надвинутыми капюшонами, смотрели сурово, и в то же время безразлично. Страшно было пошевелить хотя бы пальцем или вздохнуть, а сознание отчаянно отказывалось верить в реальность происходящего — ведь Миша узнал этих двоих. Старшие коллеги рассказывали ему, что всякий раз, когда кто-нибудь подбирается к мистической грани между простым разработчиком и старшим, к нему приходят эти двое, чтобы посвятить в свои мрачные тайны.

                                Миша сглотнул и тихо спросил дрожащим голосом:

                                — Тим-лид Коля? Проджект-менеджер Изя? Рабочий день уже давно закончился, что вы здесь делаете? И к чему весь этот маскарад?
                                Читать дальше →
                              • Архитектура Android-приложений. Часть IV — интеграционный уровень

                                • Перевод
                                В этой статье мы поговорим о различных механизмах, посредством которых взаимодействуют части Android-приложений. Условимся называть все эти механизмы «уровнем взаимодействия» (насколько мне известно, в документации Android нет специального термина для этого).
                                Читать дальше →
                                • +35
                                • 28,5k
                                • 5
                              • Архитектура Android-приложений. Часть III — основные части приложения

                                • Перевод
                                Итак, мы уже говорили о происхождении архитектуры ОС Android и о шаблонах, реализованных в этой архитектуре. Теперь настала пора поговорить о том, из чего состоит Android-приложение.

                                В этой статье будут представлены основные «персонажи» архитектуры Android-приложения.
                                Читать дальше →
                                • +50
                                • 52,9k
                                • 7
                              • Архитектура Android-приложений. Часть II — архитектурные стили и шаблоны

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

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

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

                                • Перевод
                                В этой статье мы рассмотрим архитектуру Android-приложений.

                                Откровенно говоря, официальную статью Google по этой теме я считаю не очень полезной. Детально отвечая на вопрос «как», она совсем не объясняет «что» и «почему». Итак, вот моя версия, и, я надеюсь, она внесёт некоторую ясность. Да, кстати, я полностью одобряю чтение статей Google, поскольку они содержат полезную информацию, повторять которую я не собираюсь.
                                Читать дальше →