Переехали от Майкрософта

Произошло то, о чем я давно думал, но боялся сказать. Хотелось перестать «кормить» Майкрософт.

Этот монополист настолько обленился делать вещи качественно, что еще год назад внутренняя изжога к Виндовсу привела меня к мысли, что от серверов на Винде надо уходить… Как это сделать, если C# на Линуксе через Mono в нашем случае прямо не заработает? Плюс еще MSSQL, от которого тоже нужно было уйти.

Не уложились мы в месяц, как было задумано изначально тут. Не уложились и в два. И даже в три не уложимся, потому что проблем оказалось сполна. Время и деньги потеряны… Но также к счастью мы больше не тратим по 15К в месяц на Ажуру. А имеем контейнер за меньшую цену, в котором можем разворачивать еще и несколько схожих по конфигурации с Ажурой VDS’ок для своей работы.

Мой ультиматум про «не уложимся с миграцией в 1 месяц — уходим с Шарпа» был вполне конкретным критерием, чтобы от слов перейти к действиям и инициировать перепись проекта на другой ЯП. Логика простая — если быстро получилось мигрировать, хорошо, давайте пока дальше наращивать функционал на том решение, что есть. Если быстро не получается — то сразу по окончания месяца я не трачу времени на раздумья как долго еще это продлится и сколько денег мы еще сольем на простой (была заблокирована полностью разработка нового функционала) — я ищу программистов для разработки нового бэк-энда. Что имеет смысл. Первое, сократить расход с Винды, раз уж начали, но одновременно с этим перестать тратить время впринципе на толкание трупа. Сейчас в коде имеется и лишний функционал, и структурные ошибки в проектировании помимо всего того что про миграцию. Все это «обслуживать» очень дорого. К слову, новое АПИ я сократил примерно на 40%. Более того, мы пошли дальше и планируем использовать конструктор запросов с фронт-энда, чтобы бек-энд вообще стал гибчайшим и не был завязан на конкретные методы.

Найти программеров оказалось непросто, в одном случае я ошибся с постановкой требований и связка Python/Django оказалась избыточной для решения моей задачи. Один программер проработал неделю, написал код и с ним решено было прекратить — результат получался не очень.

Сейчас успокоились и пришли к Python/Flask. Цель — построить новый бэк-энд более просто, чтобы задествовать принцип «меньше кодов — меньше багов» и чтобы код можно было поддерживать меньшему числу программистов.

Касаемо пункта про «высокую цену» за Windwos. Я косякнул, когда поставил задачу именно как миграцию на Linux. Никакого переезда на другую ОС можно было бы и не затевать. Расходы реально сократить иначе.

Изначально мы сливали на MSSQL Enterpirse, плату за которую нам включили из-под тишка, когда мы этого не ждали, и которую мы потом перенесли в Ажуру в облачный SQL сервер, который построил Джек Майкрософт. Шутка. Первая проблема была решена сразу. Вторая — количество баз — четыре. Каждая из которых съедала по тысячи с чем-то в месяц. Можно было две удалить, ибо девелоперские, вторую перенести в первую, приложение это позволяло. Итого расход уменьшался на 3 тысячи — на фоне 20-25К это конечно казалось смехом, так что я понимал, но не брал всерьез. Третье — мы периодически включали обратно девелоперский и прошлые серваки. Из-за этого расход в 20-25К был раздут, на деле вся требуемая конфигурация на Ажуре съедала 12К в месяц.

Соответственно сам Ажуровский сервак можно было бы заменить таким же по мощности с помощью Российских хостинг-провайдеров, по нашим конкурентным, рыночным ценам. Получилось бы 3000-4000 р за Винду плюс 1-1,5 тыс. за базу в облаке. Базу MSSQL перенести в Россию получалось или дорого, или геморно, потому что подход к лицензированию у MSSQL весьма своеобразный (можете почитать об этом на сайтах дата центров). Основной минус такого подхода — это то, что база и приложение были бы вынесены из одной сети на разные сервера, удаленные на существенное расстояние (следовательно получаем дополнительное время на коннект).

Но сделать такую миграцию стоило сразу, это бы сократило расходы быстро и существенно. Затем стоило продолжить работу на Винде и Шарпе, и параллельно начать кодить новый бэк-энд. Стоит ли вообще кодить новый бэк-энд? Работы на 4-5 месяцев минимум. Скорее да. Текущие программеры в виду того, что обстоятельства изменились, не могут полноценно уделять время разработке, а искать нового человека на Шарп или Пайтон, в свете того, что рефакторинг даже в нашем текущем решении — это назревшая необходимость, как-бы говорит — рискни и сделай как считаешь нужным. Вот я и делаю. Думаю, что получится лучше, чем было.

Один минус — некоторых людей я заставил ждать несколько месяцев того, о чем мы договаривались еще в конце 2016 года. К сожалению, сроки не выдержал. Но и откладывать миграцию больше не хотел, об этом я задумывался еще в конце 2015 года. Следующее поколение Avenda уже запущено. Скоро, на всех картодромах страны! :-)

Про онлайн-консультантов на сайтах

Что-то в мировой экономике пошло не так. На эти мысли меня наталкнула вот какая история. Заходишь такой на сайт, а тебе внезапно всплывайка, мол, «я — Анастасия, какой у Вас вопрос?» У меня как бы вопросов нет, я зашел почитать, а тут вы своим окном мне страницу загораживаете. Я, впринципе, и сам могу найти ответ, но раз уж Вам делать нечего, давайте поработайте со мной.

