The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Samsung планирует в августе выпустить первый смартфон на баз..., opennews (ok), 16-Мрт-13, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


55. "Samsung планирует в августе выпустить первый смартфон на баз..."  –1 +/
Сообщение от croster (ok), 17-Мрт-13, 12:18 
На SDK уже жалуются программисты:
http://eao197.blogspot.ru/2013/02/prog-tizen-20.html
Впрочем, это неудивительно, ведь Samsung больше преуспевает в железе, но неважно пишет ПО.
Вот мой прогноз. Не думаю, что Samsung сможет добиться популярности этой ОС в мировом масштабе, однако на некоторых рынках (в частности, в России), устройства смогут занять существенную долю (10-20%). Ситуация с Bada повтрится.
Ответить | Правка | Наверх | Cообщить модератору

58. "Samsung планирует в августе выпустить первый смартфон на баз..."  +6 +/
Сообщение от Карбофос (ok), 17-Мрт-13, 12:31 
нужно сказать, что в Корее вообще есть программисты, но они делают очень кривой код. у них там ВУЗы вообще сильно ориентированы на электронику.
Работали как-то со "спецами" из Yokogawa. тихий ужас. куча костылей, очень ограниченные возможности софта и пр. ребята там даже никакого представления не имеют о структурах (!!!), везде тупо массивы используются.
были сильно удивлены, спросили, как их там учат, чему.

так что надежда у Samsung только на качественный аутсорсинг.

Ответить | Правка | Наверх | Cообщить модератору

61. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от all_glory_to_the_hypnotoad (ok), 17-Мрт-13, 13:11 
> так что надежда у Samsung только на качественный аутсорсинг.

тут может помочь только sailfish. Просто аутсорсинг у таких же индусов даст такое же г как и сам самсунг сможет сделать.

Ответить | Правка | Наверх | Cообщить модератору

69. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Карбофос (ok), 17-Мрт-13, 13:58 
это да, поэтому и написал про качественный. хотя, у индийцев положение дел немногим получше, но позволить себе обучение там могут далеко немногие. если речь, конечно идёт, о чисто индийских программистах с их же образованием. ;)
Ответить | Правка | Наверх | Cообщить модератору

84. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от all_glory_to_the_hypnotoad (ok), 17-Мрт-13, 15:44 
> Работали как-то со "спецами" из Yokogawa.

это же не корейцы, не?

Ответить | Правка | К родителю #58 | Наверх | Cообщить модератору

87. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Карбофос (ok), 17-Мрт-13, 16:08 
фирма японская, но программеры, с которыми мы работали, были именно из Кореи. я ничего не путаю

вообще были в шоке, контроль версий не ведётся, исходники просто архивируются. никаких svn, git, cvs. про какое-то минимальное расширение программы вообще можно не просить, т.к. оно требует большое количество изменений. многое примитивно, на уровне for(i=0; i<=10; i++). какой-то нереальный хардкор.

Ответить | Правка | Наверх | Cообщить модератору

147. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от slowpoke (?), 19-Мрт-13, 13:55 
>многое примитивно, на уровне for(i=0; i<=10; i++)

что тут примитивного?

Ответить | Правка | Наверх | Cообщить модератору

149. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от lucentcode (ok), 20-Мрт-13, 02:44 
А разве на C можно юзать конструкции отличные от while и for для организации циклов? Нет у C даже такой простой функции, как map для массивов. Можно изобретать велосипеды в виде макросов(аналогичные конструкциям вроде foreach из C++), но зачем так извращатся? Неопытные программисты не понимают сути макросов и впадут в ступор, если увидят код сдобренный макросами. Так что пример с организацией цикла, приведённый вами, вполне уместен.
Ответить | Правка | К родителю #87 | Наверх | Cообщить модератору

150. "Samsung планирует в августе выпустить первый смартфон на баз..."  –1 +/
Сообщение от Led (ok), 20-Мрт-13, 04:42 
> А разве на C можно юзать конструкции отличные от while и for
> для организации циклов?

man хвостовая рекурсия

Ответить | Правка | Наверх | Cообщить модератору

151. "Samsung планирует в августе выпустить первый смартфон на баз..."  –1 +/
Сообщение от lucentcode (ok), 20-Мрт-13, 05:07 
Да я в курсе про хвостовую рекурсию. Вот только она не относится к стандартным языковым конструкциям для организации цикла. Конструкция for часто короче, она понятней новичкам, и при этом более компактна. Иногда хвостовая рекурсия - это однозначное благо. А иногда - дикий оверинжиниринг. Всё зависит от задачи, решаемой с её помощью. Задачу вроде FizzBuzz вы же не будете решать с помощью хвостовой рекурсии? Да и в плане производительности(я на C никогда не писал, не знаю) разве многократный вызов функции выполняется быстрей, чем конструкции вроде while и for? Ведь всё это потом компилируется в машинные инструкции, и(насколько я помню ассемблер x86) для организации циклов используются инструкции безусловный и условных переходов. А они выполняются быстрее, чем многократный вызов одной и той-же функции. Возможно, компилятор как-то оптимизирует код, использующий хвостовую рекурсию, не знаю. Если оптимизаций нет, то лучше применять её только там, где это действительно необходимо.

Ответить | Правка | Наверх | Cообщить модератору

154. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Led (ok), 20-Мрт-13, 16:59 
> Да я в курсе про хвостовую рекурсию. Вот только она не относится
> к стандартным языковым конструкциям для организации цикла. Конструкция for часто короче,
> она понятней новичкам, и при этом более компактна. Иногда хвостовая рекурсия
> - это однозначное благо. А иногда - дикий оверинжиниринг. Всё зависит
> от задачи, решаемой с её помощью. Задачу вроде FizzBuzz вы же
> не будете решать с помощью хвостовой рекурсии? Да и в плане
> производительности(я на C никогда не писал, не знаю) разве многократный вызов
> функции выполняется быстрей, чем конструкции вроде while и for?

Какой "вызов функции"? Она же хвостовая.

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

А ты попробуй, перед тем как рассказывать.

Ответить | Правка | Наверх | Cообщить модератору

155. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от lucentcode (ok), 20-Мрт-13, 22:40 
Рекурсивный вызов функцией себя самой является частным случаем вызова данной функции. Не важно, что она сама себя вызывает, главное что происходит её вызов. При вызове функции начинается игра со стеком на уровне машинных команд. Я писал на ассемблере, и знаю как процедуры выглядят на реально низком уровне. Каждый раз перед исполнением кода процедуры стек сохраняется, а после выполнения вызова процедуры - восстанавливается. Это всё - выполнение лишних машинных инструкций, и трата времени. Вот из-за подобных игр со стеком хвостовая рекурсия всегда будет медленнее, чем обычный цикл. Высокоуровневые программисты просто иногда не помнят о таких деталях, а потом удивляются что ПО теперь такое медленное, а делает то-же что и ПО 20-летней давности...
Ответить | Правка | Наверх | Cообщить модератору

156. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Led (ok), 21-Мрт-13, 03:54 
> Рекурсивный вызов функцией себя самой является частным случаем вызова данной функции. Не
> важно, что она сама себя вызывает, главное что происходит её вызов.
> При вызове функции начинается игра со стеком на уровне машинных команд.
> Я писал на ассемблере, и знаю как процедуры выглядят на реально
> низком уровне. Каждый раз перед исполнением кода процедуры стек сохраняется, а
> после выполнения вызова процедуры - восстанавливается. Это всё - выполнение лишних
> машинных инструкций, и трата времени. Вот из-за подобных игр со стеком
> хвостовая рекурсия всегда будет медленнее, чем обычный цикл.

Садись - "два". Приходи на пересдачу.

Ответить | Правка | Наверх | Cообщить модератору

157. "Samsung планирует в августе выпустить первый смартфон на баз..."  –1 +/
Сообщение от lucentcode (ok), 21-Мрт-13, 21:23 
Настоящая хвостовая рекурсия(такая, как в функциональном программировании) в C/C++ не возможна. Все вызовы вашей функции будут ложиться в стек. Вроде-бы из всех компиляторов один GCC научили оптимизировать выполнение рекурсивной функции. В результате которого подменяются только значения параметров рекурсивной функции, а множественного вызова не происходит. По сути дела компилятор разворачивает вашу хвостовую рекурсию в банальный цикл. Так почему бы вам не делать это ручками, как вышеупомянутые корейцы? Но это не более, чему надувательство со стороны GCC. Нет никакой гарантии, что ваш код будут собирать именно гнутым компилятором. А значит код, быстро работающий у вас, может тормозить(а то и вызывать переполнение стека(кто-ж знает, сколько раз будет сделан вызов вашей функции, так можно и переполнение стека организовать)) у других. Согласитесь, будет некрасиво, если ваша программа начнёт вылетать из-за такой мелочи. Кстати оптимизацию хвостовой рекурсии у GCC можно включать/отключать указывая нужный флаг оптимизации. Кто-то запретит его случайно, собирая в пакетик ваш проект, и всё - вам начнут поступать гневные упреки в багзиллу:)


