Pull to refresh

Comments 122

По поводу табов — разумно.
Пожалуй что убедили (к тому же, это согласуется с моей практикой). Буду использовать пробелы.
Главное — это единообразие в проекте.
А в чем именно единообразие — уже не так важно.

А за невидимую табуляцию в строковых константах нужно бить… по рукам :-)
>Главное — это единообразие в проекте.

и не в одном, а желательно во всех, с которыми работаешь.
Я сейчас работаю в двух не связанных проектах — в одном приняты за стандарт табы, в другом пробелы. И. надо сказать, в обоих проектах все идет замечательно, и никаких неудобств люди не испытывают.
Часть проблем с табами в ReactOS идут из вайна. Там в coding style нет единого правила на эту тему и вообще сказано — оформляйте так, как код оформлен рядом. Поэтому запросто в одном файле могут исторически смешаться разные стили. И в плане табуляции и оформления кода там местами тихий ужас.
Ой не надо опять про табы… больная же тема, сейчас другой лагерь придет и будет столь же правильные вещи задвигать!
Испортили весь топик этим холиваром.
Если разработчик не знает, не хочет, или забывает обрашать внимание на корректную расстановку табов/пробелов, он с таким же успехом будет игнорировать и другие стилевые правила. Так что это вообще не аргумент. А ещё по табам удобнее перемещаться курсором. Курсор всегда шагает на уровень отступа (впрочем, в некоторых IDE есть имитация такого поведения для пробелов).
Мне в NetBeans нравится ставить пробелы табом :)
А мне пофик табы или пробелы: какой стандарт принят в данном конкретном проекте или в данной команде — такой и использую. Тоже мне — нашли проблему. Главное — чтобы было едино, либо табы либо пробелы.
Народ!!! Топик не о табах, еси чё.
Автор жостко потроллил.
Да ладно — «протроллир». Я слов то таких не знаю. Причем здесь это? Я открыл очередной проект — ReactOS. В нем местами каша из кода. Что толку учить людей ставить табы (в стандарте ReactOS всё правильно написано), если научить не получается. Надо просто табы запретить и жестко бить, кто начинает создавать ими кашу. И я высказал это своё мнение. В дискуссию вдаваться не хочу. Если согласны — хорошо. Если нет — поставьте минус. А обсуждать тут нечего.
Нет, вы снова подняли бессмысленный холивар, который уже поднимали и увели тему топика в левое русло. Вот вы говорите:
Потому, что это сложно помнить, где надо нажать TAB, а где поставить несколько пробелов

А что нужно писать английским, а не транслитом — не сложно помнить?
Что нужно писать camelCase'ом (under_score'ом), если в проекте такой стиль — не сложно помнить?
Что нужно объявлять переменные — не сложно помнить?
Может сложно помнить, что ключевое слово int означает целое число в определённых рамках?
Почему всё это не сложно помнить, а вдруг разницу, когда надо использовать табы, а когда — пробелы — сложно. Пробелы — это костыль, который неудобен большинству разработчиков, что мы уже доказали предыдущими топиками.

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

Покажите хоть один.
Как вы думаете, что будет когда у разных разработчиков разное число символов в отступе?
что будет, что будет… тот у кого оно будет более разное — заболеет гематомами
Для всякого проекта есть стандарт кодирования. Например: 8 пробелов в табе для ядра Linux.
Если нет для проекта — есть для языка. Например: 2 пробела в табе для ruby.
Если разработчик не следует стандартам — бить по рукам.
>8 пробелов в табе

эээ? в ядре линукса как раз настоящие табы без всяких пробелов.
Documentation/CodingStyle:
Tabs are 8 characters, and thus indentations are also 8 characters.
There are heretic movements that try to make indentations 4 (or even 2!)
characters deep, and that is akin to trying to define the value of PI to
be 3.

