Разговор с заказчиком

— Я сделал серое яйцо на третьем уровне немного компактнее. вот теперь гадайте, чем это мы занимаемся :)

SAPE: проверка страниц в Yandex

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

Сам SAPE не умеет автоматически исключать подобные страницы (глупо с их стороны). В сети есть несколько скриптов и программок, с помощью которых можно отсеить «плохие» страницы, но мне они чего-то не приглянулись (один платный, второй не заработал :)), так что я написал свой собственный. Его можно запустить как на локальной машине, так и оставить где-нибудь на хостинге, запустив по расписанию.

Чтобы Яндекс не забаннил, в скрипте есть ограничение на количество последовательных проверок. Если, допустим, вы запускаете его каждую минуту, можно ограничить число одновременных проверок 2-4 страницами (в скрипте стоит 2).

На вход скрипту подается файл, в котором перечисленны все страницы, найденные SAPE (его можно скачать с самого SAPE).

<?php
  function getUrlContents($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    $data = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    curl_close($ch);

    return array($httpCode, $data, $contentType);
  }

  function check($url) {
    $ya = "http://www.yandex.ru/yandsearch?rpt=rad&text=".
        urlencode("url=\"$url\" | url=\"www.$url\"");
    echo "Request $ya\n\n";
    list($code, $data, $contentType) = getUrlContents($ya);
    $data = mb_convert_encoding($data, 'windows-1251', 'utf-8');
    return preg_match('/Искомая комбинация слов нигде не встречается/', $data);
  }

  $home = './';

  if (file_exists($home.'pages.ser'))
    $pages = unserialize(file_get_contents($home.'pages.ser'));
  else 
    $pages = file($home.'site_pages.xls');

  $log = fopen($home.'pages.log', 'a');
  for($i = 0; $i < 2; $i++) {
    $page = preg_replace('/\/?\r?\n?$/', '', array_shift($pages));
    $url = substr($page, 7, strlen($page) - 7);
    echo 'Check '.$url.' ';
    if (check($url)) {
      fwrite($log, $page."\n");
      echo "missing\n";
    } else
      echo "exists\n";
  }
  fclose($log);

  $f = fopen($home.'pages.ser', 'w');
  fwrite($f, serialize($pages));
  fclose($f);
?>

Как вы уже, наверно, поняли, страницы, которые надо удалить из SAPE, соберутся в файле pages.log. Да, чтобы все заработало, нужно сохранить скрипт в файл с кодировкой windows-1251 или подправить строку, которая с яндекса получает данные.

Делать из этого сервис сейчас нет времени, но в будущем, может быть :).

Будут вопросы, спрашивайте в комментариях.

№ 217. Смазка отношений

№ 217. Смазка отношений. Гуру менеджмента Питер Друкер говорил, что хорошие отношения — смазка совместной офисной деятельности. Представьте офис, где все друг другу улыбаются. Представьте офис, где люди говорят «Доброе утро» своим коллегам, спрашивают о пасхальных выходных, и все общаются, поднимаясь в лифте. Похоже на ваш офис? Если нет, почему бы вам не попробовать делать все эти вещи в течение недели и посмотреть, что произойдет. Давайте, выходите уже из вашей зоны комфорта.

-- Дарси, Гейл и Джуди

Пока вы сегодня работали...



Но завтра тоже будет хорошая погода, не прозевайте ;-)

Опасная клинето-ориентированность, или вторая история про девушку

Я вспомнил, о чем хотел рассказать в прошлый раз. Слушайте :).

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

Было где-то часов 12 ночи. Мы встретились на длинной дорожке как раз между нашими домами и сначала стояли на месте, а потом стали медленно идти в сторону ее дома — была зима, и на месте стоять было холодно. Дойдя до ее подъезда, мы остановились, и она еще несколько минут рассказывала про всякие пожелания по поводу перевода.

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

В районе, где я жил, было довольно много гопоты (кому интересны подробности, читайте мою первую книгу ;-), так что получить ночью на улицы пюздюлей было раз плюнуть. Впрочем, обычно гопота меня не трогала, потому что взять с меня было практически нечего (мобилок тогда еще не было, а семки я не люблю :), да и дружелюбием я не отличался :). Но тут, тем не менее, кто-то упорно пялился мне в спину.

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

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

Мы поговорили еще пару минут. За спиной уже слышалось нервное переступание с ноги на ногу (погода, как я уже сказал, была не особо теплой :). Тем временем девушка закончила давать инструкции, выдала мне немецкую книжку, и мы стали прощаться.

Сказав «до свидания», я спокойно развернулся (спешить было некуда — если мои тайные воздыхатели прождали пять минут, нападать они явно не торопились). В метре от меня стояли три замерзших человека. Одного из них я где-то видел раньше, но он, похоже, меня не узнал. На гопников они были не сильно похожи. Я пошел прямо на них — не для атаки, а потому что мне нужно было в ту сторону :).

Тот, что был в центре срывающимся голосом (совсем чувак замерз :) нервно спросил:
— Уже уходишь?
И немного двинулся в мою сторону, закрывая проход. Еще мгновение, и чуваку пришлось бы жить с гелевой ручкой в голове, но тут голос подала клиентка, которая еще не успела уйти в парадную:
— Сергей, пропусти человека!.
«Вовремя сказала», подумал я про себя, отодвинул замерзщего чувака плечом и бурнкул в ответ:
— Да, уже ухожу.
И пошел домой.

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

Но с тех пор я на всякий случай стал назначать встречи с клиентами в людных местах в дневное время. Мало ли, что может случиться… На всех ручек-то не напасешься :).

(Хотите еще историй? Могу вспомнить чего-нибудь. Клиенты у нас тогда были один пуще другого. :)))

Чего вам не хватает чтобы...

Привет!

Часто для реализации какой-нибудь идеи или проекта не хватает какой-нибудь составляющей: денег, знающих людей, времени, энтузиазма,...

Т.к. Outcorp обладает практически неисчерпаемыми ресурсами, мне пришла в голову мысль, что мы можем дополнить ваш проект недостающими составляющими (для общего блага).

Скажите, чего вам не хватает?

№ 216. Потеря памяти

№ 216. Потеря памяти. Кто не бывал в такой неудобной ситуации? Кто-то представляется, и мы говорим: «Рад познакомиться», а в ответ: «Вообще-то мы уже знакомы». Угумс, где бы найти камень, под который можно спрятаться! Но, серьезно, что делать дальше? Простейший способ немедленно компенсировать бестактность, ответив: «Ах да, точно, извините!». Другой вариант: «Да, точно, припоминаю. Мы встречались у…». Нужна какая-то страховка от таких ситуаций. Вместо «Рад познакомиться» можно сказать «Рад вас видеть». Но что если вы не можете вспомнить? Лучшая стратегия — быть откровенным: «Не могу вспомнить, где мы встречались прежде?». И никаких излишних извинений.

-- Дарси, Гейл и Джуди

Про девушек, или как "вырубить" ГАИшника :)

«Но я же Вас даже не видела ни разу. Хотя, если закажете на месяц, то давайте сегодня часов в десять. Только у Вас дома, а то у меня тетка гостит».

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

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

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

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

Когда встреча уже была практически окончена, девушка повернулась ко мне и проникновенно взглянула в глаза («Ну вот, опять начинается», подумал я, «Сейчас начнет говорить, что у нее денег нет» :) и произнесла:
— А вы не думали начать петь в хоре?

Вопрос меня просто вырубил :)). «Каком еще, блин, хоре?», думал я про себя, уставившись на нее.
— Вам бы это очень помогло. Вы бы стали гораздо свободнее себя чувствовать и разговаривать.

«Я тут околею от холода сейчас. И описаюсь. 30 секунд, отсчет пошел», думал я про себя.

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

С тех пор я иногда использую этот вопрос про хор, когда нужно очень быстро «вырубить» собеседника :). Почти всегда срабатывает, особенно с ГАИшниками, попробуйте :).

Вот балда, забыл вторую историю... Ладно, вспомню, расскажу :).

π

С праздником! ;-)

Самое время

покупать акции, тьфу, менять работу. Рынок снова пошел в рост. Но нужно торопиться, скоро все обвалится :).

Дилберт по-русски

«Я тону, и обезъяны, одетые спасателями, бросают мне наковальни».

Это даже круче, чем моя книга про мотивацию :))

5 лет назад, забавно

В Питере есть газета «Невское время», в которой давно публикует свои статьи наш большой друг Маша Кингисепп. В прошлом году у газеты поменялся сайт, и вот у меня наконец-то дошли руки, чтобы обновить ссылки на статьи в резюме Маши (к слову, веб-дилетанты, что делают сайт газеты сами не позаботились, чтобы старые ссылки работали, ну да и фиг с ними, не об этом сейчас речь :).

И вот, последовательно обновляя ссылки, 2001, 2002,... я дошел до 11 марта 2003 года. Это было ровно пять лет назад. Смотрите, насколько события, о которых писала газета «Невское время» (и которые происходили в мире), потускнели или стали абсолютно незначимыми (хотя тогда они, наверно были ужасно важными, раз о них написали в газете):
— Все давным-давно забыли, что у Питера было какое-то 300-летие и что с этим были связаны какие-то проблемы (КТО ОПЛАТИТ ИСХОД-2003?, ЮБИЛЕЙ БЕЗ БОМЖЕЙ). — Кто-нибудь, кроме самого Эдуарда Шеварнадзе помнит, об Эдуарде Шеварнадзе? (В ТБИЛИСИ ПРЕДЛОЖИЛИ - В СУХУМИ ДУМАЮТ).

Некоторые статьи вызывают улыбку:
Курс доллара, страшно подумать, 31.59 и, ну надо же, снижается :).

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

Какие-то события больше никогда не повторятся:
СОФИКО В ПЕТЕРБУРГЕ.

Но, по большому счету, ничего не меняется. Мы все в Матрице.

Так что, «выбросить компьютеры и раздеться», возможно, не такой уж плохой совет ;-)).

№ 215. Shepa-навык

№ 215. Shepa-навык. Как читатель этих заметок, возможно, вы знаете, что означает слово “shepa” (“Shepa Learning” — название компании Дарси — автора этих заметок, прим. пер.). В переводе с тибетского это означает «сознание, понимание». Как вы улучшаете вашу сетевую осознанность на работе? Знайте, что всегда есть возможность наладить связь со всеми вашими коллегами. В офисном лифте, проходя мимо столов ваших коллег на пути к рабочему месту, ожидая очереди у кофейного автомата. Откройте уже газа, наконец. Построение внутренней сети такое же важное занятие, как и внешней.

--Дарси, Гейл и Джуди

С Пр 8 М :)

Все сбудется, все получится ;-)

Я еле откопал их из-под снега :).

№ 214. Щека к щеке

№ 214. Щека к щеке. Вы когда-нибудь задумывались, как близко вы должны стоять к кому-нибудь при встрече? Согласно исследованию антрополога Эдварда Холла, опубликованному в “Psychology Today”: «Ближе 80 см — для самых близких людей, полтора метра — для хороших друзей и все остальное пространство для прочих встречных-поперечных». Такое исследование называется проксемикой. Нормы расстояний для разных культур и сред различаются. Например, в некоторых странах Латинской Америки люди комфортно себя чувствуют и при более близких расстояниях, в то время как скандинавы любят оставлять чуть больше пространства.

-- Дарси, Гейл и Джуди

№ 213. Предупреждены и связаны

№ 213. Предупреждены и связаны. Есть пара отличных способов всегда оставаться на связи: использовать Google Alerts и Plaxo. С помощью Алертс можно получать по e-mail регулярные обновления результатов поиска по имени или теме. Плакса же будет присылать блоги или статьи, написанные людьми из вашей базы данных. Не забудьте, если вы не хотите, чтобы все ваши друзья по Плаксе получали уведомления о вашем дне рождения, просто не указывайте его.

-- Дарси, Гейл и Джуди

Прорвало

Затишье, длившееся с начала года, внезапно закончилось. За последнюю неделю мне предложили 6 новых проектов:

  1. Работа в мегаофигенном проекте, о котором я даже рассказать не могу, потому что на днях подписал NDA :). Но это что-то из разряда "Гугль ляжет, когда мы встанем".
  2. Java-проект на JBoss Seam (здравствуй, атрибутное программирование и неявное связывание! Блю-э-э) для системы логистики.
  3. Java-проект на JBoss для системы билинга.
  4. Пока неизвестный проект от Embria, о которой давно не было слышно (рад, что у них все хорошо - даже новый офис готов :)
  5. Web 2.0 проект, чтоб отрейтинговать всех и вся, для еще одних моих знакомых.
  6. Рестарт с редизайном сайта одного малоизвестного в России, но известного в мире банка.
  7. и, кажется, еще кто-то звонил, пока я спал :)

И что, спрашивается, с этим делать? :) Открыть, что ли аутсорсинговую компанию?

P.S. Кстати, на тему JBoss, Agile, frameworks и прочего. Совсем недавно вышла неплохая книга на эту тему: Гибкая разработка приложений на Java с помощью Spring, Hibernate и Eclipse (но, все равно, фрэймворки - это зло :)

Fuck you frameworks

Framework’и — это зло.

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

Потом framework выкладывают куда-нибудь на sourceforge, где им по недомыслию начинают пользоваться другие люди. Так образуется сообщество подсевших на framework (когда половина проекта уже сделана с использованием этого кала, очень сложно решиться отказаться от него). Если неосторожных оказалось слишком много, вскоре выйдет Framework 2.0. Это уже полная вешалка, потому что он будет использовать все последние технологии, содержать груду хэлпов, требовать инсталляции сопутствующих библиотек, содержать сэмплы и весить не менее 100 Мбайт.

Гики (geeks) — странный народ, и часто ради красоты архитектуры готовы на многое. Но они знают, на что идут. Следом за гиками несется орда индусов и прочих аутсорсеров, которые совершенно без разбора заглатывают в свои проекты модные фрэймворки, чтобы снять с заказчиков еще миллион баксов на красивое название в технологическом описании проекта.

Если framework не умер в зачатке 1.0, у него есть все шансы дорасти до третьей версии. Это уже полный трындец, потому что к этой стадии к проекту примыкают несколько крутых сообществ, спонсируемых крупными компаниями типа Sun или IBM или чего поменьше. Каждая компания старается протолкнуть во framework собственные идеи, из-за чего он превращается в огромное раздутое осиное гнездо, полное полудохлых пчел, у которых, тем не менее, хватает сил, чтобы выпустить жало с ядом в неосторожно запущенные во framework руки.

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

Выводы:

  1. Использовать базовые возможности языков (которые обычно более чем достаточны для ЛЮБЫХ приложений).
  2. Жить своим умом, не копируя красивых решений, сулящих быстрый результат (вам все равно придется с ними трахаться — но уже потом, когда изменить что-либо будет невозможно).
  3. Если ваш четырехстраничный сайт требует 150 Мбайт библиотек, значит мои советы запоздали ;-).

Предлагаю организовать движение «Свободу от API!».