Как стать автором
Обновить

Концентратор информации

Многие может и не встречали, но есть такой способ передачи информации через специализированный софт, называемый Концентратором информации (далее КИ). Вот хочу пару слов, скажем так вводную о его применении и принцыпе работы…
пдробнее

Эффекты во Flash на примере создания огня

Эффекты во Flash на примере создания огня.

Рано или поздно, к этому моменту приходит любой разработчик под Flash, не важно, программист ли вы, аниматор или веб-дизайнер. Как сделать тот или иной эффект? То ли незнание, то ли природная лень вынуждает многих товарищей создавать такие отвратительные вещи, при взгляде на которые хочется немедленно закрыть браузер и больше никогда не заходить на ту страничку. А ведь сделать красиво не так уж и сложно! Существует три основных способа, которые должен знать каждый.

1) Самое очевидное решение — векторная анимация. Минус такого подхода очевиден: потребуется довольно много времени, чтобы красиво анимировать детальные изменения эффектов (в нашем случае, языки пламени). Двухкадровое изменение, конечно, не устроит. Мы же хорошие флэшеры, не правда ли? :) Нарисуем хотя бы 6 последовательных кадров горящего пламени, установив в качестве частоты приличные для плавной анимации 24 fps. Рядом для примера разместим тот же самый Movie Clip, с увеличенным в два раза количеством кадров (не ключевых). То есть мы фактически получим тот же эффект на скорости 12 fps.

Первый костер – слишком медленно, да и его частота не подошла бы для анимации остальной части проекта. Стандартные 12 fps — это очень мало для качественной анимации большинства объектов.

Второй костер горит слишком быстро, дергано. Если увеличить количество ключевых кадров хотя бы в два раза, получится уже вполне приятный и плавный огонь, но временные затраты с каждым кадром растут в геометрической прогрессии. Шурик, вы – профессионал? Шурик, это не наши методы. Конечно, здесь есть свои оговорки. Например, если к стилистике мультфильма подходит только векторный, «мультяшный» огонь, то деваться некуда, но в остальных случаях логичнее будет обратить внимание на другие способы создания огня.

2) Битмапный метод. Суть этого способа сводится к тому, что эффект создается в какой-нибудь серьезной программе вроде Adobe After Effects или particleIllusion, а потом экспортируется в качестве последовательности битмап-изображений или (о, ужас!) видео. Последним особенно любят баловаться иностранные коллеги, даром, что у них с шириной канала дела обстоят гораздо лучше, чем в России и СНГ. Здесь есть много плюсов: простота и скорость создания нужного эффекта, многовариантность в пару кликов, низкая нагрузка на процессор в процессе воспроизведения (особенно актуально в играх, когда кремниевый мозг и без того сильно занят скриптами). Из минусов можно отметить разве что больший (но зачастую не очень большой!) объем скомпилированного файла, чем в других методах и некоторую размытость изображения. Все-таки сглаженный вектор выглядит более достойно. Красивый огонь, кстати, попадается редко. Например, удачное сочетание статичной картинки и анимированного битмапа можно посмотреть здесь: saizenmedia.com/gracia
Жаль у меня не осталось хорошего примера в отдельном файле

3) И, наконец, страшная, ужасная, вгоняющая в священный трепет новичков, программная реализация! Идеально подходит для игр (во многих случаях просто невозможно использовать зацикленный клип), но можно использовать и в анимационных клипах, только не очень удобно. Судите сами – весь эффект будет виден только при компиляции, редактировать скрипты приходится вслепую. Зато рисовать для этого нужно по минимуму — буквально один Movie Clip, как частичку эффекта. Она будет многократно дублироваться, а ее поведение — задаваться физическими законами. В сети много подобных примеров, но я хочу продемонстрировать вам настоящее ниндзитсу в ActionScript-кодинге. Каких-то 23 строчки AS3-кода и один нарисованный градиент творят настоящие чудеса.


Вот код:

import flash.filters.*;
import flash.display.*;
var my_btm = new BitmapData(200, 200, true, 0xFFFFFF);
gradient_mc.start_offset = [];
gradient_mc.finish_offset = [];
var c = 0;
while (c<3)>
gradient_mc.start_offset[c] = {x:0, y:0};
gradient_mc.finish_offset[c] = {x:Math.random()*4-2, y:Math.random()*3+4};
c++;
}
gradient_mc.onEnterFrame = function() {
var c = 0;
while (c<3)>
this.start_offset[c].x += this.finish_offset[c].x;
this.start_offset[c].y += this.finish_offset[c].y;
c++;
}
my_btm.perlinNoise(15, 50, 3, 5, false, false, 1, true, this.start_offset);
var dmf = new DisplacementMapFilter(my_btm, new flash.geom.Point(0, 0), 1, 1, 10, 200, «clamp»);
this.filters = [dmf];
};

— Какой способ выбрать, решайте сами для каждого конкретного проекта. Я описал основные области применения каждого способа, их плюсы и минусы. Надеюсь, ваши работы станут еще немного красивее ;) Не бойтесь экспериментировать и удачи!

Антивирусная утилита против вирусов типа Autorun

На выходных накнопал программку для защиты флэшэк, от вирусов типа Авторан. Эта утилита чисто для защиты флэш. Следуйщая утилита будет, как для защиты флэш, так и для защиты ПК от вирусов этого типа. Утилиту вылаживаю в бат файле. Фишка заключается в том что когда вы подключите флэшку к зараженному компьютеру, вирус копируется на флэшку, как и раньше :) а вот файл который его запускает нет ( Auturun.inf) Это говорит о том, что когда вы, уже свою флэш подключаете к чистому компьютеру, то он не заражается, так как файл который запускает вирус при вставке флэш отсутствует. Вот так он беднягя (вирус) и будет жить на флэшке пока его не увидит ближайший антивирус. :) Зачастую, вирусы этого типа скрытые, в 99% поэтому не бойтесь что нечаянно нажмете на него :) Антивирусную утилиту скачать здесь www.rapidshare.ru/912043 Прошу Вас протестировать мою утилиту. Прошу Вас посетить мою страничку посвященную Антивирусной безопастности.

antivirusfagot.blogspot.com

Учимся говорить по русски.

Наверняка, те кто заинтересовался созданием приложений с использованием XNA, столкнулись с проблемой вывода текста в кириллице. Дело в том, что XNA — инструмент, а не набор готовых средств и многие решения придется реализовывать самому. Как писалось в предыдущей статье XNA/XNA 3.0 – Быстрый старт для профи есть возможность создания своего контент процессора, чем мы и займемся.

Для начала создадим новый проект WindowsGameN. Думаю в картинках нет смысла показывать ).
Далее в дереве проекта добавим выбираем папку Content и добавляем новый объект SpriteFont1.spritefont, его можно открыть любым текстовым редакторов и внести изменения типа размер шрифта, наклон,… с этим разберетесь сами, ничего сложного простой xml файл.
Теперь создаем экземпляр класса SpriteFont на основе нашего SpriteFont1
Читать дальше →

Постраничная навигация и вывод новостей в php

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

Читать дальше →

Смена стилей веб страницы «на лету»

Здравствуйте, уважаемые хабраграждане!

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

Одна строка JavaScript кода:
function changeStyle() { document.getElementById(‘style’).href = ‘new_style.css’ }

и строке подключения стилей зададим идентификатор:
/>

Теперь в любом месте документа можно задать вызов смена стилей.
Например как-нибудь вот так:

Изменить стиль



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

Буду рад, если кто-нибудь возьмет на заметку при разработке в своем проекте.

Программирование на Qt4 в Code::Blocks

Code::Blocks — бесплатная кросс платформенная среда разработки для C++ с открытыми исходными кодами. Эта среда разработки работает на Linux, MacOS и Windows. Поддерживает различные компиляторы, в том числе: GCC (MingW/GNU GCC), MSVC++, Digital Mars, Borland C++ 5.5, Open Watcom. Может импортировать проекты MSVC и Dev-C++. Умеет делать подсветку кода, автоматическое дополнение. Перевод на русский язык для Code::Blocks доступен на LaunchPad.

image
Но, так как Code::Blocks написан на WxWidgets, то встроенной поддержки для работы с Qt4 у него нет.
Но эту проблему можно решить с помощью QtWorkBench

Автоматизированный информационный анализ — MadWin

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

Настройка ӕмулятора принтсервера lp_server на Ubuntu 8.10 desktop

