Telegram Web Link
Стадии развития программиста.

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

Стадия вторая.
Хо-хо. Я сделал свой первый крупный проект.
Вы говорите, что он плох? Сперва добейтесь. Вы говорите, что ваш язык или фреймворк лучше? Вы просто ничего не понимаете. Вы просите меня попробовать новое? А зачем? Ведь и так всё работает. Вы против рефакторинга? Фаулера почитайте. И вообще, сколько шаблонов проектирования вы знаете? Ах, вы вообще не программист? Ну что же, ваше мнение меня не интересует. Совсем.

Стадия третья.
Новый язык? Давайте попробуем. Новый фреймворк? Тащите сюда. Что? Вот этот код плох? Ок, как лучше? Спасибо! Какая книжка вышла? ОК, почитаю. Реакт позволяет сделать быстрее? Берем реакт, в топку ангуляр.

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

По ощущениям многие застревают между второй и третьей. Единицы доходят до четвертой.

А вы на какой? Отмечайтесь в ФБ: https://www.facebook.com/WebByte/posts/1684757458255660
Люди идут на людей.

Люди покупают товары по рекомендациям других людей. Читают отзывы, читают обзоры. Вакансия IT-специалиста — товар.

Люди идут в компании, в которых работают известные им люди. Или о которых позитивно пишут эксперты, мнение которых ценно для читателя.

Поэтому скоро IT-рекрутеры сделают следующий шаг в осознании роли маркетинга в подборе: работа с лидерами мнений может ускорить и удешевить найм.

Размещение вакансии в посте или канале у известного программиста станет нормой. Нормой станет включение топовых IT-блоггеров в продвижение HR-бренда компании. Крупные компании будут заключать контракты с известными медийными программистами на использование своей символики — одежды, наклеек — на мероприятиях. Появятся кадровые агентства, которые начнут специализироваться на работе с такими программистами. А потом и маркетплейс кто-нибудь соорудит на эту тему.

Обсудить в ФБ: https://www.facebook.com/WebByte/posts/1687453624652710
Тяжело постоянно быть готовым к переменам, правда?

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

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

Методика не решает всех наших проблем, а только половину? Это негодная методика, нет смысла даже начинать.

И вообще, "работает - не трогай". Это неважно, какие последствия будут для компании, если не попробовать. Своя-то рубаха ближе к телу.

"Стой! Остановись! Предвижу большие потери энергии!" - начинает сигнализировать мозг. И тут же переходит в режим энергосбережения и прокрастинации.

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

Так и живём, правда?
Откладываем назавтра, на понедельник, на январь следующего года.

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

Жил-был ребенок, владелец этого мозга.
Когда ребенок был маленьким, он заболел. Ничего серьезного - просто немного кашлял. Мама малыша не бросила его в беде, была с ним, уделяла ему внимание и вылечила его. Не заметив, что у мозга появился шаблон "если кашлять, появится мама и уделит внимание".

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

Ребенок продолжил кашлять, мама заволновалась, начала таскать по врачам. Но бронхита не нашли. Астмы тоже. Сводили к аллергологу, он прописал таблетки. Но и они не помогли. Ребенок продолжал покашливать. Бедная мама разрывалась между двумя детьми...

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

Вот такая вот интересная загогулина.

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

Обсудить в ФБ: https://facebook.com/WebByte/posts/1694787110586028
#РазговорилисьСегодня о том, что большое количество знаний и навыков мешает менеджеру достигать выдающихся результатов. Дескать, больше знаешь - больше рисков видишь. И не пробуешь что-то внедрять, поскольку сразу видишь проблемы. Но на самом деле можешь просто раз за разом упускать возможности. А необремененный знаниями - якобы - не парится и просто много экспериментирует, пока не нащупает правильный путь.

Давайте посмотрим на это утверждение с точки зрения людей, находящихся на разной стадии развития личности.

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

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

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

Остальные стадии относятся к знаниям как к возможностям и меньше парятся о рисках совершить ошибку.

