яндекс

Привет из прошлой жизни

Вчера разбирали старые бумаги, нашли привет из прошлой жизни — когда мы жили в Москве, а я работал в «Яндексе», ещё в старом офисе — на Таганке. В конверте каталог компании Lush, 2008-го года, как видно.

Белый конверт с логотипом «Яндекс» и рукописными надписями «Галинке» и «Степанову», внутри — новогодний каталог 2008 года, на деревянном столе.

4 комментария

Деньги начала эры интернета

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

Эту карточку я тоже купил по чьей-то просьбе и после активации оставил себе — 5000 рублей это был максимальный номинал и приличная, в общем-то, тогда сумма.

Такие карточки нужны были, чтобы положить деньги на счёт специальной платёжной системы — она позволяла делать покупки в интернете, как и более популярный международный аналог — «ВебМани». Банковские карты ещё не настолько вошли в обиход, хотя уже тогда было очевидно, что они вытеснят такие эрзац-системы.

Лицевая и оборотная стороны подарочной карты Яндекс.Деньги номиналом 5000 рублей с номером 1064-37570, паролем и кодом проверки на деревянном фоне.

3 комментария

Капча и архивы

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

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

Несмотря, что сейчас есть решения, сносно распознающие рукописный текст, но человек с этой задачей, всё-таки, справляется гораздо лучше.

Идея было в том, чтобы показывать рукописные кусочки этих документов людям как капчу или для подтверждения каких-либо необратимых действий (как правило — удаления чего-либо из системы). Фокус в том, что показывать надо два фрагмента — известный и нет, а неизвестную часть показать несколько раз разным людям. Таким образом по известной части можно определить, что это не робот, а неизвестная переведётся в текст.

В прошлом «Гугл» и «Яндекс» уже распознавали таким образом куски печатного текста и номера домов, почему бы то же самое не сделать с рукописным текстом? Тем более у «Яндекса» есть прекрасный, очень нужный сервис «Поиск по архивам», позволяющий искать по автоматически распознанному тексту. Можно было бы улучшить качество распознанного текста за счёт капчи.

Сообщение Яндекса о временной блокировке доступа из-за подозрительных запросов с IP-адреса и просьба ввести символы с картинки для продолжения поиска
Как бы могла выглядеть капча для распознавания архивов

4 комментария

Ужасный поиск «Яндекс.Маркета»

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

10 комментариев

«Яндекс»

Удивительно, но спустя столько лет мне, оказывается, всё ещё снится «Яндекс». Сегодня просыпался ночью попить водички, поэтому сон запомнился, так-то обычно утром я совершенно не помню, что мне что-то снилось.

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

Интересно, что во сне был определённый коллега, с которым я почти и не общался в реальной жизни. Кстати, он совершенно не постарел за прошедшие десять с лишним лет.

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

Оставить комментарий

«Яндекс.Go»

Интересно наблюдать как суперприложения приходят на мобильные платформы. Они настолько давно на десктопах, что люди про них уже забыли (помните риторический вопрос — «кто первым операционную систему выпустит — ACDSee или Nero»?). Как и в случае с мобильным суперприложениями, тогда это тоже многих возмущало, хотя были такие, кому нравилось.

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

Я плохо знаю, что сейчас происходит в мере «Виндоуз», но на «Маках» суперприложений не видел уже много лет, не прижился формат. Интересно, приживётся ли в смартфонах.

Синий кабриолет с надписью «Яндекс.Драйв» после ДТП с белым такси и голубым фургоном на городской улице; на асфальте разбросаны детали, рядом стоят люди.
Рождение «Яндекс.Go» (макет)

Прочитал на «Интерфаксе», что «Яндекс» выкатит новое суперприложение, для быстрого решения городских задач — в основном, поесть и поехать. Надо будет попробовать, может и удобно будет, но я хочу понедоумевать по поводу названия. Называется оно почему-то «Яндекс.Go».

Мне совершенно непонятны причины такого названия.

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

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

18 комментариев

Где теперь описания из «Яндекс.Фоток»

Скриншот интерфейса Яндекс.Диска с открытым окном EXIF-данных фото: камера Samsung SM-G935F, дата 2016-06-12, адрес Пушкина, 54/1, правая стена.
В описании написано где именно мне встретился кирпич с редким для Казани клеймом «.А.»

Я был довольно активным пользователем «Яндекс.Фоток» и очень расстроился, когда сервис закрылся. Со стороны «Яндекса» очень благородно, что фотографии переложили на «Диск» вместе с выделением под них места, но кроме фотографий меня очень интересовала сохранность другой информации. Блог «Яндекса» обещал, что ничего не пропадёт.

В частности у меня на «Фотках» была собрана коллекция фотографий кирпичных клейм Казани с указанием в описании где именно встретилось каждое и я не на шутку всполошился, когда не нашёл в интерфейсе «Диска» места, где можно посмотреть описание.

Спасибо бывшим коллегам, объяснили. Оказывается нужно зайти в «Архив» → «Яндекс.Фотки» и в меню конкретной фотографии выбрать пункт «Описание с Яндекс.Фоток».

Оставить комментарий

Конец «Яндекс.Фоток»

Скриншот страницы Яндекс.Фотки с уведомлением о переезде на Яндекс.Диск и фото дня в Яндекс.Коллекциях — осенние листья в снегу, кнопка «Голосовать».
Надгробная плита «Яндекс.Фоток», сервис умер всеми брошенный и забытый

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

Для меня это было киллер-фичей — лей сколько хочешь, не задумываясь. Можно даже ничего не удалять, просто закрывать альбомы с неудачными кадрами, а после чистки делать ещё один — публичный.

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

Я надеялся, что в «Яндексе» возьмутся за голову, переделают, обновят.

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

6 комментариев

«Чистый веб» Яндекса

У «Яндекса» как-то незаметно проект «Чистый веб» вышел. Ещё я в этом проекте участвовал. Дописывал плагин для phpBB, правда тот, который там дают скачать (зачем-то вместе с phpBB внутри) другой совсем, переписан под PHP 4.1 и у меня смутные воспоминания, что я его под вторую версию писал, а этот под третью.

Остался ли там какой-то мой код не могу сказать, всё сильно изменилось внутри и полтора года прошло.

1 комментарий

«Яндекс.Пробки» в Казани

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

Стойкое ощущение, что в казанских «Пробках» не учитывается никаких источников данных, кроме пользовательских устройств (когда вы пользуетесь приложением для «Карт», приложение пользуется вами — передаёт «Яндексу» как быстро вы двигаетесь на этом участке).

Например, вчера я ехал по мосту «Миллениум», на котором была грандиозная пробка, прямо за моим указателем положения дорога на глазах «краснела».

Исправить ситуацию можно следующим образом.

Во-первых, помните я рассказывал, что в Казани есть интерактивная карта движения транспорта? Это уже готовые датчики загруженности дороги. Там есть скорость и координаты, чтобы померить ситуацию и обозначены остановки, чтобы убрать ложные срабатывания.

Во-вторых, нужно поставить по камере в важных участках Казани. Взглянем на карту.

Казань (66.00КиБ)

Город условно делится на две части — левый берег и правый берег реки Казанки. Больша́я часть казанцев ежедневно пересекает реку в обеих направлениях, а сделать это можно строго по одному из четырёх мостов Казани (слева направо) — Кировский дамбе, Ленинской дамбе, мосту Миллениум и Третьей транспортной дамбе (сейчас последняя перекрыта, но работает её дублёр).

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

Далее, к Универсиаде 2013 года Казань строит кучу двухуровневых развязок, часть важных дорог (а зачем строить развязки на неважных дорогах) перекрыта, но город, увы, не позаботился о дублёрах, поэтому автолюбители сами нашли объезды, кажется, самая болезненная ситуация перед Миллениумом — прямой выезд перекрыт и там часто пробка, но исключительно важно знать действительно ли она сейчас там есть, так как от этого зависит решение стоит ли вообще ехать через Миллениум. Напоминаю, что мосты (Миллениум — это мост) — важная штука.

В-третьих, часть важных дорог для «Яндекс.Карт» похоже не существует. На дублёре Третьей транспортной дамбы aka «Старый мост» (который работает вместо самой дамбы) я вообще ни разу не увидел хоть какой-то информации о пробках, Чистопольская в сторону Ямашева не существует тоже — на клиенте Андроида там у меня пунктир, дорожной информации нет, а эта дорога связывает два моста — Миллениум и Третью транспортную. Это только те места, где я обычно проезжаю.

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

В общем, вывод такой — надо работать с местными водителями и выяснять какие дороги являются основными и где заторы возникают часто, а пока информация сервиса никак не помогает ориентироваться в пробках, точность очень низкая.

34 комментария

Специальный вид «Яндекса» для speeddial «Оперы»

Яндекс-Опера-френдли (21.44КиБ)

Я рад, что явился катализатором в «Яндексе» появления визуальных закладок для «Оперы» (для плагина FireFox «SpeedDial» тоже будет работать).

Проект «Погоды» я даже поменеджерил.

К сожалению, пока нет технической возможности делать то же самое для «Хрома» и «Сафари», так как использовать media queries (как для «Оперы» и FF) не получится, браузеры на WebKit ведут тут себя нелогично, нужно проверять особый HTTP-заголовок, а это противоречит техническому решению сервиса.

24 комментария

«Переговорки»: панихида

Проект «Переговорки» — внутренний веб-сервис «Яндекса» для бронирования переговорок, синхронизированный с Microsoft Exchange. Это, наверное, самый сложный проект, который мне приходилось делать за всю жизнь.

Используется он теми, кто не может установить себе Outlook — ребятами с «Маками» и разнообразными «Линуксами» (а таких очень много). Кроме того, что от Exchange мы будем постепенно уходить, а интерфейс бронирования останется без изменений.

Никогда я ещё так не выкладывался, так не радовался, не расстраивался, не оставался с таким упорством допоздна в офисе. Звучит просто — вытаскивать время от времени данные из Exchange и отсылать обратно новую бронь. К сожалению, MS Exchange, который использовался тогда в компании, не умел общаться с внешним миром никак иначе, кроме протокола MAPI — бинарному исчадию ада, причём не просто через MAPI, а через так называемый MAPI через RPC — диалект DCE-RPC, который называется MSRPC.

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

Из бесплатных библиотек уровнем повыше нашлась одна-единственная — libmapi, поскольку она требовала наличия альфы Samba4 строго определённой версии, а на машине уже стояла Samba3 (через которую мы работали), решено было попробовать её скомпилировать. Оказалось, что такие попытки в компании уже предпринимались, но закончились неудачей. Решив что попытка не пытка, за несколько дней я её всё-таки собрал и запустил.

Это и положило начало проекта «Переговорки».

Процедура компиляции оказалась весьма нетривиальной, собиралась только версия из транка, и та только с моими правками. Ещё сложнее оказалось разобраться с утилитами, которые требовалось запустить после исталляции, но и эту проблему удалось победить, собрав скудные крохи по форумам и написав несколько писем разработчикам. Позднее Сергей Белов сумел установить появившийся свежий дебиан-пакет в chroot-окружении, что облегчило задачу установки библиотеки на другие машины, а наш админ, Володя Емченко, вычистив из пакета всё лишнее, придумал способ установки его в произвольное место без использования chroot.

Через несколько дней после того как я в первый раз скомпилировал libmapi, тестовые утилиты на Си благополучно подключились к Exchange и уже умели отпределять дают им правильные данные для авторизации или нет. Эти несколько дней ушли на то, чтобы разобраться как создавать профиль, как настраивать библиотеку и Samba4 для работы и так далее. Оставалось как-то состыковать всё это дело с Python.

1275 строк основного модуля, 647 строк файла описаний структур MAPI, 4046 констант, 457 строк для описания Pid-свойств. А сколько не заработало, сколько пришлось переписать. Самая рутинная работа была — искать по всем исходникам libmapi и Samba описания структур, пытаться сообразить как их переписать на Python и состыковать со всеми остальными. Ребята, придумавшие модуль ctypes для Python, большие молодцы.Правда мне пришлось придумать и реализовать парсер для расширенного синтаксиса, чтобы описывать динамические структуры MAPI, не знаю как сейчас, а тогда libmapi не умел читать повторяющиеся встречи (кажется, и теперь не умеет), так что читать и описывать их приходилось на самом низком уровне, а значит как-то хранить эти данные и уметь ими манипулировать.

Ничего, пара дней корпения над бинарной распечаткой с последующими уточнениями в противоречивой документацией от Microsoft и я написал класс, который такие встречи умеет разбирать. Впрочем, это было уже позднее, а сначала надо было догадаться что делать после логина. Из документации у libmapi — только перечень функций и исходники на Си. Пришлось внимательно просматривать первое и читать второе. Тут нельзя не упомянуть Сергея Андрюхина, несколько очень ценных его идей и исследований вошли в тот код. Кстати, местами исходники на Си написаны так плохо, что приходилось упрощать код — не всё, что можно позволить себе в Си, можно позволить себе в менее шустром «Пайтоне».

Разобраться с порядком вызова этого великолепия было непросто, плюс ещё множество более мелких проблем, вроде странного формата хранения времени (Exchange хранит число минут с 1 января 1601 года). Плюс утечки libmapi, которые пришлось изолировать, решать проблему с передачей данных в родительский процесс, мучаться с Python 2.4, который, как оказалось, никогда не освобождает память, выделением памяти на куче «про запас» через Python API (спасибо ctypes), определением по косвенным признакам, что память закончилась, пора отдать данные в родительский и умереть, и так далее.

Сначала мы научились читать freebusy информацию — просто даты и время, когда переговорка чем-то занята, потом уже — заходить в папку переговорки и читать её календарь.

Класс пережил четыре рефакторинга, например, я обернул некоторые структуры классами с деструктором, чтобы было проще следить за памятью (так как ctypes работает с бинарным кодом за памятью приходилось следить самостоятельно), что, правда, всё равно не спасло от всех проблем — структуры, в некоторых случаях, нужно было уничтожать в строго определённом порядке.

Спасибо Саше Покатилову, который правил мой код, пока я был в отпуске и занимался Django-частью проекта, с ним же мы проектировали базу. Например, мы решили просто размножать повторяющиеся встречи на год вперёд, избежав тем самым множество проблем. Год — это так называемое «окно бронирования», дальше этого срока наш Exchange встречи не видит. Каждый день Сашин механизм достаточно оптимально размножал всречи ещё на один день дальше, мой класс при помощи полезнейшего модуля dateutil.rrule переводил по достаточно хитрым правилам повторяющиеся встречи Exchange в список дат.

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

Думаю, если попробовать вспомнить всё, хватит на небольшую книгу… Я рад, что эту невероятную задачу удалось решить. С моей стороны, как мне кажется, это 100% моей «мощности» как программиста. Будущее покажет, но пока все задачи я буду оценивать по этой.

К счастью, в новом Exchange, который появился у нас в компании, появилась поддержка SOAP и «Переговорки» переделали с использованием этого протокола. Есть предварительное согласие на выкладывание модуля, который у меня тогда получился в интернет. Пожалуй, сейчас он бесполезен (хотя, может авторы libmapi запрограммируют на его примере чтение повторяющихся встреч, попробую им его кинуть), но пусть он всё равно полежит у меня, как памятник полугоду моей жизни.

31 комментарий

TestLink

Время от времени занимаюсь модификацией используемого внутри компании инструмента «TestLink». Сложная задача — приделать к нему ЧПУ (TestLink целиком на фреймах, у него не то что ЧПУ, обычных-то URL нет).

С задачей справился чуть менее, чем полностью — осталась пара мелочей, а в пятницу по половины одиннадцатого вечера боролся с деревом тест-кейсов. Всё просто — получили линк на test case, нужно раскрыть дерево на определённом узле. Дерево выполнено не на православном jQuery, а на сатанинском ExtJS (кстати, привет авторам ExtJS и вопрос — для чего вы делали собственные ID, но не потрудились сделать возможность привязаться к ним из select и get?).

Осложняется всё тем, что дерево снаружи недоступно (изолируется внутри функции), а менять JS-код продукта я не могу, это крайне нежелательно. Пришлось эмулировать события, чем я раньше никогда не занимался. Оказывается на эту тему есть весьма развесистые плагины (в том числе и для jQuery), я эмулировал вполне конкретное событие — клик мышью, поэтому сделал свою небольшую функцию, как водится, две ветки — для IE и всего остального. Запишу сюда, чтобы не потерять:

function fireEvent(element, eventname){
    if (document.createEventObject){
        return element.fireEvent('on' + eventname, document.createEventObject())
    } else{
        var event = document.createEvent("HTMLEvents")
        event.initEvent(eventname, true, true)
        return !element.dispatchEvent(event)
    }
}

В итоге получилась дикая вещь — когда человек вводит этот самый понятный ему URL, браузер спрашивает у сервера путь по дереву, получает его, по таймеру долбит дерево в плюсики (дерево грузит каждый узер через AJAX), чтобы развернуть каждый узел по пути следования к test case, а когда добирается до цели, таймер тушится.

Такие развесистые клюквы там приходится программировать на каждом шагу. Зато все URL абсолютно понятны пользователю и роутинг правится очень просто.

Добавлено 8 декабря 2009 0:41: потом я переписал всё на чистом ExtJS, воспользовавшись getCmp, expandPath и внутренней реализацией fireevent, но код всё равно тут оставлю — пригодится.

3 комментария

Yandex.ru.

Две ссылки: http://yandex.ru и http://yandex.ru. Я не знал, что так можно. Век живи, век учись. Кстати, FireFox 3.5 загружает всё правильно, но конечную точку отрубает, поэтому после перезагрузки страница меняется.

26 комментариев

Измеритель удара

У нас в «Яндексе» много всяких интересных штук на этажах. Сегодня нашёл на 6-м этаже измеритель силы удара. К сожалению, он висит на такой высоте, что я могу делать только верхние удары, нижний боковой, к пример, измерить не получается.

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

2 комментария

Модуль XScript для PHP

Писал для PHP биндинг в XScript. Си++ я не знаю (и знать не хочу), поэтому писал на Си. Огромое спасибо Antony Dovgal за помощь, без него я бы ещё долго разбирался как писать модули для PHP на Си внутри вражеского Си++, с его же помощью причесал m4-файл и код.

Что я хочу сказать. Опыт, конечно, полезный, но грустно, что сейчас, как и несколько лет назад (когда я писал первый модуль), практически нет документации о том как писать модули, не говоря уже о хороших, обзорных статьях, где все шаги были бы расписаны и рассказано было бы что и зачем делается.

Чистого времени я потратил половину дня (вместе с хождением по «Яндексу», перепиской, установкой пакетов XScript и прочее — ещё 1,5 дня), но это только потому, что Тони согласился помочь (и у него был опыт написания Си++ модулей на Си на примере биндинга к архиватору RAR, который мы и разбирали).

Думаю, этим и объясняется небольшое количество бинарных модулей на PHP, а так же их низкое качество. Жаль.

10 комментариев

Интранет-вики

Мнение о том, что использование вики-разметки вызывает в людях жестокость и неконтролируемую агрессию, легко опровергается одним ударом лопаты по голове.

12 комментариев

Дима Смирнов уволился из «Яндекса»

Ничего не предвещало…

Многим известный Дима Смирнов уволился из «Яндекса» по собственному. Куда уходит отказывается, зараза, говорить.

8 комментариев

Если Магомет не идёт к горе

Работа, устав ждать, когда я перееду к ней поближе, переехала поближе сама, т. е. гора пошла к Магомету. И что, Scheiße, я стал приходить на работу пораньше? Нет, я стал из дома выходить попозже.

Ребята, я щас буду.

4 комментария

← 1 2 →