Предистория — в офисе работа организована следующим образом — на рабочих станциях установлена Ubuntu, и они используя rdesktop подключаются к серверу терминалов, под управлением Windows Server 2003 R2 x63.Довольно типично.Так вот, вопрос публикации принтеров возник в самом начале поднятия офиса.Сначала ӕто было реализовано через Cups по протоколу ipp.Данный способ был прост в реализации, но повел за собой немалое количество глюков, и из за ӕтого хотелось сделать красивее и безглючнее.Да и к тому же имена принтеров расшаренных по ipp не отличались красивостью.Другими словами — путались в них пользователи)).Путем гуглежа и раздумий было решено публиковать принтеры, подключенные к линукс-машинам, средствами демона lp_server
Вот что написано о программе в README файле, идущем вместе с иходниками

README for lp_server
This program allows you to 'export' a printer on your local host
to be used by an LPRng spooler. It is basically simulating an
HP JetDirect interface, which opens a connection on port 9100
and simply dumps input to the PostScript Engine
.

По русски — ӕкспортировать принтер на машине, на tcp-порт 9100, ӕмулируя работу JetDirect

Приступим:
Часть первая — Настройка на стороне Linux Ubuntu 8.10

1)Качаем исходники.
2)Распаковываем - tar -xvvf lp_server-1.1.6.tar
3)Переходим в папку с исходниками — cd ./lp_server-1.1.6
4)Конфигурируем — ./configure
5)Собираем — make

В папке src появится исполняемый файл lp_server, его копируем, например в /sbin/lp_server

Программа установлена.Теперь нужно прицепить еэ к нашему принтеру.У меня был принтер Hewlett-Packard LaserJet 1022.
В Ubuntu, я определил имя устройства, к которому подключен принтер, и к которому будем подключать lp_server так:

Запустил dmesg | tail
Воткнул шнур принтера в usb
Оказалось что устройство — usblp0
итак команда, достаточная для работы lp_server такая
lp_server -d /dev/usblp0 -n 9100 -D 9, где
-d — устройство к которому цепляемся.
-n — порт на который вешаем демона.
-D 9 — уровень отладки(для тестов, потом уберем)
итак, в консоли видим примерно такое

lp_server pid [7521] port 9100 at Jan 30 14:06:39
lp_server pid [7521] socket 3 at Jan 30 14:06:39
lp_server pid [7521] waiting at Jan 30 14:06:39


Ок.Демон работает и ждет данных на порт 9100.Чтож нужно ему их дать.

Часть вторая — настройка клиентов Windows.
1)Открываем «Пуск-Панель Управления-Принтеры и Факсы---->Установка принтера---->Локальный принтер---->Создать новый порт---->Standard TCP/IP порт---->Далее----->В поле имя принтера или ip-адрес, вводим ip-адрес компьютера с Ubuntu---->Тип Устройства-Generic Network Card---->Готово---->Ставим драйвер для своего принтера.»Вуаля.Теперь должно печатать.

И последний вопрос — автозагрузка демона.
Тут я сделал по простому — может гуру меня поправят и напишут стартовый скрипт и т.д.

Создал я такой скрипт стартовый скрипт

cat /etc/init.d/lp_server
/sbin/lp_server -d /dev/usblp0 -n 9100 > /dev/null 2> /dev/null &


И добавил его в автозагрузку…
sudo update-rc.d lp_server start 10 2 3 4 5 . stop 10 0 1 6 .

Использование log4j для записи объектов в базу

Многие Java разработчики используют в своих приложениях библиотеку log4j для логирования. Иногда возникает необходимость писать логи в базу данных. В этой статье я расскажу как это сделать, используя стандартные возможности log4j.
Читать дальше →

Настройка PPPoE соединения с servicename под Linux

Приветствую всех. Я пользователь одной из городских домашних сетей небольшого города. И тех. поддержка у нас реализована из рук вон плохо. Все сводится к «блондинке» в офисе, которая пишет жалобы на бумажку. Да и сами администраторы кроме как в Винде нормально настроить соединение с Интернетом не могут. Про Линукс я молчу. Собственно поэтому возникла необходимость написать более-менее понятный HOWTO по настройке этого всего в Линуксе. А именно PPPoE. Отдельной проблемой было еще то что в PPPoE у нас используется имя сервиса, что делает проблему подключения к Интернету из Линукса нетривиальной для простого юзера.
Порывшись на форумах, скомпоновал мануал. Годится он не обязательно для нашей сети, так что решил его выложить.