Да, я не программист вообще. Тем более не программист на C, с которым я никогда не имел дела. Да, я прочитал пару книжек по питону, полторы по PHP, и одну по C++. Иногда пишу небольшие программы для себя, автоматизирую рутинные операции. И тем не менее я знаю о том, что говорю. Может былая страсть к MASM/FASM и ковырянию чужого ПО в OllyDbg сказывается?

Ответить | Правка | Наверх | Cообщить модератору

158. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от iZEN (ok), 21-Мрт-13, 22:12 
>[оверквотинг удален]
> в банальный цикл. Так почему бы вам не делать это ручками,
> как вышеупомянутые корейцы? Но это не более, чему надувательство со стороны
> GCC. Нет никакой гарантии, что ваш код будут собирать именно гнутым
> компилятором. А значит код, быстро работающий у вас, может тормозить(а то
> и вызывать переполнение стека(кто-ж знает, сколько раз будет сделан вызов вашей
> функции, так можно и переполнение стека организовать)) у других. Согласитесь, будет
> некрасиво, если ваша программа начнёт вылетать из-за такой мелочи. Кстати оптимизацию
> хвостовой рекурсии у GCC можно включать/отключать указывая нужный флаг оптимизации. Кто-то
> запретит его случайно, собирая в пакетик ваш проект, и всё -
> вам начнут поступать гневные упреки в багзиллу:)

///---
Хвостовая рекурсия - это способ оптимизации рекурсивных вызовов. За счет того, что рекурсивная функция вызывается в последнюю очередь внутри себя, нет необходимости сохронять информацию в стеке о предыдущем вызове. Даная информация (например локальные переменные) записываются на старое место, за счет этого стек вызова не поглащает очередную порцию памяти. Вызов стоит на последнем месте, а значит после него ничего не последует (кроме возврата значения (если он есть)) и информация о текущем вызове уже не нужна. Так можно избежать переполнения стека. Этот механизм есть к примеру в замечатльном языке Prolog (Visual Prolog)...
---///
http://forum.vingrad.ru/index.php?showtopic=110543

Вот ещё интересная ссылка: http://dchekmarev.ru/blog/article/1310195280

Ещё обсуждение: http://habrahabr.ru/post/111768/

Ответить | Правка | Наверх | Cообщить модератору

160. "Samsung планирует в августе выпустить первый смартфон на баз..."  –1 +/
Сообщение от lucentcode (ok), 25-Мрт-13, 04:42 
Во многих языках вообще нет оптимизации хвостовой рекурсии. А там, где она есть она работает абсолютно так-же, как банальный цикл. На низком уровне. На уровне ассемблера есть инструкции сохранения стека, перехода на адрес нужной функции, возврата из этой функции и т.п. Так вот, на уровне машинных инструкций оптимизация хвостовой рекурсии выливается в исполнение одного и того же кода функции в цикле, без обязательного вызова процедуры сохранения/восстановления стека. Ваш механизм - это разворачивание рекурсивного вызова функции в цикл(по своей сути, если не по форме). Объясните, что мешает вам сразу использовать более очевидное и простое решение(в случае, когда итерации цикла не зависят напрямую от предыдущих результатов кода, помещённого в цикл)? Есть задачи, в которых предпочтительней использование while/for. Есть такие задачи, для которых оптимальна хвостовая рекурсия. А зачастую не важно, как вы реализуете цикл. Главное, что-бы ваш код было легко поддерживать, и он корректно работал.
Ответить | Правка | Наверх | Cообщить модератору

162. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Led (ok), 25-Мрт-13, 07:59 
> Во многих языках вообще нет оптимизации хвостовой рекурсии.

Это к чему было сказано?

> А там, где она
> есть она работает абсолютно так-же, как банальный цикл. На низком уровне.
> На уровне ассемблера есть инструкции сохранения стека, перехода на адрес нужной
> функции, возврата из этой функции и т.п. Так вот, на уровне
> машинных инструкций оптимизация хвостовой рекурсии выливается в исполнение одного и того
> же кода функции в цикле, без обязательного вызова процедуры сохранения/восстановления
> стека.

Цикл в ассеблере (x86) - это инструкция LOOP. Много вы видели, что C'шний цикл транслировался в LOOP? В 99% он транслируется в Jx - банальный условный переход - при чём здесь "цикл"?

> Ваш механизм - это разворачивание рекурсивного вызова функции в цикл(по
> своей сути, если не по форме). Объясните, что мешает вам сразу
> использовать более очевидное и простое решение(в случае, когда итерации цикла не
> зависят напрямую от предыдущих результатов кода, помещённого в цикл)?

От того, что вашему гуманитарному мозгу так кажется, это "решение" не становится "более очевидным и простым":)

> Есть задачи,
> в которых предпочтительней использование while/for.

Всё эти "задачи" почему-то легко и непринуждённо решаются в языках, у которых вообще нет операторов цикла (и goto), т.е. абсолютно нет. Представляете?

Ответить | Правка | К родителю #160 | Наверх | Cообщить модератору

163. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Michael Shigorinemail (ok), 25-Мрт-13, 14:40 
> От того, что вашему гуманитарному мозгу так кажется

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

Ответить | Правка | К родителю #162 | Наверх | Cообщить модератору

164. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от lucentcode (ok), 26-Мрт-13, 02:15 
Мне кажется, вы слишком фанатично читали SICP. И теперь на любом ЯП пытаетесь воспроизвести код на Lisp/Scheme/Haskell. Функциональное программирование -  замечательная вещь. Но когда вы пишете на императивном ЯП - будьте добры использовать стандартные(для данного ЯП) практики(и стиль оформления кода принятый в вашей компании). Когда программисты пишут код сообща, и в команде не все являются продвинутыми гуру, знакомыми с паттернами банды четырёх(или с ФП) - стоит писать как можно более простой и понятный код. Понятный даже студенту, который будет проходить практику в вашей компании. Это признак хорошего тона, что-то вроде этикета в деле написания ПО. Ну а написание комментариев на английском во всех не очень очевидных местах тем более необходимо. Телепатов, я уверен, в вашей конторе не водится. А значит очевидный код + комментарии = тот минимум, который облегчит жизнь вашим коллегам. А значит, и вам тоже.

К вашему сведению, использование конструкции:

метка:
Какой-то код
jmp метка

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

Ответить | Правка | К родителю #162 | Наверх | Cообщить модератору

165. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Led (ok), 28-Мрт-13, 02:59 
> Мне кажется, вы слишком фанатично читали SICP. И теперь на любом ЯП
> пытаетесь воспроизвести код на Lisp/Scheme/Haskell.

Мимо

> Функциональное программирование
> -  замечательная вещь.

Откуда вы знаете?

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

Вот именно - более простой и понятный (но не вам, гуманитариям).

> Понятный даже студенту,

А вот это уж - хрен. Студент должне приспосабливаться, а не кто-то к студенту.

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

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

> Ну а написание комментариев на английском во всех не очень очевидных
> местах тем более необходимо. Телепатов, я уверен, в вашей конторе не
> водится. А значит очевидный код + комментарии = тот минимум, который
> облегчит жизнь вашим коллегам. А значит, и вам тоже.
> К вашему сведению, использование конструкции:
> метка:
>  Какой-то код
> jmp метка
> Это один из вариантов получения цикла, условие выхода из которого(как правило используют
> условный переход) прописывается в теле цикла.

К вашему сведению: использование рекурсии - это один из очевидных вариантов получения цикла. А во что это раскрутит копилятор на конкретной архитектуре - неважно, главное, чтобы это было максимально эффективно для этой конкретной архитектуры. Да, явного рекурсивного CALL там не будет, как и горячо любимых вами for/while, и даже LOOP не будет.

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

Блин, до чего же вы нудный. Вы думаете, что написам много ненужных банальностей, сойдёте за умного?

