хардварные проблемы софтварно не решаются?

Пару месяцев назад я стал владельцем новенького ноутбука. И поскольку разработчики сВисты приложили максимальные усилия к тому,
чтобы пользоваться их детищем стало невыносимо я решил вопрос довольно радикально – установил Slackware, собрал всё что нажито непосильным трудом в ~ и стал жить припеваючи. Скучно не было (если трудностей не будет – мы себе их создаём).
Проблем было много. Интересных и не очень. Но вчера столкнулся с особо любопытным случаем:

Ситуация – разъём для наушников. Втыкаю в него jack. А динамики продолжают вещать. Громко и жизнерадостно. Первая мысль – ну йокарный бабай, купил кривой удлинитель – попробовал другой: звук и в наушниках и динамиках, вторая – мазафакашыт, раздраконил разъём.
Третья – а он вообще работал когда-нибудь? В итоге ворох мыслей привёл к тому, что я перезагрузился в сВисту – там звук, как и задумано, раздаётся только из наушников.

До того момента я был уверен (да и большинство тех, кто дочитал до этой строки, наверное тоже пока уверены) что динамики отключаются МЕХАНИЧЕСКИ – тот самый jack разрывает цепь, приподнимая контакт. Ан нет – наука не стоит на месте.

P.S.
Собственно ларчик просто открывался (открывался в документации с исходниками ядра) – нужно было в modprobe.conf добавить нужный option model= для моей карты (какая именно модель нужна я узнал из документации, найдя там свой кодек)

Update:
А вот рецепт для freebsd.

04.05.08  |   | стань первым

Y2K38

Ожидаемый коллапс электронного пространства в y2k так и не состоялся, а следующий намечен на далёкий 2038-ой год.
Но такой ли он далёкий? Буквально сегодня пришлось столкнуться лицом к лицу с нависшей над миром угрозой.
В разрабатываемой системе все манипуляции с датами проводились через преобразование в unix timestamp и последующим его форматированием штатными средствами php (strtotime, mktime, strftime, date) и вся эта хрупкая конструкция разлетелась, когда вдруг возникла дата 01.01.2059. Нет, это не сумашедшие бета-тестеры и не опечатка – это оказался срок годности пива действия паспорта. Казалось выхода нет и человеку надо будет менять паспорт, но решение всё же нашлось: ADOdb Date Time Library – старенькая библиотечка на чистом php, которая позволит вам жить счастливо даже после официального окончания unix-эпохи.
Какие ещё беды настрадал нам Предсказамус?

Update: во какую штуку нашёл, надо бы донести это знание до тех, кому не безразлично…

27.02.08  |   | 2 comments

Sendmail & shared hosting II

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

Ну и краткое руководство:

  1. Поместите скрипт куда-нибудь (пусть это будет /usr/bin/sendmail например, а реальный бинарник переименуйте в /usr/bin/sendmail.real)
  2. Отредактируете пути в скрипте (если вы выбрали их другими)
  3. Укажите путь к скрипту в директиве sendmail_path вашего php.ini (если отличается от указанных мною)
  4. Ждите вестей…

P.S.
Вы без труда сможете добавить простейшие “фильтры” и не отправлять например письма содержащие некие сигнатуры…

Slackware 11.0 is released!

Sun Oct 1 23:50:53 CDT 2006
Slackware 11.0 is released. Thanks to everyone who helped out and made this
release possible. If I forgot you in the ChangeLog, mea culpa, but you know
who you are, and thanks. :-)
Enjoy! -P.

Что не может не радовать…

Technorati Tags: , ,

03.10.06  |   | стань первым

Phing Is Not GNU

Таким образом программист может за три часа написать программу, которая сделает за пять минут то, что другой человек делал бы целый час…
© Кто-то

“Дорогая, а гладить ты умеешь?”

Много слышал и читал про phing, но пощупать досконально нехватало времени и желания. И вот наконец моё свободное время было потрачено (и не зря) на изучение сего монстра

“Монстром” я называю phing в “хорошем” смысле этого слова – это настоящий кухонный комбайн, СВЧ-печь и стиральная машина в одном флаконе архиве.

Что же это всё-таки такое?. Phing это Ant воссозданный на php. (Вопросы “Чё эта?” и “а нахер?” Вы можете задать непосредственно разработчикам того и другого, а я продолжу…).

Тем кто знает что такое Ant вероятнее всего phing не нужен,тем кто не знает, но интересуется, могу посоветовать хорошую вводную статью, а остальным попытаюсь объяснить вкратце суть явления.

“Но есть способ лучше!”

В процессе разработки чего-либо возникают невероятное количество однообразных операций, которые порядком утомляют.
Как пример из собственной практики – удаление “ненужных” файлов (очистка всемозможных кешей, временных файлов и т.п.), создание структуры директорий (расстановка необходимых прав доступа), удаление debug-кода из скриптов(массовый search-n-replace в определённом наборе файлов), компоновка кучи мелких “инклюдов” в общий файл и много-много подобных мелочей…

Можно конечно всё сделать “вручную”. А можно рутинную работу поручить машине. Одним из способов это сделать являются build-файлы для phing. build-файл представляет собой xml-ку в которой указан проект – совокупность задач (target-ов), которые следует выполнить, а так же последовательность (зависимость – depends в терминах phing) их выполения.

<project name="make_release" basedir=".." default="build">
   <taskdef classname="phing.tasks.ext.PhpStripCommentsTask" name="phpstripcomments" />
   <taskdef classname="phing.tasks.ext.JsLintTask" name="jslint" />
   <target name="clear_cache_dir">
       <delete>
          <fileset dir="cache">
              <include name="*" />
          </fileset>
      </delete>
   </target>
   <target name="lint_before_strip">
      <jslint jslbinary="/usr/bin/jslint" failonerror="true">
          <fileset dir=".">
              <include name="**/*.js"/>
              <exclude name="**/.old_site/**" />
          </fileset>
      </jslint>
    <!-- skip -->
    </target>
    <!-- ....skip -->
    <target name="build" depends="prepare,clear_cache_dir,lint_before_strip,dump_db,copy_src,cleanup_src,remove_debugging,lint_after_strip,simpletests">
    <!-- skip -->
        <mail to="me@mydomain.tld" subject="build complete">
              The build process is a success...
        </mail>
    </target>
</project>

После запуска phing начнёт выполнять default task (в примере – build), и поскольку его выполнить нельзя пока не выполнены depends, то начнёт их делать по указанному порядку… ну и на радостях отправит мне письмо (что конечно лишнее)

“Но и это ещё не всё…”
Спектр задач которые в настоящий момент способен решать phing довольно широк (от файловых операций и строковых манипуляций, до работы с svn, simpletest и phpdoc). Для тех кому зазо исходного набора окажется недостаточно есть замечательная возможность плодить task-и самостоятельно – просто наследуйте новый класс от базового Task и вперёд.
Мне не хватило jslint, jscompress и zndenc – на создание коих было бесследно утрачено минут 15 драгоценного времени. В настоящий момент (ага вот прямо сейчас) обдумываю написание самого аццкого таска – ftpupload (или ftpsync).

Интересный момент – target-ы выполняются строго по порядку и если произойдёт некая непредвиденная ситуация(файл нельзя записать или например как в примере выше в проверяемом коде обнаружится синтаксическая ошибка) другие таргеты выполнятся не будут, выполнение будет прервано exception-ом. Собственно момент интересен тем что можно создавать собственный обработчик этих самых exception-ов, в которых делать “правильные выводы” о том стоит ли продолжать работу или смело “to die if necessary…”.

Другая интересная возможность – делать собственные logger-ы – потому как наблюдать за бурной рабочей деятельностью phing-а в консоли не больно удобно. В стандартной поставки для примера есть AnsiColorLogger, который слегка “приукрашивает” серые терминальные будни. А можно пойти дальше – складывать логи в sqlite например.

“А вы поменяете две пачки обычного порошка на одну пачку необычного?”

Чем хорош именно phing – он написан на php5 – я могу исправить, дополнить и добавить недостающие фичи (Ant несомненно хорош, имеет кучу готовых плагинов, но написан на java, которую я совсем не знаю). Стандартный (g)make откровенно бесит синтаксисом makefile-ов, pake (идея видимо нагло стырена с rake)тоже ничего (хорошего), но уж слишком прост и расширять его возможности довольно муторно :) .
Тонна мелких и крупных shell-perl-php-cmd скриптов, которые я ранее использовал для решения сиюминутных насущных проблем тоже порядком задолбали.
Чем плох – xml как формат build-файлов (хотя на вскидку лучшего предложить ничего не могу, но “аллергия” на xml ещё не прошла) и написан на php5 ;o) – скорость работы оставляет желать лучшего (18 минут на сборку,проверку и упаковку 10-ти мегабайтного проекта на мой взгляд это много).
Но “удобность” всё-таки решает. Так что:

$> pear channel-discover pear.phing.info$> pear install phing/phing

И вперёд…

Technorati Tags: , , ,

20.09.06  |   | 3 comments

Sendmail & shared hosting

Суть проблемы – на хостинге много пользователей (сайтов) и один apache (с mod_php), а с какого-то аккаунта шлют спам (через формочки, которые есть практически на каждом сайте – типа feedback и т.п.). Где-то это получается удачно (умудряются добавитб заголовок bcc и список из пару сотен (почему-то бразильских) e-mail-ов) где-то не очень и все кракозябрица отправляется в теле письма адресату, указанному в скрипте (который в свою очередь пересылает её нам, с вопросом – “а чО эта такое?”). Надо начинать бороться.

На прошлой неделе решил добавить в php.ini (httpd.conf) параметр mail.force_extra_parameters = “-fshell_user_name”.
Это помогло выявить некоторые кривые скрипты и уведомить авторов(владельцев) о том что пора исправлять ошибки.
Но поскольку этот параметр легко переписывается пятым параметром в функции mail, то всё вычислить не удаёься.

Сегодня пошёл другим путём – написал враппер на php (/usr/sbin/sendmail.php и указал его как sendmail_path в php.ini), который проверяет откуда был запущен sendmail, логирует и отправляет письмо дальше к реальному бинарнику. Это помогло найти проблемные(дырявые) скрипты на сайтах, но не решает проблемы рассылки спама с сайтов.

Сегодня же увидел ещё один метод рассылки – на неком сайте есть “доска объявлений”, после отправки объявления, скрипт отправляет его (объявление) на e-mail “добавляющему”. Ну и кто-то умный и большой фигачит автоматом объявление и меняет адреса… владельцам сайта похоже пох.. всё равно, что там твориться, а спам идёт и идёт…

У меня теперь есть возможность создавать кучу фильтров во враппере и отправлять левые письма в топку /dev/null (например если в тексте встретилось сочетание “bcc: “, но всё-таки интересно как решают подобные проблемы “крупные хостеры” (и решают ли они их). Как например в условиях shared hosting-а (если php установлен как модуль apache) делают лимиты на количество отправляемых писем в час с одного аккаунта ? Как борются со спамерами ? И ещё куча вопросов :) или “крупные” хостеры, ставят php как [fast]cgi и такими проблемами не озадачиваются ? ;o)

Technorati Tags: , , , ,

13.03.06  |   | 4 comments

NTLM-авторизация,браузеры и негодяи…

Нарисовалась интересная задачка – авторизовывать пользователя через AD.
Собственно задачка для меня не нова – в нескольких сервисах я её уже реализовал – через LDAP, на одном, доступ к которому есть из “внешнего мира”, – через mod_auth_pam (winbindd на сервере установлен, настроен и работает как часы “Слава”) – т.е. как бы задачка – казалось бы вовсе не задачка…. Но! Но хочется людЯм чтоб “не выскакивало это окошечко”… Обратили внимание на SharePoint сервер, который (якобы) не спрашивает логин-пароль – объясняю – на самом деле спрашивает, просто этого не видно – говорят – ну и сделай так же – ну и делаю так же… НО! но “без проблем” это делать умеет только IE (Mozilla “в принципе” тоже умеет), а как же Ёпера, она же, убогая, не умеет ВАЩЕ NTLM ?
Забить на Оперу Допустим что Оперой не пользуются… а в принципе.. безопастна ли NTLM-авторизация? посмотрел на PHP NTLM GET LOGIN… судя по реализации можно смело предположить, что потенциальный негодяй может “завернуть” в base64_encode любой логин… (аналогичная история получится с mod_ntlm – первые версии своих “сервисов” делал через него, но после перестановки системы на сервере, он начал “конфликтовать” с разными модулями апача и мне надоело его править)…
Пока оставляю всё как есть – “клиент: форма -> клиент: des_encrypt ->сервер: ldap_connect->сервер: ldap_bind-> сервер: return (true || false) ”

В такой схеме (на мой взгляд) безопасно передаются данные и безопасно(а главное “честно”) проверяется пара логин-пароль согласно всем политикам AD – всякие блокировки по времени, expires и т.д. тогда как при NTLM можно с лёгкостью обойти все эти механизмы

А собственно вопрос – а верно ли я понял, что NTLM – “АЦтой” ? А есть ли способ использовать NTLM прозрачно для клиента и безопасно для сервера?

27.12.05  |   | стань первым

Performance Optimization WordPress Plugins by W3 EDGE