LINUX.ORG.RU

Вышел первый том книги А. В. Столярова «Программирование: введение в профессию»

 , ,


24

11

На официальном сайте А. В. Столярова объявлено о выходе первого тома книги «Программирование: введение в профессию». Первый том, озаглавленный «Азы программирования», включает две части: «Введение» и «Язык Паскаль и начала программирования». Обе части, как и вся книга в целом, ориентированы на использование ОС Unix (в основном Linux); в предисловии автор, обращаясь к «коллегам-преподавателям», заявляет, что книга вряд ли будет им полезна, если командная строка ОС Unix не станет их основным инструментом для повседневной работы с компьютером.

Электронная версия первого тома (PDF) доступна на сайте в открытом доступе.

Книга «Программирование: введение в профессию» примечательна тем, что средства на её написание и издание были собраны через краудфандинговую кампанию. По словам автора, это был единственный вариант, позволяющий написать книгу и предоставить открытый доступ к её электронной версии. Приём пожертвований на сайте А. В. Столярова продолжается, поскольку средств для издания последующих томов к настоящему моменту недостаточно.

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

>>> Подробности

★★★

Проверено: anonymous_incognito ()
Последнее исправление: CYB3R (всего исправлений: 5)

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

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

А вот его оппонентам, которые высказывают глубокомысленные претензии, но путаются в указателях на функции, следовало бы открыть тот самый пресловутый C99 ISO/IEC 9899:1999 и прочитать его.

Deleted
()
Ответ на: Ну если так хотите от Twissel

И, по правде говоря, не знаю, где Вы там нашли 22.2?

Напишите в гугле «керниган и ритчи скачать» откройте первую ссылку.

Можно скрин?

Я же вам дословно скопипастил то, что написано.

ASM ★★
()
Ответ на: комментарий от Deleted

Это же всё очевидно должно быть для любого программёра на Си.

Ну я скорее дилетант-любитель, чем программист ;-)

Twissel ★★★★★
()
Ответ на: комментарий от Deleted

Как бы ни был плох или хорош преподаватель, об этом несподручно судить человеку, который не осилил основы Си.

Я в целом с вами согласен. Только вот есть одно но: совершенно не обязательно знать Си и представлять все тонкости и нелогичности работы с указателями, чтобы быть программистом. Вполне можно писать на Яве, Питоне, Паскале или Го, представляя себе разницу между передачею по адресу (ссылочная передача) и передачею по значению, копированием по адресу и по значению. Но при этом не нужно разбираться в том берде, который породили стандартизаторы Си вкупе с его авторами. Конечно, если использование Си является неотъемлемою частью ваших служебных обязанностей, тогда таки придётся разобраться. Но в реальности где это сейчас надо кроме ядер ОС, системных утилит и встраиваемых устройств? И сколько людей реально пилят эти вещи?

Vudod ★★★★★
()
Последнее исправление: Vudod (всего исправлений: 1)
Ответ на: комментарий от Croco

Чистый Си жрёт и так (gcc даже предупреждения не выдаёт)

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

ASM ★★
()
Ответ на: комментарий от ASM

Первый раз вижу такой «шедевр».

Неведомая фигня с кривым переводом...

Это Вам на память

И Вы должны все-таки признать, что с контраргументами в отношении Croco несколько поторопились ;-)

Twissel ★★★★★
()
Последнее исправление: Twissel (всего исправлений: 1)
Ответ на: комментарий от ASM

даже с примерами (там указано что писать можно как угодно).

Ссылку можно?

Twissel ★★★★★
()
Ответ на: комментарий от be_nt_all

ну а чем хуже MMIXа?

Не хуже. Я б даже сказал, что MMIX хуже чем это.

Непрактично, да, но на машкодах PDP/VAX действительно можно было писать вручную.

Но зачем?

SZT ★★★★★
()
Ответ на: комментарий от Croco

Да, все правильно.

Приятно было пообщаться.

Ох ты ж... на какой мы уже странице :-D

Twissel ★★★★★
()
Ответ на: комментарий от Twissel

