• Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки

      Предисловие


      Скорей всего, матерым системным администраторам статья будет не очень интересна. В первую очередь она ориентирована на новичков, а также на людей, которые столкнулись с подобной проблемой — необходимостью удалить огромное количество файлов из одной папки в ОС Linux (Debian в моем случае), а также с закончившимся местом на диске, когда df -h выдает что почти 30% свободно.
      Читать дальше →
    • Отдаем файлы эффективно с помощью PHP

        Если Вам потребовалось отдавать файлы не напрямую веб сервером, а с помощью PHP (например для сбора статистики скачиваний), прошу под кат.
        Три способа отправить пользователю файл и не повесить сервер
      • Пассивная XSS на mail.ru и готовый exploit

        Делать было нечего, дело было вечером.

        Сидел как-то раз, обычный ничем не выдающийся скрипткидди дома, за своим холодным, но от этого не менее уютным ПК. В последнее время, он любил запихивать во всевозможные формы на форумах и сайтах различный наборов символов, так или иначе предназначенный для одной цели: разрушить html блок поля ввода. Он извращенец, ему доставляло удовольствие помогать людям. Администратор ресурса, будучи поставленным в известность, с его или без его помощи устранял найденную уязвимость, каждый такой случай был для него epic WIN.

        Но этот вечер был необычным, потому что он не пошел на очередной форум, или частный сайт, он открыл mail.ru и подумал, почему нет?
        Читать дальше →
      • The Modal — правильные модальные окна

          Очень часто модальные окна и диалоги делаются при помощи плагинов jQuery. Например, SimpleModal или jqModal. К сожалению, все они, в варианте по умолчанию, работают неправильно.

          Что же такое «правильно»?

          Модальное окно по определению блокирует работу пользователя с родительским окном до тех пор, пока пользователь его не закроет. То есть:

          1. Пользователю нельзя позволять прокручивать страницу под ним.
          2. При этом, если содержимого в модальном окне очень много, нужно позволить прокручивать содержимое.


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

          Чтобы не мучать вас заранее деталями реализации, покажу сначала демо плагина jQuery: http://rmcreative.ru/playground/modals_plugin/demo.html.

          Ну а теперь немного про реализацию.
          Читать дальше →
        • Подмена XMLHttpRequest или как не трогая тонны готового js-кода изменить поведение всех ajax-запросов

          Здравствуйте, в этой маленькой заметке расскажу немного про ООП в JS, объект XMLHttpRequest, паттерн прокси, и дружелюбие джаваскрипта в этом плане.

          Была у меня сегодня такая задача — есть проект, который довольно активно использует ajax-запросы, но вот проблема — бекенд у нас так устроен, что разаутентифицирует пользователя, если тот не активен в течение, скажем, получаса. В итоге случалось такое, что пользователь, пытаясь совершить какое-то действие, которое использует аякс, не мог его совершить (уж извините за тавтологию), нужно было решить эту проблему.
          Читать дальше →
        • Визуальный язык программирования Google Blockly

            Blockly — визуальный язык программирования с веб-интерфейсом. Создание программы осуществляется путём соединения блоков.



            Некоторые демки:
            Maze — используйте Blockly, чтобы пройти лабиринт.
            Code — экспорт программы Blockly в JavaScript, Dart, Python или XML.
            Читать дальше →
          • Разработка электроники и фриланс

            Доброго времени суток, уважаемое сообщество!

            Спешу поделиться с Вами своим опытом выполнения разработки электроники фрилансером. Итак, рассказываем по порядку…

            Я занимаюсь разработкой электроники последние 7 лет. Основное место работы – предприятие выпускающее различные охранно-пожарные панели и сопутствующие изделия. На предприятие пришел молодым и неопытным студентом 3-го курса. В течение последующих 2-3 лет мне удалось выполнить несколько проектов, запущенных в производство. Среди них были как обновленные версии ранее выпускающихся изделий, так и новые разработки. Со временем я полностью погрузился в сопровождение производства (более 10000 изделий ежегодно), поэтому новых разработок не начиналось.

            Из-за скуки я начал разными способами искать заказы на разработку различных устройств. Почему бы и нет? Ведь так много людей с оригинальными идеями отличных устройств – нужно лишь встретиться и сделать проект. Для этого я зарегистрировался на известной фриланс-бирже Рунета, а также разослал предложения различным предприятиям.
            Читать дальше →
          • Dribbble Meetup №1 в Москве

              20 апреля в Москве прошел первый российский Dribbble Meetup. На этой неформальной конференции для дизайнеров выступили десяток сильных и интересных специалистов, представленных в одной из главных тематических социальных сетей Dribbble. Это Алишер Якупов (Одноклассники), Денис Пахалюк (Ramotion), Павел Грозян и Сергей Кудряшов (MacPaw), Дмитрий Провоторов (Мануфактура), Игорь Степахин (Fidel Solutions), Роман Храмов (Cuberto), Александр Киров (Mail.Ru Group), Сергей Рачок и Виталий Трикоз (SODA). Было много практически полезных рассказов и историй из жизни компаний с живым и веселым диалогом со слушателями.

              Читать дальше →
            • Оптимизация связки Nginx, Apache, PHP, MySql

                Неожиданно поступила задача разобраться почему определенный сайт не работает столь быстро сколь хочется. В основе его CakePHP, в связке с Apache и MySQL. В статье описание процесса поиска узких мест и приведение в порядок на столько, на сколько это возможно.

                Название сайта светить не буду — думаю, программисты сами узнают. Скажу лишь, что это приложение для социальной сети нагрузкой 70-150 тысяч посетителей в обычное время. Все усложняется тем, что периодически производится рекламная рассылка, которая привлекает около 200-300 тысяч посетителей за пару часов.

                Итак, под катом описание всей борьбы на протяжении 4 дней.
                Читать дальше →
              • Кластеризация на клиенте или как показать 10000 точек на карте

                  Существует несколько типов проектов,
                  для которых вывод геоинформации является
                  необходимым: сайты по недвижимости, каталоги компаний,
                  каталоги достопримечательностей, доски объявлений и другие.
                  Для этих сайтов я решил разработать плагин к goolge API 3 и Яндекс API 2.

                  Основные требования:
                  1. Возможность подключения без глубокой подготовки данных на сервере, а именно, используя только уже имеющиеся географические координаты объектов.
                  2. Простой протокол подготовки и передачи данных.
                  3. Быстрый клиентский кластеризатор с ДВУМЯ типами меток: кластер и группа. Кластер — несколько объектов, расположенных рядом. При клике кластер “раскрывается”, то есть увеличивает зум пока объекты будут на расстоянии, большем чем расстояние кластеризации. Группа — несколько объектов в одной точке (на минимальном расстоянии). При клике на группу на любом зуме выводится список объектов в группе.
                  4. Отображение до 10000 точек с использованием кластеризатора.
                  5. Отображение в ie7, на мобильных устройствах (iPad первого поколения).
                  6. Шаблонизация на клиенте двух инфоокон — группового кластера и самого объекта.
                  7. Использование спрайта для меток.
                  8. Возможность использования неограниченного количества типов меток (иконок) для разных типов объектов.
                  9. Возможность использования нескольких размеров иконки для разного диапазона зума.

                  В статье я опишу несколько подходов, которые были использованы для реализации этого плагина.
                  Читать дальше →
                • Российская аудиокарта: моя попытка производства и краудфандинга

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



                    В суперсовременной и инновационной России большую часть «российской» техники производят страны юго-восточной Азии. Мне же хотелось попробовать производить что-то свое на российских мощностях. Заниматься этим у нас очень дорого, потому что все «гражданские» технологии у нас давно заброшены. Но если к этому процессу присоединятся другие пассионарные люди, мы можем прийти к тому, что заниматься производством у нас будет не менее выгодно, чем перекупкой. В конце концов, производя здесь, предприниматель получает более качественное самоощущение, национальную гордость, что ли.
                    Читать дальше →
                  • OAuth на практике. Аутентификация и авторизация пользователей сайта через популярные социалки

                      Думаю, не мне одному чрезвычайно надоели ресурсы, требующие регистрации по каждому поводу и без. С обязательной капчей, которая правильно введется только с пятого раза, с подтверждением по е-мейлу, которое обязательно свалится в спам и то — только через сутки. Придумывать каждый раз новую пару логин-пароль — забудется, вводить одно и то же на всех сайтах — небезопасно. Местами прокатывают пары вида «qwerty:qwerty» или «login:password», но, увы, далеко не везде. Надоело. Не счесть, сколько раз я, увидев надпись «только зарегистрированный пользователь может ****», просто кривился и закрывал вкладку, чтобы больше ни разу на этот сайт не заходить. Неужели администраторы ресурсов сами этого не понимают?
                      Читать дальше →
                    • Что интересного я узнал на DevConf 2012

                        Привет, Хабрасообщество!
                        По следам недавно прошедшей конференции DevConf 2012 хочу поделиться записями из своего блокнота, которые показались лично мне наиболее интересными и полезными. Возможно, кому-то все это хорошо известно. Поскольку доклады шли одновременно в нескольких залах, то все их посетить было невозможно, поэтому ваши дополнения с удовольствием почитаю в комментариях.
                        Темы, которые прежде всего интересовали меня, это:
                        — развертывание системы и непрерывная интеграция (Continuous Integration)
                        — PHP 5.4, PHPUnit, Yii
                        — тестирование в javascript
                        Читать дальше →
                      • Реализация шаблона Identity Map в Yii Framework

                        Доброго времени суток, хабрасообщество!

                        Проблема


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

                        Например, допустим, у нас есть некоторая модель ActiveRecord — Expence и вот такой код:
                        $modelOne = Expence::model()->findByPk(10);
                        $modelTwo = Expence::model()->findByPk(10);
                        var_dump($modelOne === $modelTwo); // Вернет false

                        Таким образом, меняя одну модель мы никоим образом не затронем вторую(что логично, так как они ссылаются на разные объекты).
                        $modelOne->someField = "Data";
                        $modelOne->save();
                        /// ...какой-то код...
                        echo $modelTwo->someField; // Содержит старое значение
                        $modelTwo->save(); // Затираем ранее записаные данные
                        

                        Читать дальше →
                      • Image Catalyst 2.2

                          Здравствуй Хабр!
                          Adobe Photoshop CS5 (Save For Web) — 53,8 КБ Image Catalyst (Xtreme) — 46,0 КБ
                          Image Catalyst — программа для комплексной оптимизации/сжатии изображений формата PNG и JPEG без потери качества в рамках того же формата.
                          Читать дальше →
                        • Архитектура Битрикс24 — взгляд изнутри



                            12 апреля мы запустили большой новый проект — «Битрикс24»: социальный интранет, SaaS-сервис, объединяющий в себе классические инструменты командной работы (календари, задачи, CRM, работа с документами) и социальные коммуникации («лайки», социальный поиск, мгновенные сообщения и многое другое).

                            Первый прототип этого сервиса был запущен еще в феврале прошлого года. На одном сервере, без каких-либо особенных возможностей для масштабирования, без резервирования на уровне датацентра… :) Только концепт.

                            Этой публикацией мы откроем серию постов, в которых хотели бы рассказать вам, что было сделано за год разработки, какой получилась итоговая архитектура проекта; что мы делаем для того, чтобы обеспечить настоящие «24» часа работы проекта в сутки; какие изменения пришлось сделать в платформе разработки «1С-Битрикс»; особенности работы в облаке Amazon и многое другое.

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

                            * * *

                            Итак, первый пост — об архитектуре проекта в целом. Поехали!
                            Читать дальше →
                          • Один конфиг Nginx для работы с кучей разных сайтов

                              Если вам приходилось настраивать Nginx под нужды веб-студии, сеошников или киберсквоттеров ;), то уже наверняка знаете про символ подчёркивания в качестве server_name. Тем не менее несколько других небесполезных приёмчиков из моего примера почерпнуть можно.

                              Чтоб создать новый сайт на сервере с такой конфигурацией, достаточно создать директорию с именем сайта и залить в неё содержимое. А конфигурационный файл остаётся единственным и неизменным.

                              Конфиг делает следующее:
                              1. Отрезает «www» от адреса, дабы сервер нашел директорию с сайтом невзирая на эти буквы в URL.
                              2. Выдаёт отдельную страничку при запросе несуществующего сайта.
                              3. Делает стандартный редирект на index.php в корне сайта при запросе несуществующего пути.
                              4. Перенаправляет запрос на php-fpm при вызове .php файлов.
                              5. Добавляет возможность обработки .htm(l) файлов как PHP.

                              Читать дальше →
                            • Стандарт open source документации

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

                              Мотивация


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

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

                              Во всяком случае, это только первый черновик стандарта, который я предлагаю. Комментарии приветствуются!

                              Читать дальше →
                            • За гранью Хабра (список изданий)

                                Этот пост воодушевлен и является логическим продолжением недавно размещенного здесь материала «Хабр vs TechCrunch». Сам я с его авторами никак не связан, но выражаю им большую благодарность за то, что поделились своим опытом.

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

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



                                Читать дальше →
                              • Проверка соблюдения стандартов кодирования РHP через git

                                В разработке проекта зачастую принимают участие разработчики разного уровня. Это приводит к тому, что нет строгого формата написания кода. За качеством кода на проекте приходится постоянно следить старшим разработчикам и это отнимает у них кучу времени.

                                Для того чтобы наказать говнокодеров облегчить страдания тех, кто делает ревью кода, можно использовать автоматические средства проверки кода, которые всем давно известны. Это PEAR и PHP Code Sniffer.
                                Читать дальше →