Rationale: The whole idea behind indentation is to clearly define where
a block of control starts and ends. Especially when you've been looking
at your screen for 20 straight hours, you'll find it a lot easier to see
how the indentation works if you have large indentations.

Now, some people will claim that having 8-character indentations makes
the code move too far to the right, and makes it hard to read on a
80-character terminal screen. The answer to that is that if you need
more than 3 levels of indentation, you're screwed anyway, and should fix
your program.

In short, 8-char indents make things easier to read, and have the added
benefit of warning you when you're nesting your functions too deep.
Heed that warning.

Важно, что для проекта есть специфический стандарт кодирования. Здесь — 8 символов для отступа. Будь это табы или пробелы — это будет выглядеть одинаково. Но если это будут табы, то нужна modeline или другой способ указать, что в табе должно быть именно 8 пробелов. А если это будут пробелы, то такой проблемы не будет.
Это к фразе «что будет когда у разных разработчиков разное число символов в отступе».
Топик читал, с ним совершенно несогласен, но это вопроса не касается. Был задан вопрос «а если у разных разработчиков разное число символов в отступе?» Был дан ответ «нужно следовать стандартам». Всё.
Во-во. Я уж не знаю, какие редкие эстеты авторы vanilla, но они там используют 3 пробела, я это вообще не перевариваю :)
ну вот лично я регулярно забываю пнуть vim на использование правильного форматирования, когда работаю с исходниками ядра.

везде пробелы (еще и разное количество, блин), а у Линуса табы.

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

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

в своих проектах я может так и делал бы, но в линуксе меня за такое справедливо и больно стукнут кадилом по патч-сабмишшеную
modeline не более специфическая чем shebang :). На вскидку ее поддерживают: vim, emacs, eclipse и даже notepad++ и visual studio с сответствующим аддином. Modeline уже достаточно давно не vim-specific.
тем не менее, в том проекте о котором я говорю (linux kernel) модлайны в файлах запрещены:

Documentation/CodingStyle:

Some editors can interpret configuration information embedded in source files,
indicated with special markers.

Do not include any of these in source files. People have their own personal
editor configurations, and your source files should not override them. This
includes markers for indentation and mode configuration. People may use their
own custom mode, or may have some other magic method for making indentation
work correctly.
Что я тут могу сказать — сами себе злобные ежики. Текст rationale не имеет смысла, так как все редаторы с поддержкой modeline поддерживают ее достаточно гибко и все эти «custom mode» и «magic method» замечательно работают при имеющейся modeline. Возможно, это правило устарело лет так на десять кода modeline был только в vim и жестко менял поведение редактора :).
этому документу лет 20 и есть.
Ну, например, маленькая проблема в том, что у emacs — своя modeline, а у vim — своя, ничего?
чтобы emacs понимал vim-овский достаточно одной строки в конфигурации.
Просветите, пожалуйста, какой? Я знаю только некий скрипт-враппер, который вешается на открытие файла и конвертирует modeline регэкспами; разумеется, более-менее сложный modeline от этого ломается.
Увы, конфиг где я это делал за давностью лет того -_-. Более-менне сложный не нужен, достаточно регекспом вытаскивать indent и expandtabs :)
Для такого стандарта, как, например, предполагается в ReactOS — как раз нужна достаточно сложная настройка…
> Что толку учить людей ставить табы
а что толку учить физику? А что толку учить математику? Всегда можно найти человека, который их не осилил и на его примере доказывать, что учить их бесполезно. Слабый аргумент.
Теперь это топик о табах!
PVS-Studio для ReactOS на льготных условиях или бесплатно — вклад в технологический прогресс человечества!
Так есть же лицензия бесплатная для опен сорса.
Она не то, чтобы бесплатная — там больше на триал похоже по условиям.
Если кому-то понравилось и от него есть обратная связь, то мы продлеваем ключи. Например, разработчики FlylinkDC++ уже более полугода бесплатно пользуются. И им польза. И нам. Они нам присылают баг-репорты и интересные пожелания по диагностическим правилам.
Кстати, не сочтите за попытку попридираться — но кроме FlylinkDC++ кто-то до сих пор воспользовался вашим предложением? Если да — вероятно, где-то есть где-то список open source проектов-получателей — можно на него взглянуть? На сайте PVS как-то сходу не нашел.
Это здорово, я уверен, что у PVS-Studio есть туча коммерческих заказчиков (тем более, что ценовая политика действительно достаточно либеральная), но я про их open source программу спрашивал :)
Такие люди и коллективы конечно же есть, но поскольку добиться от них внятного фидбека, который можно опубликовать в виде статьи сложно, то и сослаться особо не на что.