Для установки и настройки PPPoE клиента под ОС Linux необходимы:
  • — Point-To-Point Protocol Daemon

  • — rp-pppoe redirector


1. Где взять

Для работы PPPoE pppd должен быть версии не ниже 2.3.7. Если Вы хотите использовать «подключение по требованию» (Demand Dialling), необходим pppd не ниже 2.3.10.

Скачать pppd можно по адресу: http://ppp.samba.org/ppp/download.html, либо установить из используемого Вами дистрибутива Linux.

RP-PPPoE пакет, как правило, поставляется во всех современных версиях дистрибутивов Linux. Если в Вашем дистрибутиве данного пакета не оказалось, его можно скачать с официального сайта: http://www.roaringpenguin.com/pppoe/

* Необходимая версия ядра для работы PPPoE — не ниже 2.2.9. При этом ядро должно быть сконфигурировано с поддержкой Point-To-Point Protocol и PPP Over Ethernet. *

2. Установка

2.1 Если Вы установили rp-pppoe пакет из используемого Вами дистрибутива — запустите из под root пользователя скрипт adsl-setup, находящийся, как правило, в /usr/sbin/, и переходите к пункту 3 данного руководства.

2.2 Установки PPPoE клиента из исходников:
Распаковываем скаченный архив, например rp-pppoe-3.5.tar.gz
$ tar zxvf rp-pppoe-3.5.tar.gz
Заходим в созданную директорию (rp-pppoe-3.5)
$ cd rp-pppoe-3.5
Из под root пользователя запускаем установочный скрипт
$ ./go

В процессе работы скрипта будет сконфигурировано, скомпилировано и установлено необходимое программное обеспечение. После установки ПО, автоматически будет запущен скрипт конфигурирования PPPoE соединения, переходите к пункту 3 данного руководства.

2.3 Установка PPPoE клиента из исходников вручную: Если Вам, по каким-либо причинам не удалось установить PPPoE клиента по пунктам 2.1 и 2.2, можете попробовать установить клиента вручную. Для этого необходимо:
Зайти в директорию «src» находящуюся в каталоге куда Вы распаковали исходники
Запустить конфигурационный скрипт
$ ./configure
Запустить компиляцию исходников
$ make
Запустить из под root пользователя установку ПО
$ make install
Запустить из под root пользователя конфигурационный скрипт для настройки PPPoE соединения
$ adsl-setup

3. Настройка

После запуска (обязательно из под root пользователя!) скрипта конфигурации PPPoE соединения необходимо будет ответить на несколько вопросов:

Enter your PPPoE user name (default bxxxnxnx@sympatico.ca):
укажите Ваш логин на подключение (например user_XXX)

Enter the Ethernet interface connected to the ADSL modem:
укажите имя сетевого интерфейса, подключенного к ADSL модему или розетке

Enter the demand value:
укажите «yes», если хотите, чтобы соединение подключалось автоматически при запросе. В противном случае укажите «no»

Enter the DNS information here:
укажите IP адрес DNS сервера.

Enter the secondary DNS server adress here:
укажите IP адрес второго DNS сервера

Please enter your PPPoE password:
введите Ваш пароль на подключение к сети Интернет

Please re-enter your PPPoE password:
повторно введите Ваш пароль на подключение

Choose a type of firewall:
если Вы опытный пользователь, то решайте сами какой тип фаервола Вам подходит, иначе выберете тип «0»

Accept these settings and adjust configuration files:
перед тем как ответить на этот вопрос положительно, убедитесь что Вы ввели все необходимые параметры правильно. Все Ваши ответы будут выведены Вам на экран в результирующей табличке. Если все верно — нажимайте «Y». В противном случае нажмите «N» и заново пройдите этап конфигурации PPPoE соединения.

4. Подключение

Теперь, после установки и настройки PPPoE соединения, Вы можете подключаться к сети Интернет с помощью скрипта adsl-start (работает только из под root пользователя!).

Для разрыва соединения воспользуйтесь командой adsl-stop.

Для просмотра статистики соединения воспользуйтесь командой adsl-status.

Делаем по инструкции, а потом продолжаем сами.

А именно: надо прописать сервиснейм
Для этого:

в /etc/ppp/pppoe.conf находим строку SERVICENAME= и пишем SERVICENAME=имя_сервиса_провайдера

