Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

А как Вы закончили программировать?   Найти похожие ветки 

 
Юрий Зотов ©   (2004-07-08 12:19) [40]

> Dmitriy O. ©   (06.07.04 13:02) [30]

> А причем сдесь Вы и буржуи.

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

> Я имею в виду часную величину.

Видимо, она у каждого своя. Если интересует моя личная оценка, то для меня 10 тыс. строк - проект маленький, даже если я его писал в одиночку (а для команды 10 тыс. строк - это вообще ничто). Некоторые компоненты имеют код порядка 5-10 тыс. строк - а ведь это только один компонент.

Вероятно, большим для программиста-одиночки я бы назвал проект начиная где-то с 100 тыс. строк. Хотя дело далеко не только (и даже не столько) в объеме кода. Иной маленький проект может быть куда серьезнее и значимее, чем иной большой - и как тогда расставлять оценки?


 
Dmitriy O. ©   (2004-07-08 12:28) [41]


> Юрий Зотов ©   (08.07.04 12:19) [40]

Да однако у Вас и маштабы 10 тыс маленький проект. У меня еще нет ни одного проекта где кода былоб 10 тыс строк.
Но вопрос стоял еще и в смысле что начиная с какого количества строк стоит сохранять его в Теам Соурсе. Архивировать, таскать на флешках и т.д. Я назвал виличину в 500 строк. По моему именоо с этого количества строк проект становится значимым.


 
Тимохов ©   (2004-07-08 12:37) [42]


> Dmitriy O. ©   (08.07.04 12:28) [41]

Дмитрий, не смешите общественность :)))
10 тыч - это как два пальца сами знаете что...


> Я назвал виличину в 500 строк. По моему именоо с этого
> количества строк проект становится значимым.

Цирк уехал, клоуны остались:))))


> Но вопрос стоял еще и в смысле что начиная с какого количества
> строк стоит сохранять его в Теам Соурсе.

Ни при каком - у меня несколько проектов: от 100 тыс до 1 млн - ни в одном не пользуюсь этой фигней.


 
Игорь Шевченко ©   (2004-07-08 12:40) [43]

Тимохов ©   (08.07.04 12:37)


> 10 тыч - это как два пальца сами знаете что...


Да ну ? Все зависит от проектирования, уважаемый. По мне, например, чем меньше строк приходится набивать - тем лучше, значит, код используется повторно, что есть рулез.


> Ни при каком - у меня несколько проектов: от 100 тыс до
> 1 млн - ни в одном не пользуюсь этой фигней.


Эт пока гром не грянет, мужик, обычно, не крестится


 
Тимохов ©   (2004-07-08 12:43) [44]


> Игорь Шевченко ©   (08.07.04 12:40) [43]


> Да ну ? Все зависит от проектирования, уважаемый. По мне,
> например, чем меньше строк приходится набивать - тем лучше,
> значит, код используется повторно, что есть рулез.

Не находите, что в данной фразе есть некий снобизм? :))))
Слабо запроектировать программу по функциональности (повторяю по функциональности, а не по отвратности:))) равной половине 1с меньше чем 200 тыс строк?


> Эт пока гром не грянет, мужик, обычно, не крестится

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


 
Игорь Шевченко ©   (2004-07-08 12:48) [45]


> Не находите, что в данной фразе есть некий снобизм? :))))


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


> Слабо запроектировать программу по функциональности (повторяю
> по функциональности, а не по отвратности:))) равной половине
> 1с меньше чем 200 тыс строк?


Совершенно не знаю функциональности 1С, так что не могу представить себе затраты.


 
Тимохов ©   (2004-07-08 12:53) [46]


> Игорь Шевченко ©   (08.07.04 12:48) [45]

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


> Совершенно не знаю функциональности 1С, так что не могу
> представить себе затраты.

