Как стать автором
Обновить
21
Карма
0
Рейтинг
Игорь Манушин @imanushin

User

Параллелизм, асинхронность, многопоточность – Reactor почти всё сделает за Вас

А чем это лучше обычных потоков и обычных пулов?
Чем хуже сразу видно

Это типичный вопрос про плюсы/минусы неблокирующего кода и пр.

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

К сожалению, у меня нет точных цифр, но, судя по этому ответу, один context switch может стоить 5-7 микросекунд (а их надо два - чтобы остановить текущий поток, и чтобы вернуться к нему): "I can't find results for nehalem (is there lmbench in phoronix suite?), but for core2 and modern Linux context switch may cost 5-7 microseconds."

Чтобы подобного не происходило, можно использовать неблокирующий код, и способов довольно много:

  1. В некоторых языках есть встроенная поддержка (async/await, корутины, горутины и так далее).

  2. В Java неблокирующие вызовы прописываются явно (то есть, в итоге, системе оставляют callback для вызова, когда все данные уже готовы).

Плюсы неблокирующих вызовов:

  1. Меньше context switching (по сути, мы заменяем вытесняющую многозадачность кооперативной).

  2. Меньше потоков (суммарно).

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

Минусы:

  1. Если не переиспользовать callback'и, то создается большее число объектов на каждый вызов.

  2. Меньше возможностей для оптимизации, так как JVM теперь сложнее аллоцировать объекты на стек и тд.

  3. Код сложнее читать (это неправда для kotlin/scala/C#/go и пр., где поддержка асинхронности добавлена в язык) из-за большого числа callback'ов и пр.

  4. Очень легко допустить ошибки, которые будут увеличивать объем стека - см. пример из Spring

Компилирование и исполнение Java-кода в Runtime

У меня была похожая статья, но с другим JVM языком - https://habr.com/ru/company/dbtc/blog/505162/ .

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

Почему именно ежемесячно — потому как нужно помнить, куда идёт НДФЛ.

Зачем? В чем смысл разных фондов и пр. для физических лиц? Почему не может быть единого федерального счета налоговой, куда для перевода достаточно просто ИНН плательщика? А далее налоговая пусть распределяет всё, на основе имеющихся данных (в пенсионный фонд, в федеральный бюджет, муниципальный и так далее). Более того, в ряде европейских стран так и сделано.


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


Для многих муниципальных бюджетов поступления по НДФЛ составляют более половины всех налоговых доходов; для них такой кассовый разрыв между доходами и расходами приведет либо к невозможности в принципе исполнить бюджет по расходам, либо к необходимости привлекать кредит (за отдельные деньги).

Да, пусть привлекают кредит, как это сделано опять-таки во многих странах, в той же США, например. Но в реальности этого не требуется постоянно, как минимум по моей схеме выше.


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


Да, иногда будет необходимость вернуть деньги обратно, например, когда пришла новая информация (человек сообщил, что месяц назад переехал), так что в реальности на короткое время небольшой муниципалитет может оказаться должен налоговой. Но это не страшно, так как налоговая для таких случаях всегда может брать овердрафт от ЦБ.


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


Поэтому Великобритания как принципиальный контрпример не подходит.

Почему? Что конкретно сложно реализовать в реалиях РФ, с учетом технологий 2021 года? Уведомления по почте/госуслугам/email? Или постоянный переподсчет данных (то есть реактивное программирование и реконсиляция)?


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

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


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


С учетом географии государства, полагаю, это скорее плюс, чем минус.

Как география влияет на отсылку email'а? И как география влияет на отправку ручной декларации из МФЦ далекого города в Москву (а точнее — прикрепление скана к CRM)?
В моей схеме выше двусторонняя связь потребуется для малого населения, как и сейчас для вычетов.

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

А что, если вас обяжут делать это каждый месяц? И заполнять, и уплачивать?

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


А по факту, можно же взять практики из других стран и применить возможности науки и техники 2021 года:


  1. Работодатель выплачивает налог напрямую исходя из оптимистичного сценария: берут число отработанных дней/месяцев на работодателя, вычисляют среднее, умножают так, чтобы получился годовой оклад, от этого рассчитывают процент, а потом именно этот процент используют для отчисления в налоговую.
  2. Банк делает то же самое, то есть считает, что других вкладов или источников дохода нет.
  3. В личном кабинете налоговой идет перерасчёт, можно даже раз в день (сервер не устанет от этого, формулы не такие сложные). Так что всегда можно увидеть текущий баланс.
  4. По окончанию налогового периода: или у плательщика нестандартная ситуация (громадные доходы, заграничные доходы и пр.), и тогда необходимо сдать формальную отчетность (а она не такая сложная, на самом деле). Или же налоговая просто говорит еще раз, сколько было уплачено сверх нормы, а сколько денег не хватает. Главное — чтобы 98% населения могли не сдавать отчетность, так как все было начислено и так корректно, или же у налоговой достаточно данных для подсчета.

Идеи выше — это не моя выдумка, я просто кратко переписал алгоритм общения с налоговой Великобритании. Там отчетность необходимо сдавать только если доход выше 100.000 фунтов в год (это около 1% населения) или еще в паре сложных случаев (когда человек работает как ИП, а значит хочет получить вычеты).


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

Зарубежным программистам предложат вид на жительство в России

Я живу в Англии.
Вайфай только по регистрации.

Это не так. Большинство WiFi точек не требуют регистрации вообще. Это те, которые размещены в магазинах, больницах и пр. Например, в Starbucks доступ в интернет не требует номера телефона или чего-то еще, просто при подключении к сети происходит редирект на страницу, где необходимо поставить галочку "я понимаю, что Старбакс не относится никак к большинству сайтов в интернете", а потом можно опционально зарегистрироваться для получения спама, или нажать на "выйти в интернет".
В пабах Wetherspoon аналогично (900 заведений по стране). По моим наблюдениям, в локальных пабах/гостиницах доступ к WiFi будет по паролю в стиле PubName_YearOfFirstUsage, то есть для условного заведения Anchor пароль будет что-то в духе Anchor_2017, так как именно в этом году разместили первую точку доступа. Сам логин/пароль вывешен часто просто над барной стойкой.


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

Производители электроники опасаются новых налогов из-за предустановки отечественного ПО

госдума должна оплачивать

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

Постапокалипсис на отдельно взятом острове

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

На хабре есть примеры переписи проектов с нуля. И обновленные программы иногда (но не всегда) работают даже эффективнее предыдущих, так как в момент создания программы можно многое переосмыслить, плюс ошибки можно исправлять архитектурно.


Пусть начнет с Исландии — получиться «починить», тогда посмотрим :)

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


Например, если мы говорим о идеи терраформирования, то неизбежно будут ошибки в стиле Аральского моря. И они ставят крест на будущих экспериментах. Хотя, с другой стороны, ГЭС зачастую приносит человечеству много пользы (по-настоящему чистая энергия, плюс еще можно использовать образовавшийся бассейн в благих нуждах). Массовая высадка лесов (в СССР, Китае и Африке) позволят избавляться от пустынь, но и тут есть противники.


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

Что делать, если технический прогресс ухудшает жизнь людей? Перестаньте кормить зверя

к увеличению объема бредовой работы – работы, в которой сами работники не видят смысла.

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


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

SEO умер? 2021-2022 — закат эпохи SEO-продвижения

вы не выдаете в ответе Not-Modified на соответствующий запрос

Это техническая ошибка, которая к SEO относится так же, как и сломанный двигатель в машине такси к опозданию на самолет.


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


Если вы пишите стабильно по 1-2 статьи в неделю на протяжении 10 лет, то это даст вам огромнейшую базу читателей и клиентов.

Это мало относится к SEO. Если Вы играете в долгосрочные стратегии (10 лет), то качественный сервис и полезная информация на вашем ресурсе будет приводить клиентов. А низкий уровень сервиса и мусорные статьи в стиле Дзена наоборот могут оттолкнуть посетителей.


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


оптимизация под мобильную аудиторию

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


постоянная аналитика

Этот пункт с одной стороны пересекается с идеей "хорошего сервиса" (ибо необходимо понимать, когда что-то пошло не по плану), но с другой стороны аналитику необходимо уметь считать, тут математика необходима.


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


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


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

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


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

Обратный звонок vs онлайн-чат на сайте: враги или союзники? Опрос 300+ собственников и маркетологов внутри

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

Использование code style плагина ktlint в Kotlin-проекте. Краткая инструкция для backend-разработчика

Я бы рекомендовал еще присмотреться к detekt плагину — https://github.com/detekt/detekt. В нем намного больше правил. Дополнительно он использует klint внутри себя — https://github.com/detekt/detekt/pull/1455

В Евросоюзе производители теперь обязаны ремонтировать технику в течение 10 лет

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

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