Теперь роутинг.

Для локального файлобмена:
$ route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.xx.1

где xx-номер вашей подсети.

Для Инета:
$ route add default gw основной_шлюз_пппое

Как узнать этот шлюз:
Открываем подключение PPPoE в Виндовсе и смотрим сведения.

image

ИТАК:

1) Следуем инструкции

2) Пишем сервиснейм

3) Прописывам роутинг

4) Управление pppoe-start pppoe-stop pppoe-status

5) Profit!

PS. Можно еще пользоваться графическим интерфейсом (вместо скрипта go запустить скрипт go-gui), но, как правило, это лишнее.

Разрывы? TeliaSonera!

Возможно, некоторые хабраюзеры заметили сегодня подлинневшие пинги и жуткие с виду трейсы до своих любимых одноклассников википедий, гуглов etc. Ну а ежели повезло Вам и не заметили, попробуйте пустить до чего-нибудь traceroute через Телию(например, с lg.telia.net):
traceroute to google.com (74.125.45.100), 30 hops max, 40 byte packets
1 las-bb1-link.telia.net (80.91.249.117) 167.455 ms 167.484 ms 167.503 ms
2 dls-bb1-link.telia.net (213.248.80.14) 233.513 ms 202.794 ms 201.986 ms
3 atl-bb1-link.telia.net (213.248.80.145) 220.669 ms 220.652 ms 220.703 ms
4 google-118687-atl-bb1.c.telia.net (213.248.90.66) 220.935 ms 237.955 ms 220.834 ms
5 72.14.239.100 (72.14.239.100) [AS 15169] 220.942 ms 64.233.174.2 (64.233.174.2) [AS 15169] 234.122 ms 229.247 ms
6 209.85.254.243 (209.85.254.243) [AS 15169] 233.548 ms 221.252 ms 209.85.254.241 (209.85.254.241) [AS 15169] 221.333 ms

7 209.85.253.145 (209.85.253.145) [AS 15169] 232.155 ms 209.85.253.141 (209.85.253.141) [AS 15169] 221.516 ms 209.85.253.137 (209.85.253.137) [AS 15169] 233.867 ms
8 yx-in-f100.google.com (74.125.45.100) [AS 15169] 221.849 ms 221.617 ms 221.584 ms

Не правда ли, ужас?

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

Так что же случилось? Информации об этом крайне мало, но все же что-то есть а мужики-то не знают!. По всей видимости, дело в обрыве оптики между Москвой и Санкт-Петербургом в районе Бежецка.
На момент возникновения аварии предполагалось ориентировочное время восстановления связи — 4 часа. Это было в 14:37. Дальше — хуже. Оказалось, всему виной обрыв кабеля ТелииСонеры под Удомлей. По сводкам с фронтов, восстановление возможно только завтра до конца дня, а если учесть сильный снегопад в Тверской области и массовые обрывы проводов, то сроки восстановления становятся непредсказуемыми. В то же время Вести ФМ говорят, что в Тверской после снегопада обесточено много населенных пунктов.

Эх, что-то январь выдался ужасный в этом году — всё падает да рвётся… Иногда даже кажется, что если даже
500 оптик протянуть, обязательно в одночасье их порвут когда-нибудь. :-(

Настройка и использование code_swarm

Введение


В данной статье я хочу рассказать о том, как настроить и использовать code_swarm для визуализации процесса разработки собственных проектов. О том что такое code_swarm, а также результаты работы этого ПО, можно узнать тут и тут. Под впечатлением графики повествующей о создании Rails, мы с коллегами кинулись натравливать code_swarm на собственные репозитории. Текст статьи будет опираться на англоязычный источник – страничку проекта на code.google, а также на опыт, полученный в процессе генерации красивой картинки из сухих фактов, предаставленных системой управления версиями (в моем случае это CVS) одного из наших проектов (далее example). Все это проделывалось на Ubuntu 8.04, но думаю все ниже сказанное не привязано к конкретной ОС и рассчитанно на базовые знания по работе в вашей среде.
Читать дальше →

Система работы http://preloaders.net

image

Здравствуйте!

Являюсь разработчиком preloaders.net. Готов обсудить систему с точки зрения програмирования (естественно алгоритмы рассказывать не буду :)). Так же просто и легко готов объяснить проблемы возникшие с хостингом.

Обертки в Java, в помощь программисту

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

Один из вариантов ‑ вручную написать исходный код реализации интерфейса, в каждом из методов которого вставить отладочную печать:

public void niceSystemEvent(String a, int b) {
     System.out.format(“Был вызван метод niceSystemEvent с параметрами %s, %d\n”,a,b);
}

Однако, если в интерфейсе сорок методов, на подобный код уйдет много ценного времени. А так как такая работа рутиная, то будут еще и ошибки в коде. В этом случае задачу проще решить с помощью рефлексии, а именно Proxy-объектов. Это обертки, которые позволяют перехватывать вызовы методов общим способом производить необходимые действия.
Читать дальше →

Создание пустого шаблона для нового проекта веб сайта

Каждый раз начиная новый веб проект, я создаю в ручную кучу файлов для него, index.php файл, папки, css и кучу других вещей. Одно время я просто копировал index.php с других проектов, но вот сегодня меня это достало окончательно и появилась идея — а почему бы не дать пхп делать всю работу за меня. И я за 15 минут накатал простейший скрипт создания чистого шаблона. Фишка заключается в том что можно заранее прописать заголовок и имя файла css. Конечно скрипт очень простой, поэтому прошу строго не судить. Хочу заметить что данный скрипт рассчитан на тех у кого уже установлен Денвер или любой другой сервер с установленным ПХП.

К сожалению непонятно почему не смог вписать сюда код, поэтому предлагаю скачать его тут
Запустив скрипт (i.php) мы получим уже готовый файл index.php с прописанным title, именем и путем css, все нужные нам папки, а также css файл.

Делаем из Ubuntu Mac OS X

image

С операционной системой Ubuntu я познакомился давненько — первая версия, которую я установил на свой компьютер, была Ubuntu 7.04, но свой тур по ней продолжаю до сих пор. Связано это с тем, что я, пожалуй, упертый виндузятник, который или по привычке или от дополнительного неудобства отвергаю все те проблемы, которые появляются при переходе на новую операционную систему, причем совсем другого типа. Да и осложняется это дело тем, что OpenOffice по удобству еще не дорос до уровня хотя бы Microsoft Office 2003, чтобы с ним мне было удобно работать.

Итак, мое знакомство началось с compiz. Люблю разные графические финтифлюшки, а особенно когда узнал о такой штуке, как Emerald Theme Manager — был просто приятно удивлен. Особенно тем, что теперь из Ubuntu можно делать что угодно, как угодно, и как нравиться. Что я, в общем то, и сделал, а именно — внешний вид сделал хоть как то, но похожим на Mac OS X.

image