Тогда скажу я - 200 тыс - это нереально :(((


 
Игорь Шевченко ©   (2004-07-08 12:57) [47]

Тимохов ©   (08.07.04 12:53)


> Тогда скажу я - 200 тыс - это нереально :(((


Если не секрет - на чем основывается такое утверждение ?

Я могу согласиться, что код MS Excel, например, невозможно уместить в 200 строк - слишком в нем много различной функциональности :)


 
Тимохов ©   (2004-07-08 13:04) [48]


> Игорь Шевченко ©   (08.07.04 12:57) [47]


> Если не секрет - на чем основывается такое утверждение ?

Опыт разработки.

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

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

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

В моем млн строк думаю можно 100 убрать. Но это будет очень дорого (буквально: время - деньги) стоить.


 
Игорь Шевченко ©   (2004-07-08 13:09) [49]


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


Рефакторинг.

Для примера - полгода назад, "для набивания руки" взялся как раз за подобную очистку проекта. За две недели изменений в иерархии классов и выявления дублирующегося кода, проект похудел на 25% (с 80 тысяч строк до 60 тысяч). Функциональность, разумеется, осталась прежней.


 
КаПиБаРа ©   (2004-07-08 13:11) [50]


> Игорь Шевченко ©   (08.07.04 13:09) [49]

А новые баги добавились?


 
Юрий Зотов ©   (2004-07-08 13:12) [51]

> Dmitriy O. ©   (08.07.04 12:28) [41]
> Да однако у Вас и маштабы 10 тыс маленький проект

Если я занимаюсь только проектированием и программированием (и больше никакой другой работой), то выдаю на-гора примерно 2.5-3 тыс. строк отлаженного кода в месяц (в зависимости от сложности проекта). Получается, что 10 тыс. строк - это где-то месяца на 4 (включая проектирование). Назвать 4-х месячный проект большим, согласитесь, довольно трудно.

Что касается сохранения кода, то его, естественно, делать нужно. Но использование различных VCS, видимо, для программиста-одиночки не слишком актуально - проще делать обыкновенные копии. Если же речь идет о команде, то VCS становится практически обязательным инструментом.


 
olookin ©   (2004-07-08 13:13) [52]

Вы бы еще пояснили что понимаете под "строкой" кода...


 
Игорь Шевченко ©   (2004-07-08 13:15) [53]

КаПиБаРа ©   (08.07.04 13:11)

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


 
Думкин ©   (2004-07-08 13:16) [54]


> [52] olookin ©   (08.07.04 13:13)

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


 
Тимохов ©   (2004-07-08 13:16) [55]


> Игорь Шевченко ©   (08.07.04 13:09) [49]

Игорь, Вы заматеревший идеалист :)))

Все это очень здорово.
Рефакторингом я занимаюсь часто - когда есть время от основных дел.

Но!!!
У нас есть же еще язык. На котором написано еще столько же строк кода. Язык отстойный, библиотеки полное g. Пишу на нем не я - я некоторых людей и знаю то плохо.

Это очень затрудняет этот самый рефаторинг.

Возьмите windows. Почему появляюстя функции Ex? Именно поэтому делать серьезный рефакторинг с доработкой интерфейса доступа к ядру бизнес-логики очень сложно. Приходится плодить новые сущности. Конечно, я иногда не меняя функциональности делаю перработку реализации методов при сохранее интерфейса. Но на этом сильно далеко не уедешь. :))


 
Юрий Зотов ©   (2004-07-08 13:18) [56]

> olookin ©   (08.07.04 13:13) [52]
> Вы бы еще пояснили что понимаете под "строкой" кода...

Мой стиль практически совпадает с борландовским (как я ни сопротивлялся и не пытался оригинальничать, но все же постепенно к этому стилю пришел - он действительно оптимален). Это значит, что понятие "строка" можно посмотреть в коде VCL.
:о)


 
Игорь Шевченко ©   (2004-07-08 13:19) [57]


> Возьмите windows. Почему появляюстя функции Ex?


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

ЗЫ: Фаулер - рулез фарева :)


 
olookin ©   (2004-07-08 13:24) [58]

[56] Юрий Зотов ©   (08.07.04 13:18)
В таком случае моя и прозвучавшая у вас оценка величины строки кода расходятся. Я не считаю строкой кода что то в духе:
 i:=0;


 
Тимохов ©   (2004-07-08 13:24) [59]


> Игорь Шевченко ©   (08.07.04 13:19) [57]


> То есть, происходит внутренняя реорганизация при полном
> сохранении внешнего интерфейса, в большинстве случаев.

Я же говорю идеалист :)))
Если бы это всегда спасало. Часто именно интерфейс надо менять, а не только реализацию.
Конечно, это есть определенная ошибка проектиирования. Но вспомните про эволюционность (термин, кстати, тоже улежавшийся в теории создании продуктов). Разве можно предугадать все, что пригодится через 4 года? Ну вы, наверное, сможете :))) Я не могу. Интерфейс устаревает, рефаторинг не поможет.

ЗЫ
Фаулера, Мартина (кажется так), Бека я тоже читал - лабуда это все (совершеннейшее имхо, поэтому можно не возражать), средство заработать деньги.


 
КаПиБаРа ©   (2004-07-08 13:26) [60]


> Игорь Шевченко ©

А какие виды или шаблоны рефакторинга вы применяете?


 
Тимохов ©   (2004-07-08 13:27) [61]


> КаПиБаРа ©   (08.07.04 13:26) [60]

ну все, пошло выедение на чистую воду


 
Mystic ©   (2004-07-08 13:27) [62]

Песколько слов в защиту того, что количеством строк не измерить сложность проекта.

1. По заверениям разработчиков Deep Junior, движок содержит всего лишь 10 000 строк на C. Попробуйте написать нечто такое сами :)

2. Исходник TeX содержит 24931 строку. С учетом того, что разрабатывался с использвонием методологии Literate Programming (т. е. по исходнику создается не только текст программы для компиляции, но и литературное описание работы программы). В общей сумме разработка происходила с сентября 1982 по март 1995. Вот история изменений:

% Version 0 was released in September 1982 after it passed a variety of tests.
% Version 1 was released in November 1983 after thorough testing.
% Version 1.1 fixed ``disappearing font identifiers"" et alia (July 1984).
% Version 1.2 allowed `0" in response to an error, et alia (October 1984).
% Version 1.3 made memory allocation more flexible and local (November 1984).
% Version 1.4 fixed accents right after line breaks, et alia (April 1985).
% Version 1.5 fixed \the\toks after other expansion in \edefs (August 1985).
% Version 2.0 (almost identical to 1.5) corresponds to "Volume B" (April 1986).
% Version 2.1 corrected anomalies in discretionary breaks (January 1987).
% Version 2.2 corrected "(Please type...)" with null \endlinechar (April 1987).
% Version 2.3 avoided incomplete page in premature termination (August 1987).
% Version 2.4 fixed \noaligned rules in indented displays (August 1987).
% Version 2.5 saved cur_order when expanding tokens (September 1987).
% Version 2.6 added 10sp slop when shipping leaders (November 1987).
% Version 2.7 improved rounding of negative-width characters (November 1987).
% Version 2.8 fixed weird bug if no \patterns are used (December 1987).
% Version 2.9 made \csname\endcsname"s "relax" local (December 1987).
% Version 2.91 fixed \outer\def\a0{}\a\a bug (April 1988).
% Version 2.92 fixed \patterns, also file names with complex macros (May 1988).
% Version 2.93 fixed negative halving in allocator when mem_min<0 (June 1988).
% Version 2.94 kept open_log_file from calling fatal_error (November 1988).
% Version 2.95 solved that problem a better way (December 1988).
% Version 2.96 corrected bug in "Infinite shrinkage" recovery (January 1989).
% Version 2.97 corrected blunder in creating 2.95 (February 1989).
% Version 2.98 omitted save_for_after at outer level (March 1989).
% Version 2.99 caught $$\begingroup\halign..$$ (June 1989).
% Version 2.991 caught .5\ifdim.6... (June 1989).
% Version 2.992 introduced major changes for 8-bit extensions (September 1989).
% Version 2.993 fixed a save_stack synchronization bug et alia (December 1989).
% Version 3.0 fixed unusual displays; was more \output robust (March 1990).
% Version 3.1 fixed nullfont, disabled \write{\the\prevgraf} (September 1990).
% Version 3.14 fixed unprintable font names and corrected typos (March 1991).
% Version 3.141 more of same; reconstituted ligatures better (March 1992).
% Version 3.1415 preserved nonexplicit kerns, tidied up (February 1993).
% Version 3.14159 allowed fontmemsize to change; bulletproofing (March 1995).
% Minor corrections to the documentation (only) were made in July 2001.

% A reward of $327.68 will be paid to the first finder of any remaining bug.


 
Думкин ©   (2004-07-08 13:29) [63]


> [58] olookin ©   (08.07.04 13:24)

А почему? Оператор. вполне. почему нет? А твое определение?


 
Mystic ©   (2004-07-08 13:29) [64]

Песколько слов в защиту того, что количеством строк не измерить сложность проекта.

1. По заверениям разработчиков Deep Junior, движок содержит всего лишь 10 000 строк на C. Попробуйте написать нечто такое сами :)

2. Исходник TeX содержит 24931 строку. С учетом того, что разрабатывался с использвонием методологии Literate Programming (т. е. по исходнику создается не только текст программы для компиляции, но и литературное описание работы программы). В общей сумме разработка происходила с сентября 1982 по март 1995. Вот история изменений:

% Version 0 was released in September 1982 after it passed a variety of tests.
% Version 1 was released in November 1983 after thorough testing.
% Version 1.1 fixed ``disappearing font identifiers"" et alia (July 1984).
% Version 1.2 allowed `0" in response to an error, et alia (October 1984).
% Version 1.3 made memory allocation more flexible and local (November 1984).
% Version 1.4 fixed accents right after line breaks, et alia (April 1985).
% Version 1.5 fixed \the\toks after other expansion in \edefs (August 1985).
% Version 2.0 (almost identical to 1.5) corresponds to "Volume B" (April 1986).
% Version 2.1 corrected anomalies in discretionary breaks (January 1987).
% Version 2.2 corrected "(Please type...)" with null \endlinechar (April 1987).
% Version 2.3 avoided incomplete page in premature termination (August 1987).
% Version 2.4 fixed \noaligned rules in indented displays (August 1987).
% Version 2.5 saved cur_order when expanding tokens (September 1987).
% Version 2.6 added 10sp slop when shipping leaders (November 1987).
% Version 2.7 improved rounding of negative-width characters (November 1987).
% Version 2.8 fixed weird bug if no \patterns are used (December 1987).
% Version 2.9 made \csname\endcsname"s "relax" local (December 1987).
% Version 2.91 fixed \outer\def\a0{}\a\a bug (April 1988).
% Version 2.92 fixed \patterns, also file names with complex macros (May 1988).
% Version 2.93 fixed negative halving in allocator when mem_min<0 (June 1988).
% Version 2.94 kept open_log_file from calling fatal_error (November 1988).
% Version 2.95 solved that problem a better way (December 1988).
% Version 2.96 corrected bug in "Infinite shrinkage" recovery (January 1989).
% Version 2.97 corrected blunder in creating 2.95 (February 1989).
% Version 2.98 omitted save_for_after at outer level (March 1989).
% Version 2.99 caught $$\begingroup\halign..$$ (June 1989).
% Version 2.991 caught .5\ifdim.6... (June 1989).
% Version 2.992 introduced major changes for 8-bit extensions (September 1989).
% Version 2.993 fixed a save_stack synchronization bug et alia (December 1989).
% Version 3.0 fixed unusual displays; was more \output robust (March 1990).
% Version 3.1 fixed nullfont, disabled \write{\the\prevgraf} (September 1990).
% Version 3.14 fixed unprintable font names and corrected typos (March 1991).
% Version 3.141 more of same; reconstituted ligatures better (March 1992).
% Version 3.1415 preserved nonexplicit kerns, tidied up (February 1993).
% Version 3.14159 allowed fontmemsize to change; bulletproofing (March 1995).
% Minor corrections to the documentation (only) were made in July 2001.

