пятница, 25 сентября 2009 г.

Дима Арцыбашев говнохакер

Вчера какой-то козёл взломал мою почту *@gmail.com.

Как показало следствие, поцыэнта зовут Арцыбашев Дмитрий Петрович, адрес Киев, Червонопартизанская, 14a/44, мобильный телефон +38-050-361-44-57, eamail welikegirls@ukr.net, IP адрес 92.112.1.142 (Укртелеком) и он также пытался ломануть ЖЖ и AdSence, на чем и попалился.

Дима, ты дурак и лузер.

понедельник, 20 июля 2009 г.

Аудит самбы против вирусов

Создав на своем ноуте (OS=Ubuntu 8.10) расшаренную папку incoming, доступную гостям для записи, я через некоторое время обнаружил там два совершенно чужих файла: khs и omstc.exe. Я сразу понял, что это вирусы.
Мне стало интересно, с какого компьютера они ко мне попали, и я захотел посмотреть логи самбы, чтобы увидеть там заветный IP адрес зомби-машины, но логи эти были скудны и неинформативны.

После получасового секса с конфигами самбы, на свет появилось элегантное решение. Итак:


dude@ubuntu:~$ sudo nano /etc/samba/smb.conf

....в конце создаем и настраиваем ресурс


[incoming]
writable = yes
locking = no
path = /home/dude/smbincoming
public = yes
browseable = yes
only guest = yes
vfs objects = full_audit
full_audit:prefix = %u|%I
full_audit:failure = none
full_audit:success = connect disconnect opendir mkdir rmdir closedir open close read pread write pwrite sendfile rename unlink chmod fchmod chown fchown chdir ftruncate lock symlink readlink link mknod realpath
full_audit:facility = local5
full_audit:priority = notice


Дальше перезапускаем самбу:

dude@ubuntu:~$ sudo service samba restart

Теперь можно ждать, когда вирусы начнут закидываться в наш расшаренный каталог (кстати, не забываем дать ему права 0777). После того, как это случится, читаем лог (например к нам прилетел вирус с именем omсstc.exe):

dude@ubuntu:~$ cat /var/log/syslog | grep smbd_audit | grep omcstc | less

пятница, 12 июня 2009 г.

Ротация бекапов. Оставить только семь последних бекапов. Скрипт на bash

Скрипт удаляет в целевой директории все файлы (и директории), кроме семи самых новых.

Полезно для того, чтобы например оставлять только семь последних бекапов на сервере.
Не забудьте подставить свои значения в $target и $limit


#!/bin/bash

#целевой каталог
target_dir=target

#сколько файлов оставить в живых
limit=7

################################
n=1
for i in `ls $target_dir -t`
do
if [ $n -gt $limit ]
then
rm -Rvf $target_dir/$i
fi
n=$(($n+1))
done

понедельник, 8 июня 2009 г.

Все темы Drupal одним архивом

Все темы Drupal одним архивом по состоянию на март 2009 года можно скачать здесь.

Темы drupal, вошедшие в архив:
1024px-6.x-1.1.tar.gz
a3_atlantis-5.x-1.0.tar.gz
a3_atlantis-6.x-1.2.tar.gz
abarre-5.x-1.0.tar.gz
abarre-6.x-1.0.tar.gz
aBeesParadise-6.x-1.x-dev.tar.gz
abessive-5.x-1.3.tar.gz
abessive-6.x-1.4.tar.gz
abessive-7.x-1.3.tar.gz
ability-5.x-2.x-dev.tar.gz
ability-6.x-2.x-dev.tar.gz
ablock-5.x-1.0-alpha1.tar.gz
ablock-6.x-1.0-alpha1.tar.gz
aboutpeople-6.x-1.1.tar.gz
absynthe-6.x-1.0.tar.gz
acquia_marina-6.x-1.5.tar.gz
acquia_slate-6.x-1.0.tar.gz
activesite-5.x-1.07.tar.gz
activesite-6.x-1.07.tar.gz
ad_blueprint-5.x-2.6.tar.gz
ad_blueprint-6.x-2.6.tar.gz
ad_blueprint-7.x-1.x-dev.tar.gz
addari-6.x-1.3.tar.gz
ad_novus-5.x-1.6.tar.gz
ad_novus-6.x-1.3.tar.gz
ad_novus-7.x-1.x-dev.tar.gz
ad_redoable-5.x-1.4.tar.gz
ad_redoable-6.x-1.2.tar.gz
ad_the-morning-after-5.x-1.3.tar.gz
ad_the-morning-after-6.x-1.5.tar.gz
ad_the-morning-after-7.x-1.x-dev.tar.gz
Aeon5-5.x-1.x-dev.tar.gz
Aeon5-6.x-1.x-dev.tar.gz
affaires-5.x-1.x-dev.tar.gz
affaires-6.x-1.1.tar.gz
agregado-6.x-2.0-beta3.tar.gz
alchemist-6.x-6.x-dev.tar.gz
alek_2_0-5.x-1.x-dev.tar.gz
alek_2_0-6.x-1.x-dev.tar.gz
Alina-6.x-1.0.tar.gz
amadou-4.7.x-3.1.tar.gz
amadou-5.x-3.5.tar.gz
amadou-6.x-1.1.tar.gz
amity_island-6.x-1.0.tar.gz
Amor_Azul-5.x-1.x-dev.tar.gz
Amor_Azul-6.x-1.x-dev.tar.gz
analytic-6.x-1.3.tar.gz
andreas00-6.x-1.x-dev.tar.gz
andreas02-5.x-1.7.tar.gz
andreas02-6.x-1.3.tar.gz
andreas-6.x-1.0.tar.gz
anitakravitz-6.x-1.x-dev.tar.gz
appleweb-6.x-1.x-dev.tar.gz
art4_green-6.x-1.0.tar.gz
artistsC01-5.x-1.3.tar.gz
artistsC01-6.x-1.1.tar.gz
atck-5.x-6.0.tar.gz
atck-6.x-6.0.tar.gz
aurora-5.x-1.2.tar.gz
aurora-6.x-1.0.tar.gz
austere-5.x-4.2.tar.gz
austere-6.x-4.4.tar.gz
austin-6.x-1.x-dev.tar.gz
barlow-4.7.x-1.1.tar.gz
barlow-5.x-1.3.tar.gz
barlow-6.x-1.0.tar.gz
barron-5.x-1.7.tar.gz
barron-6.x-1.0.tar.gz
basic-5.x-2.1.tar.gz
basic-6.x-2.1-beta1.tar.gz
basic-7.x-1.x-dev.tar.gz
basic_sass-6.x-1.1.tar.gz
beginning-6.x-1.4.tar.gz
beginningW2-6.x-1.2.tar.gz
blix-5.x-1.x-dev.tar.gz
blix-6.x-2.1.tar.gz
blommor01-5.x-1.2.tar.gz
blommor01-6.x-1.x-dev.tar.gz
blossom-5.x-1.x-dev.tar.gz
blossom-6.x-1.x-dev.tar.gz
blue_bars-4.7.x-1.0.tar.gz
blue_bars-5.x-1.2.tar.gz
blue_bars-6.x-1.2.tar.gz
bluebreeze-4.7.x-1.2.tar.gz
bluebreeze-5.x-1.2.tar.gz
bluebreeze-6.x-1.x-dev.tar.gz
bluecitron-6.x-1.4.tar.gz
bluelake-4.7.x-1.0.tar.gz
bluelake-5.x-1.1.tar.gz
bluelake-6.x-1.1.tar.gz
bluelake-7.x-1.x-dev.tar.gz
bluemarine_ets-6.x-1.x-dev.tar.gz
bluemarine_ets-7.x-1.x-dev.tar.gz
bluenile-6.x-1.0.tar.gz
blueprint-5.x-1.2.tar.gz
blueprint-6.x-1.2.tar.gz
bluespan-6.x-1.2.tar.gz
bluetrip-5.x-1.0-beta1.tar.gz
bluetrip-6.x-1.0-beta2.tar.gz
blue_zinfandel-5.x-1.x-dev.tar.gz
blue_zinfandel-6.x-1.x-dev.tar.gz
bluezone-5.x-2.x-dev.tar.gz
bluezone-6.x-1.0.tar.gz
box_grey-4.7.x-1.x-dev.tar.gz
box_grey-5.x-1.1.tar.gz
box_grey-6.x-1.1.tar.gz
burnt-4.7.x-1.0.tar.gz
burnt-5.x-1.4.tar.gz
burnt-6.x-1.6.tar.gz
camsel-6.x-1.4.tar.gz
cdmug-6.x-1.3.tar.gz
celju-5.x-1.1.tar.gz
celju-6.x-1.3.tar.gz
changeme-6.x-1.0.tar.gz
channel_nine-4.7.x-1.0.tar.gz
channel_nine-5.x-1.2.tar.gz
channel_nine-6.x-1.2.tar.gz
cherryblossom-6.x-1.x-dev.tar.gz
chrono-6.x-1.0-beta2.tar.gz
chrysalis-6.x-1.x-dev.tar.gz
clean-5.x-1.5.tar.gz
clean-6.x-1.2.tar.gz
cleanstate-6.x-1.0.tar.gz
clearblue-6.x-1.0-beta1.tar.gz
clearlooks-6.x-1.0-beta2.tar.gz
cms-theme-5.x-1.x-dev.tar.gz
Colorart-6.x-1.x-dev.tar.gz
colorfulness_theme-6.x-5.1.tar.gz
colorpaper-6.x-2.0-beta4.tar.gz
colourise-6.x-2.0.tar.gz
contented7-5.x-2.14.tar.gz
contented7-6.x-2.14.tar.gz
coolwater-5.x-1.1.tar.gz
coolwater-6.x-1.0.tar.gz
coolweb-6.x-1.x-dev.tar.gz
CristalX4Drupal-5.x-1.0.tar.gz
CristalX4Drupal-6.x-1.x-dev.tar.gz
cws-6.x-1.x-dev.tar.gz
d4rk-6.x-1.x-dev.tar.gz
daleri-structure-6.x-1.3.tar.gz
dark-5.x-1.x-dev.tar.gz
dark-6.x-1.0.tar.gz
darkblue-6.x-1.0.tar.gz
darkelegance-6.x-1.1.tar.gz
darkgreen-5.x-1.x-dev.tar.gz
darkgreen-6.x-1.x-dev.tar.gz
darsch-5.x-1.x-dev.tar.gz
darsch-6.x-1.1.tar.gz
decayed-6.x-1.x-dev.tar.gz
deco-5.x-1.x-dev.tar.gz
deco-6.x-1.1.tar.gz
delicious_fruit-6.x-2.1.tar.gz
dreamy-5.x-1.7.tar.gz
dreamy-6.x-1.4.tar.gz
dropshadow-6.x-1.1-beta1.tar.gz
drupazine-6.x-1.x-dev.tar.gz
drupify-5.x-1.x-dev.tar.gz
drupify-6.x-1.x-dev.tar.gz
easybreeze-5.x-1.1.tar.gz
easybreeze-6.x-1.1.tar.gz
ebizon_exotic_red-5.x-1.x-dev.tar.gz
ebizon_exotic_red-6.x-1.2.tar.gz
ebizon_redfire-5.x-1.2.tar.gz
ebizon_redfire-6.x-1.2.tar.gz
elegant-5.x-1.0.tar.gz
elegant-6.x-1.0.tar.gz
elements_theme-6.x-1.x-dev.tar.gz
fadethingee-6.x-1.3.tar.gz
fblike-5.x-1.x-dev.tar.gz
fblike-6.x-1.x-dev.tar.gz
fervens-6.x-1.0-beta1.tar.gz
flexible-5.x-1.2.tar.gz
flexible-6.x-1.6.tar.gz
foliage-6.x-1.5.tar.gz
forest_floor-5.x-1.5.tar.gz
forest_floor-6.x-1.7.tar.gz
foundation-5.x-1.0.tar.gz
foundation-6.x-1.0.tar.gz
fourseasons-5.x-1.18.tar.gz
fourseasons-6.x-1.20.tar.gz
framework-5.x-2.2.tar.gz
framework-6.x-2.4.tar.gz
freestyle-6.x-1.1.tar.gz
fresh_media-6.x-2.1.tar.gz
friendselectric-4.7.x-1.x-dev.tar.gz
friendselectric-6.x-1.0.tar.gz
fruity-5.x-1.0.tar.gz
fruity-6.x-1.x-dev.tar.gz
genesis-6.x-1.2.tar.gz
genesis_coldday-6.x-1.2.tar.gz
genesis_darkmatter-6.x-1.2.tar.gz
genesis_LITE-6.x-1.x-dev.tar.gz
genesis_typo1-6.x-1.x-dev.tar.gz
genesis_webify-6.x-1.x-dev.tar.gz
genesis_webx-6.x-1.2.tar.gz
genesis_zine-6.x-1.2.tar.gz
glossyblue-5.x-1.0.tar.gz
glossyblue-6.x-1.0.tar.gz
goofy-4.7.x-1.x-dev.tar.gz
goofy-6.x-2.x-dev.tar.gz
grassland-6.x-1.1-beta3.tar.gz
green-4.7.x-1.0.tar.gz
green-5.x-1.0.tar.gz
green-6.x-1.0.tar.gz
greenhouse-5.x-1.1.tar.gz
greenhouse-6.x-1.x-dev.tar.gz
greenNblack-5.x-1.2.tar.gz
greenNblack-6.x-1.5.tar.gz
happypixels-6.x-1.1-alpha2.tar.gz
hiroshige-6.x-1.3.tar.gz
htmlzero-6.x-1.x-dev.tar.gz
hunchbaque-5.x-1.0.tar.gz
hunchbaque-6.x-2.x-dev.tar.gz
ifeeldirty-6.x-1.0.tar.gz
iui-6.x-1.0.tar.gz
k2-4.7.x-1.x-dev.tar.gz
k2-5.x-1.0.tar.gz
k2-6.x-1.x-dev.tar.gz
kommunity-5.x-1.1.tar.gz
kommunity-6.x-2.1.tar.gz
layoutstudio-6.x-1.1.tar.gz
leaf-5.x-1.x-dev.tar.gz
leaf-6.x-1.2.tar.gz
lemontwist-5.x-2.0.tar.gz
lemontwist-6.x-2.0.tar.gz
light-5.x-1.7.tar.gz
light-6.x-2.5.tar.gz
lightfantastic-6.x-1.0.tar.gz
litejazz-5.x-1.7.tar.gz
litejazz-6.x-1.7.tar.gz
magazeen-6.x-1.6.tar.gz
marinelli-6.x-2.93.tar.gz
millwood-6.x-1.x-dev.tar.gz
mobi-6.x-1.x-dev.tar.gz
mobi-7.x-1.x-dev.tar.gz
mobile-4.7.x-1.x-dev.tar.gz
mobile-5.x-1.x-dev.tar.gz
mobile-6.x-4.x-dev.tar.gz
moleskine-5.x-1.2.tar.gz
moleskine-6.x-1.3.tar.gz
moleskine-7.x-1.x-dev.tar.gz
moshpit-6.x-1.1.tar.gz
mothership-6.x-1.x-dev.tar.gz
mulpo-5.x-1.x-dev.tar.gz
mulpo-6.x-1.x-dev.tar.gz
multiflex3-5.x-1.5.tar.gz
multiflex3-6.x-1.5.tar.gz
neewee-6.x-1.x-dev.tar.gz
nerdalistic-5.x-5.x-dev.tar.gz
nerdalistic-6.x-1.2.tar.gz
newsflash-5.x-1.6.tar.gz
newsflash-6.x-1.6.tar.gz
newswire-6.x-3.2.tar.gz
nigraphic-6.x-1.x-dev.tar.gz
ninesixty-6.x-1.x-dev.tar.gz
ninesixty-7.x-1.x-dev.tar.gz
nista-6.x-4.1.tar.gz
nitobe-6.x-3.3.tar.gz
nitobe-7.x-1.1.tar.gz
nixer-6.x-1.0.tar.gz
nonzerored-6.x-1.0.tar.gz
noprob-4.7.x-1.x-dev.tar.gz
noprob-5.x-4.1.tar.gz
noprob-6.x-2.1.tar.gz
n_rebuild-5.x-1.31.tar.gz
n_rebuild-6.x-1.31.tar.gz
offline-6.x-1.1.tar.gz
oxidation-6.x-1.0.tar.gz
painted-5.x-1.2.tar.gz
painted-6.x-2.0-beta1.tar.gz
painted-7.x-1.0-alpha4.tar.gz
Pixeled-6.x-1.x-dev.tar.gz
pixture-5.x-1.1.tar.gz
pixture-6.x-1.1.tar.gz
pixture_reloaded-6.x-3.0.tar.gz
plainscape-6.x-1.2.tar.gz
pluralism-6.x-1.0.tar.gz
plutado-5.x-1.12.tar.gz
plutado-6.x-1.5.tar.gz
plutado_blue-5.x-1.12.tar.gz
plutado_blue-6.x-1.7.tar.gz
plutado_red-5.x-1.12.tar.gz
plutado_red-6.x-1.5.tar.gz
plutado_wide-5.x-1.12.tar.gz
plutado_wide-6.x-1.6.tar.gz
purple_box-6.x-2.1.tar.gz
refresco-6.x-1.3.tar.gz
riebel-6.x-1.x-dev.tar.gz
rootcandy-6.x-1.0.tar.gz
salamander-5.x-1.11.tar.gz
salamander-6.x-1.4.tar.gz
salamanderskins-5.x-1.0.tar.gz
salamanderskins-6.x-1.1.tar.gz
sandtiger-6.x-1.3.tar.gz
SanQReLl-6.x-1.0.tar.gz
sapo-6.x-1.0.tar.gz
scruffy-6.x-1.0.tar.gz
shallowgrunge-6.x-2.1.tar.gz
sharepoint-like-4.7.x-1.0.tar.gz
sharepoint-like-5.x-1.0.tar.gz
sharepoint-like-6.x-1.1.tar.gz
simpla-6.x-1.1.tar.gz
simplex2-4.7.x-1.0.tar.gz
simplex2-5.x-1.1.tar.gz
simplex2-6.x-1.1.tar.gz
simply_modern-6.x-1.3.tar.gz
sitebrowser_basic-6.x-1.x-dev.tar.gz
sky-5.x-4.x-dev.tar.gz
sky-6.x-2.x-dev.tar.gz
skyliner-6.x-1.x-dev.tar.gz
skyroots-6.x-1.2.tar.gz
slash-5.x-1.1.tar.gz
slash-6.x-1.x-dev.tar.gz
smoothBlue-6.x-2.0.tar.gz
soldier-6.x-1.2.tar.gz
splender-6.x-1.0.tar.gz
spooner-6.x-1.3.tar.gz
spreadfirefox-4.7.x-1.x-dev.tar.gz
spreadfirefox-5.x-1.0.tar.gz
spreadfirefox-6.x-1.x-dev.tar.gz
stark-6.x-1.0.tar.gz
Stasis-6.x-1.x-dev.tar.gz
strange_little_town-6.x-1.0-beta1.tar.gz
studio-6.x-1.x-dev.tar.gz
superclean-6.x-1.2.tar.gz
tapestry-5.x-1.0.tar.gz
tapestry-6.x-1.x-dev.tar.gz
tarski-6.x-1.x-dev.tar.gz
tendu-5.x-1.6.tar.gz
tendu-6.x-2.1-beta5.tar.gz
terrafirma_theme-5.x-1.5.tar.gz
terrafirma_theme-6.x-2.1.tar.gz
tivity-6.x-1.1.tar.gz
tma-6.x-1.1.tar.gz
toasted-6.x-1.0-beta2.tar.gz
TVframe-6.x-1.x-dev.tar.gz
twilight-5.x-1.1.tar.gz
twilight-6.x-1.1.tar.gz
ubiquity-5.x-1.x-dev.tar.gz
ubiquity-6.x-1.x-dev.tar.gz
vertigo-5.x-1.x-dev.tar.gz
wabi-5.x-1.1.tar.gz
wabi-6.x-1.1.tar.gz
waffles-6.x-1.3.tar.gz
wowdarkblue-6.x-1.x-dev.tar.gz
wowgreen-6.x-1.x-dev.tar.gz
wownightelf-6.x-1.2.tar.gz
wowwotlk-6.x-2.x-dev.tar.gz
wyo-6.x-1.0-beta3.tar.gz
zen-5.x-1.2.tar.gz
zen-6.x-1.0.tar.gz
zilo_blog-6.x-1.0.tar.gz
zubrick-6.x-1.1.tar.gz

Drupal 6. Импорт нодов в виде XML

Я работаю вебмастером для одной небольшой фирмы. Наша фирма производит несколько однотипных продуктов с разными характеристиками. Возникла задача размещать прайс-лист этих товаров сразу на несколько сайтов. Я сделал простейшую базу данных на Access, куда заносятся эти товары.

После этого нужно было заставить обновленные прайсы импортироваться в Drupal одним щелчком мыши.

Модуль node_import мне понравился, но к сожалению полностью автоматизировать мою работу он не смог.

Поэтому я написал модуль xmlnodeimport для того, чтобы можно было импортировать любые ноды, предварительно сгенерированные в виде XML файла.

Работает он очень просто.

Вы генерируете XML файл например следующей структуры:


<import>

<node type="page">
<param name="title">About company</param>
<param name="body">Lorem ipsum dolor sit amet.</param>
</node>

<node type="story">
<param name="title">Our site is open!</param>
<param name="body">Our site is open since today!</param>
</node>

<node type="product">
<param name="title">Product1</param>
<param name="field_sizemin">0</param>
<param name="field_sizemax">100</param>
<param name="field_price_uah">300</param>
<param name="field_color">red</param>
<param name="field_order">2</param>
</node>

</import>



В данном случае мы импортируем одну страницу, одну новость и один нод с CCK типом product.

Потом на своем сайте идете по ссылке /xmlnodeimport и вставляете содержимое файла в текстовое поле. Жмете кнопку "сохранить".

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

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

Скачать.

суббота, 6 июня 2009 г.

Полноэкранные скриншоты тем для Drupal 6

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

Скачать: http://www.4shared.com/file/110226711/76040e28/shots1.html


Темы Drupal

1025px camsel mulpo
abarre celju multiflex
ability changeme
ablock cherry_blossom neewee
about chrono newsflash
activesite clean newswire
ad_blueprint colorpaper nitobe
addari colourize nixer
ad_novus_fluid contented7 nonzero
ad_redoable coolwater noprob
ad_the-morning-after crysalis oxidation
Aeon5 CrystalX4Drupal painted
affaires darkblue pixeled
agregado darkelegance plainscape
alagna doil pluralism
alchemist dreamy plutado
alek_2_0 dropshadow plutado_red
alina drupify purple_box
amadou easybreeze redfire
amity_island elements_theme salamander12-white
Analitic fadethingee sanq
andreas01 fblike sanqreal
andreas02 fervens shallowgrunge
andreas03 foliage simpla_liquid
andreas04 forest_floor simplex
andreas06 foundation simply_modern
andreas07 fourseasons skyliner
andreas08 framework sky
andreas friendselectric soldier
anita_kravitz genesis_darkmatter spooner
appleweb genesis_webx stasis
aquia_marina genesis_zine superclean
aquia_slate giordani tapestry
atlantis glossyblue tarski
barlow goofy terrafirma
barron grasland tiviti
beginning greenhouse tma
bluebars greenNblack toasted
blue_lake happypixels twilight
bluenile hiroshige ubiquity
bluespan ifeeldirty wabi
blue_zinfandel lemontwist waffles
bluezone lightfantastic wyo
box_cleanstate light zen_classic
box_grey millwood zubrick
burnt moleskin






воскресенье, 1 марта 2009 г.

Глюки при установке magento 1.2

Кратко.

При установке magento есть несколько глюков.

Глюк. Magento не ставится под windows.
Лечение. И не поставится, не пытайтесь.
Успешной инсталляции я добился на ubuntu 8.10. Apache из XAMPP 1.7, MySQL - не из XAMPP(!!!!). MySQL надо ставить из убунтовского репозитария. Командой sudo apt-get install mysql-server. Кроме того не лишне было бы поставить mysql-navigator для визуальной работы с MySQL. Впрочем это на любителя.

Глюк. При установке на странице мастера - там, где требуют параметры базы данных - вводим все параметры и... после 2-секундного раздумья оказываемся на той же странице (ни сообщений об ошибке - ничего)!
Лечение. Magento пытается подконенектиться через сокет, а не через сеть! Magento не выводит сообщений об ошибке в этом случае. Чтобы форсировать коннекшн через сеть, просто укажите 127.0.0.1 вместо localhost.

Глюк. После установки magento пытаемся залогиниться в административный интерфейс - и опять! Никакого сообщения об ошибке, просто не пускает!
Лечение. Домен должен содержать точку. У меня сначала была та же ошибка (я использовал имя домена mage), потом сделал magentolocalhost.com и все заработало. Перемудрили ребята с безопасностью...

четверг, 22 января 2009 г.

Как убрать рекламу на ucoz.ru

Если у вас есть сайт на ucoz.ru и если вы хотите иметь серьезные проблемы с этим хостингом, убрав его рекламу, показами которой вы в сущности оплачиваете его услуги, то эта статья для вас.

Чтобы убрать рекламу на вашем сайте, лежащем на ucoz.ru, в шаблон сайта вставьте следующий скрипт:


<script>
var divs = document.getElementsByTagName("DIV");
for (var i = 0; i < divs.length; i++)
{
if(divs[i].id.indexOf('adBar') == 0)
{
var enemy = document.getElementById(divs[i].id);
enemy.parentNode.removeChild(enemy);
}
}
</script>


Скрипт просто находит div, id которого начинается на adBar и удаляет его. В принципе невозможно написать такую рекламу, которую было бы невозможно удалить через javascript. В данном случае мы отсеиваем "вредный" контент по id. Если бы не было этого свойства, можно было бы это определять по положению на странице, по месту в дереве DOM, по z-index, по содержимому, даже по разным способом получаемым сигнатурам и.т.д.

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

вторник, 6 января 2009 г.

Что нужно для того чтобы написать чат

1 Технические требования

Сервер:
- Apache 2.0
- PHP5
- Mysql5
- PEAR::Service_Json - библиотека для того чтобы можно было работать с данными, упакованными в JSON. С их помощью будет осуществляться обмен данными между клиентом и сервером
- DB_Simple (см. www.dklab.ru) - библиотека для НОРМАЛЬНОЙ работы с базой данных

Клиент:
- Dojo1.0+ - библиотека для работы с AJAX, для красивых визуальных эффектов (впрочем последнее вряд ли понадобится)
- Всё.

2 Принцип действия

Примерно это все должно действовать так.

1. Как читать сообщения
Загрузили страницу. В ней
в который будет выводиться история чата. Эдакая консоль.
Кроме того на странице есть форма с текстовым инпутом. И кнопка "отправить".
Будет скрипт который раз в пару секунд будет вызывать функцию readNewMessages() "проверить свежие сообщения".
Что делает функция readNewMessages - она посылает AJAX запрос на сервер. В запросе мы сообщаем: "Я - юзер $такой-то. Последний раз я к тебе обращался $тогда-то. Какие сообщения пришли с тех пор?".
Сервер делает выборку в БД - выбирает все сообщения метка времени которых больше чем $тогда-то.
Сервер формирует ответ - массив сообщений и новую отметку времени.
Клиент, когда к нему пришли сообщения, выводит их в history и запоминает отметку времени самого последнего полученного сообщения. Её то он и спросит в следующем запросе!

2. Фигня это все.

(Пункт 2 рекомендуется читать поняв пункт 1)

Я о том что ИД юзера и отметку времени можно хранить не на клиенте (это довольно небезопасно), а на сервере. Для этого мы используем механизм сессий. А клиенту останется тока залогиниться и передавать каждый раз идентификатор сессии. Да и то об этом мы не будем думать - ведь он хранится в куки. То есть запрос клиента можно перефазировать: "Вот тебе мой ИД сессии. Я сам знаешь кто и мне нужны свежие сообщения с сам знаешь какого момента!"

3. Как посылать сообщения

Вообще фигня. Когда юзер жмет на кнопку "Отправить", вызывается функция которая шлёт AJAX запрос на сервак со словами (мы условились работать на сессиях - см. пункт 2) "Я сам знаешь кто. Вот моё $сообщение."
Сервак пишет сообщение в базу данных и говорит "принято" или "ошибка".
Как тока от сервака приходит ответ "принято", мы очищаем текстовый инпут давая юзеру понять что ему можно посылать новый бред.

3. Детали реализации

1. Протокол
На сервере есть скрипт server.php. Он принимает AJAX запросы в формате JSON

{
action: 'какая то команда',
data:
{
...какие то аргументы этой команды
}
}
и отвечает:
{
result: 'статус ответа - ok или error',
data:
{
...данные которые сервер отвечает клиенту
}
}


В action мы пишем что за команду хотим выполнить, data - это ее аргументы.
Сервер отвечает: response - это статус и data - данные которые вернул сервер.


action может быть login, read, write.
responce может быть ok или error



1)login - сообщаем серверу своё имя (для простоты пароля не надо и юзеры нигде не хранятся)

Пример:

{
action:'login',
data:
{
'name':'vasya'
}
}


сервер отвечает

{
result:'ok',
data:
{
'greeting':'Добро пожаловать, vasya!'
}
}



2)read - просим сервер сообщить свежие сообщения

Пример:

запрос
{
action: 'read'
}
ответ
{
result:'ok',
data:
{
messages:
[
1:
{
time:8299888656574,
user:'Vovka',
text:'Че за нахъ?'
}
2:
{
time:8299888656580,
user:'DarkAngel',
text:'В бОбруЙск жевотнае!!!!'
}
]
}
}


3)write - посылаем свой месседж на сервер

Пример:
запрос

{
action: 'write',
data:
{
message: 'Уйду я от вас злые вы...'
}
}

ответ
{
result: 'ok'
}


2. Сервер читает JSON строку и разлагает ее на PHP объекты с помощю класса Service_Json.
Потом смотрит что за action и вызывает в своем классе метод, имя которого равно переменной action, передавая ему параметром переменную data.
Как то так:



class Chat_Server
{
...
//запуск класса
public function serve()
{
$q = $_POST['q'];// получили строку АЯКС запроса
$json = new Service_Json();//создали JSON декодер

$requestObject = $json->decode($q);

$method = $q->action;
$args = $q->data;

$this->$method($args); //вызвали у себы тот метод, имя которого совпадает с переменной action полученной в запросе
}

public function read($args)
{
//читаем сообщения из базы и возвращаем результат
}
public function write($args)
{
//пишем сообщение юзера в базу
}
public function login($args)
{
//стартуем пользовательскую сессию
}
...
}

//создали класс сервера
$myServer = new Chat_Server();

//обслужили запрос
$myServer->serve();

?>


Я тут очертил скелет сервера. Пока нет функции ответа клиенту и я не уверен что не напутал ничего...

понедельник, 5 января 2009 г.

Google Hacker Search

Не так давно наткнулся на интересную ссылку Google Hacker Search. Это морда гугла, сделанная в "кулхацкерсокм стиле". Интересно что авторы этого творения - коллектив Google. Оказывается у них все в порядке с чувством юмора.