С шрифтами мне помог Avant, который в своем блоге описал как установить Apple шрифты на Ubuntu. В качестве основного лучше всего выбрать AquaBase, размер — 10. В остальном же я пользовался Emerald Theme Manager, скачать который посредством стандартного установщика в Ubuntu нельзя, только в Synaptic. Также должен быть установлен Compiz System Manager для настройки и Compiz Fusion Icon. Далее проходим по данной ссылке и ставим на закачку тему (весит она очень мало). Затем перегружаем Windows Decorator (он в compiz`е) и устанавливаем в качестве основного менеджера Emerald. Теперь через Emerald Theme Manager ставим тему, вновь Reload, и вуаля! Рабочий стол теперь хоть немного, но похож на Mac OS X. Радуйтесь.

Насчет иконок и верхней панели — я еще бьюсь с системой. Кто что знает — пишите, буду рад послушать. Обои в стиле Mac OS X можно скачать здесь.

Скорость загрузки страницы

Ни для кого не новость, что скорость загрузки страницы напрямую зависит от колличества запросов посылаемых браузером HTTP-серверу. В число этих запросов обычно входят:
  • сама html страница
  • css файлы
  • js файлы
  • изображения в тегах img на html странице
  • изображения в свойствах background из css файлов

О том как уменьшить объем/время загрузки css и js фалов подробно рассказано здесь:
http://habrahabr.ru/blogs/AJAX/10500/

Я бы хотел рассказать о том, как можно уменьшить колличество запросов при загрузке background-ов из css файлов. Зачастую при верстке страницы мы используем background-ы, которые не надо scale-ить по горизонтали или по вертикали. Зачастую такие background-ы могут использоваться для всяческих логотипов, кнопок и других однотипных элементов страницы. Такие изображения можно комбинировать в цельные файлы, тем самым уменьшая количество запросов к серверу. Например у нас есть два изображения: первое — размером 20 на 30 пикселей и второе — 50 на 70 пикселей. Объединив их в одно целое, мы получим изображение, объем которого врядли будет превышать суммарный объем двух исходных изображений. Дальше в css мы позиционируем background с помошью свойства background-position и убираем все лишнее с помощью overflow:hidden.

Этот способ оптимизации скорости загрузки удобно применять уже после получения финальной версии верстки для проекта, так как на ранних стадиях такой способ может существенно затруднить внесение изменений.

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

В дополнение могу предложить альтернативный комбайнер для css и js: Minify

Captcha — делаем жизнь труднее — реальные отзывы от пользователей

Это скорее шуточный пост, но он содержит реальный отзыв от людей которые имели трудности с регистрацией из за ReCaptcha.

Ниже приведен примерный(сокращеный) перевод нашей внутренней дисскуссии(сайт очень популярный и западный ):

А: я часто слышу критику со стороны пользователей ресурса о трудности регистрации. Часто слышу — ох, это так трудно. Я посмотрел на рекаптчу и она очень отличается от всего дизайна нашего сайта(от меня — она как бы немного вписывается по цветам. мы выбрали белое оформление из стандартных).
Я часто слышу такие отзывы(сейчас будет самое интересное):
  1. 1. Почему она так отличается от общего дизайна, я должен зарегистрироваться где то еще(Am I signing up for something?)?
  2. 2. Я не понимаю что это такое, есть ли где нибудь инструкция как это использовать?
  3. 3. (и самое интересное) Это реклама?

Насчет рекламы дальше были были шутки насчет новой каптчи(тема идей для каптчи на хабре востребована)
  • Б: Может быть нам надо вставить реальную рекламу вместо каптчи? АдКаптча?
    СЕО: гениально: «Нам надо убедиться что ты не робот. Кликни по интересующей тебя рекламе и купи продукт»
    СЕО: С таким подходом мы можем убрать всю рекламу с сайта
    А: нет. в таком случае нам нужно добавить АдКаптчу на странице логина.

    Перевод конечно не очень :) но идея понятна.

    Можна сделать вывод —
    1. Каптча трудна, но лучшего пока мало придумали — в таком случае ее неоходимо адаптировать к дизайну сайта как можно лучше(имеется в виду reCaptcha)
    2. Не все люди знают что это такое — хотя бы маленькую ссылочку на faq где популярно написано что это и как это работает.

    Вот такой фидбэк, может будеть полезен, а может как говорил Задорнов — Ну тупые эти американцы, ну тупые :)

Опыт настройки jabber-сервера openfire

Вода


В конце 2008 года товарищи программисты из штата ICQ осчастливили нас апдейтом протокола ICQ. Лично меня это коснулось не сильно, потому как домашний клиент Adium совсем не отреагировал на это, и когда я пришел на работу на следующий день, QIP уже обновился (спасибо дяде).

Потом началась эпопея с обновлением клиентов QIP на работе. У нас работает ни много ни мало 50 машин, и обновление заняло примерно половину рабочего дня. Системным администрированием в нашей организации занимаюсь я и собственно начальник отдела, то есть админа как бы нету. Главная наша обязанность все-таки программирование, но пришлось отложить его из-за ICQ. Тогда мне взбрела в голову мысль, что все это безобразие может и повториться, и что мы от этого никак не застрахованы. Поэтому, я полез в интернет и начал искать какую-нибудь альтернативу, а именно jabber-сервер. Введя запрос в Гугл (спасибо за то что ты есть) мой взор остановился на сервере openfire. Пройдя по ссылке я обнаружил, что сайт — красивый, что сервер писан на яве и он кроссплатформенный. Дома у меня стоит MAC, на работе сервера — Windows, в интернете виртуальный сервер RED HAT, и версии под все эти платформы есть на сайте. Это меня зацепило.

Я попробовал настроить этот сервер на всех 3 платформах, и везде это — просто. Особенно если не решаешь каких-либо сложных задач.

Опишу пример настройки сервера openfire под MAC OS X, хотя разницы нет никакой, ведь настройка происходит посредствам web-интерфейса. Ничего нового тут по-сути нет.
Читать дальше →