Пришлось правда снести все и поставить заново, но оно того стоило. Бистри, сочни, вигоднее, не пrавда ли?
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, по-этому важно делать проверки, я лично прегмачнул.
Итого, алгоритм следующий:
- Переопределить функцию document.write, чтобы она писала в какой-то скрытый div.
- Запросить target-страницу с <script src=blabla> с document.write.
- Вставить полученный <script src=blabla> в скрытый div.
- Создать пустой DOM-элемент script, установить ему src из div->script->src
- Добавить его в шапку или на страницу, он исполнится, вызывая переопреледенную document.write.
- Проверить, что там пришло в измененную функцию, и в зависимости от данных делать с ними что-либо.
- Начать сначала.
В п***у программирование, пойду выпью пива.
Блог с защитой и в бане
Вуаля! Этот уютный бложик обзавелся 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
Aurora. Safari. Chrome.
Еще сегодня по наводке тов.Николая (это с которым я пилю очень интересное дело) затестил Firefox Aurora. Awesome Wow! Effect™3D-раскладка CSS-стилей конечно решает. Сайты еще никогда не были таким конструктором. Зацените:
Да, да! Это – в окне вашего браузера. Юзабельно для разработки? ИМХО НЕТ, но красиво! + я таки не очень долюбливаю firefox после их бесконечных апдейтов и свистоперделках после версии 3.0…. + тормоз он с плагинами и оперативки жрет… (maybe, это стереотип?)
В общем, круто, но… google. google chrome. и apple….
Байки из консоли
Злостные совпадения
Именно 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
Это печально. В итоге я опять не в своем офисе, зато в зоопарке и получил прекрасную возможность сводить Анечку в зоопарк нахаляву.
funny backups
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……..