16 апреля 2006

devprom.net

Интересную и бесплатную систему для управления проектами можно найти по адресу http://www.devprom.net/

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

Примерно всё выглядит так:

Проект можно экспортировать в XML.

У проекта сразу создаётся блог.

В принципе, там столько всего, что мне пока не всё нужно, но в целом, мне нравится.

14 апреля 2006

Снова про скорость

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

- Здравствуйте, я такой-то, хотел бы поговорить с вами на счёт аренды того-то.
- Здравствуйте. Вы знаете, сейчас обед.
- Хорошо, давайте я подъеду после обеда. Когда вам удобно?
- Вообще-то сегодня пятница...
- ?? Хорошо, давайте договоримся на понедельник.
- Нет, только не в понедельник (приглушённый стон)
- Так, я понял, вы заняты в понедельник... Давайте во вторник.
- Да, давайте во вторник, после обеда. Просто я понедельники не люблю...

Ну что тут скажешь... Бизнес...

Визуализация рулит

Вчера прочёл в одном женском (!) журнале статью про N шагов к успеху, где, среди прочего, говорилось о визуализации - зрительном представлении уже достигнутой цели: шары в лузе, бутылки экзамены сданы, деньги заработаны. Сегодня утром на игре в баскетбол с товарищами я имел возможность проверить работоспособность этой теории: сразу после её применения моя попадаемость резко выросла - сначала несколько раз по 3 мяча подряд со штрафной отметки, потом несколько раз по 5-6.

Хотя я по ходу игры комментировал товарищам свои действия, они так и не поверили, что всё так просто :]

Что интересно: где-то в середине игры я перестал визуализировать, потому что начал попадать в принципе регулярно, как по накатанной: шлёп-шлёп-шлёп, и в дамки.

Буду юзать.

12 апреля 2006

Севастопольские линки

На данный момент я нахожусь в Севастополе, и вот какие интересные местные линки я нашёл:

Что интересно: все эти ссылки мне предложил Яндекс, определив моё географическое местоположение сам; можете попробовать найти интересные ресурсы в своём регионе.

10 апреля 2006

Книжная толкучка близ Диканьки

Max Ischenko, автор developers.org.ua, анонсировал свой новый проект - "Книгоман". Идея мне понравилась - у каждого есть дома гора книг, уже прочитанных и в принципе ненужных: выкинуть или раздать - жалко, хранить - душно, а вот продать - в самый раз; пусть не задорого, всё равно приятно.

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

С ходу я не очень понял, как решён вопрос доставки, но похоже, что покупатель и продавец просто пересекаются в своём городе, благо такая функция (фильтр по городам) предусмотрена.

07 апреля 2006

Ускорение загрузки страниц

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

Оптимизация хтмл в данном случае - простое выкусывание лишних пробелов, которое, тем не менее, уменьшает размер файла в среднем на 20-25%. Я делаю это в два присеста:

  1. замена двух и более пробельных символов (табы, переносы) на один пробел;
  2. стирание пробелов между тэгами.

Вот такая простая функция:

function optimize_html($str)
{
$str = ereg_replace("[[:space:]]{2,}"," ", $str);
$str = ereg_replace(">[[:space:]]+<","><", $str);
return $str;
}



Сжатие данных позволяет передавать по каналу связи gzip-файл, который затем
прозрачно для пользователя разворачивается и отображается. В принципе, можно
использовать автоматическое сжатие всех страниц сервера на лету через включение
опции zlib.output_compression, но я от этого отказался, потому что я ещё и
кэширую страницы и храню в кэше сжатые файлы, а не plain html.

Вот как всё это выглядит в одной связке:

$_do_gzip = true
&& (int)ini_get("zlib.output_compression")==0
&& function_exists("gzencode")
&& eregi("gzip", $_SERVER['HTTP_ACCEPT_ENCODING']);

$_do_optimize_html = true;

ob_start(); //начать буферизацию вывода

... моё приложение чё-то делает...

if($_do_gzip)
{
$contents = ob_get_contents(); //останов буферизации
ob_end_clean();
if($_do_optimize_html)
$contents = optimize_html($contents);
$contents = gzencode($contents); //сжатие данных
header("Content-Type: text/html; charset=utf-8");
header("Content-Encoding: gzip");
echo $contents; //вывод в броузер
}



Ниже представлен график, показывающий изменение размера хтмл-файла в 4 состояниях:
  1. Исходный вариант (размер - 100%)
  2. Были выкушены пробелы (78% от исходного)
  3. Исходный файл был сжат (17%)
  4. Файл с выкушенными пробелами был сжат (15%)
график, показывающий изменение размера хтмл-файла

06 апреля 2006

array_unique() на JavaScript

Как выкинуть все дубликаты из массива? На PHP есть специальная функция array_unique(), а JavaScript такими излишествами не изобилует.

Поэтому я нафантазировал такое решение:

  1. создаём объект;
  2. проходим по массиву и добавляем в этот объект новые поля (свойства), одноимённые очередным значениям массива. Поскольку двух полей с одинаковыми именами у объекта быть не может, дубликаты "схлопнутся", перезатрут друг друга;
  3. проходим по полям объекта и создаём из них массив.
Значится так:
function array_unique(arr)
{
  var vic = new Object();
  for(i=0; i < arr.length; i++)
   vic[arr[i]] = "";
  arr = new Array();
  for(i in vic)
    arr[arr.length] = i;
  return arr;
}

05 апреля 2006

Фонетический генератор

Делал я, помнится, для одного дяди скрипт, который генерит фонетически похожие слова для заданного слова, например, если задано слово "microsoft", то можно получить "myckrossoupht" или даже "mmyckroussouphtt". Тогда я сделал это на PHP, а сегодня с утра меня вдруг дёрнуло переписать на JavaScript; результат можете попробовать ниже, только не рекомендую сразу пробовать вышеназванный пример - если на PHP на генерацию уходит 1 секунда, то на JavaScript - гораааздо больше. Видно, нужно что-то соптимизировать, но лень.

Кстати, кому интересно, я выложил оба варианта.

А вот и сам пример.

04 апреля 2006

Нытьё

Что-то мне вдруг подумалось, что все эти жалобные крики вроде "Вырубают леса, лёгкие планеты", которыми, например, меня потчуют на курсах изучения инглиша, - крики слабых. Ну что им/нам мешает взять и купить себе по гектару леса - кусочек лёгких будет спасён. Денег нет? Ааа, вот где проблема. Трудно стать богатым, зато легко обвинять их...

Купи себе море.

03 апреля 2006

Жуть

В тестовом задании для кандидатов на должность веб-перца в конторе А.Лебедева одно из заданий меня просто прибило. Перефразируя само задание, для нормального JavaScript-кодера вот такое выражение должно не только иметь смысл, но даже равняться 22:
<script>
n = 10;
z = n++ - + - + - + - ++n;
document.write(z);
</script>