LINUX.ORG.RU
ФорумTalks

Мммм... как PowerShell со вкусом Linux

 , , ,


0

4

Так вот, по последним сводкам с фронта, Шмикрософт выпустили PoewrShell Core 6.0 которая теперь идет и под GNU/Linux (и Яблоко счастливыйОС (ц)(р)(тм))

https://betanews.com/2018/01/12/powershell-core-windows-macos-linux/

В тред приглашаются сублиматоры на PowerShell как «намного лучше єтого вашего костыльного Bash» для выяснения отношения с отрядом закапывателей. Дискач.

Ответ на: комментарий от kott

Кеды потихоньку допилят до нормальной работе на Wayland'е.

А вообще, очень хорошо, что KDE-разработчики и GNOME-разработчики орудуют лопатами вместе. Взять те же KDE's Server-Side Decorations, которые были интегрированы в GTK+. Раньше такое было бы невозможным, но Wayland объединил непримиримые лагери.

на нвидии

А вот здесь да, нужен ещё один палец Торвальдса.

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

а может попробуешь изучить, прежде чем ярлыки вешать?

Изучил. Говно полное. Не пригодно ни для чего даже в венде.

Для настройки оффтопика PS вполне годный инструмент.

Ну хоть один жизненный пример покажете уже наконец? :) :) :)

И да, object.property удобнее grep.

Ну так примеры в студию, чего уж проще?

Простейшая задача - показать кто, когда, откуда и с каким результатом пытался залогиниться через remote desktop на вендосервер. Покажите же, как «удобно» это всё делается через ваши сраные object.property и т.п.

ЗЫ: В линуксах всякие упорыши тоже пытаются этот объектный маразм с как-то привелосипедить кривыми костылями. Получается крайне хреново и совершенно неюзабельно. Пример - ubus в openwrt. Теперь, вместо какого-нибудь

 . /tmp/dhcp/wwan0/state
echo $GW
приходится городить
eval `ubus -S call "network.interface.wwan0" status | jsonfilter -e 'GW=@["route"][@.target="0.0.0.0"].nexthop'`
echo $GW
И это ещё самый простенький пример того, наскольно неэффективен и перегружен объектный подход.

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

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

a1batross ★★★★★
()

Я Powershell еще помню с первой версии под Windows, как его пиарили на замену cmd. Пробовал и не понял в чем удобство. Эти командлеты длиной в стопицот букв, которые запомнить невозможно, по сути любая команда, это команда .net. В чем удобство поясните или я не так понял идеи?

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

Даже с арчевским AUR'ом разобрались

Packages in the AUR are community maintained - there is no official support.

Фанатики, сер

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

я думал это отдельный терминал.

Было бы еще больше страданий если так.

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

А вот здесь да, нужен ещё один палец Торвальдса.

Надо бы его по отходу оного замумифицировать, ака «мощи Торвальдса». Потом показывать нерадивым драйверостроителям. Притчи и сказки писать о том как...

А что это я, 21 век на дворе...

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

Изучил. … Не пригодно ни для чего даже в венде.

Значит не изучил.

Простейшая задача - показать кто, когда, откуда и с каким результатом пытался залогиниться через remote desktop на вендосервер. Покажите же, как «удобно» это всё делается через ваши сраные object.property и т.п.

В Job. И не забудь указать, сколько заплатишь.

В линуксах всякие упорыши тоже пытаются этот объектный маразм с как-то привелосипедить кривыми костылями.

Да, только упоротый может работать с объектами интерпретатором, который не умеет в объекты и ругать сам ООП, а не оболочку.
Был бы в openwrt шел с ООП, ты бы написал что-то типа

(ubus -S call "network.interface.wwan0").gw

Ну так примеры в студию, чего уж проще?

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

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

Пробовал и не понял в чем удобство.

Сравнивай не bash и PS, а cmd.exe и PS. Попробуй Windows Server Core настроить в cmd — сразу поймёшь.

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

