
...Есть люди — существительные. Они никогда не успевают жить, потому что всегда существуют.
Есть люди — прилагательные. Они всегда к кому-то прилагаются, и никогда не бывают сами по себе.
Есть люди — числительные. Они всё исчисляют в количестве выгоды для себя.
Есть люди — местоимения. Они всегда ищут место потеплее, чтобы украсить его собой.
Есть люди — глаголы. Они всегда глаголят прописные и непреложные истины, и всё знают лучше всех.
Есть люди — наречия. Они безостановочно говорят, даже не задумываясь о чём.
Есть люди — предлоги. Они постоянно служат причиной для всех и для всего.
Есть люди — союзы. Они всегда стремятся создать с кем-нибудь кружок по интересам. Неважно по каким.
Есть люди — частицы. Они неприметны, и из них образуется серая масса.
Есть люди — междометия. Они всё время погружены в свои эмоции, и им некогда оглядываться по сторонам.
А ещё есть люди — страдательные причастия. И этим о них всё сказано...
""""""""""""""""""""""
Таша Калита
Корпорация «Эмерция» располагалась на вершине небоскрёба. Из окон офиса открывался величественный вид на равнину из облаков, окутанных мягким золотом приближающегося вечера. Энтони Робертсон сидел за белым столом, стилизованным под дерево, с тоской наблюдая за неторопливым движением небесного тумана через окно, заменяющее в комнате одну из четырех стен. Неизвестно, сколько часов ещё придётся провести в этом душном кабинете, прежде чем удастся вырваться на свободу. Он ненавидел цифры и тех, кто их придумал в седой древности, ненавидел отчёты и особенно тех, кто каждый день просил у него денег на оплату налогов, аренду помещений, на старые и новые проекты. Энтони ненавидел их, ведь каждый раз он должен был разбираться с тем, откуда взять эти самые деньги, отдавая одним, он неизбежно забирал финансы у других. Всем было плевать на ограниченный бюджет компании, каждый сотрудник просто старался получить как можно больше от своего босса. Ненавидел Робертсон и то, что решать вопросы нужно было безотлагательно каждый вечер, и то, что не мог доверять никому, кроме себя. Корпорация «Эмерция» – его благо и проклятие.
Мужчина разглядывал себя в полупрозрачном отражении на стекле, он долго смотрел на свой четко очерченный подбородок, голубые глаза, немного приподнятые гелем короткие волосы, крепкий, уверенный в себе и при этом бесконечно измотанный от монотонного движения жизни. Тело – под Статус руководителя компании: широкие плечи, спортивный силуэт. Респектабельный вид стоил ему немало. Одежда, развлечения… Все деньги, вырученные за долгие часы просиживания в кожаном кресле, уходили на оплату Статуса, и ему это нравилось. Должно было нравиться, иначе никак. Мужчина размял шею, потом, покосившись на циферблат винтажных часов, достал из носа две небольшие вставки, которые препятствовали излишнему интересу к противоположному полу, и положил их на стол рядом с собой. Без них было как-то приятнее, свободнее что ли, а на этаже едва ли остался хоть кто-то, чтобы отсутствие затычек в носу стало проблемой. Он вновь ушёл с головой в работу, вчитываясь в значки, которые выводил стол, составляя пометки, что-то подтверждая, что-то отклоняя.
Руки секретарши поставили на стол чашку крепкого горячего кофе, мужчина едва кивнул на это, и та, цокая каблуками, удалилась из кабинета. Энтони взял в руки напиток, отхлебнул немного, а потом, оторвавшись от бумаг, уставился на чёрную жидкость в белом сосуде. Собственно, ничего особенного в происходящем не было, за исключением нескольких мелочей, которые казались странными и немного озадачивали. Мужчина для большей уверенности проверил нос – вкладышей там не оказались, они всё так же лежали рядом. Энтони тихо фыркнул. Надо же… Секретарша у него, оказывается, была из «идейных». После того как Кейт Браин проработала у него без проблем полгода, этот факт мало что менял, но был хорошим поводом, чтобы вновь отвлечься от работы. Робертсон по привычке захватил с собой вставки. Выйдя из кабинета, он ещё раз принюхался – чисто. Сколько не втягивай воздух и не раздувай ноздри, а ничего, кроме тонкого аромата обычных духов, не почувствуешь. Система очистки воздуха уже стёрла следы присутствия дневной смены, а темноволосая девушка за столом не распространяла вокруг себя будоражащих запахов. «Кейт Браин» было написано на ее бейдже. Она довольно мило наморщила лобик, полностью поглощенная рядами знаков на своем столе и почему-то не выглядела особенной. Темные волосы, завитые в аккуратные спирали, едва подпрыгивали при движениии головы девушки, губы чётко очерчены помадой.
– Я не ожидал, что кто-то, кроме меня, сегодня задержится после работы на целых два часа, – Энтони стоял, прислонившись к косяку, на выходе из своего кабинета в нескольких метрах от секретарши. Кейт подняла взгляд на своего начальника, в карих глазах отражалось лёгкое удивление, но его почти полностью скрывала усталость.
– Я не успела вовремя закончить с графиком ваших встреч на следующую неделю, если бы вы проводили совещания сам с собой, всё было бы куда проще, – на её губах отразилось дыхание улыбки.
– Мне нравится эта идея – договориться с собой я всегда сумею, – он начал играть с вкладышами для носа в своих руках, привлекая к ним внимание девушки. – То, что вы всё ещё здесь, – не все удивительные открытия за сегодня.
Браин чуть наклонила голову, следя взглядом за движением пальцев мужчины, а спустя мгновение пожала плечами:
– Да, от меня не пахнет. Просто не хотела этого для себя. Я слышала все эти бесчисленные «за» подобные изменения. Это удобно, когда тебе всегда нравится партнёр, и ты можешь пошалить, было бы только время. Самый полезный, быстрый и безопасный способ расслабиться после работы. Немного торопливого пыхтения с незнакомцем в полной эйфории и больше никаких проблем. Наука немного упростила и улучшила природный механизм, – она махнула рукой, – но, по мне, это просто способ забыть, насколько мы бесполезны.
– Мне нравится моя жизнь, и этого достаточно, – возразил Робертсон.
Секретарша хотела сказать что-то ещё, но осеклась и опустила глаза:
– Сэр, наши взгляды на этот вопрос могут расходиться. Мне нужна эта работа, чтобы существовать, и я не хочу её терять. Простите меня, я и так сказала лишнее…
– Кейт, не обижай меня. Я не буду увольнять тебя за мнение по вопросу, который не относится к твоей работе. А вот за неуважение ко мне – могу. А это неуважение – считать меня настолько ограниченным самодуром, который способен на увольнение за подобные высказывания, – окончание фразы прозвучало довольно жёстко.
Девушке не оставалась ничего, как просто согласиться и закончить свою мысль:
– В мире достаточно еды для каждого, достаточно развлечений и знаний. Просто прокормить себя мы могли уже несколько тысяч лет назад. Сейчас же урожай увеличился в десятки раз, появилась синтетическая еда, автоматизированные способы производства одежды и прочее. Каждый из нас мог бы работать только час или два в день на работе, которая нужна для выживания, а всё остальное время тратить на то, что захочет. Так хоть кто-то не просто прожигал бы жизнь, – Кейт с грустью рассматривала дверной косяк за спиной своего босса, в окне позади неё потихоньку начинали зажигаться звезды, – но вместо этого мы работаем ещё больше, чем раньше, заменяя возможность сделать что-то стоящее на несколько часов быстрых удовольствий… У меня нет времени на нормальную жизнь, но я не хочу забывать об этом.
– М-да, – снисходительно протянул мужчина, а потом, разочарованно вздохнув, передразнил её: – «Сэр, наши взгляды… я не хочу терять работу…» Заканчивай и иди домой.
Кейт нагнала интриги, за которой оказался лишь пустой пшик. Всё сказанное девушкой прозвучало как пустой набор напыщенных штампов, которым любят тешить себя недалекие люди в попытке показаться умнее. Через час, направляясь к выходу из офиса, с ощущением тягучей тоски Робертсон отметил, что девушки уже не было на месте, вокруг царил только прозрачный полумрак. В этот момент ему почему-то почудилось одиночество.
Энтони закончил вечер, как и множество вечеров до этого. Один из престижных клубов раскрыл свои двери, встречая гостей нескончаемой тягучей мелодией. В клубах всё просто и однозначно. Всё происходит легко и быстро в тёмных уголках, небольших комнатках, частных VIP-кабинах. Без алкоголя, без последствий, без обязательств. Иногда девушки рожали детей, но почти никогда не воспитывали их, чаще всего детей выращивали в специальных бутылях, и этот процесс был поставлен на поток. Людям не нужно было думать ни о чем, кроме бесконечной и бессмысленной работы. Человечество оплачивало лишь одно – существование «Статуса». Для сильных мира сего отказаться от возможности получить больше, чем уже есть, было немыслимо.
В клубе Робертсон огляделся и заприметил темнокожую девушку, которая лениво потягивала лимонад с шипучкой. Увидев Энтони, она улыбнулась ему, как старому знакомому. Пальцы брюнетки застыли у ноздрей. Робертсон кивнул, и они синхронно избавились от своих вкладышей. В клубе пахло. Как же там пахло! Концентрированный и лучший аромат разврата кружил голову и решал все вопросы за них. Мужчина стукнул запястьем по стойке, оплачивая себе уголок, и, не долго ожидая, вцепился в губы незнакомки поцелуем, та ответила жадно и порывисто. Вот и всё, они вскочили на поезд, с которого уже не спрыгнуть, а ведь её голос он услышал только в сплетении лёгких стонов. Ночь была жаркой.
И вот снова очередной рабочий день за сведением цифр и в целом бесполезным делом в области, существовавшей лишь потому, что современная экономика была слишком сложной. Раньше это удавалось как-то игнорировать. Часы тикали медленно, словно бы нехотя. Но пришло время, и золотого цвета облака стали приметой окончания летнего рабочего дня, приметой, что люди уже уходят домой, покидая рабочие места. Робинсон послал в личный чат Кейт просьбу зайти к нему в кабинет. Как это иногда бывает, ее слова в голове мужчины переварились и обрели свой настоящий смысл лишь после того, как он прожил ещё один круг своей жизни:
– Вот вы говорите, что отказались от операции. И что вам это дало? – спросил он, вспоминая дурман прошедшей ночи. – Ради чего можно было отказаться от этого?
– Чувство одиночества, чувство, словно я заперта в клетке, из которой нет пути на волю. Бессилие, – она вздохнула и развела руками.
– А зачем? – он с интересом смотрел на девушку, втайне надеясь услышать какую-то глупость. Он хотел успокоиться, понять, что ничего не пропустил, – Зачем Вам это всё чувствовать? Вы надеетесь что-то получить, или это как-то должно изменить весь мир? Жертва ради людей?
– Я не могу сказать – «зачем». Вряд ли так я изменю мир или ещё что-то, я чувствую себя немного особенной, вот и всё. Хотя, знаете, нас таких «особенных» достаточно много, – она снова развела руками и уронила их по швам.
Обаятельная девушка с аккуратной прической, чувственными губками и стройными ножками. Природная красота Кейт была обрамлена в со вкусом подобранный наряд. Бесполезный протест… Потому что иначе не может… В этом было что-то болезненно гордое.
– Это тяжело осознавать, – он встал со своего кресла и уселся на край стола, глядя вдаль на бесконечные облачные поля.
Похлопав рукой около себя, Энтони пригласил Кейт присесть рядом.
– А вы бываете в клубах?
– Нет. В смысле – у нас свои клубы, там меньше народу, и всё то же самое… Немного сложнее… За один вечер может даже знакомство не завязаться…
Она устроилась рядом с ним. На душе у Энтони было довольно мерзко от осознания, что завтра они снова встретятся на этой треклятой работе и послезавтра опять, и так повторится много раз, почти до самой смерти. И в то же время впервые за многие дни, где-то внутри у него появилось невнятное тёплое ощущение. Мужчина усмехнулся сам себе:
– Знаете, вы ведь выбили меня из привычного цикла.
Почему-то здесь, с нею, стало спокойно, уютно. Может, она сказала то, что он и сам давно знал, но в чём боялся себе признаться?
– Я не думала, что мои слова могут на кого-то повлиять, – мягкая и настоящая улыбка осветила ее лицо.
– Оказывается, могут, – пожал он плечами, – Мы могли бы…
– Не надо, – прервала она, – мы из разных миров, и…
– …это не изменить? – Энтони усмехнулся.
Опять она всё портила. Поднявшись на ноги, он тоскливо смотрел на девушку сверху вниз. Сегодня работы было не так уж много, и он мог бы уже закончить этот вечер, как вчера.
– Хотите убежать домой?
Кейт опустила взгляд, рассматривая свои пальцы. Она почувствовала обвинение в его словах и легкий неприятный привкус вины. «Она где-то даже милая», – отстранённо подумал мужчина. Хотя большего, чем разговоров с ней как с занимательным собеседником он не хотел. Девушка была забавной. И всё. Слишком много проблем, чтобы затащить её в постель. Да и зачем? Лёгкое общение в тёплом свете заходящего дня было редкостью. А вот «потанцевать» ночью было легко. И Энтони хотелось верить, что девушку тоже привлекает простая беседа. Если они только болтают, то зачем городить огород и грустить о неизменности пути, по которому несётся этот проклятый мир?
– Сейчас я бы хотела быть здесь, но потом… – она довольно долго подбирала слова, для окончания фразы. – Вы меня пугаете.
Робертсон поднял брови.
– Серьёзно? Чем это? – он сложил руки на груди, – Ну же, неужели ты до сих пор думаешь, что я уволю тебя просто потому, что ты взбесишь меня неосторожным словом?
Девушка покачала головой, ещё сильнее зажимаясь. Прижала плечи, ссутулила спину, словно стремясь превратиться в точку. В голову лезло сравнение с моллюском, которого пинцетом тащат из раковины.
– Я… просто не знаю зачем. Это не так работает, – выдавила она. – Вы обращаете внимание на своих, я на своих… Вот и всё… У нас разный Статус… Мой ниже. Значит, я зависима, не могу говорить и вести себя с вами на равных. Простите.
– Но ты же говоришь. Не глупи, Кейт, – мужчина покачал головой, явно разочарованный позицией девушки.
Она показалась ему интересной вначале, но сейчас это походило на беседу с магнитофоном. Опять эта тема про Статусы…
– Ладно, нам всем пора по домам.
Браин кивнула и, звонко цокая каблуками, удалилась из кабинета, оставив Энтони одного.
Одиночество. Каждый сам по себе, произведённый системой и без особого плана. Он какое-то время смотрел вслед девушке. Потом и сам удалился из офиса.
Следующим вечером он вновь вызвал девушку после рабочего дня в свой кабинет, на этот раз уже просто так, из-за вредности, из-за обиды на её отношение к нему. Говорить было уже не о чем, но и отпускать ее просто так не хотелось. Мужчина сидел на краю стола, глядя на подчинённую сверху вниз, с высоты своего положения и роста.
– Что, Кейт, я тебя всё ещё пугаю? – с легкой иронией спросил Робертсон, затяжное молчание создавало неловкость, и он пытался заполнить паузу.
– Вы играете со мной, мне это не нравится, – Браин уже не проходила в центр кабинета, просто стояла на пороге.
– Ты сама вынуждаешь меня своим поведением, – мужчина сделал жест рукой, – все эти намеки, что я негодяй. Вот и приходится соответствовать.
– Я не говорила этого, – возразила девушка подчеркнуто спокойно.
В ее карих глазах появился огонёк раздражения. Всё равно быстро… За несколько вечеров всё сошло на нет. Он взял в руки кружку со стола и сделал глоток остывшего кофе.
– Идите уж, похоже, на этом всё… – грустно протянул мужчина, отворачиваясь.
Девушка осталась стоять на месте.
– Это правильно для меня – держаться на расстоянии.
– Ну, так держись!..
– Мы по-разному смотрим на жизнь, почти как разные виды.
– Ты права, – он не хотел ничего доказывать, лишь устало соглашался со всеми аргументами девушки, которая почему-то все не уходила.
– Прекратите себя так вести! – она сделала полукруг по кабинету и стала перед его взглядом. – У вас нет на это никакого права! Вы… Мне неприятны.
– Настолько, что ты никак не решишься избавиться от моего общества? – уголки его губ сложились в ехидную улыбку, это становилось забавным. – Честно, уйдёшь, и всё станет, как прежде.
Девушка, словно ища поддержки, обернулась к стеклянной стене, за которой уже мерцали звезды. Так холодно и одиноко…
– Послушай, Кейт, – мужчина подошёл к ней; странно, так волнительно наедине с девушкой ему ещё не было, словно какое-то притяжение и тепло, что не сжигает дотла, оставляя без разума, а, как маленький зверёк, гнездится где-то в груди, – не стоит усложнять простые вещи. Хотя бы на этот раз.
Девушка почувствовала в тоне снисходительное пренебрежение к её словам, но на этот раз смолчала, лишь легонько вздрогнула, когда пальцы Энтони легли на её плечо.
***
Дни сплетались в месяцы, следуя друг за другом. А они всё так же частенько сидели в кабинете, попивая кофе после работы и болтая о прошедшем дне или о чём-либо более глобальном. Сегодня устройство современного мира было отложено в сторону, ведь это был один из редких моментов, когда не хотелось думать о серьезных вещах; стоило насладиться чем-то, что было так близко. Кейт и Энтони сидели рядом на краю широкого стола, глядя на белый пейзаж за стеклянной стеной, и пили кофе.
– Я видела застывшее лицо Смита, когда вы озвучили ему условия, – с улыбкой заметила Кейт. – Всё закончилось хорошо?
– Мы получили этот контракт! – радостно воскликнул Энтони.
Он забрал у девушки её чашку, поставил на стол, сгрёб Кейт в охапку и крепко прижал к себе. Потом отпустил. Девушка раскраснелась, поправляя прядь наманикюренными пальчиками.
– Отличные новости, – движения Браин на секунду стали чуть угловатыми. Энтони несколько мгновений смотрел на неё с улыбкой от уха до уха, а потом спохватился:
– Тебя домой сегодня забросить?
– Нет, я с подругой встречаюсь. Я говорила о ней, помнишь?..
Кейт прекрасно понимала, почему сегодня беседа не продлится дольше. Это было вполне предсказуемо, яркие эмоции требовали выхода, и Энтони справлялся с подобным одним единственным образом – в клубе для знакомств. Но сперва чёрная машина на воздушной подушке завернула на первый этаж одного из небоскребов к яркой неоновой вывеске «Кафе для настоящих».
– А остальные – поддельные? – фыркнул мужчина, немного сморщив нос. – Я думал, что вы ходите в места поприличнее.
– Ну, настоящим не обязательно заботиться о Статусе, – открыто улыбнулась Кейт, глядя, как Энтони закатил глаза.
Девушка толкнула его в плечо и выскочила из машины. Внутри кафе было довольно уютным, яркий пластик, синтетическая еда, которая подавалась в виде кубиков, даже без попыток сервировать это всё как нечто настоящее. Зато посетители называли себя «настоящими» потому, что не стали менять свой организм. Ее подруга Стефания уже попивала через соломинку какую-то жидкость тёмно-бурого цвета.
Кейт помахала ей от двери, Стеф помахала в ответ.
– Какая шикарная машинка тебя сегодня подвезла. Что за человек? –спросила подруга, едва Кейт приземлилась напротив.
– Можешь спрятать свою многозначительную улыбку, он не из наших, – Браин демонстративно вздохнула. – Через полчаса будет в объятиях очередной дамы.
– Ничего себе! – голос Стеф в мгновение изменился. – А как ты в его машине оказалась?
Браин непонимающе уставилась на подругу, слова блондинки смахивали на обвинение в чём-то глупом и опасном.
– Просто подвез и всё. Что тут такого? Это мой начальник, хороший человек в целом, – Кейт слегка нахмурилась. – Ты чего?
Стефания потрясла головой, возвращая себе дружелюбный вид.
– Да так, ты же знаешь, что они все – как прибор с тумблером. Что женщины, что мужчины. Чтобы включить тумблер, не обязательно ложиться на стол, достаточно склянки с синтетическими феромонами, – дружелюбный вид пропал, и девушка вновь стала выговаривать Кейт.
– Ух ты! А можешь рассказать мне что-то новое, что-то, чего я не знаю? И вообще, Этони – хороший человек, если бы не наши беседы по вечерам… – она сделала неопределенный жест одной рукой, а другой поправила волосы. – Не знаю, до этого жизнь была просто невыносимой дырой, а теперь вроде терпимо.
– Влюбилась в изменённого?
– Не влюбилась, мы просто друзья. И если ты не сменишь тему, я уйду, – Кейт встала из-за стола, но Стеф, протянув руку, остановила её.
– Я просто надеюсь, что ты не натворишь глупостей… – блондинка всем своим видом стремилась показать, что больше не будет касаться прежней темы. – Сегодня доставка привезла мне новый гардероб. Хочешь посмотреть?
– Значит, перемещаемся в твою квартиру? – Браин улыбнулась, желая просто забыть про реакцию своей подруги.
Стефания чуть наклонилась вперёд и, закусив губу, активно закивала.
Утром Кейт собиралась в квартире своей подруги. Она взяла со стула свою блузку и принюхалась.
– Похоже, я пропахла запахом босса, – Браин покачала головой, уловив легкий запах феромонов.
Она не различала их, только иногда едва могла почувствовать этот запах.
– Смотри, как бы на тебя не напала какая-нибудь измененная цыпочка, – крикнула ей Стефания из ванной.
Кейт взглянула на часы, времени менять одежду уже не было, да и озвученная опасность была весьма призрачной.
***
Снова вечер. Уютный офис. Девушка привычно приготовила в кофе-машине две чашки американо. Было интересно обсудить реакцию Стефани и послушать, что скажет на это Энтони.
Мужчина сидел, как обычно, на краешке стола. Его кабинет заполнил звук каблуков. Энтони повернулся и повёл носом, знакомый аромат в мгновение зажег томительный огонь внутри.
«Интересно, – подумалось ему, – неужели ей захотелось провести со мной ночь?»
Для Робертсона в этом не было большой проблемы, лишь толика удивления. Но Кейт – взрослая девочка, и мысли, что она не понимает, на что идёт у него даже не возникло.
– И всё же есть определенные плюсы у простоты, – пропел он, вставая со стола, он немного растягивал момент, в ожидании была какая-то терпкая прелесть, – решила воспользоваться?
– Ты о чем? – Кейт остановилась с двумя горячими кружками кофе на половине своего пути.
Сердце сжалось и пропустило несколько ударов. Действительно, она была взрослой девочкой и понимала, что сейчас происходит, поэтому буквально оцепенела.
Мужчина обхватил девушку и дернул к себе, впиваясь поцелуем в её шею.
– Энтони?!
Белые керамические кружки разлетелись по полу, выплеснув своё содержимое тёмным взрывом. Девушка уперлась руками в грудь Робертсона, для Энтони же это было лишь досадным препятствием:
– Тише, тише, – зашептал он, отводя и выворачивая руки Кейт.
Она закричала, забилась, как рыба, попавшая в сети. Выворачиваясь, девушка пыталась уже просто отбиться без оглядки, без осторожности. Что-то тёмное и неправильное в происходящем сквозь затуманенные мозги чувствовал Энтони, но остановиться не мог и не понимал, почему должен. Не понимал, почему секретарша так выворачивается, пытается посильнее ударить его. Кейт в какой-то момент удалось вырваться, и она рванула из кабинета. Как оленёнок копытами, она стучала туфлями, пытаясь бежать. Каблук хрустнул, и Браин повалилась на псевдопаркет. Подвернула ногу. Крик боли напоминал вой раненого зверя.
– Энтони! – как только смогла, Кейт хрипло и часто дыша, пробормотала сквозь накатившие слезы. – Я не хочу.
Мужчина остановился, схватился рукой за косяк так, что кончики пальцев и костяшки побелели.
– Вон отсюда, – так же хрипло отозвался он, не меняя своего положения.
Девушка едва кивнула и сначала ползком, а потом ковыляя, выбралась из здания. Не реализованное пламя желания перешло в гнев, мужчина схватил ближайший черный стул и запустил его в стекло. Стул отскочил на пол без повреждений, на прозрачной стене не осталось даже царапины. Энтони совсем не привык к мучительному состоянию, когда невозможно выпустить пар, он просто не знал, что с этим делать. Снова поднял стул и, подойдя к окну, принялся лупить им по стеклу, пока силы не иссякли.
***
Утром Кейт снова была на рабочем месте. Куда денешься? На столе загорелась лампочка вызова. Она, хромая, вошла в кабинет Энтони без привычного цоканья каблучков, мягкие, похожие на тапочки, балетки почти не создавали шума. Босс сидел за столом и внимательно смотрел на документы, что выводились на столешницу:
– Что это вчера было? – процедил он сквозь зубы, не поднимая головы. – Какое-то показательное выступление или проверка моего самоконтроля?
Когда он все же взглянул на Браин, в глазах мужчины горела такая ярость, что внутри у неё все сжалось и слова застряли в горле.
– Отвечайте! – почти прорычал Энтони.
– Стефани, я ночевала у неё день назад. Она… пропитала мою блузку феромонами, я не знала… Я слышала запах, но подумала, что это ваши… А она хотела доказать, что вы… – девушка судорожно вздохнула и замолчала.
– Что я – что? Просто животное, которое себя не контролирует?! – вскричал мужчина, потом откинулся в кресле и заговорил тише: – Мисс Браин, вы хороший работник, но не уникальный, вас легко будет заменить.
– Энтони! – несмотря на вчерашнее, из-за которого у неё до сих пор тряслись колени, потеря работы была ещё большим страхом.
– Мистер Робертсон, – поправил её голубоглазый. – Стоит лучше выбирать друзей, и вам самой решать – о ком сейчас я говорю.
Снова опустив взгляд к столу, к бумагам, он переместил один лист с места на место.
– Ладно, допустим, это были козни некой Стефани, – заговорил он совсем тихо, – но неужели я настолько отвратителен, что ты изо всех сил отбивалась. Ты ведь всё понимала… Что плохого было просто плыть по течению?
– Наверное, сложно будет понять, но я была просто не готова, испугалась, – Кейт опустила взгляд к своим балеткам. – Для некоторых из нас, то, что чуть не случилось, – страшнее смерти… когда это происходит по принуждению.
– Страшнее смерти, – он хмыкнул, явно принимая всё на свой счет, – тогда вам тем более лучше сменить место работы.
Он решил рассмотреть ту, кого ещё недавно почему-то считал другом, – несчастный вид, бинт на ноге… После волны злости внутри была какая-то опустошённость.
– Считайте, что сегодня у вас выходной. Завтра я найду для вас новое место работы.
– Энтони, я… – Кейт начала захлёбываться слезами.
– Не надо, так будет лучше, – оборвал её мужчина.
На следующий день Кейт не вышла на работу. Целый день, как натянутая струна, девушка ждала звонка, наконец телефон ожил, а в трубке раздался голос Энтони:
– Ты будешь секретаршей у Смита. Для тебя почти ничего не изменится, – слова падали, словно в глухую бочку.
– Энтони, многое изменится…
Секунда молчания, а потом короткие гудки в трубке.
***
Шикарная чёрная машина остановилась у кафе на первом уровне. Из неё вышел мужчина в дорогом костюме. Поправив галстук, он направился внутрь. Обведя зал взглядом, мужчина заприметил брюнетку в уголке и приземлился к ней за стол.
– Я не опоздал, Кейт? – улыбаясь, спросил Энтони.
– Вовсе нет, – девушка, не спеша, ела мороженное.
Он так и не смог вычеркнуть ее из своей жизни: сначала назначал совещания в офисе Смита и раз за разом искал взгляда Кейт, потом стал дожидаться её с работы… Их беседы вновь стали регулярными.
– Я всё думаю про тот вечер… Может, я не такой страшный, и мы сможем провести ночь вместе? – мужчина произнес это как можно спокойнее.
Он до последнего считал себя пострадавшей стороной, ведь достоинство мужчины растоптали в пух и прах. Кейт помрачнела.
– Не надо, – тихо пробормотала она, а потом шмыгнула носом, – прости… Просто, ты себя покалечил, и правильно у нас не получится. А как получится – не хочу я. Тут в кафе, нам ведь хорошо? Зачем ещё что-то?
Улыбка сошла с лица Робертсона.
Он почему-то действительно почувствовал себя калекой.
П.С. Очередная отдельная история. Наверное, я буду по понедельникам и дальше выкладывать короткие истории. В среду будет последняя часть "Метки эльфа" людям этот сюжет не слишком интересен. На следующей недели в среду выложу что-то другое.
Сегодня возобновил стримы, последний цикл(всего один) по словарям в Python, он завершающий в цикле «стримы по спискам в Python». Вот он — и если что-то непонятно и хочется более подробного разбора, то пишите:

Вот оба цикла стримов
Цикл стримов «Для тупых» по циклам
https://youtube.com/playlist?list=PLmn7h9eyDeMNT1cF1tC_BbiRD...
Цикл стримов «Для тупых» по спискам(+ один по словарям)
https://youtube.com/playlist?list=PLmn7h9eyDeMNT1cF1tC_BbiRD...
Как-то раз возле подъезда шарохались проклятые пионеры в количестве примерно штук шесть-семь. На следующий день смотрю - в грузовом лифте разбит индикатор, показывающий этаж. Звоню в техподдержку лифтов, говорю - Вот, разбили, поменяете? И, кстати, в пассажирском лифте тоже разбит, давно уже. В один хлоп можно поменять?
На том конце провода пациент покряхтел чего-то, потом выкатывает: Давно уже разбили, говорите? Ну, значит, вам и не надо было!
Недели две уж прошло с тех пор, так и не поменяли, ни один, ни второй. Не надо нам, значит..
В 1995 купили мы УАЗ Фермер-2 3909 и радовались, что застревать по сельским дорогам больше не придётся. По доброте душевной вытаскивали застрявших.
Но со временем всё больше народу на селе прознали про наш адрес и как снегопад или ливни, так всю ночь пешие курьеры стучатся в дом и требуют помощи. Безвозмездной, ибо у них же проблемы - они же застряли!
Тот факт, что ты бухой в щи решил героически на своей девяточке проскочить через заснеженное поле и застрял вот прямо сразу, как только задний бампер покинул дорогу - так ты же решала! Ща сходим к Ильдару, он выдернет. Не бросит же он в беде! Можем водочки налить, чтобы на обратной дороге было веселее. Ибо откуда тут в поле гаишники, да и все всех знают.
И ладно бы реально проблемы были, так нет же, 99% вытаскиваний - последствия у́дали молодецкой.
Продали агрегат и купили шестёрочку :)

Стою сейчас в KFC на Ярославском вокзале, в каждую кассу человека по три. В соседней очереди чувак берёт одной рукой поднос, на нем два больших пива в пластиковых стаканах и пара свёртков. Второй рукой он берёт чемодан на колёсиках и начинает выруливать на свободное место. Через пару шагов поднос ожидаемо наклоняется, всё летит на пол, поливая ноги пары ребят из очереди. Крики, вопли, начинают летать хуи от недовольных, бегает уборщица с большой шваброй.. Короче, веселье полной ложкой. Чувак встаёт опять в очередь, дозаказывает пару пива и... правильно, берёт одной рукой поднос с пивом, второй - чемодан на колёсиках и начинает выруливать на свободное место)))
Что вот в голове у таких?
В отношениях с людьми главная фишка в том, что мы чувствуем себя полностью счастливыми только тогда, когда можем показать им свои «странности» и они нас за них не осудят. То, есть мы счастливы с теми, с кем можно быть самими собой, не боясь агрессии или неприятия с их стороны. А таких людей очень немного, и тем более они ценны для нас. То, что для одного «тараканы», для другого — наша индивидуальность. Ты либо принимаешь ее в человеке, либо нет. Если нет — он не твой, как и ты — не его.
Время идет и хочется создать семью, быть рядом с любимым человеком, и мы порой обманываем сами себя, додумываем образ, который далек от реального. Мы больше любим свои мечты, идеалы, которые, как нам кажется, присутствуют в любимом человеке, чем его реальные качества и способности. И, поддавшись этим миражам, впоследствии платим слишком дорогую цену. Исправить потом последствия своего выбора становится проблематично. Слишком уж много вкладывается нами сил, времени для поддержания своей иллюзии.
Да и человек, которого мы любим, на первых порах тоже выглядит иначе. Он показывает нам свой «фасад», надевает свою парадную маску, которой мы очаровываемся. И только время расставляет все на свои места, показывая кто есть кто. Иногда это происходит быстро, а порой длится несколько месяцев, а порой и лет. Все зависит от того, насколько плотно вы общаетесь и от самих ситуаций, в которые вы оба погружаетесь.
Так что не торопитесь и не форсируйте события. Постарайтесь получше узнать человека, прежде чем впускать его в свою жизнь. А еще — максимально будьте собой — тогда получится избежать недоразумений и иллюзий. Заодно проверите — ваш ли это человек.
© Светлана Татаринова.

Мы меняем пространство и время волшебным ароматом звёздной пудры, растворённой в каждой чашке нашего фирменного напитка. Если Вы у нас впервые, приготовьтесь к чудесам. Скорее всего Вы потеряете все ориентиры и системы отсчета — на некоторое время. Это нормально... Хотя, нет — это прекрасно. Потому, что ваша жизнь уже не будет прежней, но в ней останется всё лучшее, из того, что было. Но каждый новый глоток будет добавлять в неё Счастье, чувство Свободы и безмерную Любовь ко всему, что повстречаете на Пути.
Оказавшись здесь однажды, Вы будете возвращаться сюда вновь и вновь. Чтобы поделиться с Миром тем, что обретаете здесь.
Композиция «Звёздная обитель»
Полная версия представлена в альбоме «Рыбы»
Музыка: Андрей Климковский
Видео: Елена Груздева
Если можешь кого-то согреть, так согрей.
Если в силах кого-то простить, так прости.
Помни, жизнь целиком состоит из людей,
Чья планета Земля поместилась в горсти.
Если хочешь вернуться домой, так вернись.
Если есть что сказать, так возьми и скажи.
Посмотри, даже снег просто падая вниз,
Украшает собой все задворки души.
Если есть с кем остаться, останься навек.
И будь верен себе, как в последний из дней.
Если рядом с тобой хоть один человек,
Уступи ему всё, будешь в этом сильней.
И когда силы нет от дурных новостей,
И когда с перебоями бьется в груди…
Если можешь кого-то согреть, так согрей,
Если можешь кого-то простить, так прости.
Иван Якимов

Самое сложно в судейской практике, на мой взгляд – это соблюдение арбитром статьи 12 правил: Роль арбитра. С одной стороны, как гласит п. 12.1 Арбитр должен наблюдать, чтобы Правила игры в шахматы соблюдались – абсолютно непререкаемый пункт, где нет двойного толкования. Вроде всё просто и понятно, но, с другой стороны, если мы обратимся к предисловию правил, то «Правила игры в шахматы не могут учесть все возможные ситуации, которые возникают во время игры, не предусматривают и решение всех организационных вопросов». «В Правилах предполагается, что арбитры обладают необходимой компетенцией, здравым суждением и абсолютно объективны. Слишком подробные Правила могут лишить арбитра свободы суждения, и таким образом помешать ему найти решение проблемы, продиктованное справедливостью, логикой и конкретными условиями».
И вот здесь уже возникают некоторые спорные моменты, к тому же в шахматы играют люди, которые, к сожалению, не всегда честны, так же встречаются тренеры, которые учат детей «выигрывать любыми способами» находя лазейки в правилах, да и судьи от ошибок не застрахованы, по разным объективным и не объективным причинам.
Случай из практики, где на мой взгляд игроки следовали п. 11.1 Игроки не должны предпринимать никаких действий, создающих плохую репутацию шахматной игре. Рапид; детский турнир; партии никто не записывает; видеосъемка не ведется – данные условия применимы ко всем последующим приведенным примерам. Между игроками возникает спор, они подзывают судью, судья ситуацию не видел. Играющий белыми утверждает, и позиция на это указывает, что он ставит мат ферзем рокированному королю черных на h7, ферзь защищен слоном, ладья на f8 не дает королю уйти – на доске мат. Но второй игрок утверждает, что его черный конь стоит на g5 и он забирает ферзя и мата нет. Играющий белыми в свою очередь утверждает, что черный конь стоял на f5. Предлагаю начать восстанавливать предшествующие ходы, во всех ходах предыдущих игроки согласны, но этот «злосчастный» конь у каждого ходит по-разному. Отходим на отдельную доску, предлагаю восстановить партию с самого начала, но как дело доходит до коня, он опять «ходит» по-разному. В итоге руководствуясь п. 12.2.2 действовать наилучшим образом в интересах соревнования; и п. 7.6 … Если позиция непосредственно перед нарушением не может быть определена, партия продолжается с последней, восстановленной до этого нарушения, позиции. А восстановить возможно только 1. е4 е5 – предлагаю игрокам начать с этой позиции. Оба соглашаются. Самое интересное в данном случае, что играющий белыми партию проиграл, но ни на судью, ни на соперника зла не держал, т.к. считал, что решение было принято верное и справедливое, хотя и первоначально он мат то поставил.
Но, к сожалению, не всегда получается так идеально и «здравый смысл» преобладает. Как я уже указал выше, присутствуют спорные моменты и так называемые «грязные шахматы», как со стороны игроков, так и со стороны тренеров, которые их этому учат. Хуже, если тренер в данный момент еще и является судьей на линии.
Случай из практики. Игрок подзывает судью, он сделал ход фигурой, не пережал часы, а соперник уже делает свой ход на его время, а он ход еще не закончил. Понятно, соперник получает предупреждение. По итогу 4 предупреждения и соперник получает поражение «по часам». Проигравший мой ученик, но в данной ситуации разбирался другой судья, я же в свою очередь был удивлен, т.к. мой ученик достаточно опытен, не один ДКР отыграл, а тут на местном турнире подобные ошибки. Но правила - есть правила. А через месяц в первом же туре получаю вал подобных вызовов и что, не мало важно, идет от учеников одного тренера-судьи. Начинаю пристально наблюдать. Игрок делает ход убирает руку от фигуры, проводит рукой над часами, но не пережимает их и кладет руки на стол. Соперник, еще раз обращаю внимание, что это дети, не смотря на часы, он ведь видел, что рука над часами прошла, делает свой ход и тут же часы на паузу, вызов судьи – «я еще ход не завершил, часы не пережал»… Подозреваю, хотя и доказать не могу, что дети массово сами до такого не додумались бы, отзываю в сторону тренера и судью на линии по совместительству, говорю, что так поступать нельзя, на что получаю ответ «в правилах не указано, что так делать нельзя, значит для победы – можно». С трудом тур заканчиваю и перед следующим делаю объявление, что согласно п. 6.2.3… Игрокам запрещено держать палец на часах или «нависать» над ними. И что подобное проведение рукой над часами буду трактовать, как «нависание» над часами. А по итогу, получается, что судья на линии, он же тренер полностью нарушил п. 12.2 Правил. Да вот только доказать умысел с его стороны не представляется возможным, к сожалению.
Случай из практики. П. 12.2.1 обеспечить честную игру. Особенно тяжело бывает судье, когда в турнире участвуют не просто ученики, а сыновья-ученики, но репутация честного, непредвзятого судьи намного дороже ошибок детей. Игрок подзывает судью и указывает, что соперник положил на игровой стол телефон (!). Правила однозначно трактуют данное поведение п. 11.3.2.1 Во время игры игроку запрещается иметь в игровой зоне любые электронные устройства. Соперник указывает на то, что телефон выключен, но данный пункт Правил однозначен, да вот только соперник — это мой сын и за плечами у него уже и ДКР и первенства региона, а тут такая недопустимая расслабленность и к тому же следующим ходом мой сын ставил мат. Но опять возвращаемся к вступлению к Правилам «… арбитры обладают необходимой компетенцией, здравым суждением и абсолютно объективны». Мой сын получил поражение – судья должен быть объективным!
Это конечно же только малая часть ситуаций, которые касаются роли арбитра в шахматах и думается, что каждый из судий имеет в своем «багаже» не мало подобных ситуаций, где Роль арбитра, объективность, репутация и «…действовать наилучшим образом…» преобладали над многими прочими факторами, но на мой взгляд именно данные аспекты являются самыми сложными в работе судьи.
Спасибо за внимание!
Есть еще не один момент "грязных шахматы", которыми я обязательно поделюсь
Напомню о древних верованиях и приметах - про чашки.
Каждый привычный бытовой предмет, каждая домашняя вещь - это ещё и символ. А символы говорят с нами; в них глубокий смысл.
Первые чашки-миски появились тогда, когда люди стали готовить еду. Когда перестали разрывать сырое мясо и жевать корешки. Пищу стали готовить на огне и делить на всех первые супы и каши. Вот тогда и появились первые чашки-миски.
Это символ личной части, доли. Так и Судьбу называют - участь и доля. В чашке то, что нам положено. Во всех смыслах слова. В миске то, что мы заслужили. То, что мы добыли. И то, что нам дают другие.
Поэтому с древнейших времён чашка - символ судьбы и жизни.
«Выпить горькую чашу до дна», «дом - полная чаша», «чаша судьбы» - много таких выражений.
Это была личная вещь. Ее берегли, считали только своей. И вот с тех древнейших времён идёт поверье: не надо давать другим свою чашку. Тот, кто ест и пьёт из чужой чашки, принимает чужую долю, участь, судьбу.
В семье судьба и участь общие в основном. Ничего страшного нет в том, что близкий человек пьёт из нашей чашки. А вот посторонний человек должен пить из другой чашки, «для гостей». Пусть самой красивой, праздничной! - но не нашей.
Пить из чужой чашки означает принять чужую судьбу. И чашку больного могли специально подсунуть здоровому гостю, чтобы он «перенял хворь» или взял несчастья и неудачи.
А если гость настойчиво хватает чашку хозяйки или хозяина, хотя ему предлагают другую, красивее даже! - гость хочет забрать судьбу хозяев. Выпить их счастье до дна, зарядиться их энергией.
Если кто-то упорно берет вашу чашку на работе или в гостях, это зависть - так считалось в народе. А если кто-то постоянно ставит свою пустую чашку на ваш рабочий стол - он передаёт свою несчастную судьбу. Такие были древние поверья.
И очень нехорошо дома разбрасывать пустые чашки и тарелки. Оставлять у компьютера, на подлокотнике дивана, на кресле… Так можно разорить свою жизнь и свой дом.
Чашки должны быть вымыты и расставлены, лучше всего - вверх донышком. Пустая немытая чашка - символ пустой и проблемной жизни.
Хотите узнать мысли человека - попейте из одной чашки. Такова старинная примета.
Только помните, что и участь этого человека вы тоже разделите, - так считалось.
В кафе или в столовой чашки общественные, они даются за деньги в аренду. Поэтому общая посуда не влияет на нас.
Хотя слишком часто пользоваться только общими чашками и не иметь своей - тоже символ судьбы. Это как жить в гостинице и не иметь своего дома.
Очень хороший и символичный подарок - красивая дорогая чашка. Или набор посуды. Это пожелание счастливой судьбы, крепкого здоровья и домашнего изобилия. Если, конечно, это дар от доброго сердца.
Видите, простые вещи полны символического смысла. Недаром в сказках вещи разговаривают. Интересно и полезно знать, что говорят нам такие привычные и обыденные вещи, не так ли?
Анна Кирьянова
Всем привет.
UPD. Опять получился длиннопост с большим количеством текста в формате моих пояснений - простите, но не представляю как по-другому можно что-то объяснить, вроде стараюсь не графоманить.
В этом посте, наконец, приведу один из примеров того, как может быть написано техническое задание (кто-то может придраться, что это не ТЗ, а какой-то другой вид документа - да, возможно, но как-то сформировалась привычка для упрощения, что ТЗ - это любой документ, в котором описывается техническая постановка задачи, которую разработчик должен реализовать), в котором описываются требования к методу получения информации по конкретному объекту.
Шаблонов, на самом деле много и от команды к команде отличаются. Где-то СА просто пишут, что "метод должен получать объект User из базы Users и дальше отдавать его вызывающей стороне" - и это вся постановка. В каких-то командах упарываются и пишут ТЗ на микросервис целиком, в связке статьи в git в формате asciidoc + swagger (yes, I like it и отдельно про это тоже расскажу).
Но в большинстве случаев принято что-то среднее между этими крайностями - системному аналитику важно описать следующее:
То, какие данные метод получит на вход и правила валидации для них;
То, что метод должен сделать с этими данными, т.е. какую бизнес-логику выполнить;
То, что метод должен вернуть в ответ вызывающей стороне.
Допустим, нам нужно описать какой-нибудь метод, который получает любую бизнес-сущность по ее идентификатору.
Один из шаблонов, позволяющий это описать выглядит так (к сожалению, приходится скриншотом, потому что пикабу не умеет в таблицы (или я не умею в таблицы на пикабу)):

Если кто хочет посмотреть "вживую" или попользовать шаблон - вот ссылка на страницу моего конфлю (вроде должна работать).
Теперь по шагам:
Описание метода. Что он делает, для чего предназначен. Можно описать что-то конкретное, если сервис работает как-то специфично, такую краткую выжимку, что сторонним людям не приходилось анализировать его целиком;
URI или URL метода. Состоит из одного из типовых глаголов плюс сам путь, по которому данный метод будет доступен. Про всякие best practices нейминга расскажу отдельно, в комментариях под предыдущим постом спрашивали;
Разрешения или Permissions. Если у вас есть ролевая модель и вам нужно разграничить доступ к каким-либо ресурсам среди пользователей с разными ролями - то вступает в дело данная строка таблицы. В ней нужно перечислить те роли, у которых есть доступ до данного метода;
Параметры запроса, который должны (или могут) быть переданы на вход данного метода. Т.к. у нас очень простой метод, то у нас их нет. Единственный атрибут в виде идентификатора пользователя ( ) передается напрямую в ссылке. Т.е. пример запроса будет просто выглядеть вот так: GET /users/22 - дай мне пользователя с идентификатором 22.
Пункт больше для удобства, в случае, если у вас большая система и много взаимодействующих компонентов. Описываете, кто будет дергать ваши метод. Как минимум это нужно для того, чтобы потом, когда вы будете дорабатывать их - было понятно влияние. В данном случае, если вдруг метод поменяется мажорным образом, добавится какой-нибудь новый обязательный параметр - вы не забудете доработать еще и фронт.
Параметры ответа. Все варианты того, что ваш метод вернет вызывающей стороне после выполнения своей внутренней логики. Перечисляем как успешные коды ответа и всё их содержимое, так и ошибочные.
Непосредственно описание бизнес-логики метода. Т.е. что метод должен сделать с атрибутами, переданными на вход, и что должен вернуть.
Теперь немного про описание самой логики работы любого сервиса. Кому-то может показаться это сложным, но на самом деле все немного проще. Вам просто логически нужно представить у себя в голове, что должен вообще в принципе сделать ваш метод и попытаться придумать - как он должен это сделать.
На этом примере - у вас стоит бизнесовая задача (например): есть админка со списком пользователей, администратор нажимает на какую-то конкретную карточку пользователя, с целью просмотреть всю информацию по нему - в этот момент, как раз фронт откроет отдельную экранную форму и вызывает наш метод, передавая туда идентификатор искомого пользователя (который он ранее получил из другого метода, который получает массив пользователей, что-то вроде GET /users), чтобы получить всю нужную информацию для отображения.
Далее представляем что наш метод должен сделать, чтобы вернуть информацию по этому пользователю. Самое логичное - надо сначала найти его. Для этого нужно залезть в таблицу с пользователями и найти такого пользователя, у которого идентификатор будет совпадать с тем, что нам передали в запросе. Нашли - круто, не усложняем и возвращаем успешный успех фронт с передачей в теле ответа всей необходимой информации.
А что делать если не нашли? Вообще, технически такого быть не должно, потому что это значит, что у фронта устаревшая или недостоверная информация и нужно с этим разбираться - откуда он взял идентификатор, которого не существует? Но представим, что после того как админ открыл страницу со списком пользователей и до того, как перешел в карточку конкретного - другой админ удалил ее. В этом случае надо вернуть ошибку, что такой объект не найден.
Ну и всегда (по моему мнению), во всех методах нам нужно валидировать входящий запрос до того, как начать основную бизнес логику. Потому что зачем нам это делать и тратить драгоценное время и ресурсы, если мы заранее знаем, что запрос не валиден? Т.е. как минимум нам нужно проверить rq на соответствие контракту, что все обязательные атрибуты пришли и пришли в корректном формате. Как максимум выполнить еще всякие кастомные валидации, по типу тех же проверок на роли.
Также заранее поясняю, что в ответе ссылка на объект User (пользователь) ведет на описание атрибутивного состава объекта (в моем примере в конфлю нет, потому что я этого не сделал, но на боевых задачах - да), поэтому не нужно расписывать и дублировать этот объект еще и тут. Однако, если вам нужно передать не весь объект, а только его часть, например, не возвращать на фронт какие-то пароли пользователей или другие конфиденциальные данные, чтобы их не "схачили" - то нужно отдельно это указывать.
И еще поясню немного про пункт 1.b - особенно внимательные наверняка про него что-нибудь скажут. Пока писал, подумал, что можно использовать этот метод не только для админа, но и переиспользовать его на случай, когда обычный пользователь хочет получить информацию по себе же, например, когда открывает свой профиль. Вместо того, чтобы делать отдельный метод - просто разграничиваем права. Если он захочет запросить информацию о ком-то другом (если фронт подведет), то ему вернется болт.
P.S.: По традиции - буду признателен за вопросы про карьеру\профессию\чему угодно связанному со сферой IT - постараюсь ответить на всё.
P.P.S.: Также веду телеграмм-канал, в котором делюсь разным про профессию и про свой путь в ней. Есть и хардовая информация (асинхронные, синхронные интеграции, примеры ТЗ\шаблонов написания микросервисов), так и более софтовая - см. закрепленный дайджест.
Всем привет.
Небольшое предисловие. Я осознаю, что этим постом я вступаю на охрененно тонкий лёд. Если уж к моему предыдущему посту были претензии за то, что я посмел использовать HTTP 404, то уже интересно, какие комментарии последуют после выхода этого поста, в любом случае - you are welcome!
Но тут стоит уточнить, что все те подходы (разные), по которым мы проектируем сервисы - они разные как раз потому, что нет единых mandatory правил к архитектуре приложений, которым если не следуешь - твоя система ломается и больше никогда в жизни не заработает, даже если ты исправишь ее. Есть лишь РЕКОМЕНДАЦИИ, а их многие интерпретируют по-разному и это тоже нормально. Для кого-то свойственно не использовать коды ошибок вообще и передавать их в теле ответа с HTTP 200, для кого-то нет. Ни один из этих подходов не является не правильным.
И нет никаких технических ограничений в принципе. Ты можешь спокойно использовать метод GET для удаления объекта, если ты его так напишешь (не делайте так) или использовать метод PUT, вместо POST, для создания объекта (так уже можно, если понимаешь почему). Главное, чтобы ты понимал как эти тонкости реализации правильно применять. Если сомневаешься - используй методы по классике, хуже от этого он работать не будет.
Да, можно уже прям сейчас кидать тапками.
Теперь уже к основному телу сабжа. Сейчас расскажу про ряд лучших практик, которые можно применять. @VRock, ты как раз спрашивал по поводу конвенции о наименовании ресурсов, тут про это тоже будет.
1. Имя endpoint'а - это существительное, а не глагол. Это одна из самых распространенных ошибок, которые я когда либо встречал (и сам совершал, естественно). Например, было в моей практике и такое - POST /generateMultipleDocument.
Тут важно понимать, что метод - это уже глагол и еще раз дублировать его в наименовании эндпоинта не нужно.
В идеале, в данном варианте будет POST /documents
Не везде от этого можно избавиться, но в большинстве случаев всё-таки можно, если потратить время на придумыванием вариантов (опять же - по факту нейминг ни на что, кроме красоты и структурированности вашего проекта не влияет. А на сколько это важно - решать вам или вашей команде).
1.1. Используйте множественное число. В большинстве случаев, при проектировании методов, работающих с вашим ресурсом - эти методы будут работать не с единственный экземпляром этого ресурса, поэтому название эндпоинта должно быть во множественном числе.
Если же нужно указать, что из всего массива экземпляров ресурса вам нужно получить\обновить\удалить какой-то конкретный, то помещайте идентификатор этого ресурса в URL, передавая его в path.
Например, вот так:
/documents
/documents/
Вместо:
/document
/document/
1.2. Используйте "/" для обозначения иерархии и в принципе используйте вложенность ресурсов.
Например, если мы именуем наш ресурс, как users//playlists//songs - это значит у мы хотим работать со всеми песнями, конкретного плейлиста конкретного пользователя. И сразу понятна иерархичность этих ресурсов.
1.3. Не используйте "/" как закрывающий символ вашего URI.
Вариант users//playlists//songs сильно лучше, чем users//playlists//songs/
1.4. Используйте "-" для разделения составных слов.
Заглавные буквы использовать нельзя, поэтому привычный lowCamelCase нам не подойдет. Если писать всё слитно - очень не читабельно.
Поэтому вместо /applications//creditcardhistory, куда лучше использовать /applications//credit-card-history.
2. Не забывайте про версионирование микросервиса. Почти любой сервис с течением времени развивается и обрастает все большим количеством функций. Если сервис при создании получил версию 1.0.0, то при добавлении какой-нибудь логики в него, добавлении нового метода или полного рефакторинга - версия должна измениться.
Например:
host/v2/documents вместо host/v1/documents после внесения мажорной доработки.
Основные правила версионирования - в случае, если меняется логика незначительно, не добавляется/изменяется обязательность атрибутов, то инкрементируется минорная версия.
В случае если был полный или частичный рефакторинг, менялись обязательные параметры (например, добавлен новый атрибут, который является обязательным), возможно при добавлении нового метода (тут вопрос к разработчикам, в этом случае тоже мажорная версия повышается или т.к. это не влияет на работу подписантов то пофиг?) - инкрементируется мажорная версия.
В этом случае, все подписанты (системы, использующие ваш сервис) вашего микросервиса должны в обязательном порядке переехать на новую версию вашего микросервиса, иначе они не смогут взаимодействовать с ним. Например, если вы добавили обязательный атрибут, то они будут получать в ответ на каждый запрос ошибку, если не доработаются и не начнут его передавать, что приведет к полной поломке этого процесса.
Однако, это не всегда обязательно - в случае, если появляется такая мажорная доработка, но ваши подписанты не готовы дорабатываться одновременно с вами (причин этому может быть множество) - вы можете выкатить одновременно две версии микросервиса, v1 и v2 и поддерживать их обе. Те, кто доработался будут использовать v2, остальные предыдущую версию. Это несет неудобства и затраты, но в любом случае лучше, чем допускать неработоспособность интеграции. В дальнейшем, когда все ваши подписанты доработаются - поддержку предыдущей версии можно остановить.
Примечание: структура версионирования такова: первая цифра - это мажор, вторая цифра - это минор, третья цифра - это патч. Про первые две я уже сказал, а последняя используется только разработчиками. Насколько я понимаю, она повышается вообще каждый раз когда вносят изменения в сервис, но тут могу быть не прав.
3. Используйте пагинацию.
Отправка большого объема данных на фронт, в ответ на его запрос о получении информации по массиву каких-либо объектов, не самая лучшая идея. Как минимум, если вернуть ему тысячи объектов, лежащих в базе и попадающих под выборку - он столько все равно не отобразит, но очень задумается.
Поэтому принято выполнять пагинацию таких данных (от слова page - страница), т.е. возвращать ему часть всей коллекции в каждом запросе. Например - 15, 30, 50 элементов + информацию о текущем положении полученной информации в общей выборке. Почитать про это можно более подробно где-нибудь тут (первая попавшаяся ссылка, я не вчитывался, не реклама).
4. Используйте коды ответов HTTP правильно и эффективно.
Их достаточно много (https://developer.mozilla.org/ru/docs/Web/HTTP/Status) и их можно использовать по назначению. Все знать и использовать не обязательно, но вот примеры их использования
Использовать 201 "Created", вместо 200 "OK", в случае если вы в POST действительно создаете какой-то ресурс. Используется только в POST (ну и в PUT, в ряде частных случаев).
Использовать 204 "No Content", вместо 200 "OK" для DELETE. Это ответ на успешный запрос и он не будет возвращать тело, что и не нужно для данного метода.
Не забывайте использовать 401 "Unauthorized", 403 "Forbidden" и 404 "Not found" вместо безликого 400 "Bad Request", когда это уместно. Как правило 400 кодом пользуются когда нужно ответить на какую-то ошибку валидации или в случае возникновения бизнесовой ошибки, которую вы заранее можете предсказать (очень настоятельно рекомендую хотя бы дополнять код ответа еще и кодом бизнесовой ошибки в этом случае и желательно ее текстом (error.code и error.message соответственно).
Для валидации желательно тоже).
А для всего остального можно и специальные коды использовать.
P.S.: По традиции - буду признателен за вопросы про карьеру\профессию\чему угодно связанному со сферой IT - постараюсь ответить на всё.
P.P.S.: Также веду телеграмм-канал, в котором делюсь разным про профессию и про свой путь в ней. Есть и хардовая информация (асинхронные, синхронные интеграции, примеры ТЗ\шаблонов написания микросервисов), так и более софтовая - см. закрепленный дайджест.
Знаете, что мне больше всего надоело это идеализировать себя!
Какая есть такая и есть, и так хорошо сразу какая-то окова и пытка над собой отпускается слетает, и ты начинаешь любить себя такой какая ты есть изначально, в том и истина, там и расслабленность наступает.
Вы знаете основную причину почему не были собой и подстраивались, пытаясь понравится?
Все легко и понятно- не было любви к себе, тобой владело не истинное, а страх потери, и страх остаться одной!
А страх остаться одной, это опять же не было любви к себе, внутри себя к Богу, была программа разделённости со своей силой, а когда любовь в тебе появилась, стало вообще пофигу хоть весь мир от тебя отвернётся, ты то от себя никогда не отвернёшься! Это и есть преданность самой себе, бесстрашие, раскрепощённость, и опора на внутреннее состояние, на Бога внутри тебя.
Который, как раз и появился, и стал ясно видным тебе, ровно в тот миг, когда ты плюнула на все, выбрала себя и полюбила в первую очередь себя, не понимая ещё в тот момент, что выбрала Бога внутри себя, а значит любовь, а значит целый мир.
Ведь мир там где ты.
Lora Klyuch

Очень необычное кино про занос прицепа лесовоза в Архангельской области. С двух боковых камер + последствия. Обошлось без пострадавших.