• Простой геокодер

      Несколько раз приходилось сталкиваться с необходимостью загрузить N десятков точек на Карту Google. Плюс еще знакомые спрашивали как это сделать. Самое простое что сейчас предлагает Google — импортировать файл KML, KMZ, или GeoRSS. Вопрос только один. Где взять такой файл? Как его быстро сделать обычному пользователю?

      Пинком к действию стал пост в сообществе ru_google.
      Читать дальше →
    • Выбор дней рождения на MySQL + мелочи

        Дали задание: выбрать из базы пользователей, у которых на днях день рождения, — для вывода на главной странице сайта.
        Используем PHP (ZF) & MySQL.

        Поле в нашей БД имеет тип “date”, что уже хорошо. Задание простое, начал писать, …
        Быстрее, думаю, погуглить, зачем велосипед изобретать, явно уже решалось сотни раз.
        Посмотрел первый запрос, — неправильно он работает, второй – тоже…
        Нашел правильный, но он оказался таким монстроподобным.
        Удивлению не было предела – некоторые из этих «велосипедов» изобретены в текущем году!
        Читать дальше →
      • Купил новый компьютер? Старый тоже пригодится!

          Так получилось, что я люблю программирование и компьютеры. Поэтому у каждого члена моей семьи было по одному PC. У меня стационарный (Ubuntu), у мамы тоже (Windows XP), а у жены — ноутбук (Windows Vista). Была задача — организовать интернет для всей этой техники. Провайдер мне его отдает по PPTP. Недолго думая (и будучи лентяем) я докупил обычные Ethernet-сетевые карты, вставил на стационарные компы и соединил все компьютеры проводами (если честно, я еще купил WiFi модуль для своего компа, но тупо не смог настроить для ubuntu).

          Шло время, потребности росли (особенно потребности в мобильности рабочего места) и я стал обладателем ноутбука MacBook Pro. Что делать со старым компьютером? Выбрасывать? Было жалко… Ведь почти руками его собирал в течение двух лет. И тогда я решил — будет сервером! Я почистил компьютер и заново поставил туда Ubuntu Linux.
          Читать дальше →
        • Переход с Windows 7 RC на RTM

            Как вы помните, Windows 7 RC прекратит хорошо себя вести в начале весны. Не все знают, что таки можно перейти с RC на RTM без переустановки системы. А я знаю, и с удовольствием расскажу.

            Прежде всего, в ветке HKLM\Software\Microsoft\Windows NT
            в значениях параметров EditionID и ProductName заменить слово Ultimate на слово Enterprise.

            Затем взять образ w7 Enterprise, открыть каким-нибудь редактором, UltraISO или еще чем-то, найти файл Sources\cversion.ini, и в строчке MinClient поставить номер билда поменьше, чем который у Вас сейчас.

            Сохраняем, поджигаем, обновляем.

            P.S. Само собой разумеется, что у Вас есть юридическое право использовать Windows 7 Enterprise RTM. :-)

            Удачного апгрейда.
          • Построение нейронных сетей в php используя FANN, пример реализации

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

            Поскольку данные для анализа формируются в php и мне этот язык сейчас ближе всего, то искалась библиотека с интерфейсом для php. В связи с этим мне порекомендовали FANN (Fast Artificial Neural Network) — открытое программное обеспечение для построения сетей. У этого решения есть апи для 15 языков, так что почти каждый сможет выбрать что-то для себя.

            Пример. Распознавание языка текста на странице

            Для примера возьмем задачу легкую, но недалекую от нашей реальности и от серьезных задач. Допустим есть 1000 документов, на 3-х разных языках. Пусть это будут французский, английский и польский. Наша задача научить нейронную сеть распознавать язык документа. Для этого мы используем самый простой частотный механизм. Но тем не менее его результаты неплохи. Его суть в том, что у каждого языка с разной частотой в тексте встречаются одни и те же символы. Мы подготавливаем 3 больших куска текста для каждого из языков (английский, французкий, польский), посчитаем для каждого символа частоты. Эти данные мы передадим в нейронную сеть, с указанием какой набор частот принадлежит каждому из языков. Дальше нейронная сеть все сделает сама.
            Читать дальше →
          • Защита от ботов, основанная на различии в работе с большими числами в JavaScript и PHP

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

            Итак, обо всем по порядку.
            Читать дальше →
          • Пять способов ускорить запросы API Facebook на практике

              Ни для кого не секрет, что самым узким местом веб-приложений чаще всего являются HTTP-запросы к внешним серверам. Так, время загрузки данных запроса API много больше чем время, необходимое для выполнения большинства самых сложных скриптов веб-приложения.

              За время работы с API Facebook я накопил несколько рецептов оптимизации запросов: как увеличить скорость работы скриптов, уменьшить их количество и ресурсоёмкость.



              Способы, изложенные в этой статье, работают только с API Facebook. Но я не исключаю, что они могут быть применимы и в других сервисах, предоставляющих API.
              Читать дальше →
            • Пишем модуль для Ejabberd

              Если вам нужна нестандартная функциональность от XMPP сервера ejabberd, вы не знаете, как это настроить штатными средствами и не нашли подходящего для этого модуля, то можно написать этот модуль самим.

              Так я решил, когда начальство объявило войну пустой болтовней в jabber-е, для чего необходимо было запретить некоторым пользователям чатица с другими, но разрешить с третьими. И хотя у меня всё ещё есть смутное подозрение, что это можно настроить с помощью списков доступа, я решил написать модуль, которым мне будет удобно пользоваться. Этот модуль и послужит примером для рассказа.
              Читать дальше →
            • Самодельные деревянные устройства

                Некий Matthias Wandel из Канады увлекается созданием различных машин и устройств из дерева.


                Первое устройство, на которое я наткнулся — это устройство созданное с помощью конструктора Lego для постоения рядов доминошный деревянных костяшек.



                Читать дальше →
              • Колоночная верстка

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

                  Плюсы
                  • Есть прижимающийся к полу футер
                  • Колонки меню растягиваются по 100% высоте
                  • Колонок может быть сколько душе угодно
                  • Колонки могут быть как лево- так и правосторонними, а также совмещенными, например 2 справа и 1 слева
                  • Ширина как резиновая, так и фиксированная
                  • Критический минимум хаков
                  • Не используется Javascript
                  • Не используются бекграундовые изображения для создания эффекта колонки
                  • Никаких таблиц
                  • Одинаковый результат в ie5.5, ie6, ie7, ie8, ff3.5, o10, chrome4 (Если у вас не работает в каком-то браузере — отпишитесь, пожалуйста, в комментах. Исправим и приведем к универсальному виду)

                  Минусы
                  • Есть несколько «лишних» блоков. (Я бы и сам рад от них избавиться)
                  • Есть несколько абсолютно-позиционируемых блоков
                  Читать дальше →