Сам закон тут, вот выдержка из него:


Facilitating repairs
  1. Calls for the following information on the availability of spare parts, software updates and the reparability of a product to be made available in a clear and easily legible manner at the time of purchase: estimated period of availability from date of purchase, average price of spare parts at the time of purchase, recommended approximate delivery and repair times, and information on repair and maintenance services, where relevant; asks, furthermore, for this information to be provided in the product documentation together with a summary of the most frequently encountered failures and how to repair them;


  2. Calls on the Commission to establish a consumers’ ‘right to repair’ with a view to making repairs systematic, cost efficient and attractive, taking into account the specificities of different product categories along the lines of the measures already taken for several household appliances under the Ecodesign Directive:



a. by giving actors of the repair industry, including independent repairers, and consumers access free of charge to the necessary repair and maintenance information, including information on diagnostic tools, spare parts, software and updates, needed to perform repairs and maintenance, while keeping in mind the imperatives of consumer safety, without prejudice to Directive (EU) 2016/943,


b. by encouraging standardisation of spare parts for the sake of interoperability and innovation, while upholding product safety requirements,


c. by setting a mandatory minimum period for the provision of spare parts reflecting the product’s estimated lifespan after the final unit has been placed on the market, as well as reasonable maximum delivery times according to product category in line with the ecodesign implementing regulations adopted on 1 October 2019, which should be extended to a wider range of products,


d. by ensuring that the price of a spare part is reasonable, and therefore cost efficient, in relation to the price of the whole product and that independent and authorised repairers, as well as consumers, have access to the necessary spare parts without unfair hindrances,


e. by encouraging repair over replacement by extending guarantees or zeroing guarantee periods for consumers who choose this option in the preparation of the review of Directive (EU) 2019/771 and in the light of a cost-efficiency analysis for both consumers and businesses, and by ensuring that sellers always inform consumers of the option of repair and related guarantee rights,


f. by assessing how repairs could be facilitated by establishing, at EU level, a legal guarantee for the parts replaced by a professional repairer when goods are no longer under legal or commercial guarantee in the preparation of the review of Directive (EU) 2019/771,


g. by encouraging Member States to create incentives, such as a ‘craftsman’s bonus’, which promote repairs, particularly after the end of the legal guarantee for consumers undertaking certain repair works via authorised/independent repairers;


Исходя из него, я думаю, что ответы могут быть следующими:


А есть регламент того, что устройство должно состоять из запчастей?

Из фразы "by ensuring that the price of a spare part is reasonable, and therefore cost efficient, in relation to the price of the whole product and that independent and authorised repairers, as well as consumers, have access to the necessary spare parts without unfair hindrances" я могу сделать вывод, что если компания хочет, чтобы authorised repairer ремонтировал устройство (а не заменял целиком монолит), то запчасти необходимо будет предоставить всем. Я предполагаю, что для самого производителя не очень выгодно, чтобы при поломке ножки стиральной машины по гарантии привозили бы новую машину.


Прописана ли там цена на запчасти?

Из фразы выше следует (как мне кажется, но я не уверен), что цены должны быть одинаковыми для своих ремонтников, и для всех остальных. А далее цену будет сложно повысить, так как независимые компании могут возмутиться, что это unreasonable.

Утечки утверждают, что у Apple M1X будет 12 ядер и до 32 ГБ LPDDR4x ОЗУ

Не совсем. Переход большого числа пользователей на ARM потребует от производителей ПО поддерживать ARM активнее. Для огромного числа программ это всего лишь означает замену внешнего бинарника на другой, без изменения самого исходного кода (то есть jar тот же, а java теперь другая, js тот же, а электрон теперь другой, аналогично с Python, .Net и пр.).


Пункт выше приведет к популяризации решений для ARM, а значит и инвестициям в них, то есть лучше оптимизатор, больше библиотек и так далее.


Пункт выше может привести к тому, что часть серверного ПО будет активнее использовать ARM — ведь если Java приложение в Enterprise фирме может запускаться на ARM, если разработчики сидят за MacBook с ARM, то, может быть, можно и сервер рассматривать на ARM? Благо, сейчас это стало проще из-за облаков.


Сейчас продажи x86 идут по причинам эффективности платформы и по причинам инертности заказчиков (по моим заметкам). А шаг Apple может снизить второй фактор (в теории). И из-за этого еще уменьшаться продажи, что приведет к уменьшению популярности и так далее.


То есть в теории (только в теории!) шаг Apple может быть тем самым последним камнем, который сильно опустит популярность x86 платформы.

Как разработчики бегут из Сан-Франциско

А может быть Вы знаете — поднимался ли вопрос о пункте "против всех" с семантикой в стиле "если N% голосуют за эту строчку, то все партии снимаются с выборов по данному штату"?

Google захватывает Python

Я не до конца понял аргумент, я думаю… Питон поставляется в виде исходных кодов. Для того, чтобы скомпилировать питон в машинный код, необходимы как минимум две вещи — исходные коды и интерпретатор/компилятор конкретно для этой версии исходников.


Если кто-то преобразовал питон в байткод, то этот человек неявно зашил версию компилятора для языка программирования. Это аналогично с тем, что вместе с исходными кодами сразу поставлять условный python.exe.


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


То есть даже если GraalVM может преобразовать исходник на питоне в байткод, Вы не сможете распространять результат этого преобразования, так как это выход за экосистему Питона — никто не гарантирует совместимости и пр. И я даже не уверен, что GraalVM сможет гарантировать.


Кратко: для Java Вы сможете скомпилировать два модуля под разными версиями (1.6 и 17) и использовать их в одном процессе, даже если старый модуль не смог бы скомпилироваться 17й Джавой (ибо язык поменялся), а с Питоном так нельзя — версия компилятора (то есть читателя исходных кодов) должна быть одной на весь процесс.

Google захватывает Python

Разница в компилируемости. Если под Java написали библиотеку под Java 1.6, которая не хочет компилироваться под Java 17, и одновременно с этим разработчики не хотят обновлять её, то это не страшно, так как JVM выполняет bytecode. А в случае с Питоном это важно, так как весь исходный код программы и всех библиотек должен быть совместим с текущим рантаймом.

Google захватывает Python

Я говорю про исходный код, а не про runtime. Про runtime — это пункты 2 и 3.


А на Java 8 зачастую сидят из-за древней библиотеки, до до обновления которой руки не дошли, так как сам сервис не приоритетный.


В случае с Питоном для миграции с 2 до 3 необходимо одновременно обновить практически весь исходный код, обновить практически все библиотеки, причем для того, чтобы хотя бы исходный код был бы совместим. А потом необходимо исправлять ошибки, связанные с обновлением API, так как некому подсказать на этапе компиляции, ввиду отсутствия этого самого этапа.


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


Если просуммировать: да, и в Java, и в .Net тоже существуют проблемы обратной совместимости, просто их на порядок меньше.

Google захватывает Python

Это некорректное сравнение.


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


Корректнее сравнивать Python и JavaScript, так как они оба интерпретируемые.

Как с помощью нейросети определить лучшую дату отправки email и повысить доход рассылки в 8,5 раз

А он прекрасно умеет smtp и imap, вообще-то. Так что можно попробовать. Вся почта в одном месте имеет некоторый смысл.

Не совсем. У меня в телефоне корпоративная почта и личная. Корпоративную почту я не могу отдавать никакому внешнему провайдеру, ибо такая политика безопасности компании (что довольно разумно).


На ноутбуке у меня нативный почтовый клиент, который мне удобнее. Да, это спорный вопрос и вкусовщина, но это так.


И ради блокирования назойливых рассылок я иногда открываю web интерфейс и "жалуюсь на спам". Но только если кнопка "отписаться" не сработала как надо (например — попросили залогиниться в личный кабинет).

Как с помощью нейросети определить лучшую дату отправки email и повысить доход рассылки в 8,5 раз

Какой им смысл слать только то, что выгодно продать им, если это закончится понятно чем?

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


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

Верю. А я не использую клиент GMail, так как у меня почтовые ящики на разных ресурсах. И мне надо сделать еще один шаг, чтобы отписаться. Мне казалось, что большинство людей сейчас не использует Gmail клиент на телефоне (даже если почта у гугла). И спамерам не надо дописаться до всех, главное — чтобы охват был бы побольше.


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

У меня аналогично. И это не меняет того, что спам сейчас выгоден (как минимум, автор данного поста им занимается, и, я думаю, прибыль присутствует). Как я уже написал, мне кажется, что вся выгода строится на том, что большинство людей не будет отписываться, отсюда и плюсы массовой отправки рекламы.

Информация

В рейтинге
Не участвует
Откуда
London, England - London, Великобритания
Дата рождения
Зарегистрирован
Активность