Это наша кафедра радиофизики постаралась. Надо будет у них при встрече спросить, кто и откуда надыбал этот вариант.

Vudod ★★★★★
()
Ответ на: комментарий от Deleted

А кто докажет, что нет ошибки в переводе?

А этот перевод осуществляется в автоматическом режиме некоей программой, написанной на Ocaml. Чтобы доказать отсутствие ошибок(ошибок перевода из одного представления в другое) в ней, нужно ввести некое формальное описание языка (т.е. попросту перевести описание стандарта Си на некий машинночитаемый язык) и потом каким-то образом доказать, что для всех валидных программ на Си будет полностью корректно и с полным сохранением смысла произведено преобразование в язык WhyMl http://why3.lri.fr/#documentation например. Это довольно нетривиальная задача, согласен. Даже в компиляторах порой ловят баги, когда компилятор в ответ на полностью корректный и не-UBшный C код генерирует машинный код, который этому самому С-коду не соответствует, а это очень и очень плохо т.к. на этом могут «жить» какие-нибудь трудноуловимые баги http://blog.regehr.org/archives/1036

https://gcc.gnu.org/bugzilla/buglist.cgi?keywords=wrong-code&list_id=1459...

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от SZT

Фактически, вы предлагаете написать компилятор из некоего абстрактного формального языка в Си на Окамле. ЧТД

Vudod ★★★★★
()
Ответ на: комментарий от Vudod

Фактически, вы предлагаете написать компилятор из некоего абстрактного формального языка в Си на Окамле. ЧТД
ЧТД

Не понял, что там требовалось доказать? Формальная спецификация языка Си не является готовой программой

SZT ★★★★★
()

Разработчик компилятора обязан соблюдать последний стандарт. Скажу так: «Стандарт языка Си 2011 года в массы!»

Зачем вы говорите, что Паскаль мёртв? Только из-за того, что большинство пишет на Джаве?
Тому, кто пишет на Паскале, Паскаль живее живых. И он не знает о существовании Джавы. Вернее он знает, но это где-то там, далеко!

Те, кто говорит, что на Паскале невозможно писать программы «профессионального» уровня — врут. Причём, врут самым наглым образом.

Чё вы все тут умничаете а? На самом деле неважно на каком языке вы пишете. Самое главное, это получать удовольствие от самого процесса программирования!

anonymous
()
Ответ на: комментарий от Twissel

И Вы должны все-таки признать, что с контраргументами в отношении Croco несколько поторопились ;-)

Ну основная цель была доказать, что читать стандарт необходимо. Автор утвердил, что не нужно и сослался на книгу КР (причём не на конкретную, а на абстрактную). Я вам тут целый день вываливал идиотские утверждения, которые я сделал на основе этой книги. Пусть перевода, пусть первого издания (я тупой ученик Croco и следовал его словам).

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

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

Получается, что жизнь ничему не учит? Автор продолжает воспитывать людей, из-за которых в стандарт вносятся всякие безумные вещи, которые расстраивают K&R. Вместо того, чтобы осознать эту ошибку, сказать типо «Хорошо ребята, мы облажались, давайте теперь более серьёзно подходить к вопросу и недвусмысленно описывать/понимать язык». Я считаю, что те люди которые пишут стандарт, это осознали, признали эти ошибки.

Ну и на последок, уж коли решили большинством, что p=f писать проще, то какой смысл усложнять? Т.е. следует признать эту ошибку.

ASM ★★
()
Последнее исправление: ASM (всего исправлений: 2)
Ответ на: комментарий от Deleted

Это же всё очевидно должно быть для любого программёра на Си.

Ну, справедливости ради, взятие адреса от имени массива, формирующее «указатель на массив»-- это не очевидно вообще ни с какого бока. Очевидной была бы неприменимость & к имени массива, ведь имя массива — это адресная константа, а не переменная, какое нафиг взятие адреса. И до первого (мать его) стандарта так и было. Массив как объект не существовал вообще, имя массива было адресной константой, sizeof представлял собой исключение из правил.

А в стандарте придумали, что массив всё-таки есть, просто он чуть менее чем всегда преобразуется к адресу первого элемента, есть три контекста, когда он не преобразуется — sizeof(m), &m и ещё один случай, который я никак не запомню. Вот это вот &m позволяет, например, обезьянкам, не понимающим, что такое указатели и массивы, вызывать read и write, ВСЕГДА (а чо) во втором аргументе используя взятие адреса. Не, ну а чо, работает же.

Croco ★★★
() автор топика
Ответ на: комментарий от ASM

Я вам тут целый день вываливал идиотские утверждения, которые я сделал на основе этой книги.

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

Я считаю, что те люди которые пишут стандарт, это осознали, признали эти ошибки.

Они ничего не признали, они вместо этого наделали новых даже не ошибок (ошибка — это нечто непреднамеренное), а злонамеренных тяжёлых косяков.

Croco ★★★
() автор топика
Ответ на: комментарий от anonymous

Разработчик компилятора обязан соблюдать последний стандарт.

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

К величайшему сожалению, не все это понимают.

Croco ★★★
() автор топика
Ответ на: комментарий от ASM

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

Это если что разные компиляторы Си и Си++

Что касается беды с указателями

Какой беды и где это было сказано, расшифруйте.

Автор продолжает воспитывать людей, из-за которых в стандарт вносятся всякие безумные вещи, которые расстраивают K&R

Спасибо, поржал.

В остальном вот здесь: Вышел первый том книги А. В. Столярова «Программирование: введение в профессию» (комментарий) разжевано Вам все дальше некуда.

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

Короче, примерно как тут: https://www.youtube.com/watch?v=jR3RQwn3UhA

Twissel ★★★★★
()
Ответ на: комментарий от Croco

потому что не умеете читать и не знаете предметной области.

Вы предлагаете вместе разобрать фразу: «Если имя функции входит в выражение не в позиции имени функции, соответствующей обращению к ней, то генерируется указатель на эту функцию.»

Давайте:

  • генерируется — создаётся какой-то объект
  • генерируется указатель — это объект это указатель на функцию

Следовательно, правильно так:

 int f(int x) { ... }
 int (*p)(int);
 p = f;      /* копирование адреса из сгенерированного указателя */
 (*p)(13);   /* разыменование необходимо в явном виде */

не знаете предметной области.

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

ASM ★★
()
Ответ на: комментарий от ASM

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

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

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

Croco ★★★
() автор топика
Ответ на: комментарий от Twissel

Это если что разные компиляторы Си и Си++

Виноват, неведомую (никому кроме как Croco) версию компилятора C и C++ из набора gcc.

Какой беды и где это было сказано, расшифруйте.

Я писал уже: Вышел первый том книги А. В. Столярова «Программирование: введение в профессию» (комментарий) В языке С разрешаемые как хочешь. Croco писал что K&R это сильно расстраивает.

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

Скажите чесно, вы действительно считаете что Croco прав? Что стандарт это помои? Нафига вы меня тогда тыкали в C89? Вам Croco двойку поставит, или вы просто тролль?

ASM ★★
()
Ответ на: комментарий от Deleted

Бить по рукам.

В принципе да, бить по рукам :) Но эту работу за нас может проделать операционка, жахнув SIGSEGV'ом по башке.

Croco ★★★
() автор топика
Ответ на: комментарий от Croco

а теперь знаю. Вы их наглядно продемонстрировали.

По одному единственному выводу который я сделал прочитав абзац из книги? Вы телепат.

Ввожу односторонний мораторий на дальнейшие ответы к вашим комментариям.

Очень жаль. Всего хорошего.

ASM ★★
()
Ответ на: комментарий от SZT

uint8_t (*ars[3])[2] = { n1, n2, n3}; // полная ерунда, нечитаемо. Как этот синтаксис объяснять студентам?

K&R 5.12 Complicated Declarations для кого написана?

typeof(uint8_t (*)[2]) ars4[3] = {n1, n2, n3}; // во, теперь норм!

Нечитаемая лапша с gcc-измом. Садись, два.

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

LamerOk ★★★★★
()
Ответ на: комментарий от Deleted

«Варвары-стандартизаторы» скорее всего пошли по пути «стандартизации существующей практики».

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

LamerOk ★★★★★
()
Ответ на: комментарий от Croco

Ввожу односторонний мораторий на дальнейшие ответы к вашим комментариям.

У нас помимо тем про тестирование, git и стандарты, на повестке дня были философские вопросы, о том какую часть мозга и почему именно необратимо портит себе студент, и какие у вас есть на этот счёт доказательства.

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

ASM ★★
()
Ответ на: комментарий от ASM

Что стандарт это помои?

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

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

Советую Вам сначала написать с десяток программ на Си, а потом рассуждать о стандартах. В противном случае, (как сейчас) в диалоге с Вами мы не имеем ни риторики, ни логики. Одни личные суждения, что основаны на школьном гуглеже.

Примерно, также как с Вашими потугами насчёт О-нотации

Грустно, так, очень грустно...

Twissel ★★★★★
()
Ответ на: комментарий от Vudod

Только вот есть одно но: совершенно не обязательно знать Си и представлять все тонкости и нелогичности работы с указателями, чтобы быть программистом. Вполне можно писать на Яве, Питоне, Паскале или Го, представляя себе разницу между передачею по адресу (ссылочная передача) и передачею по значению, копированием по адресу и по значению.

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

Я, например, неоднократно видел, как объект типа list<string> или что-нибудь подобное передают в функцию по значению. Просто потому что не выработалось защитного рефлекса, который подобные штуки делать не даёт.

Croco ★★★
() автор топика
Ответ на: комментарий от liberte

Паскаль мертв, студентам неинтересно.

Мёртвый язык — это такой, для которого нет ни одной поддерживаемой реализации. Для Паскаля их есть, и не одна.

Полумёртвым можно считать язык, для которого реализации есть, но на них никто не начинает новые проекты. На Free Pascal новые проекты начинают, не поверите. Даже старые переводят с других языков (TorChat; я не уверен, что есть ещё примеры, но тут и одного достаточно).

А студентам программировать на живой платформе всегда интересно, как ни странно. Тут определяющим оказывается Unix, а не язык. Паскаль не интересен тем из студентов, которые уже умеют программировать (неважно на чём), но это далеко не все студенты, даже не половина.

Тратить семестр на непрактичный язык это непозволительная роскошь.

Я бы сказал наоборот: непозволительная роскошь — тратить время на изучение чего бы то ни было только потому, что это что-то используется на практике. Прагматичные инструменты программист всегда может освоить сам; при этом будет даже больше толку, чем от вбивания этого в мозг в ВУЗе, поскольку в ВУЗах среди преподавателей не так много действующих программистов.

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

Croco ★★★
() автор топика
Ответ на: комментарий от Twissel

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

Я уже не раз разжёвывал свою позицию, последний раз тут: Вышел первый том книги А. В. Столярова «Программирование: введение в профессию» (комментарий)

Вы качестве оправдания моей неправоты приводили пример из того-же К&R, «Тоже из K&R 5.11 Указатели на функции», но по всей видимости это была книга другого издания. Даже если это было написано в первом издании текст можно воспринимать как двусмысленность, т.к. смысл в моём абзаце отличается от вашего. Что делают нормальные люди при двусмысленности? Да, лезут в стандарт. А если стандарт не авторитет? Вы получаете то, что случилось на этом форуме, куча бесполезного говна.

ASM ★★
()
Ответ на: комментарий от Twissel

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

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

Примерно, также как с Вашими потугами насчёт О-нотации

С O натациями, между прочим, я признал свою ошибку, я особо не разбираясь в теме сделал выводы, что O(2*N) имеет бОльшую сложность чем O(N), тогда как при оценке константные коэффициенты отбрасываются. Я прочитал про это и больше так не считаю.

ASM ★★
()
Ответ на: комментарий от ASM

Эта позиция к начальному посту, где речь шла об указатель на указатель от функции никакого отношения не имеет. ЧСХ.

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

Тем более, в стандарте не указан явно синтаксис объявления указателей на функции (sic!).

Вот от такой вот «логики» и книжек сомнительного происхождения мы и имеем это дерьмо. Грустно.