% A reward of $327.68 will be paid to the first finder of any remaining bug.


 
Игорь Шевченко ©   (2004-07-08 13:29) [65]

КаПиБаРа ©   (08.07.04 13:26)

Я боюсь, перечисление займет очень много места :)
Из крупных - замена процедурного кода объектным, по мелочи - не счесть :)


 
olookin ©   (2004-07-08 13:31) [66]

[63] Думкин ©   (08.07.04 13:29)
Мое? Символ. Соответственно, могучесть кода - кол-во символов. И не говорите мне, что такая оценка неверна, поскольку половину редактор сам вставляет. Сам он ничего просто так не ставит - для этого программист хотя бы кнопку нажать должен.


 
Тимохов ©   (2004-07-08 13:32) [67]


> Игорь Шевченко ©   (08.07.04 13:29) [65]

Какую книгу кстати Фаулера вы имеете в виду?
У меня есть какая-то из "Библиотеки программирования", черная с белым такая.

Или другая какая то?

Название еще скажите, если не сложно.

Спасибо.


 
Игорь Шевченко ©   (2004-07-08 13:36) [68]

Тимохов ©   (08.07.04 13:32)


> Какую книгу кстати Фаулера вы имеете в виду?


Рефакторинг. Улучшение существующего кода.
СПб: Символ-плюс, 2003.


 
КаПиБаРа ©   (2004-07-08 13:38) [69]


> Игорь Шевченко ©   (08.07.04 13:29) [65]
> КаПиБаРа ©   (08.07.04 13:26)
>
> Я боюсь, перечисление займет очень много места :)

Хорошо. Тогда какие шаблоны Вы не применяете ни в коем случае (если есть такие)?


 
Тимохов ©   (2004-07-08 13:39) [70]