В оффтопике до PS не было cli вообще. Когда делали интерпретатор, не стали изобретать велосипед.

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

В Job. И не забудь указать, сколько заплатишь.

Ссыкуны. :)

Был бы в openwrt шел с ООП,

А ещё утилиты с ООП, приложения с ООП, демоны с ООП, конфиги с ООП, и юзвери с ООП головного мозга, которым json с xml сразу в нейронную сеть заходит.

ты бы написал что-то типа
(ubus -S call «network.interface.wwan0»).gw

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

NetworkObject = (ubus -S call "network.interface.wwan0")
NetworkObject.gw.output.console.format('IPAddress')
NetworkObject.address.output.console.format('IPAddress')
NetworkObject.interface.output.console.format('String')
NetworkObject.domain_name_servers.dns1.output.console.format('IPAddress')
NetworkObject.domain_name_servers.dns2.output.console.format('IPAddress')

вместо

 . /tmp/dhcp/wwan0/status
echo $GW $ADDRESS $INTERFACE $DNS2 $DNS2

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

Это я ещё не показывал как эту сову на глобус натягивают в этот ООП собственно запихивают выхлоп совершенно не ООПного udhcpc :) :)

Сделайте уже себе ОС с ООП и дрючьтесь там с чем угодно. Ой, такая ОС уже была же, Epoc32 AKA Symbian. Только вот сдохла почему-то...

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

NetworkObject.gw.output.console.format('IPAddress')
echo $GW $ADDRESS $INTERFACE $DNS2 $DNS2

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

совершенно не ООПного udhcpc

Переписать на ООП. Чем тогда будешь крыть?

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

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

А как иначе-то эти какие-то пропертя объектов в человекочитаемом виде вывести в консоль? Объекты же, методы же, наследование с темплейтами и прочая.

А в своей портянке за тебя это кто-то делает. С фига ли?

Мне плевать на всякое там форматирование, я хочу в одной строке увидеть всю нужную информацию в человекочитаемом виде.

Переписать на ООП.

Переписали давным-давно. Не помогло.

Чем тогда будешь крыть?

Крыть уже нечего и незачем. Симбиан сдох.

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

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

NetworkObject = (ubus -S call "network.interface.wwan0")
NetworkObject.gw
NetworkObject.address
NetworkObject.interface
NetworkObject.dns[0]
NetworkObject.dns[1]

ftfy. Да, именно так.

Это я ещё не показывал как…

…ты умеешь из крайности в крайность? Да нет, уже показал.

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

А как иначе-то эти какие-то пропертя объектов в человекочитаемом виде вывести в консоль?

Процедурщика видно издалека. На примере C#. Все классы наследуют от Object метод ToString. Наследники его переопределяют и реализуют конвертацию в строку как им хочется. Так что IP адрес будет правильно отформатирован.

Мне плевать на всякое там форматирование, я хочу в одной строке увидеть всю нужную информацию в человекочитаемом виде.

Провокатор. Почему ты в своём примере ставишь подходы в не равные условия? Если твоя баш лапша выдаёт форматированный вывод, то и в случае объектного подхода NetworkObject.gw должен выдать форматированную строку. Но ты намеренно выставляешь няшный ООП в выгодном для себя свете.

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

Так что IP адрес будет правильно отформатирован.

Бгг. А ты в курсе, что IP адрес может быть представлен как строка далеко не единственным способом?

Почему ты в своём примере ставишь подходы в не равные условия?

Очевидно потому что условия не равные. Ваш К.О.

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

Бгг. А ты в курсе, что IP адрес может быть представлен как строка далеко не единственным способом?

Это неважно. Твой скрипт как то форматирует же, вот так же будет отформатированно и в случае ООП. Но это всё детали реализации. Мы говорим про подход.

Очевидно потому что условия не равные. Ваш К.О.

Я смотрю ты уже окончательно прикинулся ветошью.

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

И где приведение $GW к нужному формату?

А зачем оно, если udhcpc и так выдаёт нужную и понятную человеку строку, а не какой-то абстрактный сраный объект «ИП_адрес»?

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

Твой скрипт как то форматирует же, вот так же будет отформатированно и в случае ООП.

Зачем скрипту что-то форматировать, если источник информации уже выдаёт информацию в человекочитаемом виде?

Мы говорим про подход.

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

Это что, спорт такой, что-ли? Совершение каких-то совершенно бессмысленных и столь же беспощадных действий чисто чтобы это было бессмысленнее и беспощаднее чем у другого такого же упоротого.

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

Затем, что

Так как же будет отформатировано в случае ООП? Шестнадцатеричная запись? Десятично октетами с точкой? Десятичное целое? Кто объекту объяснит в каком виде сейчас понадобился IP?

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

Взять из источника информацию в человекочитаемом и легко обрабатываемом виде

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

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

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

получаем 1.2.3.4

накладваем маску 22

И, внезапно, легко получаем строку 1.2.3.4/22 которая легко скармливается другим программам.

Магия?

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

В случае ООП, как раз, не важно как его тебе на экран нарисует оболочка (как настроишь — так и нарисует), а в переменную, или другому оператору будет передан объект соответствующего типа.

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

накладваем маску 22

Это только если маска в таком виде задана. А если 255.255.255.0? Реквестирую портянку для перевода.

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

И теперь покажи как легко и непринуждённо ты вычленишь из этого маску в формате четырёх десятичных чисел разделённых точкой и отделишь адрес подсети

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

В случае ООП, как раз, не важно как его тебе на экран нарисует оболочка (как настроишь — так и нарисует), а в переменную, или другому оператору будет передан объект соответствующего типа.

Да кому этот объект нужен-то? Абсолютно весь линуксячий софт жрёт те же IP адреса в виде текста. И выдаёт в виде текста.

Для чего это ООП дрочево в шелле системы построенной на принципе «всё есть файл» нужно?

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

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

И теперь покажи как легко и непринуждённо ты вычленишь из этого маску в формате четырёх десятичных чисел разделённых точкой и отделишь адрес подсети

Зачем? Это сделает софтина для которой предназначена эта инфа. А если очень хочется самому посмотреть - то ipcalc например есть.

Не, ну правда - спорт какой-то.

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

Это только если маска в таком виде задана. А если 255.255.255.0? Реквестирую портянку для перевода.

Очевидно 1.2.3.4/255.255.255.0

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

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

Да кому этот объект нужен-то? Абсолютно весь линуксячий софт жрёт те же IP адреса в виде текста. И выдаёт в виде текста.

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

Это сделает софтина для которой предназначена эта инфа

А в случае с ООП придётся тебе преобразовывать? Слив засчитан.

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

Очевидно 1.2.3.4/255.255.255.0

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

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

255.255.255.0 -> 24

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

И теперь покажи как легко и непринуждённо ты вычленишь из этого маску в формате четырёх десятичных чисел разделённых точкой и отделишь адрес подсети

Тут без фреймворка уровня джанги не обойтись.

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

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

Ну да, из-за идиотов с ООП головного мозга, которые пихают ООП туда, где оно вообще никак не всралось, пришлось костылить.

А в случае с ООП придётся тебе преобразовывать? Слив засчитан.

Твой слив, что-ли? Где хоть одна софтина, которой нужно скармливать объекты, а не текст?

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

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

Кто пошлёт? Этот формат старше чем 1.2.3.4/24 и весь софт его прекрасно понимает.

255.255.255.0 -> 24

Но зачем это нужно делать?

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

Ну да, из-за идиотов с ООП головного мозга, которые пихают ООП туда, где оно вообще никак не всралось, пришлось костылить.

Так тебе текст же и отдали, что ноешь? Что они за тебя перестали формировать файл с объявлением переменных для sh, а отдали текст в формате JSON? Так не объект же отдали, бери парсер да разгребай. Тебе даже на grep не надо велосипед изобретать, готовый парсер дали.

Где хоть одна софтина, которой нужно скармливать объекты, а не текст?

В оффтопике. И причём тут «софтина»? Мы об удобстве подхода говорим.

Ты сейчас покажешь, как легко из 172.16.35.12/18, который в конфиге сетевой карты прописан получить для конфига dhcpd подсеть, первый, последний адреса для аренды, широковещательный адрес, и маску в формате [0-255].[0-255].[0-255].[0-255]? Или таки сольёшься?

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

Так тебе текст же и отдали, что ноешь? Что они за тебя перестали формировать файл с объявлением переменных для sh, а отдали текст в формате JSON? Так не объект же отдали, бери парсер да разгребай. Тебе даже на grep не надо велосипед изобретать, готовый парсер дали.

А теперь объясни, нахрена вот это всё? json, парсеры и т.п. Для удобства? Так неудобно же совсем.

В оффтопике. И причём тут «софтина»?

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

Мы об удобстве подхода говорим.

Об удобстве подхода к чему? К накостыливанию объектов туда, где никакой объектностью даже не пахнет?

Ты сейчас покажешь, как легко из 172.16.35.12/18, который в конфиге сетевой карты прописан получить для конфига dhcpd подсеть, первый, последний адреса для аренды, широковещательный адрес, и маску в формате [0-255].[0-255].[0-255].[0-255]? Или таки сольёшься?

ipcalc 172.16.35.12/18

И никаких объектов.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)

PowerShell

Неудобно. Баш меньше крови пьёт.

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

И это ещё самый простенький пример того, наскольно неэффективен и перегружен объектный подход.
неэффективен и перегружен

Потому что его используют не там, где нужно.

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

А теперь объясни, нахрена вот это всё? json, парсеры и т.п. Для удобства? Так неудобно же совсем.

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

В оффтопике тоже никаких объектов на самом деле нету.

А всё это заговор американских спецслужб, чтобы нас в заблуждение ввести.

Об удобстве подхода к чему? К накостыливанию объектов туда, где никакой объектностью даже не пахнет?

Как раз к исключению костылей. Но да, порог вхождения у ООП выше, чем у пайпов.

ipcalc 172.16.35.12/18

И никаких объектов.

Оно даст

Address:	172.16.35.12
Network:	172.16.0.0/18
Netmask:	255.255.192.0 = 18
Broadcast:	172.16.63.255

Address space:	Private Use
Address class:	Class B
HostMin:	172.16.0.1
HostMax:	172.16.63.254
Hosts/Net:	16382
И как мне это в /etc/dhcp/dhcpd.conf пложить? Даже если забыть, что в sh нет ipcalc, ты не решил задачу. Сливаешься?

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

Админу локалхоста неудобно. А тем, у кого много серверов, очень даже наоборот.

Ну у меня много серверов. Неудобно.

А всё это заговор американских спецслужб, чтобы нас в заблуждение ввести.

Да-да, то-то всё сводится к CreateFile. Спецслужбы постарались, не иначе.

И как мне это в /etc/dhcp/dhcpd.conf пложить?

Чо, правда не знаешь?

Даже если забыть, что в sh нет ipcalc, ты не решил задачу.

В sh даже cat и ls нету.

Сливаешься?

Слилось системное ООП в виде дохлого Симбиана.

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

Да-да, то-то всё сводится к CreateFile. Спецслужбы постарались, не иначе.

Или ModifyFile, или DeleteFile, или тем же трём операциям но со множеством файлов. Каждый раз всё делать руками?

Чо, правда не знаешь?

Ты предлагаешь мне руками это переносить? А кто верещал о превосходстве текста над объектами? Даже не надо формирование dhcpd.conf показывать, покажи лёгкое и непринуждённое заполнение необходимых переменных. Или слабо?

Слилось системное ООП в виде дохлого Симбиана.

Да нет, вполне себе успешно живёт в виде Windows10. А вот ты…

В sh даже cat и ls нету.

Это не спасёт тебя от слива. Задачу ты не решил.

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

Или ModifyFile, или DeleteFile, или тем же трём операциям но со множеством файлов. Каждый раз всё делать руками?

Ты даже не понял о чём речь :)

Ты предлагаешь мне руками это переносить? А кто верещал о превосходстве текста над объектами? Даже не надо формирование dhcpd.conf показывать, покажи лёгкое и непринуждённое заполнение необходимых переменных. Или слабо?

Не, ты и правда не знаешь как это делается?

Один из вариантов:

eval `ipcalc -b -n 172.16.35.12/18 | grep '^[[:alpha:]]\+:' | tr ':' '=' | tr -d ' '`
echo $HostMin $HostMax

Ещё есть как минимум 3 способа не сложнее.

Слилось системное ООП в виде дохлого Симбиана.

Да нет, вполне себе успешно живёт в виде Windows10. А вот ты…

Щито?

Это не спасёт тебя от слива. Задачу ты не решил.

Какую ещё задачу? Для ООП дрочеров эта элементарщина аж целую задачу представляет?

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

Fish или Python

Лучше D. Он как Python, только бинарный, и при запуске rdmd создается кеш, который при повторном запуске скрипта отрабатывает очень шустро.

SR_team ★★★★★
()

Чем юзать эти изъепства, уж лучше поднять маленький серверный Linux в виртуалке, и за'SSH'шиться туда с Putty. ИХМО.

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

Ты даже не понял о чём речь :)

Ну так проясни, о великий.

Не, ты и правда не знаешь как это делается?
Один из вариантов:

eval `ipcalc -b -n 172.16.35.12/18 | grep '^[[:alpha:]]\+:' | tr ':' '=' | tr -d ' '`
echo $HostMin $HostMax

Во-первых, ты говорил не ipcalc -b -n 172.16.35.12/18, а ipcalc 172.16.35.12/18.Ты собираешься каждый раз вызывать стороннее приложение с разными параметрами? Тебе и так поблажку сделали, разрешив все расчёты на ipcalc возложить.
Во-вторых, ты утверждаешь, что это удобнее, чем если бы ipcalc объект возвращал?

ip=`ipcalc 172.16.35.12/18`
echo $ip.subnet.host_min $ip.subnet.host_max
В третьих, твой пример не работает
$ eval `ipcalc -b -n 172.16.35.12/18 | grep '^[[:alpha:]]\+:' | tr ':' '=' | tr -d ' '`
$ echo $HostMin $HostMax

$ 

В четвёртых, задачу ты так и не решил: где переменные, которые можно в dhcpd.conf подставить?

Напомню:

Ты сейчас покажешь, как легко из 172.16.35.12/18, который в конфиге сетевой карты прописан получить для конфига dhcpd подсеть, первый, последний адреса для аренды, широковещательный адрес, и маску в формате [0-255].[0-255].[0-255].[0-255]? Или таки сольёшься?

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

Ну так проясни, о великий.

Для доступа к «объектам» ОС и работе с ними в конечном итоге используется CreateFile и WriteFile ReadFile и IoControl. Исключение составляет только гуй.

Ты собираешься каждый раз вызывать стороннее приложение с разными параметрами?

Зачем в скриптах выхлоп с цветом?

Во-вторых, ты утверждаешь, что это удобнее, чем если бы ipcalc объект возвращал?

А в строки преобразовывать кто будет?

В третьих, твой пример не работает

Ты совсем ламер, что-ли? Однострочник который в консоль скормить можно так выглядит:

eval `ipcalc -b -n 172.16.35.12/18 | grep '^[[:alpha:]]\+:' | tr ':' '=' | tr -d ' '` ; echo $HostMin $HostMax

В четвёртых, задачу ты так и не решил: где переменные, которые можно в dhcpd.conf подставить?

А зачем мне решать твои задачи? На выхлоп ipcalc посмотри, ради интереса, узнаешь имена нужных тебе переменных. Твоя ж задача, тебе и решать.

Stanson ★★★★★
()

Парашелл - очередная никчёмная попытка устроить EEE.

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