Итого, вписываю свой вопрос. Но как правило в ответ — тишина, а потом срабатывает триггер, который пылесосит мои контакты для связи со мной.

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

Вот вам пример, когда конкуренция и свободный рынок порождает мусор. Где-то такие чатико-консультанты работают должным образом, но где-то их хочется зарыть в песке. Грань тонкая, но если уж очеловечивать такую вещь, то надо писать, на выходные, во время отсутствия консультантов прямо и со смыслом: «Здравствуйте, я могу записать ваши контакты и перезвонить Вам в рабочее время, если Ваш вопрос несрочный». Четко и по делу. А не «Анастасия че-то занята и передумала чатиться…»

Размышления о деньгах

Пост не стоит воспринимать всерьез. Просто несколько набросков…

У денег есть заранее заложенная в них нестабильность — дефляция или инфляция.

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

Деньги можно накапливать. Соответственно, задумывая деньги как эквивалент, нужно было уточнить — эквивалент к количеству всего выпущенных денег или свободных в обращении денег? Тут есть проблема, если условно допустить что каждый гражданин своей страны отложит под подушку условные 25% своего дохода. Или положит их в банк. Цены не изменились, но деньги из оборота временно ушли. А если допустить, что человек начав накапливать скорее продолжает это делать — следовательно деньги уходят из оборота на бессрочный период. Что должно произвойти с ценами при неизменном количестве самих товаров и услуг?

Как вы себе можете представить капитализацию WhatsApp в 16 млрд. долларов? Это больше, чем ВВП Камбоджи, и немногим меньше ВВП Эстонии. Вы уверены, что деньги являются эквивалентом товаров и услуг? Деньги также являются эквивалентов пристижа (давайте не будем Вас дразнить словом «понты») — в хорошем/плохом смысле — это следующий вопрос в списке. Вы покупаете престиж за те же деньги, за которые бомж покупает себе хлеб. Престиж — это услуга или товар?

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

Деньги, по высказыванию Л. Н. Толстого — это мера рабства. Что тоже имеет смысл. Но в большей степени всё же деньги, это действительно мета-форма благ — эквивалент, но всегда устойчивый и не всегда в балансе с реальным миром.

Человек, обладающий деньгами и необладающий достаточной социальной ответственностью, без помощи товаров и услуг, может создать еще денег — что создает неравенство и расслоение в обществе. Это я сейчас не про богатых, это я про всех нас — у Вас же есть вклад в банке? То есть мы вынуждены катать на карусели, потому что так делают другие. А также потому что смысл денег до конца не определен. И нормы морали никто не зафиксировал с помощью буквы закона — где спекуляция, а где сохранение вложений. Это как с эротикой и порнографией.

Нужен ли антивирус на Маке?

Многие люди мыслят в таких категориях, как в заголовке. И я в их числе, считаю, что ставить антивирус на Мак — это ересь. И тут одна такая история…

Получаю несколько дней назад вот такое письмо:

Добрый день,

коллекторское агентство Сентинел Кредит Менеджмент напоминает вам о необходимости срочного погашения вашего долга до 2.03.2017.

В случае невозврата долга будет произведена процедура ареста с последующим изъятием имущества должника.

Подробную информацию о судебном решении по вашей задолженности и договор уступки имущественных прав нашей организации вы найдёте в документе: http://sentinelcredit.ru/documents/2017/02/8b8894c499…
С наилучшими пожеланиями,
ООО Сентинел Кредит Менеджмент.

Это письмо было сформировано автоматически, отвечать на него не нужно.

По любым вопросам вы можете обращаться по телефону горячей линии 8 800 289 47 25 (звонок бесплатный) либо через форму обратной связи на сайте http://www.sentinelcredit.ru.

Первую ссылку я намеренно сделал некликабельной, поскольку под ней лежало нечто, ведущее, не на сайт Сентинела… а на сторонний хост — rhinomerida.com. При этом, сайт донор вполне адекватный. Первое же предположение — похоже на то, что сайт взломали и положили туда зловредный скрипт.

Перехожу по ссылке в письме. Браузер скачивает файл с расширением *.doc.js — типа нормальный документ, а на деле — исполняемый скрипт. Внутри вот такая картина:

2017-02-27_23-21-21

Ищу JS-овые функции и нахожу разве что четыре блока с eval().

Ставлю брекйпоинты, запускаю, смотрю выхлоп. Оказывается, требуется ActiveX компонент, которого нет на Маке :-)

А на Винде эта ересь могла бы пойти в бой. Что там было до конца не раскопал. Искать финальные координаты и что там собирает скрипт в итоге я отложил, ибо профит от этого — только обучение, а нам еще кодить и кодить нашу Авенду…

* * *

Один из вариантов доказать состоятельность своей точки зрения — дать другому человеку возможность спокойной обосраться и всем это продемонстрировать. Особенно, когда другой человек предпринимает для этого все усилия. Зачем тормозить поезд на полном ходу?.. Это вопрос времени до первого серьезного поворота.

История про одного продажника, который ходил по квартирам

Собираюсь уходить на работу. Звонок в дверь.

Подходя к двери, слышу как человек на той стороне пытается выглядеть приветливо и что-то говорит доброжелательное.

Открываю дверь, возникает чудный диалог:

— Вас есть 18 лет?
— А почему Вы спрашиваете?
— Я могу озвучить Вам сообщение только если Вам есть 18 лет.
— Озвучивайте.
— Вас беспокоит мусор в почтовом ящике?
— Я его не проверяю.
— Счастливый Вы человек.

Два «да» я уже ответил, где же третье? Сейчас что-то будет!

— Мы сейчас решаем вопрос с мусором и раздаем всем жильцам вот… логотипы, — говорит мой собеседник, по всей видимости менеджер по продажам, и да, протягивает…
— Очень сложно, я ничего не понимаю.
— Что непонятно?
— Я программист, мне нужно четко что предлагаете и какая цель, блок-схема, понимаете?
— Мы даем Вам, чтобы Вы убедились в качестве.

На сцене появляется коробка с ножами, которую назойливо протягивает мне типа-уверенный-в-себе продажник.

— Я не беру.
— Логотипы хорошего качества…
— Не теряйте время, я не беру.

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

А я подумал, что наверное где-то его наглость всё-таки сработает. Например с теми людьми, которым трудно за себя постоять — пенсионерам и т.д. Наверняка им такое говно удается впарить.

Рекомендую погуглить в интернете истории таких продажников; эти истории выглядят одновременно смешно и ужасающе.

Немного личного опыта использования каршеринга в Москве

Забавный опыт у меня случился с одним из сервисов каршеринга. Предыстория такова — я зарегистрировался почти во всех сервисах в Москве — Делимобиль, YouDrive, Belka, Car5. Есть еще кто-то пятый, не помню кто :-).

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

По-моему опыту Делимобиль — это рабочая лошадка. Есть много где, качество приложения, сервиса и автомобилей — очень на хорошем уровне. Больше всего мне нравится их поддержка в Телеграме. У Белок приятные машины и приложение. У остальных всё просто ОК.

Ну так вот, я отклонился от повествования. Один из сервисов порадовал меня своей «клиентоориентированностью». Вобщем, у этого сервиса меньше всего автомобилей, при этом когда мне понадобилось уехать из Ашана с покупками, в ближайшем километре не было никого, кроме ровно этой машины. Ну забукал, сел поехал. Поставил возле дома. На следующий день — эта же машина на месте. Далее, приехал какой-то парень и стал её вычищать до блеска. Ну понятно, обслуживают. Все для меня, не иначе.

По непонятным для меня причинам обнаружил доступные для бронирования автомобили этого сервиса аж на границе Московской области. Любопытно… Возможно, что настолько низкие штрафы за некорректную парковку, что выгодно уехать в самую далекую глушь и там оставить машину. А обратно, кроме вас все-равно никто на ней не уедет. Как-то, наверное, так.

Вывод, если сервис непопулярный, это не значит, что он плохой. И для него найдется своё применение.

* * *

Совсем ушло настроение что-то писать. Очень много мыслей о чем могу сказать и о чем хочу сказать, но излагать это крайне трудно.

За последнее время сам в себя вкопал в яму, в которой я все понимаю, все знаю, но выбираться не понятно как и, главное, зачем.

Конкретно.

Помните тот ролик про 7 красных линий? Так вот я не сказать, что тот самый эксперт. Я делаю скидку на человека, который ставит запрос, на сам запрос и могу принять его в работу, чтобы потом отказать с формулировкой «данная задача не решается». Почему? Потому что потом такой оверлоад всегда будет виден менеджеру. И тот рано или поздно сообразит, что его грузят ненужными задачами.

Как это коррелирует со мной? Да очень просто. Часто я оказывался, и сейчас также, в позиции Эксперт плюс Сам-себе-менеджер. Я могу справиться с проблемой. Мне нет необходимости ставить короткие небольшие указания. Я вполне могу взять на себя и решить крупную проблему. Ответственно и с гарантией. Так я работал всегда по найму. Проблем сказать «это не решит задачу», «это ошибка», «это нам не нужно», «нам необходимо вот это» в ситуации, когда я вижу булшит, для меня нет.

Я могу ответственно заявить, что со своей работы я управляюсь сам без внешнего контроллера или супервайзера. Так было всегда со мной, поэтому самостоятельность во мне выработана на все 99.99% согласно SLA :-)

Но тут начинается интересное. Также, у меня всегда присутствует начальник в работе. Куда ж без него? Без него как без кота, скучно и не интересно.

И вот этим начальникам регулярно от меня доставалась порция экспертизы. Если при строении Бывалый Начальник <> Менее опытный Подчинённый как взаимодействовать понятно, то в случае, давайте скажем так, Руководитель <> Самодостаточный Подчиненный встает вопрос — кем руководит руководитель? Вопрос не праздный, для меня. Управление получается реверсивное. Подчиненный выдает ту информацию и те заключения, которые ложатся в основу решений Начальника, и которым ему противопоставить практически нечего. В таких отношениях напрашивается наличие доверия. Тогда Подчиненный превращается в Уполномоченного представителя, действующего от имени Начальника и в его интересах. Итого, такой перекос, не несет в себе явных преимуществ, но требует работы над собой и над персональными качествами для обоих.

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

Про мошенничество при съеме жилья или несколько рецептов как не попасться на уловки мошенников

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

Для начала определяемся со средней ценой для выбранного района и суммой, которая есть на руках. Для ответа на первый вопрос на Циане есть вот такая статистика:

2017-01-26_00-53-54

Касаемо бюджета — никогда нельзя закладывать по минимуму. Ориентироваться нужно на адекватную цену, потому что именно халявщики — целевая аудитория мошенников. Умный человек будет избегать любого рода проблемные квартиры, там где халявщик закроет глаза на определенные «странности».

Например, что касается минимальной цены, ее, как правило, видно сразу. Цена, тем не менее, конечно, может различается; для простеньких однушек за 30К допустимо колебание цены на 2-3 тысячи рублей. И вот то самое первое правило, о котором все знают и о котором всех регулярно предупреждают: мошенники, зачастую, предлагают квартиру по заниженной цене. Их цель — получить ваши отклики на объявление. Определенно, вы поедете на просмотр, куда без этого, и, определенно, на месте, качественному разводиле не составит труда навести вас на правильные мысли. И если нормальное объявление просматривает, условно скажем, 20 человек в день, то объявление вот такого недо-риэлтора могут просматривать около 80. Если они будут держать цену как у всех, то этого добиться, разумеется, будет сложнее.

И это наводит на понимание второго признака мошенничества — их объявления долго висят опубликованными с явными преимуществами, количество просмотров зашкаливает, но при этом их квартиры почему-то не сдаются. Спрашивается, что тут, черт возьми, у вас происходит? И оответ очевиден: эту квартиру даже и не собираются сдавать. Отказы риэлторов могут быть разными, мол, только вот вчера понизили цену и вы позвонили. Это все можно отправлять в булшит фильтр. Как проверить, для объявлений на Cian — смотрим вот такой вот график:

2017-01-26_00-49-50

Теперь немного погрузимся в мою историю. На глаза мне попалось объявление за 32К. Средняя цена по району была около 35К. Но могу сказать, что при этом были и разумные варианты за 32К — у одних, например, был небольшой метраж, у других — интерьер в стиле «бабушкин-вариант», у третьих — удаленное расположение от метро. Все эти факторы, несомненно, снижают стоимость аренды. Но в моем случае, метраж квартиры был 39 метров, что для однушки — больше обычного.

Я набрал по указанному в объявлении телефону, чтобы договориться о просмотре. На том конце провода меня прервали практически сразу, не дав закончить даже первый вопрос вопрос, и начали рассказывать подробно, как будто под диктовку, про состояние квартиры… про то, в квартире сейчас живет девушка, но она съезжает… Так, стоп, — подумал я. Какого хрена мне рассказывают историю, а не отвечают на мои вопросы? Все, что меня заинтересует, я обязательно спрошу.

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

— В квартире сейчас проживают?
— Ну вы мне не дали сказать! Да, проживает девушка, но она съедет, у нее что-то там по семейным обстоятельствам. Заселилась недавно, только вот начала снимать и сказала, что вынуждена съехать.

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

— Когда она съедет?
— Вот вы заедете и она сразу же переселяется к друзьям или куда там.

В тот момент меня еще не осенило послать подальше этого риэлтора.

Далее, мне говорят, что цена будет ниже на две тысячи рублей, если я сам сделаю ремонт. Какой ремонт, Карл?

— А вы потом не выселите? — типа троллю я.
— Нет, конечно. Там обои… <..>

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

Приезжаю домой, открываю объявление. Попутно, мне попадается та же квартира — это я понял по одинаковым фотографиям — на которой, внимание, никакой ремонт нахрен не нужен! Она полностью в нормальном состоянии. Дело было уже полночь. Я должен был ехать утром на просмотр, поэтому решаю с утра перед выездом задать контрольные вопросы.

Утром набираю…

— Скажите, а какой ремонт в квартире требуется? Я посмотрел фото, на них все хорошо.
— Вот, а вы мне не дали договорить! Нужно поклеить обои. Там жили с собакой, ободрали обои.
— Так, стойте, вы снижаете цену на 2К, чтобы я поклеил обои?
— Ну это я хозяйку уговариваю, мол Лена [например], давай цену уменьшим, пусть сами все сделают, зачем тебе кого-то нанимать.

<..>

— А документы на квартиру у вас будут?
— Конечно будут, вы позвоните собственнику, поговорите с ними по телефону?

Чё? Где тут причинно-следственная связь между сложно сочиненными предложениями?

— И договор будет?
— Да, договор.
— И залог попросите?
— Да, залог нужно будет оставить.
— Но подождите, как его оставлять, если в квартире еще проживает человек?
— Смотрите, вы въезжаете, она на следующий день освобождает квартиру.

Не въезжаю.

— Давайте так, пусть она освобождает квартиру, вы мне позвоните.

Для меня все становится на свои места. Еще мне удалось сорвать с языка этой тупой болванки, что до нее не могли дозвониться до 8 января, что хотят съехать. Но тут моя подготовка дает о себе знать, ведь я точно помню, как своими глазами, я видел, что объявление добавлено было 4 (четвертого, прописью) января.

Не вижу смысла грубить, поэтому отменяю просмотр. Говорю, что в следующий раз ничего отменять не буду, на просмотр я просто не приеду.

Множество деталей я опустил. В целом, они создают ощущение полноты истории. Я даже больше, чем уверен, что легенда шлифуется на каждом таком клиенте. Кто-то палит, рассказывает что не нравится, а говнюки улучшают свой «продукт».

С такой историей я сталкиваюсь второй раз. Для меня удивительно, что такое практикуется. У меня есть предположение, что это могут делать в сговоре или даже без ведома жильца. Например, хозяйка, желая подзаработать и имея второй комплект ключей может водить по своей заселенной квартире и сдавать её по второму кругу.

Мораль простая, еще не все жопошники вымерли, поэтому нужно быть начеку.

Подведем итог, что же мы узнали:

1) Минимальная цена относительно других предложений должна вызвать подозрения.
2) Длительность размещения объявления и статистика его показов говорят о том, насколько квартира реально хорошо уйдет за два дня, если прямо сейчас не оставить залог.
3) Никаких залогов, пока в квартире проживает человек. Жопошники легко могут заключить два договора, оба жильца даже могут оставить залог. Вопрос, с кем вы далее будете собачиться?
4) Не бояться включать задний ход и признавать, что вас пытались развести. Ай, как неприятна…
5) Мыслить логически, как Шерлок Холмс. И вести блог, как Доктор Ватсон.

Наелись Майкрософтом

Давным давно, когда мы только начинали работу над Авендой, передо мной и моим напарником встал вопрос выбора языка программирования. Первоначально я, рассматривал вариант создания решения в виде десктопного приложения, потому что считал, что могут возникнуть те или иные ограничения при работе из браузера (например, потребуется работа с внешним оборудованием и интеграция с другими программами). Но при этом есть также преимущества и для решения в виде веб-сайта (более массово с точки зрения выбора разработчиков, понятно для нас самих, кросс-браузерно, технологии непрерывно развиваются и т.п.). Мой напарник рассказал мне об SPA — Single Page Application — модном подходе в вебе, когда приложение реализуется в виде одной страницы, и где множество операций (навигация, рендеринг шаблонов и т.п.) выполняются на клиенте. Сервер же в этом случае отдает только нужные данные по запросу. На мой взгляд просто и гениально. Мы сделали ставку именно на такой подход и на такое решение.

Клиентским языком, разумеется, выбрали JavaScript и фреймворк Backbone, который практически сразу был заменен на Angular. Решение писать на Ангуларе, принятое в 2012 году было стратегически верным. А вот с серверным языком вышло все не так-то просто.

Мой напарник на тот момент знал несколько языков программирования. Его предложением было — писать на C#, поскольку это его фаворит. Я кодил на PHP и в 12-ом году у меня за плечами было уже несколько проектов. Для меня его предложение никак не шло в разрез моих интересов — в программистские дела я не хотел влезать вовсе, кроме базы данных и её архитектуры, потому что прекрасно понимал, что на все у меня не хватит времени; я хотел сосредоточиться на бизнес-задаче и интерфейсе. Для меня также был важен человек, с которым я работаю. Я искренне убежден, что у языка C# есть и преимущества, и хорошие программисты, и хорошие работодатели, и хорошие проекты. Но минусом, и в тот момент мы его озвучили, являлось то, что сервера на Windows стоят очень дорого по сравнению с Linux’овыми. Но к слову, дорого обходятся не только сервера — за те сюрпризы, которые Windows может вам преподнести, может тоже выйти лишняя копеечка.

Проект Mono, возникший по всей видимости из желания людей прекратить морочиться с Windows’ом, — это разработка для Linux, которая позволяет выполнять .NET приложения. На сколько мне известно Микромягкие тут же подали на них в суд. Чем закончился суд — увы не изучал. Знаю только, что Microsoft приобрела проект Mono, забрала его под себя, но не потопила, а заверила общественность, что даст ему развиваться. Что сейчас и происходит. На главной странице сайта так и написано: «Sponsored by Microsoft». Но на тот момент про Моно мы еще не знали.

Одной из вехой проекта стало то, что практически сразу мы подали и получили подтверждение на участие в Bizspark’е — программе от Microsoft по поддержке молодых проектов. На деле — пылесос тех проектов, кто не до конца понимает последствий сотрудничества с Microsoft, и создание таких условий для выбора, чтобы Microsoft не имела явного недостатка перед бесплатными продуктами — необходимость много и за все платить. Опять же, на тот момент — это выход из ситуации, поскольку поиск напарника в проект — задача непростая.

Первым звонком для меня стало осознание того, что проект прошел стадию эйфории, когда кажется что рынок твой, стоит только показать ему продукт. Более того, мы уже расстались с напарником и на горизонте светила перспектива расставания с другим человеком — на тот момент он в больше степени держал в себе концепцию и решение программной части проекта. Почему — по естественным причинам. Если у вас есть что-то, что приносит вам 1 миллион, станете ли вы тратить половину, треть, четверть своего рабочего времени на то, что приносит вам рубль? Соотношение может и завышено, но идея именно такая. Также у нас заканчивалась 3-хлетняя программа Bizspark, которая давала нам бесплатное ПО (любое от Microsoft) и кредит в $150 на каждого члена команды на облачные ресурсы. Так вот все это приближалось к отметке «сейчас Microsoft с нас все вернет».

Кстати, именно так все и случилось. Когда программа закончилась, Майкрософт прислал письмо об окончании программы, но лишь спустя месяцы у нас подписка перешла в платное состояние. Для меня, конечного пользователя, это крайне нелогично и запутанно — в апреле мы зарегались в Bizspark, в августе начали пользоваться Azure, спустя три года в октябре нам стали выставлять счета. Где логика — загадка. Вобщем, 19 октября Microsoft переводит нас на платную подписку, незадолго до этого у нас начинается новый отчетный период. Что усугубляет факт того, что я замечу происходящее, например просматривая списания с моей банковской карты — до списания пройдет полтора месяца. Но в день с нас списывают по 2500 рублей. Так продолжалось около 2-3 недель, пока мы это не заметили и еще около 2 недель пока мы искали решение. Оказалось, с нас списывали деньги за лицензию MSSQL Enterprise, которая стоит порядка $1000 в месяц. При этом по программе Bizspark нам полагалась одна такая лицензия бесплатно! Но, блин Карл! Я нашел телефон менеджера, который года 2 назад манил меня в акселерационную программу Microsoft, через него я вышел на кого-то из сотрудников нуженого мне отдела и узнал, нужно было заполнить какую-то информацию в профиле, просто заполнить, и лицензия была бы бесплатна! Чуть-чуть бюрократии и все будет! Таков Майкрософт. Принимаем и живем дальше. В тот момент я решаю, что надо выбрать любую другую технологию базы данных.

В конце месяца нам выставили счет на 90 000 рублей. Ситуацию удалось немного выправить. Пока мы разбирались с тех поддержкой откуда у нас такие списания, я привел свое видение ситуации и свои аргументы в пользу того, что списания навязаны нам. Мы не получали уведомлений накануне. Мы не нуждаемся в лицензии Enterprise. Майкрософт нашу позицию принял и скостил нам 65 000 рублей — выпилил все расходы по «аренде» лицензии Enterprise. За что им спасибо, точнее тому самому индусу, с которым мы общались. В Российском офисе сотрудники на нас забили и перестали отвечать практически сразу. Взаимно, вы нам тоже не особо в будущем нужны.

Была еще одна история. Примерно год назад я обратил внимание, что наше API пользовательской части сайта (авторизация, регистрация, бронирование и т.п.), немного говоря, странное. И я захотел его переделать — сделать проще и стандартизировать подход. Как оказалась, API у нас не настолько громоздкое. И его переработка заняла у нас несколько месяцев. То же самое я рассчитываю сделать и для бэк-офиса. Одна из причин такого рефакторинга — мы начинали разрабатывать iOS приложение в 2016 году и как выяснилось, для него в любом случае требовалось модифицировать или переписывать ряд API методов. Что вообще означало, что можно было начать писать все то же самое с нуля на другом языке программирования. Эту часть всего бэк-энда можно было сделать независимой и запустить, например, на поддомене api.avenda.ru вообще на отдельном сервере. Еще раз я осознал, что мы не сильно зависим от текущих технологий на бэк-энде.

Сейчас с нас списывают по 10-20 тыс. рублей в месяц за Azure. Одну из проблем мы решили — базу перевели в облачный сервер вместо развертывания своего сервера MSSQL. База нам обходится по 1000 р в месяц. Но сервера на Azure, которые нас устраивают, обходятся в 8000 р. При этом у меня есть мой личный сервер для проектов на PHP, за который я плачу 9000 р в год с производительностью немного ниже Ажуровского сервера.

Я вполне серьезно задумался, а что должно быть «решением» наших сложившихся проблем? Мне нужно научиться разбираться в технологиях Azure? Пойти на курсы? Каково должно быть стратегическое решение, которое позволит нам спокойно делать бизнес, а не топтаться на месте? И ответ напрашивается сам собой — нужно решение, которое работает на Linux, чтобы не связываться с Windows-серверами навсегда.

В конце 2015 года я искал ответ на вопрос «как перевести приложение на другой язык программирования». Мне посчастливилось случайно познакомиться (уже даже не помню как) с человеком из Яндекса и проконсультироваться у него на предмет того, какие технологии использует Я, как он видит перспективы развития языков и что думает об Окнах. Насчет последнего, я не сомневался, человек администрирующий сервера, без насилия не станет любить Windows. Вобщем, его ответ был таким, что и Pyton, и PHP не настолько страшны, как их шарписты малюют. Если я смотрю в сторону Linux, это хороший выбор.

Для меня показателем успешности языка является то, какие топовые компании его выбрали. Facebook и VK, Twitter, Инстаграм, Google, Яндекс. И мне становится понятным какими технологиями реально владеют крутейшие умы планеты. И где Windows в этой пищевой цепи. И почему аргумент «C# идеален для корпоративных систем» — не работает. C# хорошо проник в университеты, где ему обучают и где Майкрософт предлагает бесплатные продукты для студентов. Почему, Карл? Да вы подумайте. Этот как 3 года бесплатных ресурсов Ажуры и один месяц, который год кормит.

Короче, я поставил ультиматум нашим девелоперам, либо 19 февраля мы запускаемся в продакшене не на Майкрософте, либо я ищу людей, которые перепишут бэк-эенд на другой язык программирования. Ждем. Всем попкорна…

«За» Microsoft:

  • Все итак работает.
  • Изменения — это стресс, а если оставить все как есть, то людям не нужно будет подстраиваться.
  • Потеря времени.
  • «Microsoft много сейчас делает для .NET».

«Против» Microsoft:

  • Мне не нравится компания Microsoft и я не верю в её будушее.
  • Дорого и нерентабельно для бизнеса.
  • Лучшие умы планеты используют и развивают другие технологии.

Поездка в Грозный

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

Мы собирались выехать часов в 6 утра, чтобы приехать к 9-10 утра. Накануне искали в поисковиках как доехать из Прохладного до Грозного, но вся поисковая выдача была загажена тупыми сайтами с автоматически сгенерированным контентом. Наши опасения были в том, что какая-то трасса может быть в плохом состоянии и по ней, например, лучше не ехать, о чем может не знать навигатор. В общем ничего не нашли, а только прикинули, что путь должен занять не то 2:40 по мнению Гугла, не то 3:00 со слов Яндекса. Маршрут обе системы прокладывали по-разному четырьмя разными способами. Для тех, кто ищет как все-таки лучше ехать от Прохладного до Грозного, несомненно по трассе Р-262, затем по Р-380, обе трассы в прекрасном состоянии. Я полагаю от Минеральных вод, также будет удобным добраться по этим трассам.

Но наш путь «туда» пролегал через Моздок и Новый Редант. Получилось это потому, что я не особо следил как меня повел навигатор, в результате мы поехали «самым быстрым» по расчетам приложения путем. Нам крупно не повезло с трассой (Р-296) — на ней было очень много ям и покрытие оказалось крайне далеко от простой горизонтальной плоскости; зато мы посмотрели местные мелкие населены пункты и небольшой перевал. Природа в тех местах оказалась очень красивой.

Одной из причин, почему 200 км преодолеваются за 3 часа, а не быстрее, это наличие блок-постов. На нашем пути их было порядка 8-9 за все время. Если не ошибаюсь, стоят они на границах республик. Нас останавливали, проверяли документы. На одном из постов вписали в какой-то журнал. Сотрудник пожелал нам Нового года и сказал, что в Грозном, куда мы едем, очень красиво. Люди на постах вообще все время были приветливы, довольно позитивно общались и я могу сказать, только приподнимали настроение. На одном из постов, проверяющий почему-то все-время назвал меня по отчеству, а мою спутницу по имени. Кстати, на том посту был установлен вот такой рентген, на котором нас сканировали:

2017-01-02-19-22-52

На местных дорогах можно встретить портреты руководителей Чечни и президента России на въездных арках в город, например. Также тут нормально вешать портреты на зданиях, например, на здании гимназии:

2017-01-02-16-36-58

Что касается самого Грозного, люди здесь показались мне доброжелательными. Если у вас есть какие-то предрассудки касаемо опасности в городе, то я думаю, какой-нибудь типичный Израильский город на границе с Палестиной может дать фору Грозному в стократном размере. То, как люди здесь общается, не вызывает сомнения, люди те же самые, даже несмотря на религиозные отличия. Это напомнило мне случай, когда я был в Белоруссии. Огромный охранник-бугай, когда я на парковке подкачивал колесо компрессором, и треск от него резал всем мозг в округе, подошел и душевным голосом мне сказал: отгони машину вот сюда, колесо разгрузишь, быстрее накачается. По его виду я ожидал услышать что-то другое. Так и здесь, нас сфоткал прохожий, рассказал куда можно сходить, люди идущие по тротуару проявляют вежливость и уступают друг другу место. Ростовские туристы на их фоне выглядели куда более враждебно.

Мы побывали в Сердце Чечни — это мечеть, построенная в центре города:

2017-01-02-15-52-37

2017-01-02-16-06-21

2017-01-02-17-05-17

Местные небоскребы и его окрестности:

2017-01-02-16-28-27

2017-01-02-16-28-35

2017-01-02-16-28-47

Попробовали местную еду, безумно вкусную, Чепалгаш — лепешки с творогом или тыквой. А вот это Жижиг Галнаш — мясо с галушками из теста:

2017-01-02-14-11-26

Цены в довольно крутом местном ресторане на проспекте Путина, вполне демократичны. Цены на горячее и шашлык — от 300-400 рублей. Счет нам вышел на 1100 рублей на двоих.

Побывали в музее имени Ахмат-Хаджи Кадырова, где представлена экспозиция местного художника из Чеченской республики Чингисхана Хасаева, история региона и его главы. Картины достойные, фотографий не привез, поэтому сходите сами, если интересно, не пожалеете.

2017-01-02-13-05-42

2017-01-02-12-58-00

Программист тут в почете, у него даже есть свой кабинет с табличкой:

2017-01-02-12-39-17

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

Итоги за 2016 год

Конец года, время подводить итоги и смотреть на поставленные цели уже с конкретными делами, а не просто словами. Итак, в начале года я поставил себе 9 целей, вот они:

  1. 5000 подписчиков данного блога.
  2. 10 подключенных компаний к Avenda.
  3. Минимум 1 пост еженедельно.
  4. Добавить на Авенду в каталог компаний 1000 новых записей.
  5. Найти в команду еще одного разработчика.
  6. Инвестировать до 1 млн. рублей в проект.
  7. Создать собственное мобильное приложение.
  8. Написать автоматизированные тесты.
  9. Обустроить личную жизнь, найти девушку.

Часть из них я описывал отдельными постами. Теперь отчитываюсь.

Цель №1 — 5000 подписчиков данного блога

Я писал, что в переводе на посетителей, данная цель для меня означает 450 000 посетителей блога за год. Итак, у меня в итоге за год всего навсего 4 400 посетителей, что составляет только 1% от цели. :) Основная причина тому — отсутствие контента, конечно. Я не писал много, отсюда и неоткуда взяться и посетителям. Надо сказать, что контент — первостепенное, потому что наибольший трафик мне дали конкретные записи, которые привлекли внимание поисковых систем: Спецсимволы HTMLСемейный и личный бюджет, пример планирования и составления таблицы доходов и расходовПро мошенничество при покупке туристических путевок или как вернуть деньги и предоплату за тур. По грубым оценкам, если бы я выдавал такие записи еженедельно, то мне удалось бы выполнить цель №1 примерно на половину.