> Игорь Шевченко ©   (08.07.04 13:36) [68]

У меня другая вроде...
Вообще Ваши 25 процентов меня завлекли - надо будет внимательнее посмотреть. Есть ощущение, что я Фаулера нсправедливо причислил в группу трепачей от XP (опять же исключительное имхо, если вы не Кент Бек, то можно не возражать:)))) и он может быть чем-то полезным.


 
Mystic ©   (2004-07-08 13:59) [71]

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

Выводы:
1. Рефакторинг снижает могучесть кода
2. Copy + paste дает могучий код
3. Декомпиляция EXE-шника в ASM-source дает код необычайной могучести???


 
olookin ©   (2004-07-08 14:05) [72]

[71] Mystic ©   (08.07.04 13:59)

Могучесть в плане его размера, но не возможностей. Я говорил только про размер.


 
Тимохов ©   (2004-07-08 14:05) [73]


> Mystic ©   (08.07.04 13:59) [71]

я понимаю, что вы шутите - но copy+paste иногда необходимая вешь. Особенно в предверии предстоящего всеоблемющего рефаторинга: начем думать локально, когда по плану будет можно сделать глобально. Т.е. когда понимаешь, что дублируемая сущьность должна быть объединена с другой сущностью, но возможности такой сейчас нет - время...


 
Игорь Шевченко ©   (2004-07-08 14:08) [74]

КаПиБаРа ©   (08.07.04 13:38)


> Тогда какие шаблоны Вы не применяете ни в коем случае (если
> есть такие)?


просто не доводилось применять:
- Замену условного выражения полиморфизмом
- Расщепление временной переменной
- Введение внешнего метода
- Введение локального расширения

крайне редко использую
- дублирование видимых данных

и не применяю все методы, связанные со спецификой Java


 
NailMan ©   (2004-07-08 14:08) [75]

Rouse_ ©

> Я хочу прожить свою жизнь так, чтобы потом не было мучительно
> больно за бесцельно прожитые годы и закончить ее в своей
> постели с шикарной блондинкой от полового истощения :) ©
> (не скажу кто :)

Я бы и с брюнеткой не прочь...  Ж-))

olookin ©
>  Я не считаю строкой кода что то в духе:
>  i:=0;

А что же это такое?

Ассебмлерная
mov ecx,0
тоже не строка кода? Делает фактически тоже самое...в некоторых случаях

---
WBR, NailMan aka 2:5020/3337.13


 
Игорь Шевченко ©   (2004-07-08 14:13) [76]


> но copy+paste иногда необходимая вешь.


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


 
Тимохов ©   (2004-07-08 14:15) [77]


> Игорь Шевченко ©   (08.07.04 14:13) [76]

я вроде объяснил почему :))))
Игорь, ну зачем же так? Явно придираетесь к фразе в отрыве от контекста.

ЗЫ. Буду писать обратной польской нотацией. :-)


 
Danilka ©   (2004-07-08 14:20) [78]

[46] Тимохов ©   (08.07.04 12:53)
> Тогда скажу я - 200 тыс - это нереально :(((

Тут еще один вопрос - что именно считать, считать, например, внешние компоненты или нет. :))
Для примера, наш основной проект - 500т.строк, но если еще посчитать внешние компоненты, то уже 1.3млн. строк. А если еще и VCL посчитать.. :))

Так что, может 1с-ка и уложилась в свои 200т., а остальное - покупное.

И это есть хорошо. :)) Я имею ввиду - такой подход. Не изобретать веловипед, не тратить время на то, уже сделано.


 
Тимохов ©   (2004-07-08 14:22) [79]


> не тратить время на то, уже сделано.

а что-то уже сделано? :))


 
Anatoly Podgoretsky ©   (2004-07-08 14:25) [80]

Игорь Шевченко ©   (08.07.04 14:13) [76]
Китайцы тебя не поймут



Страницы: 1 2 3 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.041 c
1-1089701428
vlad_ri
2004-07-13 10:50
2004.07.25
Пойнтеры


4-1086109696
lena19
2004-06-01 21:08
2004.07.25
перехват скролинга компонента


1-1089284927
Артем
2004-07-08 15:08
2004.07.25
Ресурсы и Webbrowser


1-1089729567
Homyak_Max
2004-07-13 18:39
2004.07.25
Проблемы с потоками


3-1088508416
DSKalugin
2004-06-29 15:26
2004.07.25
Программная Индексация DBase III





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский