Re[20]: Об эффективности - с другой стороны
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.11.05 19:06
Оценка:
Здравствуйте, vdimas, Вы писали:

Д>>я не выкладывал на свой сайт детальной информации о проекте, поэтому смотреть там не на что.

Д>>да и выкладывать сейчас нечего — куча бессистемных заметок, да непригодный пока к применению генератор парсеров
Д>>надо будет собраться да написать подробное описание планов на данный момент, когда руки дойдут

V>если на дотнете — пиши в приват, с лексерами помогу


Что-то модно это сейчас стало, DSL-ями заниматься И Фаулер туда же: http://martinfowler.com/articles.html#id2251334

V>в общем, есть потребность в разработке своих DSL, но нужен инструмент, которым легко ворочать


Ruby (Re[2]: Metaprogramming et al: Ruby?
Автор: eao197
Дата: 18.10.05
, [Ruby,C++] RuCodeGen -- простой фреймворк для кодогенерации
Автор: eao197
Дата: 16.11.05
),
Smalltalk (Re[3]: Metaprogramming et al: Ruby?
Автор: Andrei N.Sobchuck
Дата: 18.10.05
),
Lisp (Metaprogramming et al
Автор:
Дата: 09.07.05
, Lisp
Автор: fionbio
Дата: 12.07.05
)
?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[21]: Об эффективности - с другой стороны
От: vdimas Россия  
Дата: 26.11.05 19:42
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, vdimas, Вы писали:


Д>>>я не выкладывал на свой сайт детальной информации о проекте, поэтому смотреть там не на что.

Д>>>да и выкладывать сейчас нечего — куча бессистемных заметок, да непригодный пока к применению генератор парсеров
Д>>>надо будет собраться да написать подробное описание планов на данный момент, когда руки дойдут

V>>если на дотнете — пиши в приват, с лексерами помогу


E>Что-то модно это сейчас стало, DSL-ями заниматься И Фаулер туда же: http://martinfowler.com/articles.html#id2251334


V>>в общем, есть потребность в разработке своих DSL, но нужен инструмент, которым легко ворочать


E>Ruby (Re[2]: Metaprogramming et al: Ruby?
Автор: eao197
Дата: 18.10.05
, [Ruby,C++] RuCodeGen -- простой фреймворк для кодогенерации
Автор: eao197
Дата: 16.11.05
),

E>Smalltalk (Re[3]: Metaprogramming et al: Ruby?
Автор: Andrei N.Sobchuck
Дата: 18.10.05
),

E>Lisp (Metaprogramming et al
Автор:
Дата: 09.07.05
, Lisp
Автор: fionbio
Дата: 12.07.05
)

E>?

С лисп и смолтолк знаком слегда, но это все не то. Rubby тоже выглядит немного "специальным" языком. Хочется иметь нечто вроде C#, но добавлять операторы языка или нечто вроде глобальных ф-ий (которые таковыми являться не будут).

С другой стороны иметь возможность некоторые конструкции убирать. Т.е. иметь возможность разработать прикладной язык, где нельзя шагнуть вправо/влево. Например, на определенном прикладном уровне вообще вычленить из языка константу null, чтобы не иметь возможности ее создавать/обрабатывать
Re[19]: Об эффективности - с другой стороны
От: vdimas Россия  
Дата: 26.11.05 19:45
Оценка: +1
Здравствуйте, Дарней, Вы писали:

Д>в общем, пора завязывать с "низким" и "высоким" уровнем. Очень уж эти понятия зависят от выбора точки отсчета


Я говорил о стремлении одних понимать суть вещей, которыми они оперируют, в отличие от тех, кто удовлетворяется внешними API. Это стремление не зависит от точки отсчета.
Re[2]: Всего пара слов: деньги решают все (+)
От: c-smile Канада http://terrainformatica.com
Дата: 26.11.05 21:15
Оценка:
Здравствуйте, gwg-605, Вы писали:

G6>необходимое железо + стоимость разработки + стоимость поддержки = затраты. Минимум затрат большая прибыль.



"Минимум затрат большая прибыль."

БОльшая, но не большАя.

Идея я думаю очевидна. Т.е. уравнение не полное.
Re[20]: Об эффективности - с другой стороны
От: Дарней Россия  
Дата: 27.11.05 07:13
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Я говорил о стремлении одних понимать суть вещей, которыми они оперируют, в отличие от тех, кто удовлетворяется внешними API. Это стремление не зависит от точки отсчета.


вот с этого и надо было начинать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[20]: Об эффективности - с другой стороны
От: Дарней Россия  
Дата: 27.11.05 07:13
Оценка:
Здравствуйте, vdimas, Вы писали:

V>если на дотнете — пиши в приват, с лексерами помогу


а что, есть какие-то наработки? В принципе, особой необходимости у меня нет, но познакомиться с другими вариантами всегда интересно

V>в общем, есть потребность в разработке своих DSL, но нужен инструмент, которым легко ворочать


вот и я про это же думаю. Только нужен генератор парсеров, который будет решать неоднозначности грамматик по возможности самостоятельно, чтобы максимально упростить разработку грамматик. Вот и пришлось за это дело взяться.
Не знаю правда, насколько правильным с идеологической точки зрения будет мое "деревенское" решение . Но для меня главное — чтобы выполняло свою задачу
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[21]: Об эффективности - с другой стороны
От: Дарней Россия  
Дата: 27.11.05 07:13
Оценка:
Здравствуйте, eao197, Вы писали:

E>Что-то модно это сейчас стало, DSL-ями заниматься И Фаулер туда же: http://martinfowler.com/articles.html#id2251334


вероятно, необходимость назрела
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[12]: Об эффективности - с другой стороны
От: GlebZ Россия  
Дата: 27.11.05 19:48
Оценка: 26 (1)
Здравствуйте, vdimas, Вы писали:

GZ>>Так уж это важно? Ну не клеются регуляры в классический конечный автомат с третьим подклассом грамматики Хомского. Значит это не подходит под термин теории. Зато то что на практике регуляры умеют больше. И в практике существует точно такой-же термин "регулярное выражение", который может обрабатывать скобки. Это ведь не важно. Важно что он интересуется, расширяет свой кругозор, а это более важно.


V>Ты не так понял. Меня ничуть не смутило, и не удивило, что он как-то по другому считал ДО этого. Меня проразил факт упорства и само трудное восприятие тех вещей, которые он должен был воспринимать как повторение пройденного (я прекрасно знаю кафедру, с которой описываемый чел вышел). Я упомянул про лоботомию именно в этом смысле — невозможность переосмыслить собственные знания.

Для этого человека было важно подтвердить свои знания(которых возможно не было). В условиях стресса. Я вполне допускаю что он пытался действовать догадками, и доказывать их. У меня на экзаменах такое прокатывало не раз.
V>На собеседовании молодых преттендентов практически бесполезно проверять накопленный багаж, интересней посмотреть на способность рассуждать, обобщать, отделять значимое от второстепенного (пусть даже он где-то будет совсем не прав,интересна сама способность к рассуждениям и принятиям решений).
+1

V>Для меня лично тот факт, что вчерашний студент изучил эти перловые регулярные выражения — ни плюс и не минус, а абсолютно ничего... Не показатель в общем, ибо это знания прикладного характера. И у него еще нет их некоей критической массы, чтобы можно было хоть как-то пытаться их проверять.

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

V>Почему именно так? Вот пример на те же регулярные выражения (надуманный... только что)

V>Пусть у нас есть задача создать некий динамический лексер. Т.е. в некоем виде в "одно место" поступают правила для текущего разбора (пусть в удобно закодированной форме), а в "другое место" — входные цепочки для того самого разбора. Предположим, я предложу решить подобную задачу преттенденту и попрошу обосновать решение. Независимо от того, как он решит задачу, без обоснования решения и сравнения различных путей решения, его собственное будет стоить 0 целых 0 десятых.
V>В данном случае очевидны 2 решения (на основе имеющихся технологий):
V>- динамически строить "перловые" регулярные выражения
V>- динамически строить конечный автомат самому (или с помощью некоей известной либы)
Для этого нужно знать эту известную либу. Я например, в последнее время не пользовался ни одной либой которые бы строили конечный автомат. Максимум — COCO/R в котором автомат с магазинной памятью. А он конечным автоматом не является с одной стороны, но может функционально может его заменить.

V>В зависимости от различных входных условий может оказаться следующее:

V>- построить автомат самому сложнее/не сложнее/легче, чем построить регулярные выражения
V>- требования к эффективности высокие/не высокие/отсутствуют
V>- набор входных правил меняется "очень часто"/"не часто"/"редко".
V>И какой смысл будет рассматривать его конкретное решение,если человек недостаточно хорошо представляет, сколько он за свое (неважно какое) решение платит и где именно.
А ты абсолютно уверен что можешь быть экспертом? Я не знаю ни одной такой области где я знаю все.

V>Я и сам закончил не многим более 10 лет назад и еще прекрасно помню уровень многих своих друзей-одногрупнников на момент выпуска. Пытаюсь найти сейчас примерно такого же уровня — пусто... Блин, краткий обзор современного "продвинутого" выпускника: немного джавы, HTML, немного С++, какие-то обрывочные знания MFC/ATL/COM/Дельфи и... глубочайшие провалы в основах (на фиг тогда сдались те обрывки знаний?). Такое ощущение, что безграничная доступность машинного времени (копм у всех) банально отвлекает студентов от учебы. Написание программ мартышкиным способом (методом тупого тыка и перебора подходящих вариантов) — не лучшее времяпрепровождение. ИМХО, наоборот — весьма отупляющее занятие.

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

V>-----------------

V>Если тебе интересно для сравнения. Любое зачитывание "в лоб" закодированных правил лексического разбора — это суть построение NFA. Собственно, сама задача построения лексера — это привести NFA к DFA (причем для реального использования даже не обязательно потом минимизировать, ибо это никак не отражается на эффективности).
Не обязательно. Решать можно и в NFA. А иногда и только в NFA. Об этом ниже.
V>Скажу только, что сразу после института я бы закодировал подобную задачку весьма быстро, а так потратил примерно пол-часа. Вот код процедуры перевода:
[Скипнуто]

V>Есть еще алгоритмы построения сразу DFA из входного описания, тогда общий код будет еще короче и не нужен промежуточный NFA. Правда, эти алгоритмы не подходят для построения лексера из описания языком расширенных регулярных выражений (не перловых).

V>Не думаю, что построитель перловых регулярных выражений был бы проще, скорее — ровно наоборот. (Опять же, от преттендентов не требуется готовый код, требуется умение рассуждать, сравнивать, пытаться обнаруживать значимое)
Да нет я думаю проще. Я не эксперт в этой области формальных языков, но полчаса поиска в интернете, что такое DFA и NFA(этих буржуйских абривеатур не знал) дал мне не только информацию о том что это детерменированный и недетерменированный конечные автоматы, но и то о чем я догадывался и раньше. За детерменировость автомата приходится платить увеличением количества состояний. Но верхняя цифра меня немножко убила — 2^n. Поэтому для построения детерменированного автомата нужно пристальней смотреть на сами входные лексемы. Универсальным такое назвать сложно. Кроме того был сразу же найден хороший алгоритм построения DFA из NFA с минимизацией в процессе трансформации(ссылку не дам, уже потерял, но источник называется A.A. Пестов, A.A. Шалыто "Преобразование недетерминированного конечного автомата в детерминированный", Санкт-Петербургский государственный университет информационныхтехнологий, механики и оптики. Найдено по гуглу.) Это может мало для принятия решений, нужно конечно больше информации, но думаю что за сутки можно выбрать уже готовый алгоритм и реализовать его. Конечно, у меня есть некоторая подготовка по грамматикам, но для разговора по данной области сходу я бы поостерегся. И вообще, лучше бы на основе имеющихся знаний выбрал готовый продукт. Проблема не в том, что я не смогу, проблема в том что этот код надо поддерживать. Протестировать грамматику, даже автоматную, весьма сложно.
Но результат такой, вряд ли ты бы меня взял к себе на работу если бы я не знал о чем будет разговор и не подготовился. К тому же перла я не знаю Так что, либо я бездельник и никому не нужный туниядец, либо у тебя слишком субъективное мнение.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Всего пара слов: деньги решают все (+)
От: gwg-605 Россия  
Дата: 28.11.05 06:47
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> необходимое железо + стоимость разработки + стоимость поддержки = затраты. Минимум затрат большая прибыль.


ПК>Из Вашего уравнения выпали несколько существенных составляющих, начиная с качества, функциональности и usability получившегося продукта.

1. Качество чего? Продукта? Менеджемента? Программирования? Чего-то еще?
2. Функциональность и юзабилити включены в разработку. Я включил в стоимость разработки все начиная от зарождения идеи до выхода в свет программы.
Re[3]: Всего пара слов: деньги решают все (+)
От: gwg-605 Россия  
Дата: 28.11.05 06:52
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>БОльшая, но не большАя.

Конечно

CS>Идея я думаю очевидна. Т.е. уравнение не полное.

Да согласен не полное, но я и не ставил себе цели выдать полную формулу, просто некий общий взляд с доступной высоты, который мне видится в последнее время.
Re[2]: Ха! Мы забыли про Mobile девайсы
От: gwg-605 Россия  
Дата: 28.11.05 07:05
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Они портируют приложение с PalmOS.