Понимая страхи каждой стадии, можно развивать привычку рисковать, несмотря на количество знаний и навыков. Или наоборот - заставлять задумываться о рисках чуть больше.
#РазговорилисьСегодня про объем времени, который следует выделять на инфраструктурную разработку. На всякие там внутренние инструменты, мониторинг, рефакторинг и прочее.

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

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

На что обычно уходит время разработчика?
На четыре группы задач:
- Разработка новых фич продукта
- Операционная деятельность
- Разработка инфраструктуры продукта
- Поддержка пользователей

Некоторые компании забивают болт на некоторые группы. За что потом и расплачиваются. Но я знаю именно четыре группы. Может ещё и забиваю на другие.

Операционная деятельность - это всякие мелкие задачки по сопровождению продукта - что-то настроить, что-то быстро посчитать итп. Ещё - время на ритуалы: встречи, декомпозицию задач, планирование, консультирование сотрудников итп.

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

Так вот по опыту для нормального развития продукта подходит такая структура квот:
- 45% - продукт
- 15% - операционка
- 20% - инфраструктура
- 20% - поддержка

Конечно, в конкретной компании в конкретной команде в конкретное время структура будет иной. Например, если многие месяцы забивали на инфраструктуру, то через какое-то время разработка станет настолько неповоротливой, что без рефакторинга архитектуры и кода time to market станет просто ужасным. В крайне запущенных случаях придется тратить на инфраструктуру до 60%. И страдать.

Представляете? Только 25% останется на развитие продукта и поддержку! Эт если ещё в компании не практикуются совещания по поводу и без.

В общем, планируйте разработку правильно. А лучше заведите отдельные команды)

Предложить свою структуру: https://facebook.com/WebByte/posts/1701046343293438
На полуфинале "Лидеров России" (по ЦФО) было голосование.
У участников спрашивали, с чем ассоциируются два слова — "лидерство" и "ответственность".
По мнению участников, "лидерство" — это "вдохновлять".
А вот "ответственность" — это "наказание".
Вот такая у нас память предков, вот так культура общества влияет на подсознание.
Хотите больше ответственности от сотрудников? Меняйте их отношение, меняйте их ассоциации.
Есть люди, которые думают. Есть люди, которые делают. Есть люди, которые объединяют других людей.

А еще есть люди, которые придумывают правила и ограничения для других людей — администраторы.

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

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

В ФБ: https://www.facebook.com/WebByte/posts/1706592562738816
Кто такой эксперт?

На определенном этапе жизненного пути нам нужны ориентиры. Куда двигаться? В какую сторону развиваться в работе, в жизни? С кем сравнивать себя любимого? Как выделиться из массы таких же как я?

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

Час за часом, день за днем мы нарабатываем свои навыки. Сто часов. Тысяча. Десять тысяч. И однажды проходим ту незаметную грань, после которой уже нас начинают считать экспертом. Где она эта грань? Когда я ее перешел? Да фиг знает. Ну раз считаете экспертом, зачем ж отказываться? Доброе слово и собаке приятно. Или кошке?

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

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

А кто для вас — эксперт? Как его определяете?

В ФБ: https://www.facebook.com/WebByte/posts/1709585845772821
Странная у нас жизнь, правда?

На работе нам твердят: «От тебя нужен результат, а не процесс». Об этом нам говорят книжки, тренинги, бизнес-коучи. Вся прозападная культура учит сотрудника одному — достижению результата. Желательно поэффективнее. Мотивирует, стимулирует, дает инструменты. Достиженец — эдакий герой нашего времени. Еще бы, жестокий мир капитализма.

А за пределами работы мы часто про процесс.

Побухать пива с друзьями — ну какой в этом результат-то? Не напиться же. Это можно сделать эффективнее и дешевле дома в одно лицо.
Съездить в путешествие. Какой результат? Эмоции-то не от факта окончания поездки получаем, а от процесса.

Посмотреть фильм. Какая эффективность? Какая результативность? 1.5–2 часа потерянного времени.
Поужинать в ресторане. Можно дома. Дешевле. Сытнее. Явно ж не калориях дело.
Да просто вечерняя прогулка — где тут про достижение?

