• Рефакторинг: миссия (не)выполнима?

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

      А как делать этот самый рефакторинг, если даже неизвестно, с чего начать? Как осушить болото кода и не утонуть нем?

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

      Читать дальше →
    • Про Интернет и свободу взглядов или Веб 2.0 в мышлении

        Эта запись будет о самой большой возможности, которую предоставляет нам Интернет, и которой не пользуются 99,9% юзеров. Как бы там ни было, какими бы продвинутыми бы ни были мы, наши родители и наше окружение, мы являемся продуктом нашей семьи, или, в более глобальном смысле, — нашей региональной общины. Правила, привычки, взгляды на мир, оценки, принципы поведения, абсолютно все у нас формируется под влиянием окружения. Конечно же, существуют погрешности, но даже они – это небольшие отклонения от стандартных правил. Примеры таких правил вы можете привести сами. Например: «без высшего образования не сделаешь карьеру», «замуж нужно выйти до 25 лет», «в вуз без денег поступить нельзя», «все врачи/преподаватели берут взятки», «заработать честным трудом или мозгами в нашей стране нереально», «семья без детей не может быть счастливой», «чтобы похудеть занимайся спортом», «худой значит здоровый, толстый значит больной», «от полкусочка тортика ничего не будет». Этот мысле-ряд каждый из вас может продолжить в соответствии со своими убеждениями или же убеждениями своего круга (региональной общины). Региональной общиной я тут называю некое сообщество людей, которое живет в одном месте. Понятно, что в наше время это понятие более размыто, и влияние этого сообщества на индивидуума менее заметно, тем не менее оно есть и очень сильное.
        Читать дальше →
      • Win-игры под Linux: миф или реальность?

          Топик написан под влиянием множества заявлений (в том числе в хабрасообществе) о том, что игр под Linux почти нет, соответственно последний не является десктоп-системой, способной конкурировать с Windows. Используется данный аргумент, в паре с другим — «под ваш линукс нет нужного для работы софта» — в качестве последней линии обороны, когда говорить об «удобстве», «простоте освоения» или «безопасности» уже бесполезно. Любая домохозяйка без проблем освоит Ubuntu, особенно если обучать её именно на этой системе, а не переучивать с винды. Да и вирусы под эту ОС пока что приходится собирать вручную, с чтением мануала. И вот тут-то выступает некто, заявляющий примерно следующее: «Но ведь у домохозяйки есть дети, которые хотят погонять в игрушки, а их-то на вашей красноглазой недооси и нету! Ха-ха-ха! (здесь смех киношного злодея)».

          Читать дальше →
        • Работа над эскизами

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

            Но, к сожалению, такой формат оказался затруднительным для восприятия некоторыми заказчиками — не все могли представить, как этот черновик соотносится с реальным сайтом, как это будет выглядеть на экране. Пусть даже схематично. Надо было что-то менять, чтобы было также просто, но более понятно. И я нашел удобное для меня решение — совместил простоту традиционных «карандашных» эскизов и псевдобраузерную визуализацию.

            image

            Особо любопытствующие могут ознакомиться с развернутым повествованием на моём сайте (это «рерайт» оттуда)

            Любителей кратких изложений прошу под кат

            Читать дальше →
          • Пишем Facebook приложение

              Facebook — популярная социальная сеть где можно написать своё приложение. Не люблю толочь воду в ступе, поэтому сразу к делу. Встраивать можно двумя направлениями: внешнее приложение в Facebook или Facebook-данные во внешнее приложение (aka Facebook Connect). Тут я буду говорить о первом, что в принципе более трудоёмко и интересно. Как правило смысл facebook-приложение несёт две функциональности — взаимодействие с друзьями и информативное интегрирование в профиль пользователя.

              Основы


              Встраивать приложение можно в следующие места..
              • Canvas — собственно страница с приложением. Доступна по ссылке apps.facebook.com/НАЗВАНИЕ_ПРОГРАММЫ
              • Profile box — маленький бокс внутри самого профиля пользователя
              • Profile tab — новый таб в профиле
              • Boxes tab — небольшой блок в табе boxes
              • News feed — доступ к потоку обновлений
              • Requests box — интерактивные сообщения другим пользователям

              Интеграция производится смешанными возможностями..
              • REST API (http://api.new.facebook.com/restserver.php) который даёт «тяжёлый» доступ для backend-а с возможностями загрузки фото, видео, получении списков друзей, событий, комментариев и тп.
              • FQL — способ запрашивать данные по REST не просто через параметры метода, а уже через SQL-подобный синтаксис
              • FBML — урезанный HTML + свои тэги которые Facebook интерпретирует в окне в своём стиле и дизайне и кэширует при инлайновом показе. Куча заморочек с встроенным валидатором тэгов
              • xFBML — FBML-тэги используемые в своём приложении
              • FBJS — урезанный JS

              Два пути


              Теперь когда основные термины понятны перейдём к самому приложению которое размещается в Canvas. После создания нового приложения через developer app, скачивания REST-библиотеки для php, выкладывании приложения на свой сайт и установки в настройках URL для Canvas становится видно что доступно два способа запуска — через iframe (+XFBML) либо чистый FBML который будет храниться на facebook. Понятное дело первый вариант самый простой. После создания программы и добавления/подтверждения в своём профиле, показ Canvas'а будет сопровождаться обычным iframe + GET-параметрами с префиксом fb_sig_, из которых самый важный это fb_sig_canvas_user. Второй вариант более муторный, но более тесно связан с FB.



              Читать дальше →
            • Установка LAMP (локальный web сервер для на Ubuntu 9.04) пошагово

                Нужно сказать что в интернете очень много инструкций по решению данной проблемы, однако краткой и полной можно назвать далеко не каждую.
                Эта инструкция сугубо для новичка, который только начинает осваивать ubuntu.
                Действие происходит в окне терминала.
                1. Создание root пользователя:
                пользователь@компьютер:~$sudo passwd root
                далее система попросит ввести пароль который вы вводили при установке системы.
                После этого введите пароль пользователя root: не удивляйтесь пароли не отображаются.
                2. Разрешение локального входа под root. Необходимо выполнить следующий алгоритм действий:
                Система>Администрирование>Окно входа в систему> вкладка «Безопасность»>поставить галочку «Разрешить локальный вход администратору системы»
                Предупреждение: активация пользователя root опасно для вашего компьютера (сетевая безопасность)

                Можно как уже сказали ниже не создавать root, а просто выполнить (стать root)
                sudo su напоминаю это нужно для работы с файлами и установки пакетов
                3.Устанавливаем apache (в терминале):
                sudo apt-get install apache2 libapache2-mod-auth-mysql
                4. Устанавливаем php:
                sudo apt-get install php5-common php5 libapache2-mod-php5 php5-cli php5-cgi php5-mysql
                5.Перезапустим apache:
                sudo /etc/init.d/apache2 restart
                6.Устанавливаем MySQL:
                sudo apt-get install mysql-server mysql-client Во время установки будет запрошен ввод пароля root-а MySQL сервера.
                7.Перезапустим apache:
                sudo /etc/init.d/apache2 restart
                8. Ставим phpmyadmin.
                sudo apt-get install phpmyadmin
                phpmyadmin — веб-инструмент для управлениями MySQL-ными базами данных. Очень удобный инструмент для разработчиков.Во время установки от нас запросят об используемом веб-сервере — выбираем apache.
                указваем каталог где установлен phpmyadmin
                sudo ln -s /usr/share/phpmyadmin/ /var/www
                Вход в phpmyadmin: localhost/phpmyadmin
                Вот и все.
                Подключение модулей: по умолчанию некторые модули отключены. Включить их можно командой:
                sudo a2enmod имя_модуля dd
                Например, подключение модуля mod_rewrite:
                sudo a2enmod rewrite
                После подключения модулей необходимо перезапустить apache:
                sudo /etc/init.d/apache2 restart
              • Компромат 2.0 или сервис «Отложенное возмездие»

                  Во многих детективных романах и фильмах (а иногда, к сожалению, и в обычной жизни) человек, желающий подстраховаться, в неприятной ситуации говорит слова вроде «Если вы меня убьете, и я не выйду на связь с друзьями через четыре часа, то компрометирующие вас материалы доверенные люди передадут в прокуратуру». Или: «В случае моего исчезновения через неделю будет вскрыта банковская ячейка, где хранится чемодан компромата на вас». И т.д.
                  А что, если сделать онлайн-сервис, где люди смогут написать некое послание, ввести адреса получателей, и установить дату рассылки? :)
                  Например, в случае, если человек не введет на сайте через неделю только ему известный код, то по адресам доверенных лиц будет отправлено некое сообщение. Которое, к примеру, могло бы содержать пароли к емейл-адресам исчезнувшего пользователя, вебмани-ключи-пароли, или иную информацию.
                  Дополнительные фичи: так же, что бы не передавать в руки владельцев сервиса ценную информацию, можно создать запароленный файл с какой-то информацией, и разослать его заблаговременно своим знакомым. А через сервис рассылать только пароль от этого файла.
                  Ещё можно делать рассылку людям в два этапа: например, через неделю неактивности — одним людям, а через месяц неактивности — другим людям. Ну, так можно далее думать и о разных других фичах, защите от спамеров, секьюрности, и т.д.
                  п.с. Термин «отложенное возмездие» взят из книги С. Лукьяненко «Атомный сон».
                • Задачки на собеседованиях на вакансию программиста

                    Решила опубликовать задачки, которые мне задавали для определения профпригодности на собеседовании на вакансию php-программиста. Сразу предупрежу, что решение я знаю. Просто, может, кому-то будет интересно «размять мозги». Задачки в комментариях.

                    Если захотите проверить себя, пишите решение сюда, есть вопросы — задавайте тут.
                  • Ломаем каптчу Яндекса

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



                      Читать дальше →
                    • Введение в google api

                        В этой статье я хотел бы дать обзор api, которые предоставляет google. Я не буду рассматривать все api и давать детальную инструкцию по их использованию, а расскажу только про те, которые считаю наиболее полезными, и дам примеры кодов с комментариями (примеры взяты из документации к api).

                        Расскажу про:

                        Читать дальше →
                      • SEO: Часть 2.2 Как оптимизировать сайт самостоятельно (внутренние факторы)

                          Что-то не заладился у нас разговор о коде, пришлось удалить тот пост. Слишком уж близко к сердцу его восприняли. Но злопыхателей можно понять: какой-то SEOшник, пусть и с 10-летним стажем, вдруг начинает учить программистов, как грамотно писать код. Ладно, забудем про это. Будем считать, что код на ваших сайтах уже изначально корректен, все тэги проставлены грамотно и означают лишь то, что должны означать,
                          Читать дальше →
                        • Apache Hadoop. Первое знакомство

                            image
                            Как видно уже из названия, Apache Hadoop является одним из проектов Apache Software Foundation и, соответственно, развивается под патронажем этой некоммерческой организации и имеет открытый исходный код (лицензия Apache License 2.0). Домашняя страница проекта находится по адресу hadoop.apache.org Hadoop относится к проектам верхнего уровня в иерархии проектов ASF, что свидетельствует о его зрелости и востребованности сообществом разработчиков. Что же это за проект, и чем он интересен? Давайте познакомимся с ним поближе. Если попытаться дать определение Hadoop в трех словах, то можно сказать, что это — система распределенных вычислений.
                            С архитектурной точки зрения Hadoop представляет собой кросс-платфотменный фреймворк, написанный на языке программирования Java. Стоит отдельно отметить, что несмотря на использование для написания кода Hadoop языка Java, распределенные системы на его основе могут быть написаны на других языках, таких как C/C++, Python, Ruby.
                            В некоторых источниках можно встретить определение Hadoop как «системы распределенных вычислений для бедных». Несмотря на то, что в таком определении можно уловить некоторые нотки негативно-пренебрежительного отношения к проекту, оно, как ни странно, указывает на одну из наиболее сильных сторон фреймворка, а именно — на возможность создания масштабируемых вычислительных кластеров на базе обычных ПК, которые привычней видеть дома или в офисе, чем в составе кластера. А учитывая неприлично низкую стоимость систем домашне-офисного использования, можно представить себе всю доступность Hadoop кластеров для обычных смертных. Кстати говоря, такой возможностью не брезгуют и сильные мира сего, включая великий Google, который, как известно, тоже предпочитает собирать кластеры из обычных ПК.
                            Но давайте снова вернемся к архитектуре Hadoop, которая держится на двух китах — распределенной файловой системе (HDFS), являющейся основой масштабирования и вычислительной парадигме MapReduce, позволяющей проецировать вычислительные задачи на узлы кластера. В качестве отправной точки при разработке Hadoop были использованы публикации Google, посвященные Google File System (GFS).

                            Post Scriptum
                            Кстати о названии проекта и об его логотипе…
                            Основатель проекта Даг Каттинг (Doug Cutting) позаимствовал название у любимой игрушки своего сына — плюшевого слоненка Hadoop, который впоследствии и сам оказался на логотипе проекта.

                            Ссылки для полного просветления:
                            Домашняя страница проекта hadoop.apache.org
                            Описание парадигмы MapReduce ru.wikipedia.org/wiki/MapReduce
                            Описание Google File System ru.wikipedia.org/wiki/Google_File_System
                            Блог Дага Каттинга blog.lucene.com
                          • Простой способ организовать видеонаблюдение

                              Иногда возникает необходимость следить за тем, что происходить в дома, но при этом нет желания ставить дорогую аппаратуру или возится с настройкой сложного софта. Например, вы оставили ребенка одного дома или у вас делают мелкий ремонт строители, вам интересно, что делает в ваше отсутствие любимая собака / кошка.
                              Для решения этой проблема нужен всего лишь включенный компьютер на той стороне, веб-камера и Skype.

                              Схема использования такая: звоним на домашний Skype и тот автоматом поднимает трубку и начинает видео-трансляцию. Всё предельно просто.

                              Для тех, кто не знает, как настроить Skype подобным образом — инструкция:
                              • Для начала надо зарегистрировать новый Skype-логин, установить сам Skype и подключить веб-камеру на компьютере в наблюдаемом пункте. Сей процесс, я думаю, не нужно описывать. Новый логин нам нужен потому, что скайп на той стороне должен принимать звонки только от вас, если вы, конечно, не хотите, чтобы кто угодно мог наблюдать за вашим домом.
                              • Добавляем ваш основной логин (с которого вы будете звонить) в список контактов нового домашнего акаунта.
                              • Заходим в настройки скайпа и на вкладке «Звонки» -> «Настройка звонка» разрешаем принимать звонки только из вашего списка контактов, также ставим галочки напротив пунктов «Автоматически отвечать на входящие звонки» и «Автоматически начинать видеотрансляцию во время звонка».


                              Всё :). Теперь можно посмотреть, что происходит дома, просто позвонив с основного акаунта на ваш домашний.

                              Upd. Способ позволяет наблюдать из любого места, где есть интернет и скайп. Также он больше предназначен для забавы, нежели для реального наблюдения.
                            • Яндекс-игрушки или кто больше всех любит порно

                                Яндекс в рамках сервиса wordstat запустил интересную штуку: региональную популярность запросов на карте. «Региональная популярность» — это доля, которую занимает регион в показах по данному слову, деленная на долю всех показов результатов поиска, пришедшихся на этот регион. Можно поиграться и выявить любопытные вещи.

                                Разработкой сайтов больше всего интересуются в Республике Алтай.

                                d180d0b0d0b7d180d0b0d0b1d0bed182d0bad0b0-d181d0b0d0b9d182d0bed0b2

                                Читать дальше →
                              • Страдания по CMF или Zend + Doctrine. Часть 1

                                  Попытки создания собственной системы начались довольно давно (думаю это всем знакомо). За последние пару лет была откатана схема на своей системе, но сама система благополучно почила в бозе. Если там были попытки как-то использовать Zend как компоненты, то в конце концов было принято решение не изобретать велосипед, а просто взять Zend за основу.
                                  Zend — 1.8/Doctrine — 1.1 на момент написания.

                                  Что было решено сохранить в системе из предыдущей версии
                                  1) Мультисайтовость
                                  2) Мультиязычность. Интернационализация производится за счет Zend и Doctrine.
                                  3) Модульность. При этом создать модуль можно в самой системе, задав yaml схему и получив стандартные методы для работы с помощью контроллеров и автогенерированых форм (Zend_Form).
                                  4) В создаваемых модулях по умолчанию присутствует поддержка i18n, versionable, timestampable.
                                  Каждый сайт имеет режимы отображения — backend, frontend,etc. Модель — одна для всех. Основой для моделей выбрана Doctrine. Показалась очень удобной.
                                  Читать дальше →
                                • PayPal запустит параллельные платежи

                                    Крупнейшая платёжная система в интернете PayPal скоро откроет набор программных интерфейсов для доступа к своему движку. Из нового функционала самая интересная фича — это параллельные платежи, когда один платёж может распределяться между 2-6 получателями в заданных пропорциях. Это очень удобно.



                                    Новый проект называется Adaptive Payments Service, его презентация состоится 23 июля в штаб-квартире PayPal, там и будут раскрыты все технические детали, пишет руководитель подразделения разработчиков PayPal. Но уже сейчас ясно, что сервис будет очень похож на Flexible Payments Service от Amazon, в пику которому он, собственно, и создаётся.

                                    Что интересно, первые сведения о новом «секретном» PayPal API появились в результате утечки информации, которая просочилась в блог TechCrunch. Уже после этого руководители были вынуждены признать в блоге, что они действительно готовят проект и назвать дату официальной презентации.

                                    via Computerworld
                                  • Поиграем в жизнь

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

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

                                      Ладно, хватит завлекалок. Пора удариться в математику.


                                      Включить мозги
                                    • Подготовка статей для хабра: расширение Markdown + подсветка синтаксиса + загрузка изображений

                                        Описание

                                        Представляю вашему вниманию расширение «человеческого» языка разметки Markdown для использования на хабре.Основные цели:
                                        • Заменить «человеко-читабельный», но отнюдь не «человеко-писабельный» HTML на Markdown.
                                        • Обеспечить поддержку расширенной разметки хабра.
                                        • Автоматизировать загрузку изображений и вставку их URL в статью.
                                        • Добавить подсветку синтаксиса.
                                        Читать дальше →
                                      • Об использовании паттернов

                                          К сожалению, иногда приходится наблюдать случаи, когда люди, прошедшие паттерны проектирования в институте в рамках курса программирования, или же прочитавшие книжку с паттернами сразу после учебника по программированию, начинают применять их в работе буквально с первого класса. Иногда это даёт результат, чаще всего с паттернами Singleton (хотя бы знают про double locking idiom). Но чаще всего возникает ситуация, когда человек применяет паттерн просто для того, что его применить. И это плохо.

                                          Для начала, что такое паттерн? Можно перевести как «образец», «пример», «модель», но мне больше всего нравится слово «шаблон» или же «шаблон проектирования». Потому что любой паттерн это не образец, с которого надо копировать ваш код. Это образец оформления кода, которому надо следовать. Разница такая же, как между образцом документа, который висит на стене, и шаблоном документа в MS Word / OpenOffice Writer, который используется для единообразного оформления (отступы, шрифты, оформление абзацев).

                                          Читать дальше →