Все-таки одно дело на Хабре прокричать «фу, коммерческое, вот если бы было бесплатное, то я бы горы свернул!» и другое — потом статью выдать. Это, конечно же, не какая-то конкретная личная претензия.
У меня закрадывается стойкое подозрение, что целевой аудитории FOSS-разработчиков тут как бы нет. Коллективы, которые их пишут именно на C/C++ под Windows, конечно, бывают, но их страшно мало в общей массе — я вот сейчас подумал и из сколько-нибудь широко известных из головы вспомнил всего 3 — TortoiseSVN, Miranda и eMule.

Если бы PVS-Studio хотя бы как-то работал с gcc и под не-Windows — возможно, получилось бы охватить и всяких ядерных разработчиков, и серверный userland, и разработчиков gtk/gtk+ приложений, и Qt/KDE разработчиков на C++ — а так — я практически не вижу, кто мог бы воспользоваться предложением…
Не то чтобы я спорю, но просто на всякий случай напомню, что мы маленькая софтовая компания. Продажа софта — наш единственный бизнес. И цели «чтобы линукс-пользователи могли бесплатно пользоваться нашим продуктом» у нас нет.
Если я правильно понимаю, ваша основная цель — пытаться продавать продукт, а для этого нужна какая-то огласка и чтобы о нем знали. Конкуренция на этом рынке достаточно приличная, если верить списку в википедии — инструментов статического анализа C/C++ порядка 10-15 штук бесплатных/свободных и порядка 50 — коммерческих/проприетарных.

Де факто я сейчас не вижу, чтобы о вас говорили на каждом углу, где говорят о статическом анализе C/C++. Говорят в первую очередь о Сoverity, о CppCheck, о CppDepend, о VSTT Prefast. Реже — об Klocwork'овском Insight, Goanna, PC-Lint и еще десятке инструментов. Несмотря на существенный успех с iD software — PVS-Studio все-таки упоминается довольно редко.

Вы сами предложили весьма эффективную на первый взгляд стратегию — предлагать бесплатную триал-версию всяким FOSS-проектам и за счет этого получить PR, известность и огласку. На второй же взгляд, оказывается, что проектов, которые бы могли воспользоваться продуктом и дать вам этот самый PR — как-то толком и нет. Возможно, стоит что-то пересмотреть — если уж пытаться пользоваться таким PR-ресурсом?
Очень веселая реклама, особенно учитывая, что ReactOS некоммерческий проект и вы считаете, что выложить 3.5 штуки евро на одного разработчика это нормально?
>А еще лучше скачать и самим проверить проект с помощью PVS-Studio.…
> Ключ для проверки выделим.
1) За 3500 евро вы имеете право использовать продукт в команде до 5 пользователей, при инсталляции только на одну машину каждого пользователя. В том числе вы имеете право установить одну инсталляцию на сервер. И не стоит забывать, что команда получает оперативную поддержку на русском и английском языке в течении года. Очень даже дёшево.

2) Не надо особенно кричать про энтузиазм. Проекты уровня ReactOS делаются тогда, когда это кому-то нужно. А то что это происходит в формате Open Source — значит так просто удобнее и дешевле.

3) Мы предоставляем открытым бесплатным проектам ключи на некоторое время. И я сказал в статье, что выдадим и для команды ReactOS. Не надо делать из нас жадных злодеев.
В соседнем топике уже реквестировали миллион евро на форк reactOS, как вы думаете зачем?
всем 200м разработчикам по PVS!!!
Статья про анализ кода ReactOS, а все опять про табы с пробелами.
Хватит об этом уже.
if (ERROR_SUCCESS == hres)
{
  Names[count] = HeapAlloc(GetProcessHeap(), 0, strlenW(szValue) + 1);
  if (Names[count])
     strcmpW(Names[count], szValue);
}


Зачем вызывать «strcmpW», если результат никак не используется?


Я подозреваю, что тут код вполне осмыслен, просто вместо strcmpW должно быть strcpyW
Вы случаем не:

Роэль Мессан (Roel Messiant) недавно присоединился к проекту и исправил несколько ошибок, обнаруженных Coverity. На IRC-канале Роэль известен под именем Mephisto, и, несмотря на ник, оказался значительно более полезным, чем его тёзка по нику (Мефистофель), а мы с нетерпением ждём, что ещё нового он принесёт в проект. (с) с Сайта РеактОС.
Подумайте, какие действия позволят сделать так, чтобы новый программист мог открыть код проекта и не гадать, какой размер символа табуляции ему необходимо установить в настройках редактора.


Оффтопик: строго говоря, для этого есть modeline. Но в целом аргументы за пробелы мне понравились, с такого ракурса я еще не рассматривал.

Видимо, пора показывать эту статью руководству и намекать что неплохо бы прикупить анализатор. Хорошая, годная реклама :).
>Считаю, что статический анализ кода должен являться обязательным элементом цикла разработки ReactOS и других крупных проектов.

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

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

А что до платформы… Их много сейчас. Вон у меня справа свиноферма стоит — там и mac (потому что по лицензионному соглашению macos нельзя запускать на неродном железе даже в виртуалке), и несколько ubuntu, и windows 7. Кучка виртуалок. И все замечательно работает вместе, автобилд под разные платформы делает. Ограничиваться одной платформой потому что остальные «не православные» — это сейчас череповато рыночной долей :).
>Ограничиваться одной платформой потому что остальные «не православные» — это сейчас череповато рыночной долей :).

а чего вы это мне рассказываете?
работающий только под одной ОС и завязанный на определенную IDE никогда не станет обязательным элементом цикла разработки большинства крупных проектов


Тайна сия великая есть и разгадка ее в глубине веков :) Может быть, мне интересна позиция человека, который столь критично относится к софту, работающему только под одну ОС?
я вас не понимаю. вы сами пишете, что ограничиваться одной платформой — «череповато».

>Может быть, мне интересна позиция человека, который столь критично относится к софту, работающему только под одну ОС?

потомучто ОС у всех разные, как и рабочий процесс.

одна ОС — это еще ладно, особенно если под ОС понимать *unix.

а вот некоторые панове, не буду тыкать пальцем в стороны прибальтики, так вообще чего придумали — бинарники исключительно под i686 штампуют. хоть в qemu их запускай, право слово.
Есть виртуальные машины. Ставим ее на любимую nix, туда ставим Windows 7, благо она не очень дорогая в простых редакциях, а под нее уже можно и PVS-Studio. И все довольны.

У меня даже на virtualbox все замечательно работает :). Как на nix так и на macos в качестве «основной» операционки.
>Есть виртуальные машины. Ставим ее на любимую nix, туда ставим Windows 7.

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

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

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


и

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

не понял, где противоречие?
в чем противоречие то?

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

Согласуйте со всей командой разработчиков, выделите машину и запускайте там PVS, хоть через SSH или telnet его дергайте — инструментов полно.
Хочу PVS-Studio в виде самостоятельного инструмента. Ну или хотя бы в виде плагина к NetBeans и Eclipse. А также версию для linux, но это уже из области фантастики. В любом случае, желаю проекту дальнейшего развития.
Да это студия видно хороша, раз такие ошибки ищет, но в моей работе неприменима: VS + Win
Нужно признать, что авторы PVS-Studio — реалисты. Те, кто пользуется NetBeans, Eclipse и Linux никогда не заплатят за такой инструмент. Идеология не позволит. А среди пользователей визуал студии — много больших фирм с деньгами и пониманием того факта, что за хороший рабочий инструмент можно и заплатить.
не правда про не заплатят, и про идеологию тоже не правда…
Да, это наглая клевета. Хотя и правда.
Eclipse активно используется в больших interprise-J2EE проектах, в компаниях, которые могут позволить себе такой инструмент, но pvs сейчас не для java, насколько я знаю.
Фиг с ним, с линуксом, но неужели вы думаете, что большие фирмы другими IDE не пользуются? Если бы они сделали свой анализатор как отдельный инструмент, он бы устроил и тех и других, по крайней мере им бы могли пользоваться все, а не только визуальщики. Ну а потом можно было выпустить плагины для интеграции анализатора с популярными IDE. Реалисты — не реалисты, но зачем такие жёсткие зависимости?
>неужели вы думаете, что большие фирмы другими IDE не пользуются?

Под Виндой, для написания коммерческого С++ кода — да, думаю не пользуются. (Ну оставьте 5% на статистическую погрешность).
>Под Виндой, для написания коммерческого С++ кода — да, думаю не пользуются.

Вы думаете неправильно. Вылезайте уже из своего уютного десктопного мирка — помимо него есть громадное количество областей, где C++ рулит и педалит, причём это далеко не всегда C++.Net.

>Ну оставьте 5% на статистическую погрешность

Хренасе у вас «погрешности» о_О
Вы хотя бы представляете, сколько составляют эти 5% в абсолютных числах и сколько денег там зарыто?

Даю один простой пример: для того, чтобы писать под QNX, используется их собственная QNX Momentics IDE, основанная на Eclipse. Да, компаний, пишущих под QNX, очень мало, но сама область такова, что во-первых ею занимаются действительно серьёзные компании (что обусловлено самой нишей QNX), а во-вторых у них чрезвычайно высокие требования к качеству кода. Думаю, дальше объяснять не нужно?
>ею занимаются действительно серьёзные компании (что обусловлено самой нишей QNX), а во-вторых у них чрезвычайно высокие требования к качеству кода. Думаю, дальше объяснять не нужно?

Те, кто пользуется NetBeans, Eclipse и Linux никогда не заплатят за такой инструмент

Я сижу на Линуксе и пользуюсь купленной phpStorm. Так что это только ваши ошибочные домыслы.
Давайте возьмем 100 произвольных компьютеров\серверов с Линуксом. На скольких, по Вашей оценке, стоит хоть какое-то купленное ПО?

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

Я ничего плохого не хочу сказать о пользователях Linux и opensource-программ — это вполне себе выбор и хорошее, благородное мировозрение. Но заработать на таких людях в среднем можно существенно меньше, чем на «виндузятниках».
Вы вот сказали, что у Вас стоит на компе phpStorm — прекрасно. А у меня на рабочем компе стоит около 20 разных купленных организацией, где я работаю, программ. Плюс на домашнем компе около десятка честно купленных (и не буду говорить сколько не честно). Ну вот и под какую платформу и для какой аудитории выгоднее делать инструменты, аналогичные PVS Studio?
Ну вот и под какую платформу и для какой аудитории выгоднее делать инструменты, аналогичные PVS Studio?

JetBrains правильно делают. У них отличный инструмент, который работает и покупается под любой платформой. И если бы он не работал под Линуксом, то и под виндой тоже меньше покупался бы.
Тю, оно проприентарное. Не интересно. Будет опенсорс, приходите.
оценсорц есть под более другие языки. те же pep8 и pyflakes, например.
Тю, хабрахабр проприетарный. Не интересно. Будут выложены все потроха, приходите. /irony
Хабрахабр, кстати, с точки зрения контента — CC-BY в очень многих местах.
CC-BY в постах и проприетарщина в разуме.
Уверены? Приобретали движок хабра и исходники вам не дали? :)
UFO just landed and posted this here
Видимо табы с пробелами будут обсуждаться до тех пор, пока каждый для себя не примет четкого, взвешенного и обоснованного решения использовать то или другое.
UFO just landed and posted this here
UFO just landed and posted this here
Табы с пробелами будут обсуждаться до тех пор, пока не прекратятся провокации по этому поводу. Особенно такие: «Не-не, я не хочу развязывать холивар, но пробелы всё-таки лучше».
<holywar-begin><irony>Не-не, я вовсе не хочу поддаваться на провокацию, но табы всё таки получше будут.</irony></holywar-begin>
Может вам стоит ещё проверить Wine? Любопытно насколько много проблем у него…

Или не выйдет?
Вот я тоже подумал что не выйдет(
Вообще-то WINE для Windows существует. Используется разработчиками WINE понятно для чего.
Вы будете смеяться, но есть масса программ, которые плохо работают в новых версиях Windows, но прекрасно работают под Wine (из-за чего Wine собственно имеет смысл и для Windows).
strcmp(name1, name1)

А тут всё в порядке?
Там и написано: «опечатка в один символ».
Мысли, глядя на код:

  1. Как страшно жить. Как над пороховым погребом или болотом.
  2. Цивилизация обречена. У нас нет шансов. «Хотим сделать как лучше, а получается как всегда».
  3. Возможно, Си не подходит для таких больших и сложных проектов, именно потому что в нём очень мало статической проверки на этапе компиляции.
  4. Нет, Си++ тоже не подойдёт.
  5. Я не знаю, что подойдёт. Возможно, ничего.
UFO just landed and posted this here
Почему разработчики не используют авто оформитель кода?
Мы у себя решили проблему оформления кода именно так.
У всех одни настройки и один же оформитель кода.
Исправление ошибок в ReactOS чревато потерей совместимости с Windows. ;-)
Отличная статья, понравилась, только раздел 'Снова о табуляциях и пробелах' на мой взгляд лишний
Мда, и кто-то после этого может уверять, что Хабр не стадо хомячков?

Ну и раз уж топик о чем угодно, кроме анализа кода, вопрос к рразработчикам PVS-Studio. Как думаете, миллиона евро хватит, чтобы исправить все эти ошибки? :)
вы про какие ошибки? про опечатки или более глобальные вещи? простые опечатки можно поправить за более скромную сумму…
Перевод статьи ещё не готов. Однако, если кому-то из иностранных товарищей хочется поработать со списком ошибок, то я подготовил для них вот этот файл. В нём переведены разъяснения к ошибкам.
UFO just landed and posted this here
Наблюдал эту ОС на кассах в Фуршете. Так там у кассирш стандартная операция — ребут компа. Висла каждый раз при скане их же карточки со скидкой. Хорошо хоть грузится шустро…
Мне интересно, кто додумался её использовать в реальном коммерческом предприятии, когда сами разработчики не рекомендуют это делать. Да и ReactOS пока в альфа-версии.
имхо это лучший способ отладить систему… ну или получить отвращение к ней, на веки вечные…
А во времена Win95 это бы никого не удивило =)
Спасибо за статью, теперь я точно знаю, что могу писать свою операционку.
> давно хотелось написать статью об обыкновенном проекте

Прозвучало как-то унизительно для ReactOS. Никакой исключительности.
А найденые ошибки были закоммичены? если работа была проделанна, почему не сдлеать вклад в ОпенСорс
Sign up to leave a comment.