Кстати, первая запись это не совсем пост; эта таблица висела еще в прошлой версии моего сайта и почему-то была любима поисковиками. Я её не удалял просто потому, что на тот момент оказывал услуги фриланса по созданию сайтов и не хотел отказываться от лишнего трафика. Сейчас в общем-то, причина та же. Так что пусть висит, удалю со временем.

Цель №2 — 10 подключенных компаний к Avenda

Цель провалена, но не сказал бы, что совсем. Удалось привлечь на живое тестирование 2 новые компании — то есть две площадки ведут через нас учет, но про подключение на платной основе пока ничего окончательно еще не известно. Еще 4 человека интересовались как устроен интерфейс и я выдавал депо-доступ к тестовым компаниям. Я был приятно удивлен, что каким-то образом о нас узнают и со мной связываются по телефону, хотя раньше мои попытки по холодной рассылке емейлов и публикации предложений по разным местам не давали никаких откликов. А тут ответ пошел и причем не понятно из каких источников.

От нас очень хотят онлайн-оплату. Надеюсь, мы в ближайшее время сможем вернуться к этому вопросу. Большая очередь задач — это один из главных наших тормозов. Привлечение новых людей в команду должно быть только в том случае, если есть перспектива привлечения платных клиентов. И сейчас это становится более очевидно, чем раньше.

Да, и мы все-такие подключили полноценно еще один новый картодром к системе. Произошло это потому, что команда Le Mans построила новую площадку в Москве. О том, как для нас прошел запуск, думаю стоит рассказать как-нибудь отдельным постом, потому что не обошлось без проблем и приключений. Но об этом позже.

Цель №3 — Минимум 1 пост еженедельно

За прошедший год я написал всего лишь 16 постов. А должен был написать 56 постов. Но сегодня я решил хоть как-то исправиться и пишу этот пост. Также я решил перенести все свои посты с предыдущего блога, который располагался на livejournal.com. Так что, если вы его не читали, можете промотать архив этого блока к 2014 году и найти эти записи.

Цель №4 — Добавить на Авенду в каталог компаний 1000 новых записей

Цель не выполнена. Мы еще не добрались до создания каталога картодромов на нашем сайте, но база из ХХХ компаний у нас уже собрана. Скоро все случится.

Цель №5 — Найти в команду еще одного разработчика

За 2016 год через нас прошло 5 новых людей.

Трое — это дизайнер, разработчик мобильного приложения и back-end разработчик сейчас с нами и каждый из них уже значительно увеличил наши возможности и скорость работы. За что им огромное спасибо.

Еще с двумя мы прекратили работу, поскольку те переоценили свое свободное время и делали слишком мало, чтобы нам это было интересно; мы, к сожалению, не можем потянуть исполнителей на полный рабочий день, поэтому всегда ищем тех, кто ищет подработку. От этого случается вот то, что было с нами дважды.

Надо сказать, у меня есть такая негативная черта — любая задача мне кажется посильной, поэтому я часто берусь за любую задачу без тормозов. У меня переполняется стек задач, над которыми я работаю и от этого страдают сроки. Нужно делиться и работой, и деньгами, тогда все получится. Я думаю нам нужно еще несколько человек. И на этот раз похоже, что на полный рабочий день.

Я также понял, что люди, которых нужно стремиться взять в команду, должны соответствовать 2 критериям: наличие мотивации работать именно с тобой, именно в этом проекте а не просто абстрактно делать дело и получать деньги; и второе — знать больше, чем ты.

Цель №6 — Инвестировать до 1 млн. рублей в проект

В такой формулировке «До 1 млн. рублей» цель действительно выполнена. Но я конечно имел в виду, что вложу сумму порядка 1 миллиона. И это мне удалось. Мои расходы на людей в этом году составили примерно половину от этой суммы. Плюс различные разовые траты и обязательные платежи на поддержку юр. лица. Итог таков, думаю можно как минимум утраивать эту цель. Я вижу только позитив в том, чтобы вкладывать средства в продукт, который работает. Наша главная проблема и недостаток — нам не хватает времени сделать все желаемые задачи. От этого мы не предоставляем нужный продукт для бизнеса.

Цель №7 — Создать собственное мобильное приложение

Мобильное приложение мы начали делать в Q1 или Q2. И с самого начала выявился недостаток, который решено было устранять до начала работы над приложением. А недостаток этот был в том, что наше АПИ было незадокументировано и было спроектировано крайне запутано, поскольку ранее им пользовался только один человек. Данная цель подтолкнула меня к написанию строгого документа — сначала Word, затем я попробовал специальный язык RAML для описания АПИ и в итоге все привел к табличному виду в Excel.

Сейчас наше АПИ для публичной части строго описана. Работа над приложением была начата, но к концу года выпустить его мы не успели. Причина все та же — я пытаюсь заниматься всеми делами сам. Нужно срочно это исправлять!

Цель №8 — Написать автоматизированные тесты

Написать тесты пока не удалось. Отмазка будет та же — приоритет у задачи был ниже, чем у остальных, вследствие чего мы ею не занимались. Но. Написание документа по АПИ-шке наталкивает меня на мысль, что такое формальное описание открывает возможность к тому, чтобы элементарным образом написать экспорт из документа в код, который будет выполнять примитивное Unit-тестирование методов — проверять их доступности, полноту и корректности ответов. Без учета бизнес-логики и специфики контекста, в котором находится приложение.

Цель №9 — Обустроить личную жизнь, найти девушку

Потрачено :-)