• Linux-контейнеры: когда контейнеров становится больше



      В прошлой статье я вкратце рассказал о том, что такое контейнерная виртуализация, LXC в частности, зачем это нужно и как это все по-быстрому настроить.

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

      Читать дальше →
    • Моя маленькая каптча

        Судя по огромному разнообразию каптч проблемы с выбором и установкой уже давно не должно быть, но почему-то даже на серьезных, взрослых проектах их все еще леняться устанавливать или делают такие чудные вещи как «Сколько будет 2+3?».

        Даже если каптча обычного вида, часто ее просто не распознать. Чуствуешь себя андроидом, сдающим экзамен на тест Тьюринга. Казалось бы, что проще — сделайте клик по каптче и она измениться! Но, оказывается, для большинства разработчиков это тоже непосильная задача.

        Помимо мудреных каптч сильно напрягает нежелание разработчиков обрабатывать валидность введенных в форму данных еще до отправки формы. А если учесть, что отправка происходит обычно при запущеной сессии (для каптчи), нажатие кнопки «Назад» в случае ошибки заполнения в IE приводит к очистке полей формы и все приходиться вводить с нуля.

        Вот этих трех зайчиков может убить всего один маленький файлик — captcha.php (завернуто в rar). Подключается он в любую форму вот так:

        ... <? include("captcha.php")?> ....

        И все! С этого момента все поля формы, у которых в id присутствует * (например: ) проверяются на заполненность при субмите формы. Если какое-то из обязательных полей не заполнено (value='' или value=0 для select'а) - форма не будет отправлена, а незаполненные поля будут подсвечены. Проверка кода в каптче тоже проходит до отправки. Клик по каптче приводит к смене комбинации. Тестировалась на IE, Opera, FF, Safari.

        Примеры можно посмотреть здесь: http://sepulka.ru/post, http://gettranslite.com/rus/contacts.html, http://durashka.ru/register.php
      • Какие средства публикации и просмотра фотопанорам существуют для тех, кто не прибегает к услугам внешних хостингов?

          Спору нет: Gigapan, 360 Cities, ViewAt всё это неплохие глобальные сборники и хостинги фотопанорам для публикации и просмотра всеми желающими. О достоинствах 360 Cities многие из нас узнали, разглядывая восьмидесятигигапиксельную панораму Лондона; кроме того, панорамы 360 Cities дней пять назад были включены в фотослой Google Earth. Отдельным слоем в Google Earth показываются и избранные панорамы из Gigapan; другим достоинством Gigapan является флэшёвый демонстратор многомегапиксельных и даже многогигапиксельных фотографий, который может бесплатно размещаться на других сайтах и подкачивает увеличенное изображение по мере нужды (примерно подобно тому, как Google Maps или Google Earth подкачивает свои детальные спутниковые фотографии). Это явное преимущество по сравнению с сайтом 360 Cities (который требует платы за размещение панорам за пределами некоммерческих вебсайтов) и с фотопроигрывателем ViewAt (который сперва подкачивает всю панораму из Сети, и лишь затем начинает показывать её).

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

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

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

          Читать дальше →
        • Граб страниц с помощью WebHarvest

            Задача граба информации с веб страниц, всегда актуальна. Как для какого-то проекта, так и в целях более удобного использования ресурса. Я имею ввиду юзабилити или просто необходимость увидеть данные в другом разрезе. Грабить чужую информацию и использовать ее в коммерческих целях всегда плохо, за это обычно пытаются наказать и наказывают. А в личных целях, использовать ее можно свободно. Это, наверно, можно сравнить с использованием карандаша или цветных маркеров при чтении газет и журналов. Например, если я обвожу объявления то красным, то желтым цветом, а некоторые перечеркиваю жирным, то я просто качественно изменяю отображение информации в нужном для моих задач свете. Но юристов надо бояться.
            Пример использования WebHarvest в жизни
          • 100 OpenSource инструментов для Web-мастера.

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


            Лучшие порталы с открытыми шаблонами сайтов


            В сети есть множество бесплатных шаблонов, но искать подходящий часто может быть очень долго, поэтому мы предлагаем вам посетить сначала следующие четыре портала:
            Читать дальше →
          • Фотошопим на PHP

              Уменьшаем изображение разными библиотеками и сравниваем результат

              Для многих задач автоматической обработки фотографий не подходит качество и функционал библиотеки GD. Поскольку возможности обратиться к Photoshop из PHP или Perl пока не существует, решаем проблему с помощью ImageMagick.

              Речь пойдет о PHP инрефейсе к ImageMagick MagickWand, который в репозитарии Fedora называется php-magickwand. Хочу обратить Ваше внимание, что MagickWand API отличается от классического ImageMagick тем что позволяет работать как с элементами растровой графики, так и с элементами векторной графики.

              Для php есть еще одна реализация интерфейса к ImageMagick, которая называется IMagick, но функционал этой библиотеки, на мой взгляд, уступет MagickWand.


              В первой статье рассмотрим на примерах несколько типичных задач по обработке изображений и сравним результаты с php-gd.



              Читать дальше →
            • Морфологический поиск

                Точный поиск, реализуемый в базах данных это очень хорошо, когда дело касается точных фраз. Но что делать, когда среди документов есть Киевская карта но нету Карты Киева? В дело включаются языковые фильтры.Во-первых уже на лексическом уровне становится сложно оперировать с монолитным блоком текста что-бы учитывать всевозможные перестановки слов и расстояния между ними. Во-вторых, чем глубже копать в язык, тем ясней становится то, что семантический web — невероятно сложная планка для автоматических анализаторов и генераторов каких-то образов и моделей, что уж говорить про то что-бы написать RDF вручную.Морфология изучает изменение формы объектов в разных областях науки (ботанике например). Поэтому есть два пути — либо
                учитывать все формы при поиске, либо вырезать корень слова и искать
                только по нему. Последний способ называется stemming, отличается
                быстротой, простотой и не нуждается в словарях. Именно его используют Битрикс и MS Sharepoint, Sphinx. Проблемы возникают со словами где корень изменчив (бег-бежать, расти-прирост, лев-львица). Я не буду рассказывать про стемминг, посмотрите как это реализовано php с русской морфологией. Меня больше интересуют словари. Национальный корпус русского языка приводит примерно какие характеристики могут иметься у любого слова. Теперь мы плавно подходим к пониманию того что нам необходима современная морфологическая база слов (RMU, AOT), прототип для семантической сети.

                Читать дальше →
              • Памятка для частного предпринимателя в Украине

                  Будучи частным предпринимателем в Украине (единщиком, без наемных работников) и при этом неутомимым раздолбаем поимел некоторые проблемы с Налоговой и Пенсионным фондом связанные, восновном, с несвоевременной сдачей отчетов и т.п.

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

                  Памятку можно скачать в форматах ODT, DOC, RTF, PDF.

                  Памятка подготовлена при участии пользователя Ksysha форума www.chp.com.ua/forums/. За что ей огромное спасибо.

                  © Блогоблог
                • Интегрируем google maps

                    Google maps — отличное средство для картографии и сейчас мы будем интегрировать его себе на сайт благодаря открытому API. Интегрировать будем не только фиксированное положение но и произвольное, а именно — создадим в базе данных таблицу «locations», впишем там поля title, x, y.

                    Теперь нам надо редактировать каждое местоположение. Создадим полотно, где будет отображаться карта.
                    <div id="map" style="width: 250px; height: 250px"> </div>

                    Дальше — прикрутим вызов библиотеки из google. Поскольку я использую smarty, то я передаю ключ разработчика в виде переменной.
                    <script src="http://maps.google.com/maps?file=api&v=2&key={$google_maps_hash}" type="text/javascript"></script>


                    Теперь сделаем функцию, которая будет заниматься всей гразной работой — создавать карту в нашем div элементе, позиционировать согласно заданным координатам, устанавливать bubble. В случае если мы редактируем эти координаты, то функция будет по обратной связи прописывать в скрытые input-поля некоей формы «registration_form» новые координаты перенесённого pin-указателя.
                    <script type="text/javascript">
                    function load_map(x,y,title) {

                    if (GBrowserIsCompatible()) {
                    var map = new GMap2(document.getElementById("map"));
                    map.setCenter(new GLatLng(x, y), 13);
                    map.enableScrollWheelZoom();

                    point = new GLatLng(x, y);
                    marker = new GMarker(point);

                    map.addControl(new GSmallMapControl());
                    map.addControl(new GMapTypeControl());
                    map.addOverlay(marker);
                    marker.openInfoWindowHtml(title);
                    /*
                    var mgr = new GMarkerManager(map);

                    GEvent.addListener(marker, "dragend", function() {
                    //var center = map.getCenter();
                    var strCenter=marker.getPoint();
                    marker.openInfoWindowHtml(document.forms['registration_form'].title.value);
                    document.forms['registration_form'].geo_x.value=strCenter.lat();//arrCenter[0];
                    document.forms['registration_form'].geo_y.value=strCenter.lng();//arrCenter[1];

                    });
                    */
                    }
                    }
                    </script>