Связаться со мной можно, черканув пару строк на mail@mindcollapse.com или же в skype: orl-light
Начнем с самого глубокого серверсайда. В распоряжении имелся старенький слабенький сервачок с ненавистным CentOS-ом, ну делать было нечего. Прежде всего, нужно понять, что без иксов нам абсолютно никак не обойтись. Они нужны для виртуальных дисплеев, куда мы будем высаживать наши браузеры. Варианта два: мы можем использовать xorg-x11-server-Xvfb либо же vncserver, который представляет собой perl обертку вокруг Xvnc. Я советую остановиться на втором варианте преимущественно по причине меньшего количества dependencies, возможности удобного удаленного подключения для настройки того же браузера и отсутствия проблем с битностью цвета. К тому же, на старике-центосе Xvfb почему-то постоянно отваливался, а ядро было собрано без поддержки framebuffer, поэтому устройство /dev/fb[0-9] отсутствовало, сводя на нет все преимущества утилит fbdump и fbgrab. После установки vncserver, протестируем его работоспособность, вызвав vncserver :11 -geometry 1920х1200 -depth 24. У вас спросят пароль при первом запуске и, если все прошло без ошибок, то вы счастливчик. Иксы на виртуальном дисплее localhost:11 у вас уже есть. Можете рассказать это своему environment (ненавижу слово "окружение") c помощью export DISPLAY=:11. А еще вы можете запустить xterm и сконектиться через VNC клиент (для виндовса есть отличный бесплатный от RealVNC) и в очередной раз убедиться, что все работает. Теперь нам нужно как-то воровать экран и сохранять его в изображение. В интернетах советуют использовать утилиту import, входящую в набор ImageMagic, но это как перевозить две горошины на грузовом самолете. Вместо нее мы будем использовать xwd из xorg-x11-apps для снятия слепка с виртуального дисплея, и xwdtopnm плюс pnmtopng из netpbm-progs для конвертации его в PNG формат. Тут все еще проще, для получения скриншота вам нужно просто выполнить xwd -root -display localhost:11 | xwdtopnm 2>/dev/null | pnmtopng > screenshot.png. Большая часть серверной магии окончена, осталось сделать небольшой скрипт автоматизации и защиты от дураков. Оговорюсь сразу, что процесс генерации сриншотов будет последователен на основе очереди задач, никакого распараллеливания. О причинах этого мы поговорим чуточку позже. После установки Хромиума, что для ебучего CentOS-а, который сыпется пылью из всех щелей, тоже нихуя не тривиальная задача, мы сделаем небольшой скрипт для облегчения рутины создания скриншотов. Хромиум запускается в инкогнито режиме в фоне, мы ждем открытия страницы 6 секунд (для многих страниц этого времени не хватает, но для тестов сойдет), снимаем скришот и жестко тушим все открытые процессы. Если вам не нужны элементы оформления браузера аля адресная строка или панель табов, то можете добавить ключ --kiosk при запуске хрома. Все пропадет, останется лишь окно с отрендериной страницей, но это выглядит как-то менее эстетично ;). Таким образом, мы собрали все необходимое для создания скриншотов, осталось написать обертку и обертку над оберткой. Пару слов про безопасность: создайте отдельного пользователя из-под которого будете запускать браузер и иксы, отключите все плагины на внутренней странице about:plugins. Клиентская и серверная валидация ссылок в добавок к жесткому ограничению времени исполнения (у нас это 6 секунд) защищает от умников, которые мечтают о stack overflow и arbitrary code execution или пытаются банально загрузить html файл размером с пару гигабайт. От запуска нескольких инстансов браузера для многопоточной генерации пришлось отказаться по этой же самой причине. И да, все настройки хромиума хранятся в JSON формате в файле ~/.config/chromium/Default/Preferences, изменить вам придется параметры размеров окна, потому что даже с ключом --start-maximized у браузера развернуть окно на весь виртуальный экран почему-то не получается.
Часть вторая - middleware или, другими словами, прослойка между сервером-клиентом и своеобразный примитивный менеджер задач. Писать мы ее будем на NodeJS и SocketIO, оба решения мне полюбились event-based моделью. В стандартный набор ноде входит функция spawn объекта child_process для асинхронного запуска дочерних процессов и получения их stdout потоков, которая и будет работать с нашим небольшим bash скриптом. Для создания последовательной модели исполнения, нам нужен какой-то неблокирующий алгоритм task queue и именно поэтому нам не подходит метод Array.forEach. Я, признаться, не стал ебать себе мозг академическими решениями и просто сделал рекурсивную функцию, которая банально вызывала Array.push при добавлении новой задачи и Array.shift при завершении выполнения и переходе на новый цикл итерации с проверкой блокирующей переменной. Решение не идеальное и при больших нагрузках могут возникать проблемы с выпадающими из стека заданиями, но никто больших нагрузок и не ждет - идеальная отговорка для лентяя, который поленился сделать асинхронную модель обработки с помощью setInterval. Чтобы не быть голословным - вот вам код прослойки. Судя по коллекции сохраненных скриншотов, некоторые куллхакеры, думающие, что, выполнив в консоле isURL = function() {return true;}, они обойдут все проверки и удалят мне /etc/passwd, соснули хуйцов и посмотрели веселые картинки на сайте gay.ru. Кекеке!
Последний и самый верхний уровень - clientside не представляет собой ничего особо интересного. Хочу лишь заметить, что при всех преимуществах охуительнейшей библиотеки SocketIO, у нее нету нормальной внятной документации или хотя бы описания API. Лично мне найти не удалось, на гитхабе только описание в примерах, но это не удобно и противоречит законам мироздания. Справедливости ради скажу, что все, описанное мной в этом посте, пахнет влагой и сыростью. Нету ни обработок исключений, ни проверок результата генерации, ни нормальной валидации ссылок, но я лишь даю болванку, а ее обтачивание - дело дорчитателей, которым это необходимо.
Куда ж мы без живых примеров? Никто в наше время тексту не верит. Пришлось перенести все на свой старенький сервачок в далекой Фрицландии, сделать симпатичную обертку на скорую руку и теперь вы можете проверить работу теории на практике в разрастающейся секретной экспериментальной лаборатории интернетовских опытов имени Коли Цискаридзе. Ссылка на ScreenShooter, который старательной описывался в этой статье, работает до последнего посетителя. В качестве бонуса всем, кто дочитал достаточно сложную для формата блога статью, я дарю самодельный уникальный инструмент по раскрутке вашего сайта, известный подписчикам моего твиттера и гуглоплюса. А если серьезно, спасибо всем, кто активно плюсует гуглокнопкой мои посты. Это достаточно приятно и позволяет понять направление дальнейшего развития тематик. Продолжайте в том же духе, нажимайте +1, у меня еще много разнообразных интересностей в черновиках.
В руки, а точнее на ebook reader, мне попали 3 экземпляра интересных на первый взгляд книг. Все они как-то были непосредственно связаны с достаточно известными личностями IT индустрии и в то же время являлись литературной IT попсой для домохозяек из разряда скандалы-интриги-раследования. Но делать нечего, раз попали - пришлось почитать, составить свое субъективное мнение и донести его в массы посредством этого мерзкого уголка похоти и словесного смрада, как окрестили этот уютный бложек некоторые ссаные моралисты. Ну и хуй с ними, я так считаю. Вернемся к нашим пирогам.
Первая книга называлась "iCon Steve Jobs: The Greatest Second Act in the History of Business". И как не сложно догадаться при условии, что набор ваших хромосом не был нарушен жестокой генетической ошибкой природы, речь шла про того самого Стива Джобса, который айфоны, айпады, айподы и другие слова, начинающиеся на "ай-", кореш президента Медведева, лысеющий хиппи, и все такое прочее. Мы не будем углубляться сейчас в инсинуации по поводу продуктов самой яблочной компании на земле, в блоге и так уж очень много написано, давайте просто поговорим про эту окологенитальную книгу. Само издание является иконой для интеллектуальной интеллигенции с habrahabr или прочих узколобонаправленных порталов зажатых "специалистов" полузакрытого типа. В любой новости, где фигурирует какой-то стороной apple, появляется просвещенный и молвит "ой, да как вы можете вообще поклоняться этому джобсу, он же ничего сам не сделал, вот Стив Возняк ...". Держите proofsearch, тысячи их. А после этой фразы обычно начинается холивар на тему "сначала добейся", но я снова отвлекся. Книга ужасна, как по мне. И не в литературной смысле, а в ее крайнем субъективизме и непоследовательности. Авторы хотели сделать из лысеющего добряка-старичка Стиви какого-то кровожадного монстра, который не принимал родную дочь, выгнал беременную телку из своего дома (будь мужиком, блеять!), использовал своих лучших друзей в качестве дойной коровы идей, а потом выбрасывал на свалку без гроша в кармане, ел девственниц, развязал войну в Ираке (и вторую тоже), а охлаждение 4го реактора на Чернобыльской АЭС на самом деле управлялось с помощью Apple Macintosh II. Шутка, а то еще читать начнете. Повествование ведется от имени бога, который все видел своими глазами и рассказывает читателю, как биологическая мать Стиви передала его на воспитание приемной семье с простыми, но работящими родителями, как Стиви с самого детства стал каким-то хиппарем, мало мылся, много думал, съездил в Индию, где гадил в священную речку Ганг и лишь по возвращению, перепробовав все способы изменения сознания, решает купить себе одежду, выбросить гитару, пакет отборной пакистанской травы, пару ЛСД марок и ударяется в IT. Данную часть книги можете не читать, она не интересней женских историй с Оксаной Пушкиной. Правда, если у вас несколько дней в месяц проходит кровоизлияние и вы хотите сопереживать с несчастным парнем, который ищет свою родную мать, оставившую его в жестоком, несправедливом мире в его раннем детстве, - читайте обязательно, соплей там много. Следующая часть могла бы быть достаточно интересной, не будь она написана людьми с высшим образованием менеджера-продавца или логиста-товароведа какого-то. В ней описывается первый этап становления яблочной компании, как Возняк и Джобс делали революцию, пытаясь получить за это деньги. Целый раздел посвящен перфекционизму Джобса, который отказывался выпускать корпусы для макинтошей из дешевого пластика, что влияло на цену продукта, в итоге компания с десяток раз оказывалась на пороге банкротства. Описание технической части ужасное, иногда у меня капали кровавые слезы, но все мытарства от одного инвестора к другому представлены достаточно интересно. В этой части перед нами предстает настоящий Стив - истеричка, неуравновешенный псих, который даже в 30 пребывал где-то в капризном возрасте 2-5 лет. Он постоянно плачет, если ему что-то не нравится, закатывает настоящие истерики, увольняет людей за мелочи, не прислушивается к чьему-либо мнению, доводит компанию до упадка и в итоге увольняется советом директоров. Все это в сокращенном виде. Дальше Джобса берут назад, все счастливы, в Америке происходит секшуал революшн, эппл выбран в качестве талисмана меньшинств и все дела. Снова шучу, если что. Вообще, книгу можно было бы смело заканчивать на возвращении блудного сына, но, судя по всему, издатели установили четкий лимит объема. Поэтому, половину всей книги занимается описание саксес стори широко известной студии по производству шевелящихся картинок Pixar, которую Джобс, руководствуясь своими принципами "трать деньги, где убыточней", выкупает у Джорджа Лукаса и ведет к успеху, одалживая деньги у кого не лень. По сути, главный герой книги там появляется пару раз и читать очередные дамские истории ужасно скучно. Итог - потраченное время. Вся книга напоминает компенсацию давней обиды авторов или комплекса перманентной зависти. Читать противно и скучно. Поэтому, лучше не читать. Иначе, станете еще одним супераналитиком, как 99% хабра и будете обсуждать, что станет с эпплом после кончины Стива и на кого же больше похож Джобс: Мамонов, Гордон или Ганди.
Второй книгой стали мемуары Линуса Торвальдса "Just for Fun: The Story of an Accidental Revolutionary". В данном случае, людям неискушенным сложнее провести параллели. Прозрачно намекну, что схожесть между Linus и Linux очень даже не случайна. В общем, это как бы мемуары, хоть и написанные абсолютно не самим финским программистом, а Давидом Даймондом со слов и воспоминаний виновника торжества и его близких. Фамилия и имя этого американского журналиста тоже очень тонко намекает нам на что-то, но разговор не об этом. Книга намного более интересна, но, как и предыдущая, не представляет никакой практической ценности. По сути, мемуары такими быть и должны, описывая детство, отрочество, юность, зрелость субъекта и все факторы, которые повлияли на становление этой личности. Давид и Линус справились отменно. Через всю книгу проходит сюжетная линия, что Линус просто с детства был не таким. Даже радость подросткового онанизма, которой сладострастно предавались его сверстники, была чужда маленькому гению, после отбоя он не лез руками под одеяло, где был предусмотрительно спрятан финский плейбой с мохнатыми северными беловоласыми самками разной степени оголенности. Нет, маленький Линус включал свой компьютер и развлекал себя абсолютно противоестественными вещами. Примечательно то, что жестокие советские дети таких одаренных личностей не признавали и избивали различными способами, а в холодной и гуманной Финляндии всем было похуй. Разве что мать и сестра немного комплексовали, что член их семьи шутит на ассемблере. И в то же время, Торвальдс не стал каким-то биокомпьютером срать-жрать-программировать по образу и подобию Столлмана или Танненбаума, не отрастил бороду, спрятавшись за очками в роговой оправе. Чувство юмора, угар и бодрость духа присутствуют, например. Книга совершенно не об IT, я считаю, а о жизненной философии человека, который совершенно случайно пришел к успеху, подфартило, и, при этом, остался обычным фином-семьянином без комплекса божества и мерила истины в компьютерном мире, если вы понимаете, о ком я. Данную книгу советую читать даже людям, профессионально удаленным от компьютеров на приличное расстояние. Получите удовольствие, а из-за отсутствия хардкорности, станете немного ближе к пониманию, как работает ОС и какой эволюционный путь развития прошли технологии за столь короткое время. Русский перевод опять таки очень хромает. Читайте оригинал, если овладели финским, подледной рыбалкой и провели лето в вечной мерзлоте, ну или накрайняк - английский вариант очень неплох.
Последнее произведение литературных искусств в посте, который и так уже превзошел все мыслимые и допустимые текстовые лимиты, называется "Barbarians Led by Bill Gates: Microsoft from the Inside". Написана, как и про Джобса, людьми, наблюдающими со стороны, но в данном случае получилось очень неплохо. Писали пиарщик и разработчик со стажем, технологическое и историческое получилось 50 на 50. В книге достаточно много всякого преинтересного инсайдерства. Если эппл во главе с грязным хиппи и бородатым гиком пытались достичь совершенства и побороть какие-то детские комплексы, то Билли просто пер быком, подгребая под себя все, что могло приносить деньгу в перспективе. Но в то же время, негатив не ощущается, даже наоборот. Отличное пособие, как, будучи отличным менеджером и технологом в одном лице, набрать талантливых разработчиков, успешно заимствовать чужие идеи и варварски захватывать рынки, становясь монополистом. Искренне советую. Русским переводом вроде никто эту книгу не портил.
Такие дела, еще раз уточню, что данные книги не претендуют на звание гиковского руководства на тему "как создать свой айфон, написать ядро или операционную систему с 0". Нет, это просто взгляд со стороны на произошедшие революции. Думаю, никто не будет спорить, что эти 3 адиозные персоны перевернули мир технологий. И что самое интересное, каждый сделал это по своему: плетя интриги и мечтая о совершенстве, случайно или просто двигаясь напролом, занимая пустые ниши.