Twissel ★★★★★
()
Последнее исправление: Twissel (всего исправлений: 1)
Ответ на: комментарий от Twissel

Тем более, в стандарте не указан явно синтаксис объявления указателей на функции (sic!).

В каком из них? ISO/IEC 9899:1999, параграф 6.7.5.3.

Deleted
()
Ответ на: комментарий от Twissel

Вот от такой вот «логики» и книжек сомнительного происхождения мы и имеем это дерьмо. Грустно.

Ну с тем, что перевод книги, видимо, попался дерьмовенький, я уже согласился очень давно: Вышел первый том книги А. В. Столярова «Программирование: введение в профессию» (комментарий)

Что касается «логики», это ровно та логика которую я и хотел дискредитировать. Высказывания Croco заставляют вести себя именно так. К примеру, стандарт С11 не нужен, пользуйтесь тёплой ламповой ansi. Читайте KR, всё остальное от лукавого.

Ну я это почитал и сделал модель студента: Я студент, скачаю КР (первого издания, т.к. мы любим ламповую версию), чтобы было проще скачаю русскую версию.

Собственно, что и сделал. Croco дал мне наводку, почитай про указатели на функции. Я открыл, увидел откровенную ахинею, сделал на основе неё свои мерзопакостные выводы о том как всё работает и проверил это с помощью gcc (как и советовал Croco), gcc в свою очередь не выдал мне ошибки. Я убедился в своих выводах и посчитал что так оно и есть.

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

ASM ★★
()
Ответ на: комментарий от Twissel

Впрочем, если вы имели ввиду, что прям явно не написано «указатель на функцию объявляется так-то», то да, соглашусь. Не написано.

Deleted
()
Ответ на: комментарий от Deleted

Да пожалуйста: ANSI C ANSI X3J11/88-090 http://flash-gordon.me.uk/ansi.c.txt

Виноват. дело было так: Вышел первый том книги А. В. Столярова «Программирование: введение в профессию» (комментарий)

Я это понял как: «я читаю только КР и опираюсь на свои знания, на ANSI документ не наплевать».

ASM ★★
()
Ответ на: комментарий от ASM

Я студент, скачаю КР (первого издания, т.к. мы любим ламповую версию).

То «издание», что Вы скачали „третье“ вообще-то, и к оригиналу имеет весьма опосредованное отношение, это очень мягко говоря ;-).

Из чего я могу заключить, что Вы либо читали очень невнимательно, либо русский Вам не родной :-D

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

Окститесь, дорогой мой человек, я что-ли за Вас гуглил K&R с Саратовского универа?!

Я лишь сказал, что никаких вложенных указателей там и в помине быть не может.

А Вы их себе нафантазировали и приняли как аргумент для флейма.

Twissel ★★★★★
()
Ответ на: комментарий от Deleted

Впрочем, если вы имели ввиду, что прям явно не написано «указатель на функцию объявляется так-то», то да, соглашусь. Не написано.

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

ASM ★★
()
Ответ на: комментарий от Twissel

Окститесь, дорогой мой человек, я что-ли за Вас гуглил K&R с Саратовского универа?!

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

Считаете ли вы что Croco не прав, когда навязал её? Убедительно ли я доказал, что он её навязявал?

И в конце, считаете ли вы что ни в одном издании K&R нет ни одной двусмысленности, на которую бы гипотетический компилятор в вакууме не выдал бы предупреждений. Если труд K&R настолько идеален, то я пожалуй соглашусь с тем, что не прав. Но только в области языка C.

ASM ★★
()
Ответ на: комментарий от Deleted

Я это уже все видел :-)

Вчера, по случаю, этой перепалки С89 и С99 на этот счет посмотрел.

Заметьте, что суть вопроса и явная некомпетентность ASM по части используемых им аргументов ничуть не изменилась от наличия стандартов ;-)

Twissel ★★★★★
()

лицензия мудацкая. и pdf без оглавления. сделайте нормальное оглавление в pdf.

anonymous
()
Ответ на: комментарий от Croco

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

Gorthauer ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.