Вот так и живем. Нравятся нам процессы, а работаем мы для результатов. Такая вот хрень.
Жила-была небольшая фирма по разработке сайтов. Работали там три менеджера. И решения о том, какое задание от клиентов брать в разработку принимали втроём, коллегиально.

Выглядело это так.
Когда очередной клиент присылал техзадание, два из трёх менеджеров проверяли это ТЗ на качество. Оба писали небольшую рецензию. Описывали что хорошо в ТЗ, а что стоит клиенту улучшить. Ну там всяческие описания аудитории, компонентов, функциональные требования, вот это вот всё.

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

Вы скажете: "Так не бывает".
Ну... Да, я придумал этот способ в понедельник. С его помощью мои студенты в ВШЭ разбирали примеры ТЗ своих коллег. Говорят, очень понравилось. А эт главное в развитии - чтоб оно было не только полезным, но и приносило положительные эмоции. Закрепляется так лучше.

В ФБ:
https://www.facebook.com/WebByte/posts/1716072995124106
У рабочих, сортирующих апельсины, очень сложная работа — постоянно приходится принимать решения. Это мелкий апельсин. Это крупный. Иногда становится еще сложнее — добавляется средний размер.

У активных людей (в том числе руководителей) тоже непростая жизнь — расставлять приоритеты. На чем держать фокус. От чего отказываться. Как выбирать между делами, где нет явных фаворитов. Что делать сегодня. В какой последовательности. Что перестать делать. Что можно поручить. Что делегировать. Кому.

И хоть существуют разные инструменты, помогающие принять решения (оценка стоимости, квадрат Декарта, SWOT-анализ, матрица Эйзенхауэра итп), сильно легче не становится.

В мире, полном информации и информационного шума умение правильно расставлять приоритеты — в работе, в личной жизни, где угодно — одна из ключевых компетенций. Как улучшать? Принимайте решения
#РазговорилисьСегодня в школе с учителями. Одна из них рассказывала, что в первом классе вела ребят и в каждом видела уникальность. Этому математика будет даваться, этой гуманитарными науками заниматься.

А к четвертому классу заметила, что стали они все какими-то стандартными, без индивидуальности. Не, сильными, шесть золотых медалей потом взяли много лет спустя. Но как-то одинаковыми. И грустно ей от такого стало. Как легко убить индивидуальность стандартами, правилами и шаблонами.

Сколько, кстати, у вас правил в корпорациях, коллеги?)

PS. Беру паузу на две недели. В Сочи. В Питер.
Люди и продукт. Продукт и процессы. Процессы и люди.
Всё это очень сильно переплетено.

Не учитывая один из факторов, легко потерпеть неудачу в начинаниях.

Не учли потребности людей? Выпустили никому ненужный продукт. Потратили кучу времени и денег, а на выходе - пшик. И других людей расстроили - команду.

Фиговые процессы? Ну и продукт может получиться таким же. Нет тестирования? Получите баги. И снова получите недовольную команду, которая вместо развития продукта занимается затыканием дыр. Нет продаж? Ну вы в курсе, да?

Не вспомнили про людей, когда писали стратегию? И культура съела ее. На завтрак, на обед или на ужин - уже неважно. И все суперсовременные процессы и продукты не помогли. Аджайл, блокчейн? Вот, где карту, туда и...

Product - Practices - People
Как ступица, обод и спицы в колесе.
Проверяйте свое решение - подумали ли про всю эту троицу?
Жил-был рынок. Рынок поиска IT-специалистов. Большой рынок, растущий. Десятки тысяч специалистов, которых можно продать за миллиард-другой денег. Миллиард — это много. Поэтому как грибы стали появляться рекрутеры, которые специализируются на поиске исключительно высококвалифицированных айтишников. Рекрутеры стали сбиваться в кучки, образовывать специализированные кадровые агентства.

Под растущий рынок начали подтягиваться строители инфраструктуры. То тут софт напишут, то там PaaS запустят. То маркетинг автоматизируют, то учет вакансий, то биржу рекомендаций, то мета-поисковик какой запилят. Растет число агентств, растет число инструментов, только количество специалистов не растет. Ну не успевают ВУЗы под потребности бизнеса подстраиваться.

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

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

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

А потом и инфраструктура подтянется.

ФБ: https://www.facebook.com/WebByte/posts/1740252899372782
Сегодня не про процессы. Сегодня про людей.

Две замечательные девушки, занимающиеся IT-подбором, независимо друг от друга на этой неделе начали наступление на рынок IT-специалистов.
Кира Кузьменко (NewHR) забабахала первый обзор заработных плат фронтенд-разработчиков.
Аня Атрошкина (IndexHR) организовала дискуссионный клуб о проблемах, связанных с Junior-разработчиками.

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

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

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

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

Подробнее в ФБ:
Про Киру - https://www.facebook.com/WebByte/posts/1743284472402958
Про Аню - https://www.facebook.com/WebByte/posts/1743273085737430
Иногда встречаюсь с мнением, что в кросс-функциональных командах все должны уметь делать всё.

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

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

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

И снова "впрочем".
Впрочем, есть и почти правильное понимание кросс-функциональности — с T-shaped сотрудниками, с перекрывающимися компетенциями. Так чтобы хотя бы у одного сотрудника был экспертный уровень владения навыком, а еще у 2-3 — достаточно неплохой. С постоянным анализом узких мест и отращиванием недостающих компетенций. Сложно, но можно.

Почему же тогда "почти правильное понимание"?
Потому что, как правило, учитываются только hard skills. А вот гибкие навыки, черты характера оказываются несбалансированными. И вот такая команда прекрасно фигачит от забора и до обеда. Но не в ту сторону. Потому что отсутствуют навыки стратегического мышления. Или в режиме постоянной грызни, потому что никто не занимается внутрикомандной культурой. Или тратя много времени на пустые обсуждения, потому что никто не нацелен на результат.

Итак,
- если команда зависит от внешних команд — у нее будут проблемы.
- если в команде есть бутылочные горлышки — у нее будут проблемы.
- если в команде не сбалансированы софты — у нее будут проблемы.

Любите успешно преодолевать проблемы?
Не думайте над сбалансированностью команды.

Поспорить в ФБ: https://www.facebook.com/WebByte/posts/1746312952100110
Вот ставим мы цели.
Себе. Сотруднику. Команде. Компании.

Критерии их достижения прописываем.
Измеримые, достижимые, вот это вот всё.

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

И вот странное чувство возникает.
То ли победа, то ли нет.
То ли выполнен план, то ли что-то недоделано.
И внутренняя неудовлетворенность есть.
А не должно вроде быть.

Что это? Амбициозность? Завышенные ожидания?
Неумение ставить цели? Дофаминозависимость?

Как думаете?
Самое сложное в том, чтобы что-то сделать - начать это делать.

Сложно стать тим-лидом из техлида, если не начать разговаривать с командой.

Сложно стать руководителем, если не начать делегировать.

Сложно сделать успешный продукт, если не говорить с потенциальными клиентами.

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

Но если не шагать, если стоять на месте, пропустим всё интересное.

Ну что, пойдем? )
Нам все должны.

Примерно такая фраза мелькает в разговорах в последние дни. С разными людьми. В разных форматах. В ленте Фейсбука. В личных разговорах. В интервью разных людей.

Нам должны в семье.
Должны обеспечить наш комфорт. И ужин. И развлечения. А мы ж и так молодцы, зарплату приносим.

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

Нам должны в городе.
Мэр должен чистить дороги. И парковками должен обеспечить. И местом в детском саду. И пробки должен побороть. И плитку должен. А мы ж и так молодцы, понаехали тут.

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

Нам должны. А мы нет.
Мы не должны думать про атмосферу в семье.
Мы не должны думать про коммуникации на работе.
Мы не должны ходить на субботники и убирать за собаками.
Мы не должны даже налоги платить.

Но что-то как-то обидно, если "ты мне должен, а я тебе - нет" слышишь в свой адрес

В ФБ: https://www.facebook.com/WebByte/posts/1755753557822716
2024/09/29 05:29:31
Back to Top
HTML Embed Code: