Комбинаторика, нахождение слагаемых по сумме

Я начинал свой программистский путь с выполнения лаб по Delphi для друга и желания замутить свой футбольный менеджер. С первым у меня всё получилось, и товарищ благополучно отстрелялся, а с футбольным менеджером не вышло и вряд ли получится, потому что я теперь осознаю что не смогу сделать графический показ матча, как у конкурентов. Но у той мечты есть положительный момент — я столкнулся с комбинаторикой.

Вот один из примеров, служит для нахождения слагаемых по известной сумме. Алгоритм вроде бы не совсем мой, а переписан с варианта на pascal.

$parts = array(0, 1, 2, 3, 4, 5, 7, 8, 9);
rsort($parts);
$sum = 23;
var_dump(findSummand($sum, $parts));
function findSummand($sum, $parts, $depth = 0) {
    static $args = array();
    foreach ($parts as $k => $part) {
        if ($part == $sum) {
            $args[$depth] = $part;
            return true;
        }
        if ($part < $sum) {
            $args[$depth] = $part;
            if (findSummand($sum - $part, array_slice($parts, $k + 1), $depth + 1)) {
                if ($depth == 0) {
                    return $args;
                }
                return true;
            }
        }
    }
    if ($depth == 0) {
        return 'Решение не найдено';
    }
}

Этот алгоритм остался бы у меня в закромах, если бы не случайный вопрос на форуме phpclub. Да и руки давно не доходили до блога, решил совместить.

Ciklum PHP Saturday

Я до сих пор не могу в поверить, но ЭТО случилось — я побывал на первой белорусской конференции веб разработчиков, где мне ВСЁ понравилось. Мне прямо сейчас нужно активно работать и нагонять время потерянное в отпуске, но не могу сдержаться и буду писать отчёт о Ciklum PHP Saturday. Это встреча php разработчиков, которая прошла в Минске 13 августа 2011 года. Continue reading

Убиваем плохой плагин без загрузки netbeans

Недавно сделал большую глупость и установил на netbeans 7.0 плагин для поддержки smarty. Раньше пользховался этим очень хорошим плагином, но толи в новой версии netbean ситуация изменилась, толи плагин так испортился. В общем, после установки ничего не подхватилось, решил перегрузить IDE и приплыли, загрузить по новому не получилось, примерно на 70% индикатора загрузки процесс остановился.

Бросился в интернеты, искать как загрузить netbeans в режиме safe mode, чтобы не загружались все плагины и можно было в настройках отключить бажный. Ничего не нашёл. Пришлось выбрать иной путь и покопаться в конфигах, благо они в xml.

Делюсь навыком отключения плагина в netbeans через конфиги. Задим в папочку пользователя и следуем по пути .netbeans\7.0\config\Modules\ там и находим наш плагин, открываем в редакторе и видим такую структуру

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//NetBeans//DTD Module Status 1.0//EN"
                        "http://www.netbeans.org/dtds/module-status-1_0.dtd">
<module name="org.netbeans.modules.php.smarty">
    <param name="autoload">false</param>
    <param name="eager">false</param>
    <param name="enabled">true</param>
    <param name="jar">modules/org-netbeans-modules-php-smarty.jar</param>
    <param name="reloadable">false</param>
</module>

Соответственно нужный нам параметр enable выставляем в false и спокойно загружаемся. После загрузки я опять активировал плагин и больше проблем с загрузкой не было. Но вот плагин так и не подхватил tpl, даже когда создавал новый через визард и выбирал smarty template. В итоге пришлось отказаться от него. Благо у меня всего 1 проект со smarty.

Тестовое задание и вопросы на собеседовании для программиста

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

Не очень то хочется писать своё ИМХО и получать ярлык «недооценённого гения», но вот приведу очень хороший комментарий, с который совпадает с моими наблюдениями. Читайте под катом. Continue reading

Отчёт о «Всемирном дне юзабилити» в Минске

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

Конференция получилась значительно лучше, чем я скептически ожидал. Организаторы и докладчики молодцы, даже те, кого буду критиковать.

Continue reading

Учёт времени работы

Иногда приходится работать на фрилансе, причём с проектами, время выполнения которых неизвестно или трудно высчитываемо. Для пользователь фриланс биржи oDesc есть удобная утилита для контроля времени. Суть довольно проста: садишься работать, включаешь таймер, время тикает и система наблюдает за тобой, делает скриншоты, смотрит активность кликов мышкой, нажатия на клавиши клавиатуры. В итоге у заказчика есть некая картина того, чем ты занимался всё это время. Continue reading

PHP для новичков

Уже устал читать вопросы: «что читать новичку?», «с чего начинать изучение php«. Поэтому постараюсь дать ответы на основании накопленного опыта.

Ответ номер раз — если Вы задаёте подобные вопросы на формах, то Вам следует сменить профессию. PHP это не самая оплачиваемая, не самая лёгкая и просто не самая профессия. Без умения пользоваться гуглом и прочими интернет проектами с кучей информации в программировании делать нечего. Continue reading

Рабочее место программиста

В предыдущей статье вскользь упомянул об сервере убунте и подумал, что не мешало бы рассказать, как я вообще обустроился, чем пользуюсь для разработки.

Очень долго программировал дома на стареньком Duron с каплей оперативки и только недавно перешёл на новое железо — ноутбук тошиба. Очень удобно таскать всюду с собой, радуюсь, что взял всего 15.4 дюйма, но с windows 7 не хватает высоты. Если перетащить панель задач в право и сделать вертикальной, то не влазят все значки. Нужно выбраться и докупить монитор отдельно.

Ну а теперь, о наборе софта. Continue reading

Красивый var_dump с xdebug

Как всякий порядочный программист я пользуюсь отладчиком под PHP, коим является Xdebug. Но сейчас речь пойдёт не об отладке, а о «сахаре», который идёт в комплекте с xdebug. Очень удобным является красивое и более информативное оформление вывода ошибок и var_dump(). Но на моей ubunta server 10.04 вывод xdebug стал не нормальным, без оформления и раскраски. Я долго грешил на сам xdebug, комался в настройках, но всё оказалось проще: идём в /etc/php5/apache2/php.ini и ищем строку html_errors=Off, меняем её на html_errors=On, рестарт апача и благодать снова снизошла на нас.

Класс запроса — Request

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

RewriteEngine on
RewriteRule !^(p/|favicon\.ico|robots\.txt|sitemap\.xml|sitemap\.xml\.tgz) index.php [L]

Теперь мы будем перенаправлять на index.php всё, кроме запросов в папку p(публичную), и на файлы favicon.ico, robots.txt, sitemap.xml. Теперь мы стали более дружественными к поисковикам и брат seoшник не будет нас проклинать.
Continue reading