Рейтинг
+9.04

Вебмастерское

13 читателей, 316 топиков

martdesign / мартдизайн

Вебмастерское
Давайте, теперь возьмем их.
Они сейчас, по топу2010, на бонине, №1.
Что же там такого, на №1? :)

Мне стало интересно. Я по rss всегда читал бонина, поэтому только мельком слышал. Что там охуенные интерфейсы. Вот и все.

Поехали.
martdesign.ru
Сервер: martdesign.ru
Адрес: 90.156.201.49

Вхуз.

На ФИО и телефон, токо
mart-design.ru
martdesign.ru
nikodim.ru

Первые 2 не интересны.
А вот nikodim.ru закрытое что-то. Наверно, командный домен, для общения с удаленщиками.
Вхуз прилагаю.

Там еще всякие фамильные домены, да мыла.
Это мы потом.
[email protected] (гуглим, находим +7 913 908 0828)
[email protected] (гуглим, находим eugeneyukechev.com, его тоже не забыть просмотреть что за)
Сервер: yukechev.com
Адрес: 90.156.201.49
Сервер: eugeneyukechev.com
Адрес: 195.208.0.141

Еще отмечаем, для себя.

Прямо жесть :) Директор как никак еб.

ns.nikodim.ru (178.49.199.172) (Инетра)
ns1.erabota.ru (82.200.99.182) (ZSTTK)
Когда то было так :) Интересная связка.

media-express.nsk.su (212.164.71.50) (и я сразу вижу, что это Ринет)
ns.nikodim.ru (178.49.199.172) (инетра, электронный город)

ns.n-sk.ru
ns.nikodim.ru

Чувак значит с иработой связан.
И очень мало людей, способны заюзать такую связку DNS. Так что я уже кажется вижу.

Далее смотрим, что за n-sk.ru?

ns.n-sk.ru (195.62.1.65)
ns.nstu.ru (217.71.128.65) (кстати, все старперы там сука учились :))
ns.turbo-sib.ru (82.98.86.164)

И узнаем, еще такие домены.
nemezkij-nsk.ru (195.62.7.62)
nrcde.ru (195.62.0.8)
inetnum: 195.62.0.0 — 195.62.1.255
netname: NRCDENET
descr: Novosibirsk Regional Center of Distance Education
descr: 630092, Novosibirsk, Russia
country: RU
ddress: 20, Karl Marx avenue
address: Novosibirsk, 630092
address: Russia
phone: +7 383 3460455
abuse-mailbox: [email protected]
Это видать с прошлого осталось.

Смотрим, еще turbo-sib.ru по вхузу.

Видим очень знакомые данные ;) Не буду о этом, это будет в отчете по сибнету, когда-ниб.
Но, так же видим, что домен не продлялся, и сейчас перекуплен квостером.
Как обычно, уже дохуя лет, все говно, на turbo.nsk.su (nsk.su — Ринет). И вообще, если вы погуглите на это, то очень много узнаете.

Смотрим телефон +7 383 2384050
и конечно, же видим до боли знакомые домены.
country.ru
internit.ru
sibline.ru
job-list.ru
kraspan.ru
risp.ru
sibnet-team.ru
siec.ru
signatec.ru

Так, углубились уже не туда. Возвращаемся к началу.
Что вообще на ip 90.156.201.49, где их корневой домен.
amt-2010.ru
arenda-ptz.ru
arkconnect.ru
arkthompson.ru
arloni.ru
autoservice51.ru
bravo-test.ru
capitalgroup.ru
centrenergokomplekt.ru
cinemashop.ru
ckmd.ru
club7.ru
dallas-krasnodar.ru
fotoad.ru
inbrief.ru
intexec.ru
jetprint.ru
leontyevpartners.ru
luescher.ru
luscher.ru
lvadvokat.ru
magic42.ru
mental-spa.ru
mspirina.ru
promospace.ru
ramfish.ru
russia-today.ru
russia-today.ru
russia-today.ru
rusttex.ru
sagert.ru
talent-lab.ru
tandem500.ru
terrakultur.ru
tropoysergiya.ru
tspecstroi.ru
viewfromabove.ru
vikingz.ru

И мне выдался ебанный шлак из dns. Видимо, чел, уж очень любит dns структуру. При любом удобном случае мутит что-то новое. Я тут почистил уже шлак, но мне да изначально списки доменов, айпишников и dns выдаются. Я просто подчищаю, чтобы пост не засирать.
Короче либо это директор задрочился. Либо у него друг техник, которых за все это отвечает, слишком «сложный человек» по характеру. Полюбому.

Смотрим что к чему, вообще, по ip.
inetnum: 90.156.201.0 — 90.156.201.255
netname: MASTERHOST-HOSTING

Мастерхост это говно. Но еще, я видел, что whois менялся 3 дня назад(26.04.11), ОЧЕНЬ ПОДОЗРИТЕЛЬНО, на приват-персон, на совсем другой телефон, и возможно чел просто перенес домен на шлако хостинг. Потому что открыв десять доменов из списка, там все «вообще не новосибское». Так что, я просто обязан, копнуть и на остальные ip, которые в истории сохранились. И обязательно по портфель компании пройтись. Может реально, портфель на другом ip спрятался.

Хотя, тут я вспоминаю, что видел.

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

Давайка пройдемся, по портфелю. Но увы, я не нашел там сходу никаких ссылок на домены. Хуй поймешь что за домены да они оформили.
ок.
и тут вспоминаем, что мы не просканили второй ip, где висит внезапный eugeneyukechev.com
Да. новый хостинг.
inetnum: 195.208.0.0 — 195.208.7.255
netname: RU-NIC-HOSTING
hosting.nic.ru
Тоже фэйло-хостинг. Такое ацкое говно. Ну похуй. Что висит на ip 195.208.0.141? виртуальный шлак или там vps?
Насканиваем много шлака. Но опять, не похоже, чтобы это делала контора №1 по рейтингу. Потому что нихуя там дизайна нету, одно дерьмо.
Так что шлак не буду постить. (как позже оказалось, это скорее всего вообще просто личный хост-аккуант владельца домена, на host.nic.ru)

Похуй. Я не сдаюсь. И иду на бонин.ру, забивать в поиск, что за работы там представлены.
И вижу, с бонина.
flamp.ru
riverpark.ru
utilex.ru
oaoktk.ru
nowywzrok.pl
nsk.v4.erabota.ru
arqa.ru
taktaktak.ru
puzzleit.ru
m-games.ru
4dc.ru
komsindrom.ru
kitchen.martdesign.ru
hlebnitsa.ru

И понимаю, теперь, при чем тут NS иработы. И вообще, что это не студия, а скорее коллектив дизайнеров.
Итак, давайте посмотрим, что за ip там.
flamp.ru — 91.221.198.10 — но мы понимаем, что это 2gis, а они токо дизайн нарисовали. и хостить не обязаны.
Но ради интереса просканим. Но увы, отдельный ip, под отдельный проект. Все правильно.

Далее, riverpark.ru, 90.156.201.11
utilex.ru — 89.108.64.242
oaoktk.ru — 90.156.201.13
nowywzrok.pl — 91.217.114.11
arqa.ru — 193.178.135.12
taktaktak.ru — 94.251.80.2
puzzleit.ru 78.159.121.29
m-games.ru 194.63.140.49
4dc.ru 89.108.64.242
komsindrom.ru 90.156.211.141
hlebnitsa.ru 90.156.201.42

В итоге. Сканим каждый. И приходим к выводу, что хуй. На каждом таком ip я могу около 50 доменов набрать.(как в вверху, с первого ip взял) Но они по сути говно и открыв их не видно ссылок, что это их домены и блабла. Постить не буду.

Короче у них нету своих серверов, даже одного.

Они либо, покупают обычный виртуалньй хостинг за 200р/мес. Для каждого отдельного проекта. И просто отдают клиенту данные, он сам наверно продляет и все такое. Ну, исходя из ip видим, что предпочитают мастерхост. Так что у них в команде нету, не одного грамотного техника.

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

jQuery для favicon

Вебмастерское
Демо: data6.alice2k.net/a13/8/index.html

jQuery.favicon.animate позволяет имплементировать простую покадровую анимацию. Понятное дело, что вам нужно запастись всеми кадрами, которые вы хотите проиграть.

/**
 * Interface onDrawCallback
 * @param {Context} context     HTML5 Canvas 2d Context
 */
var DrawCallback = function (context) {};

/**
 * jQuery.favicon interface
 * @param {String} iconURL
 * @param {String} alternativeURL
            (опциональный) URL, который будет использоваться для старых браузеров, которые не поддерживают элемент HTML5 Canvas
 * @param {DrawCallback} onDrawCallback
            (опциональный) Функция обратного вызова, которая нарисует что-то на иконке
 *
 * function (iconURL)
 * function (iconURL, onDraw)
 * function (iconURL, alternateURL, onDraw)
 */
jQuery.favicon = function (iconURL, alternativeURL, onDrawCallback) {};

/**
 * jQuery.favicon.animate – Начинает анимацию
 *
 * @param {String}      animationURL
            Изображение, которое содержит кадры
 * @param {String}      alternateURL
            Изображение, которое будет вставлено, если динамика не сработает
 * @param {Object}      options         опциональный
 *
 * function (animationURL, alternateURL)
 * function (animationURL, alternateURL, {
 *   interval: 1000, // интервал, по умолчанию 1000ms
 *   onDraw: function (context) {}, // вызывается на каждом кадре
 *   onStop: function () {}, // вызывается, при остановки анимации
 *   frames: [1,3,5] // отображать кадры в особом порядке
 * })
 */
jQuery.favicon.animate = function (animationURL, alternateURL, options) {};

/**
 * jQuery.favicon.unanimate – остановить текующую анимацию
 */
jQuery.favicon.unanimate = function () {};



plugins.jquery.com/project/favicon

А еще, оказывается мои мыла на доменах

Вебмастерское
Используются как рассадник спама.
блять, токо спамерам они и нужны, походу ;(

т.к. в домене a2k.in аж 700 мыл. для сравнения в остальных около 200.
то это сто пять этот же мудак.

Не стесняется, прямо ключевые слова регает, вместо ников.

захотел купить диапозон ip

Вебмастерское
Чтобы официально в RIPE отображалось ;)

Кто уже покупал ?)

Я так понял нужен юридический адрес, да на кого оформить. Вот и все.

Но может кто-ниб кто что дельное посоветует. из своего опыта.
Если же нет, то гуглить я и сам умею ;)

Станция из железок же не нужна?
т.е. этими ip я могу пользоваться и «по нуждам» раскидывать куда хочу же, например как зеркала?

Извращения с DNS

Вебмастерское
короче.
допустим, я регнул 3 домена второго уровня. пусть будет для примера — nya1.org nya2.org nya3.org

прилепил их все, на Независимый ресурс. dns хостинг от яндекса, в котором есть полное управление зоной.

в каждом домене, настроил эту Зону. nya1 — ip1, nya2 — ip2 (и как запасной, ели падает 1 или 2 — nya3 — на 3ий ip)
*в идеале можно еще напичкать вторичные A записи, на 4ый, 5ый, 6ый ip, которые будут совсем на другом vds. и настроить дублирование 2 раза в сутки. тогда вообще идеал ;)

Это все работает. я такое проверял.

Вопрос в другом.

Если я хочу еще и почту гугла, джаббер гугла и прочее «независимыми сделать».
*как бы при такой стуктуре, все равно jabber и почта, вписывается в ISP панели, на хостинге. Именно для каждого домена. потому что записи должны соотвествовать доменному имени.

так вот, вопрос.
Если я хочу «отдельно независимо». то я могу дублировать кучу записей. например у меня 30 доменов. по 8 SRV записи на домен. значит 240 SRV записей я должен буду в эти nya1 nya2 nya3 задолбить.

и должно работать же?

а в новые домены (в эти 30 шт)
я впишу уже
DNS:
nya1.org
nya2.org
nya3.org

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

к примеру.
обычно они вот так выглядят.
_jabber._tcp.nya1.org SRV xmpp-server.l.google.com. 5 0 5269
_jabber._tcp.nya1.org SRV xmpp-server1.l.google.com. 20 0 5269
_jabber._tcp.nya1.org SRV xmpp-server2.l.google.com. 20 0 5269
_jabber._tcp.nya1.org SRV xmpp-server3.l.google.com. 20 0 5269
_jabber._tcp.nya1.org SRV xmpp-server4.l.google.com. 20 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server.l.google.com. 5 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server1.l.google.com. 20 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server2.l.google.com. 20 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server3.l.google.com. 20 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server4.l.google.com. 20 0 5269

примет ли гугл
30 таких пачек.
где вписано 30 разных доменов.

но все это будет в Зоне одного домена, который как dns.

На недели проверю ;)
А то настроить автобекапы на другие серваки это не проблема.
Но вот, DNS крайне уязвимое место. Его тоже нада сделать стабильным, вечным, сторонним. Чтобы при любых внезапных переездах почта гугла и 10 минут не простаивала.

Очевидно вы спросите меня. Что за пиздец. Зачем так все усложнять, когда можно каждый домен ручками обновлять, как на dns от регистратора, так и на яндексе том же.
Во первых, это делаю я не для себя, я да 2 минуты все исправлю, а я много знакомых хостю, с некоторыми быстро не решишь. И пока чел там пропишет, что нужно, будет время. И еще объяснять нада. Да и вообще, не люблю я отвлекать людей. Поэтому лучше мне самому о этом заботиться.
Во вторых, есть такие типы атак на dns. Когда ддосится dns сервер. Ясно понятно, яндекс труднее положить, чем обычный купленный дедик. Или менты могут забрать сервак. А еще могут засуспендить домен, на котором у тебя dns.(тут уже без разницы) Поэтому для dns делается 2 разных домена, а лучше 3(и у разных регистраторов, чтобы 3 запроса, а не один) ;)

Вообщем. :) Хочу извратиться, да придумать максимально отказоустойчивую систему в dns. Чтобы еще и одним изменением, можно было изменить «какую-то целую пачку в 30 доменов». ^_^

domains.alice2k.ru

Вебмастерское
domains.alice2k.ru
По партнерке от domaincontext.com, так что не проебутся. (если партнер отчаливает даже, через 5 лет, то через их оф сайт можно всегда получить доступ)
Оформлено, через Михея, с бывшего zloy.org еще(ну с 2009 там .bz, когда Терминатор продал Злой).
регистрация доменов

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

Класс для загрузки файлов на сервер

Вебмастерское
Пример как использовать:
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = '/public/galery/';
$upload = new Upload(str_replace('//', '/', $targetPath));

if ($upload->uploads($_FILES['Filedata'])) {
$fileInfo = $upload->getFilesInfo();
$fileInfo["nameTranslit"];// новое имя файла, можно записать в БД
}
}

Ну и собственно сам класс
class Upload {

    private $dir = "/";
    private $name;
    private $FILES;
    private $allowedType = array("jpg", "gif", "bmp", "jpeg", "png", "pps","doc","docx","xls","pdf","txt","rar","zip");
    private $errors;
    private $errorsMessage = array(1 => "Размер загружаемого файла превышает допустимый размер.",
        2 => "Размер загружаемого файла превышает допустимый размер.",
        3 => "Файл был загружен лишь частично.",
        4 => "Файл не был загружен.",
        6 => "Файл не был загружен.",
        7 => "Файл не был загружен.",
        8 => "Файл не был загружен.");

    function __construct($dir="/") {
        $this->dir = $dir;
    }

    /**
     * устанавливаем дирректорию загрузки файла
     */
    function setDir() {
        $this->dir = $dir;
    }

    /**
     * Устанавлиаем доступные расширения
     * @param <type> $type
     */
    function setAllowedType($type) {
        if (is_array($type)) {
            $this->allowedType = $type;
        } else {
            $this->allowedType = explode(",", $type);
        }
    }

    /**
     * загрузка файла
     * @param $tmpName
     * @param $name
     * @param $replacement
     */
    private function upload($tmpName, $name) {
        $name = $this->substitute(self::translit($name));

        if ($this->typeChecking($name))
            if (move_uploaded_file($tmpName, $this->dir . $name)) {
                return $name;
            } else {
                return false;
            }
        return false;
    }

    function uploads($FILES) {
        $this->FILES = $FILES;

        if (!is_array($this->FILES['name'])) {
            return $this->uploadsOneFile();
        } else {
            return $this->uploadsManyFiles();
        }
    }

    /**
     * загрузка одного файла
     */
    function uploadsOneFile() {

        if ($this->FILES['error'] != 0) {
            $this->errors[] = $this->errorsMessage[$this->FILES['error']];
            return false;
        }

        $result = $this->upload($this->FILES['tmp_name'], $this->FILES['name']);
        if ($result != false) {
            $this->FILES['nameTranslit'] = $result;
            return true;
        }
        return false;
    }

    /**
     * загрузка нескольких файлов
     */
    function uploadsManyFiles() {
        $coutFiles = count($this->FILES['name']);
        for ($i = 0; $i < $coutFiles; $i++) {
            if ($this->FILES['error'][$i] == 0) {
                $result = $this->upload($this->FILES['tmp_name'][$i], $this->FILES['name'][$i]);

                if ($result != false) {
                    $this->FILES['nameTranslit'][$i] = $result;
                } else {
                    $this->errors[] = $this->FILES['name'];
                }
            } else {
                $this->errors[] = $this->errorsMessage[$this->FILES['error']];
            }
        }

        return true;
    }

    /**
     * проверяем, разрешен ли данный файл к загрузке
     */
    function typeChecking($fileName) {
        preg_match("#([\w()-_]+)\.([\w]{1,4})$#i", $fileName, $arrayNameFiles);
        $nameEnd = strtolower($arrayNameFiles[2]);
        if (in_array($nameEnd, $this->allowedType)) {
            return true;
        } else {
            $this->errors[] = "Файлы с расширением (<b>{$fileName}</b>) не разрешенны к загрузке.";
        }
        return false;
    }

    /**
     * ищет в каталоге файлы с таким же названием дописывает номер(равный количеству файлов с таким названием) в конец
     * @param $name
     */
    function substitute($name) {

        $files = scandir($this->dir);
        unset($files[0]);
        unset($files[1]);

        $i = 0;
        $newName = $name;

        preg_match("#([\w()-_]+)\.([\w]{1,4})#i", $name, $arrayNameFiles);
        $nameStart = $arrayNameFiles[1];
        $nameEnd = $arrayNameFiles[2];

        while (in_array($newName, $files)) {
            $newName = "{$nameStart}({$i}).{$nameEnd}";
            $i++;
        }
        return $newName;
    }

    /**
     * возвращаем информацию о файле
     */
    function getFilesInfo() {
        return $this->FILES;
    }

    /**
     * возвращаем ошибки
     */
    public function errors() {
        return $this->errors;
    }

    /**
     * переводим текст в транслит
     * @param $text
     */
    public static function translit($text) {
        $rus = array("а", "б", "в",
            "г", "ґ", "д", "е", "ё", "ж",
            "з", "и", "й", "к", "л", "м",
            "н", "о", "п", "р", "с", "т",
            "у", "ф", "х", "ц", "ч", "ш",
            "щ", "ы", "э", "ю", "я", "ь",
            "ъ", "і", "ї", "є", "А", "Б",
            "В", "Г", "ґ", "Д", "Е", "Ё",
            "Ж", "З", "И", "Й", "К", "Л",
            "М", "Н", "О", "П", "Р", "С",
            "Т", "У", "Ф", "Х", "Ц", "Ч",
            "Ш", "Щ", "Ы", "Э", "Ю", "Я",
            "Ь", "Ъ", "І", "Ї", "Є", " ");
        $lat = array("a", "b", "v",
            "g", "g", "d", "e", "e", "zh", "z", "i",
            "j", "k", "l", "m", "n", "o", "p", "r",
            "s", "t", "u", "f", "h", "c", "ch", "sh",
            "sh'", "y", "e", "yu", "ya", "_", "_", "i",
            "i", "e", "A", "B", "V", "G", "G", "D",
            "E", "E", "ZH", "Z", "I", "J", "K", "L",
            "M", "N", "O", "P", "R", "S", "T", "U",
            "F", "H", "C", "CH", "SH", "SH'", "Y", "E",
            "YU", "YA", "_", "_", "I", "I", "E", "_");
        $text = str_replace($rus, $lat, $text);
        return(preg_replace("#[^a-z0-9._-]#i", "", $text));
    }

}

HTML карта сайта на WordPress

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

В действительности, очень полезно использовать карту сайта HTML как часть темы. В таком случае карту сайта можно использовать и на странице WordPress для ошибки 404. Чтобы сделать карту сайта HTML частью темы надо создать папку partials в папке вашей темы. В папке partials создаем создаем файл с именем sitemap.php.

Копируем в него следующий код и правим его в соответствии со структурой своего сайта:
<h2 id="authors">Authors</h2>
<ul>
<?php 
wp_list_authors( 
  array(
    'exclude_admin' => false,
  )
); 
?>
</ul>
 
<h2 id="pages">Страницы</h2>
<ul>
<?php
// Страницы, которые надо исключить из карты сайта добавляем к exclude здесь
wp_list_pages( 
  array(
    'exclude' => '',
    'title_li' => '',
  )
);
?>
</ul>
 
<h2 id="posts">Заметки</h2>
<ul>
<?php
// Категории, которые надо исключить, добавляем к exclude здесь
$cats = get_categories('exclude=');
foreach ($cats as $cat) {
  echo "<li><h3>".$cat->cat_name."</h3>";
  echo "<ul>";
  query_posts('posts_per_page=-1&cat='.$cat->cat_ID);
  while(have_posts()) {
    the_post();
    $category = get_the_category();
    // Ссылку на заметку выводим только один раз, даже если она указана в нескольких категориях
    if ($category[0]->cat_ID == $cat->cat_ID) {
      echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
    }
  }
  echo "</ul>";
  echo "</li>";
}
?>
</ul>

Теперь там, где нужно вывести HTML карту сайта в теме WordPress вставляем следующий код:
<?php get_template_part('/partials/sitemap'); ?>



Чтобы сделать шаблон для карты сайта нужно скопировать файл page.php и переименовать копию в page-sitemap.php. Затем открываем его и ниже вызова функции the_content(); добавляем упомянутый ранее вызов get_template_part(). Теперь переходим в начало файла и после открывающего тега <?php (но перед вызовом get_header()), добавляем комментарий:
/*
Template Name: Карта сайта HTML
*/