July 13th, 2004

girls

Уточнение об интеллектуальном спаме

Я думаю, и так понятно, что „интеллектуальный“ (или адаптивный) спам — это пример работы семантического веба в реальности, причём за счёт уже созданных небольших сервисов и отработанных до автоматизма технологий (screen-scraping, rss, email, REST, xml).

Пока Великие Хемульные Монстры там сшибаются, создавая один за другим новые форматы, идеально подходящие под всё, что можно, „простые бойцы невидимого фронта датамайнинга“ берут то, что уже есть, и прикручивают к этому свои конверторы и фильтры. Потому что дело не столько в форматах, сколько в открытых и доступных данных.

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

  • Current Music
    Things We Do for Love — Jazzamor
vanity

[ Q ] Working for myself

Обычные будни ИА:

Today was the first day of "work" since I quit my job and decided to start working for myself.

I spend the morning evaluating PHP classes for use in a project I'm starting up - no point in re-inventing the wheel. I found a user authentication class I like (although it lacks a "remember me" feature - I'll just program that in myself) and I may have decided on a simple templating class I want to use (Smarty's not good for this site). In the afternoon I did some design work in Dreamweaver for the admin section of this project (it's a web-based service).

Working for myself is a LOT of fun. I think it'll last. I can decide what I feel like working on (I have a long to-do list). And I feel I actually made some progress today.

Это Ван Дийк ушёл со своего бывшего места работы в пользу свободного полёта. Хорошо ему, с таким-то бэкграундом.


  • Current Music
    11 - Greenpeace 97 — I.F.K
girls

[ utx ] Как искать жука в тёмной комнате // Исправление части проблем в реквестере

„Как искать жука в тёмной комнате, когда он выполз через дыру в плинтусе наружу“. Разобрали часть ошибок, которые не давали мне покоя в последнее время. В частности, ошибки, на которые Крошка Тахо наталкиваласть при попытке вытащить некоторые заголовки, и которые я валила на авторизацию, оказались совсем в другой стороне.

Оказалось, что мы:

  • Никак не учитывали тот факт, что запись может быть удалена. (Привет cd_r и всем остальным любителям удаления своих журналов). Теперь учитываем — если на запрос к записи LJ нам отвечает, что „No such entry“, мы с чистой совестью удаляем такую запись и из своей базы.
  • Никак не учитывали несколько мелких, но неприятных потенциальных брешей. (Правда, теперь надо понять, как строку, в которой может быть что угодно, правильно эскейпить, а то сразу откуда-то слэши перед кавычками полезли[1]).
  • Столкнулись с амбивалентностью user/community. При попытке запросить запись из сообщества, но через users (например, /users/rulj вместо /community/rulj) Крошку Тахо перекидывало на другой адрес через 302. А редиректы Тахо не понимает. Потому запись и не обрабатывалась, и не отмечалась „битой“ (Тахо ведь считает так: „никаких ошибочных сообщений не найдено — значит, с записью всё в порядке“). Пришлось вручную исправить ссылку в базе на правильную.

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

На очереди: нормальный UTF8-конвертер для этих грешных заголовков, а то эти кракозябры в заголовках меня утомляют.

upd:

— А не надо было делать умное лицо и запихивать в кавычки результат mysql_escape_string — она сама где надо кавычек наставит.

— Дура, тебе нужно было сначала код прочитать, там уже есть кавычки, когда оно приходит в запрос! Причём (sic!) используется не просто mysql_escape, а mysql_real_escape, ради которой было незакрыто подключение к БД, и которая работает правильнее, так как учитывает текущий charset. Тебе стыдно? И поделом, не будешь умничать, где не надо.

  • Current Music
    Tender — Blur
vanity

Урок дня: не пытайся перемудрить себя, и не поддавайся инерции мышления // Ошибки психомоделирования

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

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

На самом деле, я, хоть и опытный игрок в этой игре, но, оказывается, ещё далеко не мастер. Как только я столкнулась с одиночным проявлением собственной неопытности в прошлом, сразу же эта неопытность спроецировалась на всю ситуацию. В этом и кроется ошибка — нельзя поддаваться и идти на поводу у проекций. Это очень частая операция человеческого мышления, которая позволяет сэкономить время — достаточно узнать человека с одной стороны, и ты можешь „воссоздать“ его с других сторон. Так людям кажется, во всяком случае.

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


  • Current Music
    Othrak Ma-ak Othrak — Hossam Ramzy and His Egyptie
vanity

Мелкие находки (амперсанды в урле, fread из потока)

Оказывается, ЛЖ не воспринимает в строке URL амперсанды, закодированные, как html-entity. Стоило трёх или четырёх прокачанных два раза мегабайт.

Ещё оказывается, что из-за того, что ЛЖ не воспринимает амперсанд в строке URL, он игнорирует (что логично) параметры после него. И потому набор параметров usescheme=lynx и style=mine благополучно игнорировал. И результатом было то, что в бардаке кастом-стилей ничего не находилось.

Оказалось, что fread() по каким-то своим внутренним соображениям не хочет брать из открытого сокета больше 1403 байт. Пришлось использовать описанный в мане цикл, забирающий контент через do { $data = fread($handle, 8192); if (strlen($data) == 0) { break; } $contents .= $data;} while(true);

В глубине души моя ехидна радуется тому, сколько чудных и прекрасных открытий таит для moedusa в себе ПХП. И заодно ехидна надеется, что Моё не догадается положить весь кодинг на меня, оставив для себя формулирование мегаконцептов. Впрочем, он ведь не сдержится, он скорее снова всё на яве сделает... Знаем мы его...

  • Current Music
    Othrak Ma-ak Othrak — Hossam Ramzy and His Egyptie
vanity

[ L ] Самая лучшая закладка — это...

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


You do know that binary search takes O(log n) time, while with a pointer you can get to the page in O(1) time?


If he has an index into the array then he doesn't need to binary-search it.


Binary search is easiest - the data is already in tree form. Hah.


That's assuming that you can skip forward (or back) an arbitrary number of pages with some precision - which can be tricky. But what really matters is that if you know roughly how many pages the book has, you can jump directly to roughly the right page. And anyhow, log2(the number of pages in a book) is usually a small number, at least compared with the time you lose if you drop your bookmark once in a while. And as for the problem of not recalling what page you were on: if you can't binary search (ah, look, a good use for that algorithm) to where you left off based on the contents of the book, you should probably re-read the book anyway.

Please accept my apologies for the pointlessness of this post.


I find when I drop a bookmark I can find my place fairly easily by letting the book fall open and seeing where it wants to open to. Being the most recently stressed part of the spine, it will open near where I was reading. Of course, this only works well on freshly purchased books being read for the first time.


Ah, but were you on the left or right page? And which paragraph were you on? Most importantly,l which book were you reading?

See, your system realy doesn't work that well. I always use a thick black marker and expurgate each word after I read it. This has two important effects.
1) I always know exactly where I left off, and
2) The books are useless in the black market "used book trade". The intelectual prfoperty of the author is preserved.

I encourage all patriotic capitalists to do the same.


Безумные, безумные люди.


  • Current Music
    El-Hawzi — Hossam Ramzy and His Egyptien Ensemble