Arduino расширенная передача данных(в том числе на Processing)
- Войдите на сайт для отправки комментариев
Начну издалека:
Понадобилось мне как-то считать с ардуино аналоговые данные и отдать их компьютеру на съедение, чтобы тот применил их к углам, которые с градусами. И тут выяснилась страшная вещь: оказалось, что угол сволочь, умеет разворачиваться на 360 градусов.
Затем выяснилась ещё более страшная вещь: ардуино без бубена может передавать только сволочные 256 значений из нужных 1024. А это никак не катит при необходимой точности в пол-градуса.
В общем бубен пришлось всё равно брать, но не просто с ним танцевать, а даже - стесняюсь сказать - заниматься сексом.
Итогом этого разврата стало рождение полноценного ребёнка, которого назвали кристиной, в честь моей реальной дочери.
вопчем встречайте новый человек и пароход... ой, протокол и библиотека: "Кристина" (сделано в России).
Знакомьтесь:
Кристина, это сообщество.
Сообщество, это кристина
https://yadi.sk/d/W2VNiusBo3gc6
Те кто не побежал сломя голову скачивать новую фичу, дослушайте до конца:
Библиотеки писались для среды разработки ардуино(С++) и среды разработки Processing(Java).
По идее библиотека к ардуино, должна работать и для передачи между двумя платами ардуино, через serial-соединение. Так как ардуинка у меня только одна, прошу более состоятельных форумчан, протестировать кристинку на двух ардуинках.
Что касается компьютера, то ардуино(леонардо) с кристинкой, прекрасно отправляет даные, принимает данные и если нужно опять отправляет.
В кратце: функция отправки данных принимает два значения: сами данные от 0, до 9999, и индекс(например номер пина): от 0, до 29 (0-19 это 20пинов и ещё +10 резервных для каких нибудь нужд или сообщений). Данные разбиваются, и передаются в однобайтовом формате.
Функция приёма, декодирует, то бишь собирает этот бардак и обратно превращает в данные и индекс(чтобы знать откуда что прилетело).
Вопчем кто в теме, задавайте вопросы если что не понятно.
вопчем (сделано в России).
нда - развелось чурок, шо тараканов на русской земле.
*allesanbr, что это за бред полоумного лемминга?
И тебе всего наилучшего добрый человек.
;)
А теперь не мог бы ты потестить кристинку?
А теперь не мог бы ты потестить кристинку?
переводи свой первый пост с нароссийского наречия русского языка на язык Чехова и Булгакова.
Вы зря пачкаете ЫнтырнЭты. Либо Вы не на том форуме. Вам нужно что-то лингвистическое, меня же более волнуют вопросы прикладные, нежели проблема: почему Чехов и Булгаков не придумали какой нибудь С++.
Тяжело Вам наверное это осознавать. Но нам ничего, мы не заморачиваемся кодим потихоничку, как сказал бы Булгаков: "примусы ПОЧИНЯЕМ". не поплохело, не? Ну слава богу
Вы хотя бы книжки почитали про С++. Использование глобальных переменных в методе класса это уже нечто, предполагающее, что с предметом Вы не знакомы (наерное было желание память съэкономить). Процитирую исходник:
Отсутствие комментариев, возможно оправдано, однако хотя бы описание класса очень бы пригодилось вспомнить через неделю, зачем нужен класс с именем Christina. Ограничения в 0..29 и 0..9999 удивляют, зачем они в такие странные. Для таких модулей, как правило, очень полезно делать описание протокола обмена, поскольку здесь предполагается, что вторая сторона может быть как персоналкой, так и другой ардуиной. Тестировать? Спасибо, нет желания, увы. Надеюсь в следующий раз получится лучше. Удачи
вообще-то я Вам предложил протестировать библиотеку, а не копать ея код.
для экономии и быстродействия нарушено всё возможное, и невозможное включая правила хорошего тона. Как результат, стабильная работа без delay(), но аналог сам лжёт без этого. а цифру вполне можно юзать.
Ну да ладно...
"они такие странные" по той простой причине... в принципе я написал об этом вначале поста, но так уж и быть, для Вас специально объясню: Мне нужно было получить с ардуино четырёхзначное значение 1024, но так как самое большое четырёхзначное число 9999 то я не стал мелочиться. И эмммм Вы невнимательно изучили код - 9999 это скорее компромисс нежели ограничение. Да и какой смысл получать от ардуино бОльшее значение?
А что касается 0...29, то это да, таки ограничение, во вторых: для экономии памяти, и во первых: мне лень было инициализировать массив на 245 едениц для защиты "от дурака"
пы. сы.
хорошо хоть ты в джаву без декомпилятора не залезешь бе-бе-бе))))) там всё ещё веселее... но она хоть массив красивше передаёт.
и эмммм... насчёт "получится лучше" - я не очень понял, что именно Вас не устроило.
По поводу Глобальных переменных, Вы сами ответили на своё возражение: в ардуино памяти далеко не 640кб, так что это действительно элементарная экономия памяти.
Да собственно это никак не влияет на удобство или неудобство использования протокола, а уж на быстродействие влияет самым благоприятнейшим образом, ибо ненужно заново каждый раз создавать эту тьму.
Так что именно должно лучше получиться то? Поймите правильно, я не уговариваю, просто мне непонятна суть претензии.
Вы считаете моё сообщение претензией? Увольте. Хотел помочь, да видно зря потратил время. Извините, ошибся.
в представленной мной библиотеке что-то не работает?
чем помочь то?
очень жаль, что кроме флудеров, здесь никого нет... это даже хуже чем притча про американский, бразильский, и русский форум.
Напоминаю: Хотелось бы выяснить работоспособность протокола и библиотеки между двумя платами ардуино. И меня вовсе не интересует кто и как мастурбирует на написание моего кода.
Пишите пожалуйста по теме.
Хочу попробовать к своему проекту, объясните что к чему в скетче примера, где назначение считывающего пина, а где пишушего.
Пин не может быть не считывающим, ни пишущим. Пин может иметь данные(data) и иметь номер который Вы ему присвоили в кристине - это index.
Аналоговый Пин получает данные с датчика от 0 до 1023 (или 4095) Но любому пину Вы присваиваете индекс сами, в методе Christina.Send(data, индекс) по этому индексу Вы отлавливаете данные data(например data = analogRead(PIN_A0) то бишь данные с данного пина - отлавливаете на другом конце com-соединения, с помощью(опускаем обязательное christina.Get();) чтения указателей на массив ln = christina.block();
arr[0] = *(ln+0);
arr[1] = *(ln+1);
нужно понимать, что на этот раз данные не в нулевом, а в первом элементе массива, а в первом индекс, то есть номер датчика от 0 до 29 который Вы ему присвоили при отправке.
Какие именно строки примера Вас интересуют?
и да, Вы пытаетесь передать/прочитать данные с ардуино на компьютер, иди же с ардуино на ардуино?
Как я говорил выше с компьютером всё ок. а вот с двумя ардуинами не тестил, хотя теоретически должно работать, но нужно проверить
allesanbr, попрошу без оскорблений и непристойностей. Да-да, естественное не безобразно, но всё же.
я конечно дико извиняюсь, но некий "Клапауций 322" вообще обозвал меня чуркой, что квалифицируется статьёй №282 УК РФ. В то время как я стараюсь не выходить за рамки уголовного кодекса.
Многообещаюшее название темы, а суть та же - раскрашиваем новыми цветами старый паровоз. Та же Леонардо ведь обладает гигантскими возможностями в области передачи данных. Заглянем в даташит:
USB 2.0 Full-speed/Low Speed Device Module with Interrupt on Transfer Completion
– Complies fully with Universal Serial Bus Specification Rev 2.0
– Supports data transfer rates up to 12Mbit/s and 1.5Mbit/s
– Endpoint 0 for Control Transfers: up to 64-bytes
– Six Programmable Endpoints with IN or Out Directions and with Bulk, Interrupt or
Isochronous Transfers
– Configurable Endpoints size up to 256 bytes in double bank mode
– Fully independent 832 bytes USB DPRAM for endpoint memory allocation
– Suspend/Resume Interrupts
– CPU Reset possible on USB Bus Reset detection
– 48MHz from PLL for Full-speed Bus Operation
– USB Bus Connection/Disconnection on Microcontroller Request
– Crystal-less operation for Low Speed mode
Эти возможности где нибудь используются? Пропихивать по USB2.0 по одному байту через эмуляцию ком-порта - ну не серьёзно уже.
в представленной мной библиотеке что-то не работает?
чем помочь то?
Этот говнокод Вы называет библиотекой?
Ви будете смияццо, но это целых ДВЕ библиотеки, плюс один протокол.
И как бы ви не блевали - оно таки работает.
Так что заканчивайте корчить здесь ламера, и пожуйте салфетку.
--->>Эти возможности где нибудь используются? Пропихивать по USB2.0 по одному байту через эмуляцию ком-порта - ну не серьёзно уже.
Перечитываем топик:
требуется получить с аналового пина ардуино, и отправить на другое устройство информацию о положении некоего объекта в градусах.
необходимая минимальная точность: 0.5 градуса. Таких датчиков требуется минимум 6
Предлагайте варианты более быстрого, более эффективного, и более точного решения этой задачи. С использованием того, что Вы перечислили. Желательно с примером кода.
Присоединяясь к утверждению о говнокоде. Очередной лисапед, кривой написанный и не делающий ничего особенного. Защита типа "Ну я хоть что-то как-то сделал, а вы и этого не можете" не принимается. Во-первых, можем, а во-вторых, если делать - то хорошо, а не абы как.
Перечитываем топик:
требуется получить с аналового пина ардуино, и отправить на другое устройство информацию о положении некоего объекта в градусах.
необходимая минимальная точность: 0.5 градуса. Таких датчиков требуется минимум 6
Предлагайте варианты более быстрого, более эффективного, и более точного решения этой задачи. С использованием того, что Вы перечислили. Желательно с примером кода.
Что касается защиты, то: ЭТО работает - просто, быстро, надёжно. Если Вы предложите более эффективный вариант, я раскаюсь в изобретении очередного велосипеда.
Ви будете смияццо, но это целых ДВЕ библиотеки, плюс один протокол.
И как бы ви не блевали - оно таки работает.
Так что заканчивайте корчить здесь ламера, и пожуйте салфетку.
Два высера вместо одного, это круто.
На счёт заканчивать, я извинился, а ты нахамил. Начни с себя.
Вот, я же говорил) "человек хоть как-то сделал, а мы, злые, тупые и нехорошие гасим его творческий потенциал.
Насчёт "злые" не заметил, а вот по поводу остального...
...эммм альтернативный не говоря уже - более эффективный - вариант решения задачи никто из критиков мне так и не представил. Впрочем (с)"Заметьте! не я это предложил"... по поводу остального.
Это лучший комплимент. Всем спасибо! Все свободны))))))
Посему получается: не "как-то сделал", а готовый к использованию протокол: "бери пользуйся". Так что подумайте хорошенько над словом "говнокод".
Вы можете называть это высером, говнокодом, и прочими словами работать оно не перестанет, а лучшего Вы не предложили. Делайте выводы...
фу-у-у... даже мне за Вас стыдно.
Но мы отвлеклись от темы. Я таки не проверил, работает ли это между двумя платами ардуино?
Если на ПК всё равно собирать в кучу и проводить какие-то действия, то легче отправить два байта сырых данных.
так оно и происходит, под (IDE)процессинг для компьютера также реализована эта библиотека(на Java). Кристинка максимально унифицирована как для плат ардуино, так и для компьютера.
Вы можете называть это высером, говнокодом, и прочими словами работать оно не перестанет, а лучшего Вы не предложили. Делайте выводы...
фу-у-у... даже мне за Вас стыдно.
Но мы отвлеклись от темы. Я таки не проверил, работает ли это между двумя платами ардуино?
О, ты предлагает мне сделать код лучше чем этот? Тогда почему ты меня гонишь и постоянно пытается оскорбить? Чего то боишься? Сначала называет ламером, а потом что то ждёшь от меня, ламера? Вот только у меня так не получится, как у тебя, потому не буду отбирать у тебя твой хлеб.
Мы не отвлекались от темы, это ты отвлекся. Продолжай дальше.
ИМХО, критика была обоснованной.
allesanbr,
Вы пожалуйста определитесь что именно Вы сделали, а то в показания путаетесь.
В одном месте Вы пишете:
требуется получить с аналового пина ардуино, и отправить на другое устройство информацию о положении некоего объекта в градусах. необходимая минимальная точность: 0.5 градуса. Таких датчиков требуется минимум 6
А в другом:
готовый к использованию протокол: "бери пользуйся".
Так всё-таки, что Вы сделали? Решили конкретную задачу про шесть датчиков? Или сделали универсальный протокол? Если конкретную задачу, то молодец, поздравляю, но причём здесь "бери и польуйся"? А если мне семь датчиков нужно? Если же это универсальный протокол, так его и обсуждайте, чего Вы везде свои шесть датчиков пихаете?
Я таки не проверил, работает ли это между двумя платами ардуино?
Опять же, если это решение конкретной задачи, то пофиг, а если универсальный протокол - так напрасно не проверив вывалили в публичное обсуждение.
Так что подумайте хорошенько над словом "говнокод".
А чего тут думать, Вы сами-то свой код видели? Если Вы не знаете значения этого слова, так знайте - вот это оно самое и есть.
Однако, я склонен поздравить Вас с решение Вашей задачи с шестью датчиками. Молодец! Судя по коду, программировать Вы не умеете, а задачу теме не менее решили. Поздравляю!
--->>>Решили конкретную задачу про шесть датчиков? Или сделали универсальный протокол?
Решил конкретную задачу, написав универсальный протокол и библиотеку для его реализации причём на двух языках... а так-то да-а программировать не умею.
Про датчики: Датчиков шесть, индексов тридцать, пинов у ардуино двадцать... Улавливаете мысль?
"так тебя растак! это я то не умею программировать?! да я..." Именно это Вы хотите от меня услышать? Лет пятнадцать назад, я бы отреагировал наверное так, но теперь мне просто интересно: что конкретно Вам не нравится в моём коде, и как это отражается на алгоритме выполнения программы?
Подозреваю, что Вы реально не видели ужасной реализации алгоритмов(именно это я называю "говнокод"), но у Вас всё впереди мой друг(?)... Вы увидите и просто ужасные алгоритмы, и идеальные алгоритмы применённые совсем не там где они показали бы свою истинную эффективность...
И да! Спасибо за поздравления!
IMHO не вижу никакой критики.
ПОЦиентам что-то не нравится, а что именно они стесняются сказать.
я конечно дико извиняюсь, но некий "Клапауций 322" вообще обозвал меня чуркой, что квалифицируется статьёй №282 УК РФ. В то время как я стараюсь не выходить за рамки уголовного кодекса.
предъяви свою статью некому В.В.Путину - он обозвал половину граждан Украины новороссами.
так, что, руский чурка, засунь свой УК РФ себе в задницу - я ему(УК РФ) не подчиняюсь, т.к. не являюсь гражданином РФ и не нахожусь на территории РФ.
если ты считаешь, что твои права как недогражданина РФ были ущемлены гражданином другой страны, то напиши в СПОРТЛОТО.
Про датчики: Датчиков шесть, индексов тридцать, пинов у ардуино двадцать... Улавливаете мысль?
Подозреваю, что Вы реально не видели ужасной реализации алгоритмов
но теперь мне просто интересно: что конкретно Вам не нравится в моём коде
а ещё я скобочки ставлю под- а не сразу после объявления функции. И - о ужас! - загоняю их табом по самое небалУйся.
)))
Детки, мне абсолютно параллельно ваше опрокидывание на пол и дрыгание ногами. А вот то, что я (по крайней мере в этой ветке) не увидел ни одного коммента по теме, да и вообще не увидел ничего кроме оффтопа, характеризует данное сообщество... мягко говоря не с самой лучшей стороны.
Я конечно понимаю, что гормоны и всё такое... Но уважаемые господа, вам стОит задуматься о том, чтобы прекратить делать из форума помойку.
Нет, я вовсе не против критики, но я за конструктивную критику, между тем, конструктивная критика таки прозвучала, и честно ждал, пока кто-то из возомнивших себя свех-тонким троллем и тру-программером зацепится за это, и беседа пойдёт веселее.
Но нет, Вы не уважаете не только своих врагов, но и своих союзников, посему господа, мне вас очень жаль.
Теперь о конструктивной критике.
Итак:
уважаемый __Alexander, сказал о том, что проще "отправить ДВА байта сырых данных", Но у меня отправляется пять байт. Но он косвенно прав, ибо можно реализовать этот же протокол немного по другому принципу, то есть отправлять не пять байт, а три. Хотя и не два как предлагал __Alexander, но замечание его считаю справедливым, не смотря на то, что он по видимому не вникал в код.
Хотя пока-что не существует необходимости в (почти)два раза ускорить передачу данных, но если вдруг она возникнет, и её(скорость) будет невозможно увеличить количеством бод - то буду иметь ввиду эту возможность.
Ну что ж, теперь совершенно ясно к кому обращаться за быстрым, оптимальным кодом.
Пациент безнадежен.
Продолжай в том же духе, гений.
А вот то, что я (по крайней мере в этой ветке) не увидел ни одного коммента по теме,
Мальчик, если для тебя использование глобальных переменных в методе класса равносильно скобочкам и ты не считаешь это конструктивной критикой, то, ... что ж, тебе жить, всего наилучшего, программируй дальше. Только не удивляйся. что слово "говнокод" станет синоним твоих нетленок.
Что же до нас сирых и убогих - не понимающих твоего высокого полёта, обрати внимание, это не мы пришли к тебе с просьбой осчастливить нас твоим гениальным творением, а ты пришёл к нам, чтобы выслушать похвалы о ощутить поглаживание по головке. А когда услышал мнение, которое тебе не понравилось, надул губки и обиделся. Ну, ничего, поплачь, полегчает.
Удачи во всём!
P.S. Кстати, а почему нет ответа на мой вопрос "Какую именно мысль я должен уловить?". Я дейсивтельно не понял, что там за мысль, мне интересно. Трудно ответить?
--->>>использование глобальных переменных в методе класса
К каким же ужасным последствиям приводит столь страшный грех?
И да, ещё я юзаю goto, и не считаю это дурным тоном. Может расскажешь "мальчику" как это не хорошо?
А коммента по теме таки да, я не увидел. Ну нет его. Отсутствует как класс.
Видимо сюда слетелись гуры недоделанные. Способные лишь учить новичков как моргать диодами с помощью ардуино.
Если это была попытка троллинга, то лично для меня это слишком толсто. Никто из критиков, не привёл ни одного аргумента своей правоты. Неспособность отстоять свою точку зрения есть высшее проявление лузерства.
Может кто нибудь ещё попытается?
Мне просто интересно: присутствует ли на этом форуме хоть один адекватный человек?
И ....эмммм кто из вас придумал не использовать глобальные переменные в методе класса?
Стесняюсь спросить: где же их использовать?
)))))))))))
Мне просто интересно: присутствует ли на этом форуме хоть один адекватный человек?
ты единственный.
все отсальные - неадекватные русофобы, фашисты, нацисты, массоны, рептилоиды, хипстеры, атеисты и программисты.
все отсальные - неадекватные русофобы, фашисты, нацисты, массоны, рептилоиды, хипстеры, атеисты и программисты.
Слово "программисты" здесь лишнее. Ибо употребление слова "говнокод" никого ещё не сделало программистом. А употребление этого слова, да ещё и без приведения доводов - обнаруживает явного ламера.
Так что с "программистами" Вы погорячились.
))))))
Слово "программисты" здесь лишнее.
ок. утверждение, что ты здесь единственный-нормальный - тебя не удивило.
Меня "удивило" отсутствие прикладной оценки моего - как здесь принято говорить - говнокода.
хотя... я упоминал здесь уже про тот боянистый анекдот:
Так что итог был немного предсказуем. Но я - будучи оптимистом - ищу в людях лучшее. Но к сожалению, получается это далеко не всегда.
--->>>использование глобальных переменных в методе класса
К каким же ужасным последствиям приводит столь страшный грех?
Да, ни к каким.
А к каким страшным последствиям приводит использование желто-зелёного провода для подключения фазы в электропроводке? Тоже ни к каким, если правильно соединено. Однако, если видишь, что фаза идёт по жёлто-зелёному, сразу понимаешь, что проводку делал безграмотный чайник. Почему? Да просто потому, что профессионалы так не делают.
Однако, для тебя это не аргумент, я понимаю, ты просто не знаешь кто такие профессионалы и понятия не имеешь, как они делают.
Да, и ещё, ты тут плачешь, что по сути никто с тобой не говорит. Так я уже в третий раз повторяю свой вопрос:
Про датчики: Датчиков шесть, индексов тридцать, пинов у ардуино двадцать... Улавливаете мысль?
Ответ по сути будет или опять одно хамство?
уважаемый __Alexander, сказал о том, что проще "отправить ДВА байта сырых данных", Но у меня отправляется пять байт. Но он косвенно прав, ибо можно реализовать этот же протокол немного по другому принципу, то есть отправлять не пять байт, а три. Хотя и не два как предлагал __Alexander, но замечание его считаю справедливым, не смотря на то, что он по видимому не вникал в код.
1. Про два байта это ответ на ваши "сволочные 256 байт" вместо 1023.
2. У вас обычная функция на пару десятков строк (это даже не бибилиотека), где вы разложили число на десятки/единицы/сотни и отправили по уапп. Куда тут вникать? Такие функции пишутся любым программистом около сотни за рабочий день. Тут нечего критиковать, вам нужна эта функция - пользуйтесь, остальные себе такое сами напишут.
2. У вас обычная функция на пару десятков строк (это даже не бибилиотека), где вы разложили число на десятки/единицы/сотни и отправили по уапп. Куда тут вникать? Такие функции пишутся любым программистом около сотни за рабочий день. Тут нечего критиковать, вам нужна эта функция - пользуйтесь, остальные себе такое сами напишут.
---->>>вы разложили число на десятки/единицы/сотни и отправили...
То есть на другом конце нужно написать фукцию которая соберёт всё это обратно. А это уже: протокол. То есть соглашение, а точнее согласование - приём/передача.
Простой как молоток, но тем не менее протокол.
--->>>остальные себе такое сами напишут
Вот чтобы не приходилось себе писать, для того и написано, кроме того, библиотека реализована и на Java под процессинг, что новичку в программировании возможно написать, только при огромнейшей трудоспособности и таланте к изучению языков программирования. А что ему делать если у него гениальная идея по механике и выведению данных в тот же компьютер? Учить джаву?
Первоначально я хотел реализовать свой проект на платформе MIPSfpga. Благо подсказали что есть такой контроллер как "ардуино" который стОит далеко не пятнадцать тысяч рублей, при этом имеет в наличии весь необходимый минимум ресурсов и способностей.
В моём проекте, контроллеру отведена роль регистратора с гирлянды датчиков, и отправка их на серьёзную машину для последующей обработки. Отсюда принцип: "данные, индекс". То есть номер датчика(индекс), и полученное с него значение(данные). Есть конечно библиотека firmata, но мне она показалась очень ресурсоёмкой. Поэтому я и написал то, что написал.
Для создания сети удобно использовать Multi-processor Communication Mode. Удобная штука.
Для создания сети удобно использовать Multi-processor Communication Mode. Удобная штука.
Принцип тот же, только на более низком уровне. Multi-processor Communication Mode адресует платы, кристинка "адресует" датчики - то бишь пины.
Господи, какая гнусь и говнокод! И "это" ещё называют библиотекой, ахахах. Ничего, самомнение с возрастом проходит ;)
Господи, какая гнусь и говнокод! И "это" ещё называют библиотекой, ахахах. Ничего, самомнение с возрастом проходит ;)
С возрастом проходит - срать оффтопом.
А можно поинтересоваться чем Вы компилируете "import"- библиотеки под Processing?
Ну почему же оффтоп? Совсем даже в тему. Вы чего хотели то? Чтобы вам тут все сразу поклонялись и возвели вашу "библиотеку" в ранг бесценного дара от почитаемого гуру? Так не будет этого, по трём, хотя бы причинам:
1. Говнокод, непортабельный, нереентерабельный, голимый говнокод.
2. Тривиальщина. Подобные задачи решаются ровно за 5 минут, без написания каких-либо "библиотек". Причём решаются без тупых ограничений типа 9999 и 0..29, потому как для нормального программиста всякие там magic numbers - моветон по определению.
3. Вам уже не раз указали на то, чем является ваша "библиотека" - отнеситесь критически, и учитесь, учитесь, учитесь. Опыт, он - сын ошибок трудных, внук говнокода, и правнук - огромного новичкового самомнения. Так что - плите Шура, пилите, они золотые!
С процессингом, к слову, не работаю, но не вижу вообще никаких проблем передать по UART число хоть в виде байт, хоть в виде строки. Как передать - так и получить в нужном виде, без безмозглых камланий и плясок в приседе с бырявым бубном. ну тривиальщина же-ж!
Экскьюз ми мой французский - на самом деле я добрый :)
allesanbr,
может всё-таки ответишь на мой вопрос (см. пост №42 и ещё штуки три выше), или ты только хамить всем умеешь, а по делу поговорить - язык в одно место утягивает?