CS>Одному их прожект менеджеру пришла светлая идея
CS>а не написать ли нам это на Compact Framework...

CS>А вы говорите....

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

Ну и конечно же на .NET кодировать легче и быстрее, чем на плюсах.
А .NET это сейчас самое любимое дитя МС-а.
Re[22]: Об эффективности - с другой стороны
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 28.11.05 12:01
Оценка:
Здравствуйте, vdimas, Вы писали:

V>С лисп и смолтолк знаком слегда, но это все не то. Rubby тоже выглядит немного "специальным" языком. Хочется иметь нечто вроде C#, но добавлять операторы языка или нечто вроде глобальных ф-ий (которые таковыми являться не будут).


V>С другой стороны иметь возможность некоторые конструкции убирать. Т.е. иметь возможность разработать прикладной язык, где нельзя шагнуть вправо/влево. Например, на определенном прикладном уровне вообще вычленить из языка константу null, чтобы не иметь возможности ее создавать/обрабатывать


За основу берёш ST, который всё это позволяет, прикручиваеш свой синтаксис и имееш то, что тебе нужно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re: Об эффективности - с другой стороны
От: DEMON HOOD  
Дата: 29.11.05 18:26
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Кстати, 100 Мбайт — не так уж мало. 500-страничная книга — это примерно 1 Мб. Так что 100 Мб — это шкаф на сотню таких книг, что реально и имела бы фирма, если бы не было компьютеров вообще.


Незнаю, незнаю. Если вогнать все(!) сообщения RSDN в мою ЛБД то твой P-100 с 32 (!) Мб ОЗУ накроется медным тазом и зазвенит. Фильм в кодировке Mpeg4 (или как там?) не посмотришь, МР3 тоже не послушаешь, особенно если они >64 Kbps и >11Khz. Что ещё? Ворд 2003 работает со скрипом (проверено) можно конечно 97 поставить, но там нет привычных уже рюшек 2003. Delphi4 is a only R.A.D tools? Не смешите мои тапочки, на P-100 он будет загружаться полчаса и 10 минут компилить Project1.exe (не проверено).
Вот, кстати, о тормозном .Net: сделал программу, просто великолепно работает на Celeron-500 64 ОЗУ, на P4-512 правда ещё великолепнее
Коротко говоря: многие задачи, если их и можно решить на старых машинах, но лучше если машина будет современнее. И конечно же, не стоит делать программы для которых ещё не сделали достаточно мощных машин. В конце концов, так можно и без заказчиков остаться
Rammstein — Ich Will RSDN@Home 1.2.0 alpha [618] Windows XP 5.1.2600.65536
Re[14]: Об эффективности - с другой стороны
От: Pavel Dvorkin Россия  
Дата: 30.11.05 07:00
Оценка:
Здравствуйте, IT, Вы писали:

IT>Студентам? По идее препод для студентов должен быть даже больше чем начальством.


Категорически нет. Преподаватель для студентов — только человек, дающий им рекомендации, как делать. Советчик, если угодно. Никогда я не пойду на то, чтобы навязывать силой свои убуждения. Просто по одной причине — им жить и работать, когда меня уже рядом не будет, пусть свои представления сформируют сами. Я выскажу свои, их дело — принять или нет.

PD>>Или мои приоритеты в чем-то другом заключаются ? Тогда в чем ?


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


Еще раз — объясни, что ты понимаешь под словами "наязывать". Я высказываю свое мнение. Любой с ним волен согласиться или нет. Я не начальство и не минстерство. Я не могу ничего приказать никому здесь. А высказывать я имею право ?

IT>Вот ещё одна забавная ситуаци — Re[4]: Качественно выполненная работа
Автор: Pavel Dvorkin
Дата: 23.11.05
. Казалось бы, причём тут вообще наука? Но ветка, благодаря тебе, съехала куда-то в сторону и человек, в принципе, давший вполне адекватное определение данной конкретной ситуации должен почему-то перед тобой оправдываться


Я бы не сказал, что передо мной кто-то оправдывается там. Скорее я должен был там защищаться
Причем здесь наука — а просто существует программирование для научгых исследований. И там несколько иные принципы действуют, чем в разработке корпоративных приложений. А еще есть real-time программирование для, к примеру, ядерных реакторов или космических ракет. Там вообще качество совсем иначе определяется. Я и отметил, что не все так просто.

Насчет адекватности данного определения — последовавшая с bkat дискуссия показала, что не все так уж адекватно.

IT, я не пойму другое. Почему Вы столь резко относитесь к моим попыткам формулировать мнение, отличающееся от того, которое Вам нравится ? Я вполне допускаю, что у Вас иная точка зрения и готов к ней относиться с уважением, даже если абсолютно с ней не согласен. Но ИМХО я имею право на взаимность, т.е. на нормальное толерантное отношение и к моей точке зрения. Не надо обвинять меня в навязывании, в стремлении куда-то пытаться сдвинуть дискуссию в не том направлении. Кадый имеет право на свою точку зрения и ни у кого нет права считать свою точку зрения единственно верной. ИМХО.
With best regards
Pavel Dvorkin
Re[2]: Об эффективности - с другой стороны
От: Pavel Dvorkin Россия  
Дата: 30.11.05 07:08
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Кстати, 100 Мбайт — не так уж мало. 500-страничная книга — это примерно 1 Мб. Так что 100 Мб — это шкаф на сотню таких книг, что реально и имела бы фирма, если бы не было компьютеров вообще.


<skipped>

Я вполне со все сказанным согласен, но перечитай мой постинг. Там речь шла о сайте небольшой компании

>Пусть, к примеру, создается сайт для небольшой торговой компании. Общее количество наименований продукции не более 1000. Положив по 100 Кбайт на каждый вид продукции, имеем 100 Мбайт информации, которой фирма оперирует. Из этого объема процентов 70-80 — просто файлы с документацией, доступные для скачивания, а остальное — база данных, HTML страницы и т.д. Никаких Java апплетов там не предвидится.


Кстати, 100 Мбайт — не так уж мало. 500-страничная книга — это примерно 1 Мб. Так что 100 Мб — это шкаф на сотню таких книг, что реально и имела бы фирма, если бы не было компьютеров вообще.

Обращений к этому сайту ожидается не так уж много. Сотни сеансов в день, вряд ли более.

Это похоже на RSDN ? Здесь есть что-то о фильмах ? О звуках ? При чем здесь Word 2003, где он мог быть 10 лет назад и зачем он сейчас на этом сайте ?

DH>Коротко говоря: многие задачи, если их и можно решить на старых машинах, но лучше если машина будет современнее.


Я что, предлагал отыскать на свалке P100 и для него делать ?


>И конечно же, не стоит делать программы для которых ещё не сделали достаточно мощных машин. В конце концов, так можно и без заказчиков остаться


+1. Но при неэффективном программировании это "не сделали достаточно мощных машин" можно и неверно оценить.
With best regards
Pavel Dvorkin
Re[6]: Об эффективности - с другой стороны
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.12.05 04:21
Оценка:
Здравствуйте, ghecko, Вы писали:

G>ASP в Win или Apache+php/java в Unix. А все остальное из области экспериментов. Мне так кажется


Именно что кажется. Apache работает под Виндовс без каких либо проблем. И не мало народу этим пользуется. Про яву и говорить не стоит. Вот тот же Библион насколько мне известно работает на Яве под Виндовс.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Об эффективности - с другой стороны
От: vdimas Россия  
Дата: 21.12.05 20:05
Оценка:
Здравствуйте, GlebZ, Вы писали:

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

GZ>Но результат такой, вряд ли ты бы меня взял к себе на работу если бы я не знал о чем будет разговор и не подготовился. К тому же перла я не знаю Так что, либо я бездельник и никому не нужный туниядец, либо у тебя слишком субъективное мнение.

Сорри, что сразу не ответил, у меня тогда была пауза, а потом эта ветка быстро "упала" вниз.

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

В конечном счете мне не понравилось не то, что он успел за год забыть то, что сдавал (я прекрасно понял КАК он это все сдавал), не об этом речь. Речь о том, что я попытался ему напомнить часть моментов, потом и объяснить... Объяснялось с трудом, т.к. преттендент умудрился забыть даже самые азы... На основе объяснений я предложил порассуждать... В общем, обнаружил весьма тугое восприятие информации. Если ты действительно много чего нарыл и понял за пол-часа в интете, думаю у тебя лично не возникло бы проблем. Опять же, я все еще очень хорошо помню себя и многих своих товарищей по окончании ВУЗа, и примерно знаю, кого ищу. Умение быстро разбираться/вникать — это вообще умение №1 для программиста, иначе такой разработчик будет балластом. Одного, кстати, нашел все-таки
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.