понедельник, 23 сентября 2013 г.

Настройки Apache, или как я потерял полчаса своей личной жизни )

Буквально недавно столкнулся с такой ситуацией. Нужно прикрутить mod_rewrite к Апачу на локальной машине. Ну, лезу в его httpd.conf, подключаю нужный .so-шник, в настройках виртуального хоста указываю "AllowOverride All" для того, чтобы подхватывался .htaccess. В сам .htaccess, лежащий в корне локального сайта, пишу для теста нечто такое:

===
RewriteEngine On
RewriteBase  ⁄
RewriteRule ^(.*)% index.php
===

То есть, указываю, что нужно тупо редиректить все запросы на index.php. В index.php
пишу:

==
 <?php
     phpinfo();
 ==

 Стартую Апач, пишу в адресной строке браузера нечто типа http://local.loc/dsfgkjhert и... получаю 500-ую ошибку "Internal server error".
"Что за  (тут нехорошее слово)..", - подумал я )) Сначала проверил еще раз http.conf, затем
httpd-vhosts.conf, затем просмотрел .htaccess. Вроде бы, все в порядке. Нигде никаких ошибок нет. Но почему-то выдает 500-ую ошибку при заходе на локальный домен.
Когда уже собственные мысли на предмет возможной причины ошибки иссякли, полез, разумеется, в google. Ковырялся минут 30, наверное, если не больше. Ничего нового. Все пишут одно и то же. В общем, должно работать, но не работает, почему-то.

А теперь развязка истории. До недавнего времени у меня был установлен Apache 2.2,
и стоял он у меня в Program Files. Устанавливался инсталлятором и им же был впоследствии снесен. Потом я установил Apache 2.4.из zip-архива и поставил его в корень системного раздела. Так вот, после деинсталляции версии 2.2 у него сохранились в Program Files все настроечные каталоги со всеми конфигурационными файлами внутри. Возможно, Apache таким образом беспокоится о том, чтобы пользователь не потерял свои конфигурационные файлы ? Сложно сказать.

Ну, вы уже догадались, наверное, где собака порылась ? ) В общем, не там я настройки Апача правил. Мда. Исправил уже в нужном месте - и все заработало. Возможно, нужно было сразу же в логи лезть, но что-то я не сообразил об этом на тот момент )

Вот такая веселая (и самое главное, что хорошо закончившаяся =) история.



четверг, 5 сентября 2013 г.

Нахождение всех перестановок на PHP в функциональном стиле

Во время недавнего гугления по какому-то поводу попалась мне на глаза заметка, в которой автор приводил реализацию алгоритма получения всех перестановок (permutations) на PHP. Видимо, по той причине, что обработка входного массива выполнялась "по месту", что существенно экономило память,  реализация алгоритма получилась весьма витиеватой. То есть, чтобы разобраться, как он работает, пришлось натурально браться за ручку и бумагу ))

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

вторник, 3 сентября 2013 г.

Решение задачи о поиске двоичного периода числа на Haskell

Не так давно на хабре проскочила заметка, в которой автор описывал задачи, требующие решения для получения доступа на некую зарубежную биржу фриланса. Одна из задач звучала так: имеется некоторое целое число N в диапазоне от 1 до 1,000,000,000. Необходимо найти двоичный период этого числа. Что такое двоичный период ? Это количество символов двоичной последовательности наименьшей длины, которая будучи повторена минимум 2 раза приведет при её зацикливании к получению этого самого числа N на длине двоичного представления N.

На примерах это будет выглядеть так. Двоичный период чисел 1 или 0 не определен, так как двоичная "0" или "1" даже воспроизводя образ чисел 1 или 0 будет повторяться максимум 1 раз.

Двоичный период числа 127 равен 1, так как двоичное представление числа 127 - суть "1111111" (7 единиц), и двоичная последовательность наименьшей длины, которая при зацикливании воссоздаст двоичное представление числа 127 - это 1. А длина двоичного представления единицы тоже равна одному.

Рассмотрим число 955. Двоичное представление его есть "1110111011". Видно, что паттерн "1110" при повторе его 3 раза (третий раз - только первые 2 знака) даст нам полное повторение двоичного представления числа 955. Длина этого паттерна равна 4, а значит и двоичный период тоже равен 4.

Итак, суть понятна. Попробуем решить эту задачу на Haskell.

суббота, 25 августа 2012 г.

Как я устанавливал phpUnit для работы с Yii-фреймворком под WAMP на Windows XP

Начитавшись в умных книжках о пользе тестирования, решил посмотреть на практике, что же это такое. Под PHP очень популярен phpUnit, который позволяет выполнять как модульное, так и функциональное тестирование ПО. Ну а так как я недавно занялся изучением Yii-фреймворка, то заодно решил посмтреть, как этот phpUnit будет работать из-под Yii.. В общем, выкачал исходники phpUnit версии 3.6.12 с гитхаба, настроил в phpUnit.bat путь для php.exe, в php.ini добавил путь к каталога phpUnit в параметр include_path. Запускаю батник phpUnit.bat - получаю кучу сообщений об отсутствии тех или иных php-файлов. Посмотрел в исходниках: действительно, файлы подключаются, а сами они отсутствуют. Загуглил - оказывается, сам phpUnit имеет модульную структуру, и различные модули нужно дополнительно скачивать и помещать в разные каталоги внутрь базового каталога phpUnit. Накачал 8 дополнительных модулей, и после их распаковки в нужные места, а также правки некоторых исходных файлов (некоторые файлы подключались по 2 раза), phpUnit худо-бедно, вроде бы, стал запускаться.

пятница, 27 апреля 2012 г.

Чтение технической литературы


Некоторое время назад заметил, что практически перестал читать книги по всяким IT-вещам. А это не есть хорошо, так как умные книги несут свет в нашу темную жизнь )  То есть, получилось так, что, когда только начал интересоваться компом и всем, что с ним связано, находил какие-то книжки технические и читал их. В то время это были чаще бумажные издания (дома даже что-то лежит по Assembler, Turbo Pascal, Delphi). Даже, помню, регулярно читал журнал "Мир ПК" в нашей местной технической библиотеке. Мда...

Вот. А потом со временем вся эта оффлайновая деятельность как-то сошла на нет. С появлением доступа в Интернет переключился на электронные учебники. Книг, конечно, в Сети очень много. Всяких и разных. Пытался читать их. Но как-то с экрана монитора читать не очень интересно, что ли. Не так, как бумажные книги, во всяком случае. Но все равно что-то там такое читал. Потом появился в моей жизни Хабр ), и на чтение электронных книг времени уже не оставалось. В общем, перестал читать книги вообще. И только вот недавно задумался о том, как это плохо.

Все-таки, в книгах всякие вопросы рассматриваются более глубоко, как правило. В них часто описываются различные фундаментальные вещи, которые редко разжевывают на технических форумах. В общем, решил начать читать снова. Главное в таких случаях - поставить себе цель читать хотя бы несколько страниц в день. То есть, найти в течение дня время для того, чтобы прочитать пару страниц очередной книги. Это не так уж и сложно, как кажется. Ну и конечно, когда книг вокруг очень много, и прочитать хочется сразу все, нужно бороться с соблазном читать одновременно несколько книг ) То есть, книги лучше читать последовательно: прочитал одну - переходи к другой. Лично мое мнение.

В общем, вывод такой: читать техническую литературу - это к добру )




суббота, 31 декабря 2011 г.

С Новым 2012 годом!

Друзья! Вот и подходит к концу 2011 год. В этом году, возможно, не все у нас получалось так, как нам бы хотелось. Что-то мы успели сделать, а что-то так и осталось незавершенным.
Наступает новый 2012 год - год Дракона. Хочется пожелать всем вам, чтобы в новом году вам сопутствовала удача, пожелать вам крепкого здоровья и успехов во всех ваших благих начинаниях. С Новым 2012 годом!

вторник, 20 декабря 2011 г.

Задача о движущихся точках и её решение на языке Haskell

В блогах на сайте free-lance.ru не так давно один человек разместил задачу, условие которой в чуть облагороженном (мной :) виде звучит следующим образом:
===
Имеется N вершин, между ними есть ребра (длину ребер мы задаем сами целым числом). По ребрам ездят точки, которые могут ехать в обе стороны. При нахождении двух точек в одной вершине происходит столкновение. Соответственно, если точки едут по одному ребру навстречу друг другу, тоже произойдет столкновение. Движение точек задано списком вершин, через которые они проходят. Скорости точек равны единице. При
достижении конечной вершины точка исчезает. По заданной конфигурации сети и точек
определить, будет ли столкновение.

===
Попробуем написать решение этой задачи на Haskell.