> Именно на этом строится полиморфизм.

Ага. Спасибо, подняли настроение:)

> Так что со своей специальной инструкцией вы прокололись...

Да, я уже плАчу... со смеху ;)

Ответить | Правка | К родителю #164 | Наверх | Cообщить модератору

161. "Samsung планирует в августе выпустить первый смартфон на баз..."  –1 +/
Сообщение от lucentcode (ok), 25-Мрт-13, 04:46 
Вот вам линк вдогонку о вашей хвостовой рекурсии на низком уровне:

http://en.wikipedia.org/wiki/Tail_call#In_assembler

Почитайте, там всё понятно:) Это и есть операция по разворачиванию хвостовой рекурсии в цикл. Я такой код в отладчике не раз видел. Может и вам пора заинтересоваться low level programming?

Ответить | Правка | Наверх | Cообщить модератору

159. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Led (ok), 22-Мрт-13, 02:09 
> Настоящая хвостовая рекурсия(такая, как в функциональном программировании) в C/C++ не
> возможна. Все вызовы вашей функции будут ложиться в стек. Вроде-бы из
> всех компиляторов один GCC научили оптимизировать выполнение рекурсивной функции. В результате
> которого подменяются только значения параметров рекурсивной функции, а множественного
> вызова не происходит. По сути дела компилятор разворачивает вашу хвостовую рекурсию
> в банальный цикл. Так почему бы вам не делать это ручками,
> как вышеупомянутые корейцы? Но это не более, чему надувательство со стороны
> GCC.

Нет, это логичное поведение. и логичное программирование.

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

В иструкции по сборке будет написано каким компилятором собирать. А для не-читающих-REDME - компилятор, не поддерживающий -foptimize-sibling-calls, отсечётся на этапе configure.

> А значит код, быстро работающий у вас, может тормозить(а то
> и вызывать переполнение стека(кто-ж знает, сколько раз будет сделан вызов вашей
> функции, так можно и переполнение стека организовать)) у других. Согласитесь, будет
> некрасиво, если ваша программа начнёт вылетать из-за такой мелочи.
> Кстати оптимизацию
> хвостовой рекурсии у GCC можно включать/отключать указывая нужный флаг оптимизации.

Я рад, что ты хоть что-то прочитал:)


[сообщение отредактировано модератором]

Ответить | Правка | К родителю #157 | Наверх | Cообщить модератору

152. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от slowpoke (?), 20-Мрт-13, 13:12 
> man хвостовая рекурсия

man stack overflow

Ответить | Правка | К родителю #150 | Наверх | Cообщить модератору

153. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Led (ok), 20-Мрт-13, 16:57 
>> man хвостовая рекурсия
> man stack overflow

Малыш, как ты думаешь: почему она называется "хвостовая"?

Ответить | Правка | Наверх | Cообщить модератору

124. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от уцацквам (?), 17-Мрт-13, 23:20 
> нужно сказать, что в Корее вообще есть программисты, но они делают очень кривой код.

а почему вы решили что у них там корейские программеры?

http://www.samsung.com/ru/aboutsamsung/careers/jobforengenee...

Ответить | Правка | К родителю #58 | Наверх | Cообщить модератору

126. "Samsung планирует в августе выпустить первый смартфон на баз..."  +2 +/
Сообщение от all_glory_to_the_hypnotoad (ok), 18-Мрт-13, 00:16 
к ним нормальные люди работать не идут, западные по крайней мере. Слишком уж сильно всё пронизано азиатским принудительным жополизством. Многие вскоре возвращаются назад проклиная день принятия офера.
Ответить | Правка | Наверх | Cообщить модератору

135. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от Карбофос (ok), 18-Мрт-13, 02:06 
да мы с ними напрямую общались, на инглише
Ответить | Правка | К родителю #124 | Наверх | Cообщить модератору

60. "Samsung планирует в августе выпустить первый смартфон на баз..."  +/
Сообщение от all_glory_to_the_hypnotoad (ok), 17-Мрт-13, 13:09 
самсунг преуспевает только в отдельных компонентах железа, но продукт сделать нормально уже не могут. Этим страдают поголовно все корейцы, что-то у них не так с фантазией и эстетикой.
Ответить | Правка | К родителю #55 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру