Category Archives: Сисадминство

Async document.write – костыль, или меняем код on-the-fly

Я не знаю, почему этот пост будет отнесен к категории “Сисадминство”, но категории “программирование” у меня тут нет. Мне просто лень открыть страницу и создать ее, распространяя хаос на этот блог. Давайте держать все организованным, хоть и не там, где надо.

Итак. Я реализую один очень интересный™ проект, и там встала проблема – скрипт загрузчика капчи надо грузить асинхронно через XMLHttpRequest, а в этом скрипте говнокод. А именно – document.write, чтобы размещали его просто в странице. Этот скрипт также вызывает уже саму капчу где, что бы вы думали? Тоже document.write!

Ну я конечно попробовал, но вот хуй там. Если раньше document.write из асинхронного запроса просто ломал DOM, то теперь нам вежливо намекают, что ты мудак:

Failed to execute ‘write’ on ‘Document’: It isn’t possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened

Такие вот дела.

Что же делать? Ну первая мысль была о том, чтобы попробовать загрузить src скрипта асинхронно, поменять код и затем выполнить eval. Но нет, так нельзя, все бьется о Same-Origin-Policy.

Что же делать? А давайте вспомним величайшие возможности javascript по изменению всего и вся и переназначем функцию document.write.

Наверное на этом моменте я ***нулся.

document.write = function (text) {
    if (text.match(/_puzzle/)) {

        document.querySelector('#_scriptloader').innerHTML = (text);
        var script = document.createElement("script");

        script.type = "text/javascript";
        script.src = (document.querySelector("#_scriptloader script").src);
        document.querySelector('#_captcha').appendChild(script);
    } else {
        document.querySelector('#_captcha').innerHTML = (text)
    }
}

Просто берем и пишем в какой-либо div-плейсхолдер. Потом из этого дива берем src (ведь тупо вставкой кода в html асинхронно-загруженный html-код скрипта не выполнится, вы же помните это), создаем новый dom-объект script, и спокойно вставляем его в шапку или куда еще.

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

Итого, алгоритм следующий:

  1. Переопределить функцию document.write, чтобы она писала в какой-то скрытый div.
  2. Запросить target-страницу с <script src=blabla> с document.write.
  3. Вставить полученный <script src=blabla> в скрытый div.
  4. Создать пустой DOM-элемент script, установить ему src из div->script->src
  5. Добавить его в шапку или на страницу, он исполнится, вызывая переопреледенную document.write.
  6. Проверить, что там пришло в измененную функцию, и в зависимости от данных делать с ними что-либо.
  7. Начать сначала.

В п***у программирование, пойду выпью пива.

Блог с защитой и в бане

Вуаля! Этот уютный бложик обзавелся https://. Теперь его страницы можно смотреть, не опасаясь рекламы в московском метро и слежки спецслужб. Вместе с тем виданный cloudflare адрес находится в блэк-литсе роспидорнадзора, так что попасть на него вам стало еще сложнее.

Наслаждайтесь!

iSCSI Hell

Пиво помогает в системном администрировании. Это общеизвестный факт. Тем не менее, не пья (пив?) пиво в течение целой недели нельзя заниматься системным администированием. Это тоже факт.

Факт выливается в то, что я лоханулся 3 раза:

1) Не сделал бэкап пре-продакшен системы.

2) Имея дело в последнее время в основном с SSD, где если указано 128гб=128гб, внезапно обнаружил на сервере HDD и совершенно забыл, что там МБ=1000БАЙТ, что вопиюще несправидливо и является самым главным разводом в мире. В итоге, рассчитав неправильно размер VM, она при расширении с Thin в Thick заняла все место на ESXi хосте и отказалась запускаться.

Убив развертывание (что само по себе является весьма рискованной операцией) я мигрировал VM на dev-сервер (слава б-гу она мигрировалась без проблем), сделал архивную копию на уровне приложений, создал новую VMку на продакшене, все сконфирурировал и восстановил бэкап.

3) Неправильно выбрал сервер. VMWare VSAN не поддерживается хардварно, так что хуй объединишь физические датасторы в что-либо виртуальное, в итоге пришлось пилить эпичный iSCSI костыль.

 

Итак, встречайте, iSCSI костыль!

Эпичнейшее решение, позволит вам не покупать VSAN, его лицензии, пожертвовав часть FT. Суть в том, что я создал мини-VM, к которым подмонтированы в режиме RAW 2ые жесткие диски. VM работают в роли iSCSI прокси, позволяя организовать VMWare Heartbeat Datastore, доступное на всех серверах. ХЗ, как такой костыль будет работать в продакшене, но скоро же тесты! WRYY!

Так вот, в итоге – Heartbeat Policy соблюдены, VMки и их Secondary мигрированы на соответсвтующие Datastore, все вроде ок. Fault Tolerance тест проходит успешно. Все работает! Эпичный костыль, занявший 3 дня и угробивший как минимум 2 литра пива.

PPTPD SSL FIX

iptables -I FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu
или
iptables –append FORWARD –protocol tcp –tcp-flags SYN,RST SYN –jump TCPMSS –clamp-mss-to-pmtu

(C) ZonD80

Aurora. Safari. Chrome.

Переход на Safari опять не удался. Ну slow он, slow. Да и плагинов меньше. И загрузка не показывается. Хотел запилить свою, даже зарегался apple-safari-developer’ом, но нет, это слишком жестокие костыли. В итоге вернулся опять на stable chrome, ибо beta не исправила косяк с недоверенным CA SSL-сертификата (буду таки юзать сафари на таких сайтах), а в dev-версии глючат инпуты. Пичалька.
Еще сегодня по наводке тов.Николая (это с которым я пилю очень интересное дело) затестил Firefox Aurora. Awesome Wow! Effect™3D-раскладка CSS-стилей конечно решает. Сайты еще никогда не были таким конструктором. Зацените:

Да, да! Это – в окне вашего браузера. Юзабельно для разработки? ИМХО НЕТ, но красиво! + я таки не очень долюбливаю firefox после их бесконечных апдейтов и свистоперделках после версии 3.0…. + тормоз он с плагинами и оперативки жрет… (maybe, это стереотип?)
В общем, круто, но… google. google chrome. и apple….

(C) ZonD80

Байки из консоли

Жил был бородатый сисадмин. В один очень темный день, когда на улице завывал ветер, а коты громко мяукали под дверью, сисадмин заснул на своем рабочем месте, и так и не проснулся, и так он и остался вечно залогинен под рутом…. Берегись духа сисадмина в открытой консоли!
(C) ZonD80

Злостные совпадения

Представляете, это невероятно:

Именно IP-адрес моего офиса. Именно этот сервер в Германии. Именно сейчас. Просто так совпало….
…смотрите в кинотеатрах, жесточайший fail системного администатора, или билайн правильно™маршрутизирует. Итак, сегодня произошло два события. Сегодня из-за криво прописанного маршрута на билайновских маршрутерах я не смог пробиться с сети 95.xxx.xxx.xxx в 95.xxx.xxx.xxx в другой стране… Сегодня состоялся самый длинный телефонный разговор во всей моей жизни. Длился он 1:24:37, я прорывался сквозь анально особо укрепленные линии техподдержки билайна…. бедная девушка-оператор, старший операторной смены, инжинер. Инжинегр, естественно, оказался самым шустрым из всех, он аж целых 12 минут подходил к телефону. Естественно, были и обрывы. И я опять рвался в бой. А в итоге, он ничего не смог сделать, и посоветовал отписать на [email protected]. Спамьте их, да, так!

 zond80$ traceroute 95.xxx.xxx.xxx
traceroute to 95.xxx.xxx.xxx (95.xxx.xxx.xxx), 64 hops max, 52 byte packets
1 dlink-router.dlink (192.168.0.1) 5.150 ms 9.957 ms 5.199 ms
2 vpn100-l0.msk.corbina.net (85.21.0.100) 4.483 ms 6.560 ms 6.201 ms
3 * * *
4 rost-bb-teng4-2.70.msk.corbina.net (195.14.54.120) 25.510 ms 22.778 ms 24.068 ms
5 tc-bb-po2.sto.corbina.net (195.14.54.95) 24.426 ms 22.737 ms 24.048 ms
6 213.33.223.69 (213.33.223.69) 39.874 ms 40.286 ms 40.220 ms
7 ffmgw4.arcor-ip.net (80.81.193.117) 59.742 ms 43.792 ms
ffmgw3.arcor-ip.net (80.81.192.117) 42.845 ms
8 92.79.213.129 (92.79.213.129) 53.264 ms 46.881 ms
92.79.213.125 (92.79.213.125) 44.042 ms
9 92.79.214.174 (92.79.214.174) 46.807 ms
92.79.214.118 (92.79.214.118) 51.916 ms 53.455 ms
10 ffm-145-254-1-14.arcor-ip.net (145.254.1.14) 45.135 ms 44.817 ms
ffm-145-254-1-10.arcor-ip.net (145.254.1.10) 44.108 ms
11 * * *
12 te5-3.c6500th.keyweb.de (95.169.160.38) 57.189 ms 51.106 ms 51.836 ms
13 * * *
14 * * *
15 *^C

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

(C) ZonD80

funny backups

In a sunny day,
I just want to say
One tiny thing about this.
When we are playing games,
We began to pray
To our girs to show us tits.

But when all things are fine,
When the sky is blue,
You don’t think what horror is.
Fucking downtime,
That you can’t deny
It happens betweentimes.

The system falling down.
It’s time for your backups.
But nothing gets restored.
No humor here, no luck.

And now you’re fired,
Enterprise is dying.
But skies are still in blue.
It looks like a lie,

And this is even very funny…

But another company is waiting for you……..

(C) ZonD80