Связаться со мной можно, черканув пару строк на mail@mindcollapse.com или же в skype: orl-light
Существуют и более серьезные недостатки GAE, как, например, невозможность привязать к своему приложению naked домен. Ну в смысле без сабдомена www, все это связано с технической особенностью, когда load balancing осуществляется с помощью направления всех запросов через CNAME ghs.google.com, а CNAME не может быть прилеплен вместо главное A записи. Приходится делать фитны ушами и искать дополнительные www-лайзеры или url-форвардеры, которые будут перенаправлять все запросы с голого домена на www, что само по себе противоречит идее распределения нагрузок, все эти сабдомены - прошлый век, как по мне. Еще есть некоторые глупые лимиты касаемо максимального куска данных, получаемого urlfetch за раз, лимит времени исполнения в 30 секунд, достаточно бородатая версия питона и django, кривая реализация сессий и много других спорных моментов. Впрочем, в отличии от конкурентов, гугл дает нам бесплатный аккаунт с квотами, которых хватит для маломальского приложения с головой, лишая нас проблем с бекапом данных, постоянными обновлениями серверного ПО, переживаниями по поводу новой уязвимости в apache или mysql, provision control (тут он хоть и примитивный, но удобный деплой с возможностью запуска нескольких версий приложения на разных сабдоменах аппспота) и такого прочего. Ну, пожалуй, хватит переливать из пустого в порожнее. Вернемся к реальному применению платформы GAE. У меня есть свой укорачиватель ссылок, который крутится на домене mclnk.me. Просто однажды были у меня сертификат на свободный домен и много времени, а хотелось ссылку короче битли и с просмотром контента типа роликов ютуба и картинок. До недавнего времени, она (обрезалка, укорачивалка - как хотите), как и весь этот блог, была написана на PHP и кушать особо не просила, но, путем случайного выбора, стала кандидатом на перенос себя в облака Google. В качестве языка реализации я выбрал Python. Он мне нравится с момента далеко знакомства в его бытности еще сырым языком первых версий, именно на данном инструменте должны учить программировать студентов, а не засорять их головы бейсиками да паскалями. Питон учит лаконичности, правильной разметке кода и дзену программирования. А вот второй вариант, Java, мною нелюбим за его избыточность. Нет, я конечно понимаю, что это обусловлено исключительно добрыми побуждениями и минимизирует вероятность возникновения ошибок исполнения в дальнейшем, но писать несколько экранов кода для элементарного функционала при ограниченных ресурсах времени, не седых пока еще волос и энергетиков мне не кажется целесообразным. Код приложения выглядит подобным образом, прошу прощения, что все навалено в кучу и пару раз я схалтурил (как при проверке валидности ссылки, например), но делалось это в прямом смысле на коленке левой рукой. Укорачиватель ссылок публично доступен по адресу http://mclnk.me, а результат обрезания выглядит подобным образом http://mclnk.me/e.
В качестве заключения, у GAE есть своя ниша, ведь достаточно мощный RDS (lighttpd + php-fcgi + mysql на другом хосте) начинал захлебываться с la под 2 при ab -n 1000 -c 500, а вот google hosted проглотил и даже не подавился, подняв 25 инстансов для обработки запросов и отдав все без дилеев (речь сейчас не об link shortener, разумеется). Много пока еще не хватает, тот же Google Storage, который сейчас только по инвайтам и, если верить слухам, должен стать серьезным конкурентам Amazon S3, но Roadmap проекта внушает хорошие надежды в светлое будущее. Подумайте только об одном, а нужно ли вам это? Или пусть дальше ваш уютненький бложек живет на хостинге по $3 в месяц? Я же просто попробовал это just for fun и решил для себя, что следующий крупный проект с уверенностью можно поднимать на платформе Google App Engine, сэкономив деньги, нервы и бесценное время.
Возвращаемся к теме реализации. Прежде всего, отвечаю на вопрос: зачем мне нужно много неймсерверов, а не один центральный без всех этих заморочек с MySQL и т.д. В качестве master мы будем использовать Google Public DNS, на нем был замечен load balancing для некоторых крупных сайтов, на запрос по тому же ютубу с разных географических точек отдавались разные A-записи. К тому же, проводить NS query с гонконгского сервера через туннель на центральный сервер где-то в Люксембурге или США - очень медленно, поэтому наши DNS-ы будут отвечать по тому же адресу, что и шлюз. Языком реализации стал Perl. Почему? Да просто в нем есть все необходимые нам компоненты. Использовать мы будем Net::DNS для резолвера и Net::DNS::Nameserver для сервера. Разумеется, без кеширования никуда. В качестве решения я советую смотреть в сторону Cache::Bounded, которое является по сути оберткой вокруг Cache::MemoryCache с оптимизацией и обнулением кеша по достижению определенного размера, что спасет нас от переполнения памяти. В результате получилось что-то вроде такого кода. Сразу замечу, что 3 цикла for при чтении ответа из кеша - необъяснимая мною мистика. Казалось бы с помощью тех же элементов исходного массива путем перебора формируем новый, а вот простое присваивание - не работает. И хоть ты тресни. По скорости вполне нормально, первый запрос конечно отнимает определенное время, но в дальнейшем из кеша в памяти все читается очень быстро. В качестве бонуса, держите список из 1800 самых крупных торрент трекеров для блокировки.
Как по мне, сервисы vpn туннелей должны служить исключительно 2м целям: скачивание торрентов в странах, где за это находят и бьют по рукам; и просмотр католическими священниками детской порнографии там, где это тоже не особо приветствуется. Первых случаев становится все больше, а последних - все меньше. Мы же нашим TOS-ом запрещаем основные приоритетные направления. А все остальные истории с защитой вашей информации, все это сказки для детей. Мы то с вами знаем, что от паяльника еще ни один фаерволл или канал с шифрованием не спасал.
Хиханьки-хахоньки, но изначально были осмотрены 2 бесплатных решения. PHPproxy и Glype. Вот только как-то не удалось мне получить дозу эстетического удовольствия от внутренностей и что самое главное - быстродействия, ну пацаны, 30 регулярок на 1 страницу - как-то слишком, ага. Да и совместимость с современными сайтами, расфуференными AJAX-ами, оставляла желать лучшего. Пришлось писать собственный велосипед. Сразу прошу простить за PHP, увы и ах, но таковы требования заказчиков для "глубокой интеграции" этого говна в глотку сайта. Прежде всего, я отказался от передачи URL проксимизируемого сайта в GET переменной, избрав более интересный путь. Для наглядного примера, данный блог, открытый посредством моего web-прокси, выглядит как https://mindcollapse.com.proxy.domain.com/blabla.html. Плюсы такого элегантного решения: удобная работа с кукисами, которые просто можно назначать данному сабдомену, а не хранить во временных файлах, как это делали вышеназванные реализации, легкость подмены ссылок в странице, в том числе и relative links, которые вообще трогать не нужно. То бишь, мы просто добавляем .proxy.domain.com после доменного имени и направляем весь трафик через наш сервер. Теперь по поводу технологий реализации. Для начала, нам не помешает wildcard SSL сертификат с маской *.domain.com. Ну и никак не обойдемся без *.proxy A Record на неймсерверах нашего с вами домена. В апачевский конфиг sites-enabled/proxy.domain.com.conf добавляем ServerAlias *.proxy.domain.com. Пол работы сделано, теперь дело за малым - написать обработчик данных. Прежде всего, нам нужен правильный .htaccess с RewriteRule ^(.*)$ /proxy.php?$1 [L]. Теперь любые запросы будут реврайтится в REQUEST_URI proxy.php. Не забываем и про RewriteCond %{REQUEST_FILENAME} !-f, а иначе получите вечный редирект в поисках счастья.
Лирическое отступление по поводу содержания proxy.php. Я как-то уже давненько не подходил к PHP, все в компилируемых языках, да в перлах по самые локти. Кстати, насчет последнего, кто там говорит, что перл мертв - посмотрите на количество живых велосипедов в CPAN. Одних только интерфейсов кеширования хватит даже чрезвычайно изощренному уму. Ну а про скоропостижную кончину кричит всякая школота, читающая клоаку вроде хабрахабра и мечтающая о заветном инвайте. Да, есть RubyForge и RubyGems, есть Pypi для монти пайтона, даже C# в Microsoft Visual Studio имеет менеджер компонентов, а совсем недавно силами коммьюнити еще и nuget вышел, который я все никак не посмотрю. И да, есть PEAR для PHP. Набор библиотек в нем, мягко говоря, скудный. PEAR "из коробки" не дает ставить пакеты у который релиз статус ниже stable, а как это отключить - приходится гуглить или устанавливать по ссылке, как-то не очень сопоставляется данные действия с определением "удобного менеджера компонентов". Ну да не важно, для нашего прокси мы будем использовать обвязку не вокруг CURL-а, а над fsockopen. Называется HTTP_Request2. Библиотека, между прочим, очень даже ничего. Пожалуй, хватит ходить вокруг да около: вот вам код proxy.php в копипастере. Хочу заметить, что это скорее болванка из которой я убрал большу часть кода используемую при разборе джаваскриптов и css, да и добрый 10к плагинов, которые заставляли работать ютубы и фейсбуки. Ничего там сложного нет, просто firebug или chrome developer tools вам в руки и копайтесь в куче непонятных кукисов и сжатых js-скриптов. Для последних, кстати, есть отличная утилита - JSBeautifier. Так что не нужно кричать "хааа, лох, у тебя же никак не проверяется вводимый урл, хаааа". Проверяется. Христом богом клянусь. У меня все.
Основное в каждой работе это умение себя преподнести. Мне и в жизни приходилось часто наблюдать, когда бестолковые пиздоболы, умея отлично расчесать начальству или клиентам какую-то полную чушь из сферы диаметрально противоположной их специализации, продвигались по карьерной лестнице много быстрее бородатых пузатых гениев с уровнем коммуникабельности на уровне среднестатистического аутиста с дефектами речи. Как мы выяснили в прошлых сериях повествования, работать нужно на иностранцев, потому как, если один славянин начинает управлять другим, первый сразу начинает чувствовать себя всемогущим царьком в масштабах одной офисной "коробки", что мешает здоровым профессиональным отношением. С иностранцами же возникает следующая проблема - языковой барьер. Пожалуй, этой стеной отсекается, как говорят у нас в Одессе, большая половина претендентов. Причем первостепенной важностью обладает отнюдь не богатый словарный запас или там диплом IELTS в позолоченной рамке на видном месте в кабинете. Нет, главное для экспортера своих мозгов и талантов - business english. По сути, это даже не язык, а набор церемониальностей. И если те же европейцы обычно довольно спокойно относятся к фривольному стилю общения, то для американцев даже один имейл с отсутствием приветствия и правильной подписи может быть истолкованный, как личное оскорбление и крайняя степень неуважения. По сути, тут та же ситуация, что и в Китае, когда на традиционном китайском говорит минимум, а в большинстве своем общение проходит по упрощенной схеме. То же самое и с европейцами, если вы выучили язык Шекспира по подлинникам и хотели провести беседу на совещании в стиле викторианской эпохи, вы будете разочарованы - на вас, в лучшем случае, повесят клеймо чудака. Иногда это даже выводит из себя, каждую неделю, включаясь в видеоконференцию в скайпе, приходится проходить процедуру how-are-you-канья. И не дай бог команде будут представлять новенького: пока все не наведут справки о его делах, поулыбаются, представят друг друга, обменяются бизнес комплиментами, работы не будет. Еще очень важным моментом является обтачивание своего языка. И нет, я совсем не подразумеваю то, о чем хихикают девятиклассники на задних партах. Уберите из своей речи "категоризмы" can not, will not, do not и прочее. Это очень обижает заграничных ребят, используйте нейтральные формы речи по типу I wish I could, but. Не нужно бояться грамматических и лексических ошибок, избегая их по возможности. Конечно, писать что-то типа I work do like money pay you in time thank you не стоит, вы же не мастер Йода, а мы не на Арракисе, но и строить вычурные многоуровневые конструкции не нужно - вас могут не понять, попросить повторить последнюю фразу, а это чаще всего оказывается проблематичным. Из личного опыта, могу посоветовать иногда разряжать атмосферу длительных текстовых конференций какой-то шуткой или остротой. Но тут опять таки нужно быть крайне осторожным и тактичным, фраза "вот если бы этот черножопый Джон из американской команды тестировщиков родился на 50 лет раньше, мы бы могли высекать его бамбуковыми палками за каждый пропущенный баг" может поставить крест на вашей профессиональной карьере. При общении не забывайте про субординацию. Обращайтесь к высшему начальству, минуя своего непосредственного руководителя, в исключительных случаях. Прежде всего, высшее начальство может быть вообще не в курсе решаемого вопроса, а может и просто не считать своей обязанностью общение с какое-то чернью из Восточной Европы. Ваш начальник получит выговор, а вы потом еще долго будете страдать от проявленной инициативы.
Второй важный момент - умение правильно оценить себя. Да-да, в денежном эквиваленте. Тут нужно побороть 2 основополагающих начала человеческой сущности: алчность и скромность, найдя какой-то компромисс. Схемы оплаты в основном могут быть 3х видов. Это либо почасовая тарификация, либо фиксированная сумма за определенный тип работ, либо ежемесячные денежные вознаграждения за выполненный труд. Особых советов тут быть не может, замечу лишь, что и среди западных людей изредко встречаются нечистые на руку. Если вы решили свести свои рабочие отношения к общению в скайпе без заключения договоров (особенно это имеет сенс при работе фрилансером с разовыми заказами), то советую несколько месяцев настоять на предоплате. Не стоит верить в добродетель древней Европы, жадность и хитрость есть везде. В дальнейшем, схема расчетов будет оговариваться вами и работодателем лично, могу лишь посоветовать проанализировать объемы выполняемой работы. Мне сейчас выгодней оплата за месяц, так как проект был успешно запущен, все работает и лишь иногда нужно вносить какие-то мелкие коррективы, что не отнимает много времени. В начале же, при разработке, расчет со мной проводился по почасовому тарифу. Это сложнее, вам нужно отчитываться за все проделанные таски, вести свой тайм-менеджмент календарь и быть честным. Последнее вообще практически невыполнимая задача. Ведь иногда так хочется в redmine поставить напротив "remove old backups from server", что делается 1й командой rm -rf /mnt/backup_server/old, параметр "estimate time", равный 10 часам, например. Пару раз, безусловно, может и прокатить, но в итоге с вас непременно спросят. Деньги все считать умеют.
Распространенной ошибкой является несерьезный подход к работе. Мол, начальника не видно, работа через интернет, а значит и можно опаздывать, делать что-попало, а еще умудряться спорить с тим менеджером. Это такая проблема нашей ментальности: гетьмана не видно, козаки в загул. Очень грусняво, но с таким подходом вы вернетесь обратно на скучную работу за гроши, где вас будет каждую неделю сношать руководство за отставания от плана. Конечно, у всех у нас в жизни бывают экстренные ситуации, все это решается одним email-ом или sms-кой. Никто вас не будет рвать на части, если вы соизволите предупредить о своем опоздании или отсутствии, более того - поблагодарят за ответственность. Еще важный момент, научитесь управлять своим временем и правильно оценивать его использование. Чаще всего перед или непосредственно после назначения таска, вас спросят "how much time will it take". Ответ very-many-very-much тут не прокатит, даже если раньше вы подобным не занимались. Я бы даже советовал вам завести свой собственный time plan, где рядом с названием определенного вида работ стоит approximate time. Не будете путаться в своем вранье.
Кто не любит визуальное отображение информации? Избегайте больших объемных текстов по некоторым причинам: чем больше букв, тем больше вероятность, что вы допустите какую-то нелепую ошибку, а люди по ту сторону монитора снисходительно улыбнутся, да и вероятность, что вместо прослушивания вашего монотонного чтения, клиент-заказчик будет раскладывать пасьянс косынку, кивая иногда из вежливости, очень велика. Сделали какую-то клевую фишку в программе? Потратьте 5 минут для powerpoint презентации. Весь процесс функционирование или своей работы пытайтесь выразить в форме блок-схем, найдите учебник по информатике за 9й класс и прочитайте тему алгоритмы - в жизни не раз будет помогать подобный навык. Четыре квадрата со стрелочками всегда будут смотреться лучше и понятней, чем скучный шаблон "at first ..., then ..., and after ..., in the end ...".
Ну и в заключение, основной бесценный совет. Не проебывайте. Не будете проебывать - не будет у вас конфликтов и недопонимания с работодателем, не будет конфликтов - будет бабло, будет бабло - будут дорогие машины, наркотики, комнаты, увешанные коллекционными гитарами, молоденькие французские шлюшки и полный рок-н-рол.