Re[47]: Являются ли макросы свидетельством недостаточной выр
От: IT Россия linq2db.com
Дата: 07.08.07 20:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

IT>>Ты привёл пример, использующий строковые константы. Какая нафиг статическая проверка? Или ты думаешь, что достаточно замазать в одном месте и точно такие же ошибки в другом месте не вызовут проблем?

C>ИНСПЕКЦИИ IDE! У меня даже строковые регэкспы инспекциями проверяются.

Строковые регексы не зависят от изменений в других частях приложения. А запросы зависят. И когда эти запросы задаются строковыми константами, то никакая инспекция IDE не поможет. Поможет только тотальная проверка компилятором.

IT>>Можно подумать для работы с хибернейт нужно каждый раз по месту читать конфиги и открывать соединения с БД.

C>Нет. У меня есть четко выраженая сессия, с которой я явно работаю.

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

C>Это все мелочи, не вижу тут никаких проблем. Для меня многомегабайтные отчеты — далеко не самый интересный частный случай...


Понимаю. Особенно, если проблемы производительности затыкать наращиванием железа, то это вообще никак не интересно.

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


Задача ORM — перелить данные из пустого в порожнее. Затем уже к полученному результату можно применять любые алгоритмы. Или у вас смысл алгоритмов заключается в постоянном переливании данных туда сюда?

C>"Контекст" — это ЗЛО. Мы используем глобальную/thread-local переменную.


Я сейчас умру со смеху. Как по-твоему устроен контекст?

C>А если я захочу с двумя источниками данных работать?


Источник данных можно спокойно задать метаданными. Типа таблица A принадлежит источнику B. Далее между источником B и конкретной базой данных можно легко организовать нужное соответствие. Именно так я у себя и делаю. Иначе при указании пользователем колонки для просмотра мне пришлось бы у него ещё запрашивать и таблицу, которой она принадлежит, имя БД, имя сервера и порт.
Если нам не помогут, то мы тоже никого не пощадим.
Re[45]: Являются ли макросы свидетельством недостаточной выр
От: IT Россия linq2db.com
Дата: 08.08.07 02:27
Оценка:
Здравствуйте, GlebZ, Вы писали:

IT>>Вообще-то, это мой вопрос.

GZ>Ваще-то я на твой вопрос уже ответил. И IMHO достаточно логично ответил, так что опровергнуть можно только реальными цифрами профайлинга.

Ыгыгыгы!

IT>>pass-through как термин существует вне зависимости от линка. Это объективная реальность, присутствующая в большинтсве правильно спроектированных проектах, в которых логика диктуется UI.

GZ>У меня не присутвует. Всегда есть какие-то довески. Что я делаю неправильно?

Давай сюда код, я тебе расскажу что у тебя неправильно.

GZ>На сегодня нет ни релиза Nemerle, ни Go Live лицензии линки. Поэтому можно говорить только о завтра.


А мы о завтра и говорим.

IT>>И ООП и макросы — это иструменты. Сравнивать нужно не их, а результаты их применения. А уж известность подводных камней как преимущество — это вообще здорово. Ты никогда не пробовал решать проблемы, а не коллекционировать их, описывать и классифицировать?

GZ>Соберем все грабли и посчитаем шишки? Очень не хотелось бы на коммерч. проектах пользоваться этим советом.

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

GZ>>>Получение(изменение) данных, и трансформация из модели источника к логической модели и наоборот.

IT>>Ответ неверный. DAL нужен для изоляции кода, работающего с БД от остальных частей приложения. Ключевое слово здесь изоляция.
GZ>Ответ как раз верный. Изоляция — это уже средство.

Следствие из чего? Из получения или трансформации? Впрочем это не важно. Ни то ни другое не даёт столько проблем, чтобы это выносить в отдельный слой.

GZ>Уже лучше. Только полностью синхронизировать не удастся. Реляционные метаданные недостаточны.


Почему?

GZ>Можно только проверить соответсвие. И это можно сделать вполне внешними средствами.


Можно, но почему-то никто не делает и я даже знаю почему.

IT>>О! Видишь что с людями делает декларативщина? Тебе этот код кажется примитивным? Правильно. А почему? Да потому что в нём нет ничего лишнего. Ни одного лишнего элемента. Учитывая, что в обычном коде мусора как правило больше половины, то смотря на такой код хочется зажмурится, как когда смотришь на яркий свет. Что-то тут не так, где-то нас обманывают. Только с декларативностью можно добиться такого примитивизма.

GZ>Чудный примитивизм. А если вспомнить что еще есть кластерный транзакционный кэш, то примитив улетучивается.

Как твой кешь повлияет на запрос вида "SELECT * FROM Customer", если он будет в DAL?

GZ>Это не есть то, что я спрашивал. Например, для администратора нужен фильтр один фильтр, а для простого пользователя другой фильтр.


Ты спрашивал про ad-hoc запрос, я тебе привёл пример.

IT>>И как тебе в этом случае поможет наличие pass-through методов?

GZ>>>OK. Кое что, ты уже описал. Нужно вставлять кэширование, секьюрити, логгирование и e.t.c. И желательно, чтобы вызовы были в одном слое,
IT>>Зачем? Какую проблему мы решаем располагая все вызовы в одном слое?
GZ>В одном раздельном слое? Этот слой называется бизнес-логикой, и он не зависит от UI.

Бизнес логика диктуемая UI зависит от UI на 150%. Причём завист в худшем смысле этого слова.

IT>>А после следующей итерации у нас появятся методы, которые вообще никем не используются. И так и будут висеть по жизни рудиментами и атавизмами.

GZ>А что, их так сложно поубивать?

Если ты один в команде, то не сложно. Если не один и этот метод писал не ты, то, думаю, ты его даже пальцем не тронешь.

GZ>Не очень много. Измени поле в entity и где и какие изменения проверяются компилятором. Чаще всего, они инкапсулированы в отдельном компоненте(ежели разработчик дружит с головой). А вот лазить по UI (который чаще сложнее чем все остальное) не очень хочется.


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

IT>>Что именно ты собираешься тестировать? Соответствие имён полей структур и полей таблиц в БД? Так это за тебя уже сделал компилятор.

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

Ещё раз. Действия и возможности которые предоставлены клиентам бизнес-логики в случае бизнес логики диктуемой UI нужны только тому UI, который диктует эту логику. В результате у тебя будет бизнес-слой, состоящий из pass-through методов, которые вызываются только одним методом UI. Повторное использование в таких приложениях стремительно стремится к нулю.

Если мы устраняем DAL за ненадобностью, то у нас остаётся один метод, который представляет собой запрос, полностью, т.е. абсолютно полностью, на 100% подчиняющийся логике UI. Какой смысл в таком запросе, если от него только проблемы при сопровождении?

GZ>Нет. Может я устарел, но в UI я никогда не буду делать действий не связанных с интерфейсом пользователя. Там своей сложности всегда хватит.


Не хочешь в UI, не надо. Сегодня в моде всякие MVP и прочие умные слова.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[42]: Являются ли макросы свидетельством недостаточной выр
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.08.07 02:43
Оценка:
Привет, IT, спрашиваешь:
IT>Это понятно, но это уже не декларативно Не проще было бы обойтись вообще без ифоф?
Это ты уже докопался до совсем другого.
Пока что мы говорим о том, что в отличе от текстуальных генераторов запросов, linq позволяет тебе динамически компоновать запросы, при этом
— не нужно анализировать, какие там еще были предикаты, и были ли они вообще (ср. с. if (sqlWhere != "") sqlWhere += "AND "; sqlWhere += "startDate >= @startDate)
— не нужно анализировать, сколько параметров в итоге получилось у запроса
— нет риска совершить досадную опечатку (банальный пробел в тексте пропустить очень легко, и никто тебе не поможет)

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

IT>Если у меня пять таких полей, то нужно будет наприсать 10 строчек такого кода. А можно просто перечислить все пять полей в одной. Опять же повторю. Такой паттерн имеет смысл унифицировать, если он действительно часто повторяется. Ради одного-двух раз париться не стоит.

Вот это место я, честно говоря, не понял. Что, есть какой-то более совершенный подход к условной генерации запросов?
Покажи.
Если ты имеешь в виду ситуацию, когда сам запрос собирается 100% динамически, то тут, действительно, линку будет несколько тяжело. Потому что это, грубо говоря, reflection, а линк — это нормальный компайл-тайм. Впрочем, там, где запрос собирался 100% динамически, всё уже написано, и привлекать линк смысла почти нету.
Почти — это потому, что всё же есть у меня подозрение, что манипулировать Expression Trees должно быть всё же удобнее и надежнее, чем текстом. Ну и плюс возможность генерировать диалектно-зависимый SQL забесплатно.

Но такие тулзы уже были и есть. А вот чтобы прямо синтаксис, да прямо в языке, да статически проверяемый... Гибернейтовый плагин для эклипса глотает слезы ревности.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[47]: Являются ли макросы свидетельством недостаточной выр
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.08.07 03:00
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>Назови мне технологию MS, которой нет в Java (кроме десктопно-гуевых, разве что).
Ладно, это была шутка. Напомню, что мы в ФП, а не в КСВ. Поэтому меряться пиписьками у меня намерения нет. Я и на Java работал, и без нее, и на чем я только не писал.
А уж маппингом данных я начал заниматься практически не выпуская из рук маминой юбки, лет в 12. Нормальные дети ломали спектрумы, а у меня спектрума не было, поэтому я помогал писать систему экономического анализа сначала на РЕБУС, потом на Clipper.

В результате, против Java я ничего не имею, как и против других технологий. А вот точка зрения типа "вы такие, потому что вы дотнетчики" — бред и предубеждение.
Hibernate — вполне хорошее решение для своего окружения. Также как версант, который использовал собственный компилятор для разбора исходников и генерации по ним метаданных, тоже вполне адекватен для C++. Но молиться ни на то ни на другое я не собираюсь, и прекрасно вижу те возможности, которые есть в linq.

Я не собираюсь также молиться на шарп и MS, хотя у них действительно есть классные черты. Я, к примеру, вижу преимущества Nemerle перед C# во многих областях. Равно как я понимаю (как мне кажется) мотивацию отсутствия этих вещей в шарпе. Я также понимаю, почему в джаве сделаны по-другому некоторые вещи, чем в шарпе.

Так что не надо за меня оценивать угол моего обзора.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[57]: Являются ли макросы свидетельством недостаточной выр
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.08.07 03:00
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


C>>>Если вам нужно сделать failover — без проблем, мы вам готовы переписать сервер Только платить вы должны.

AVK>>Мы и сами перепишем. Если намек не понят, поясню: RSDN проект некоммерческий, поэтому никакого файловера на нем нет и не будет.
C>А как это связано? Slashdot вот тоже некоммерческий, а failover на нем есть. Если надо новый сервер — я думаю, что уж пара десятков человек скинется по $100.
Ну, во-первых, за $2000 приличный сервер собрать затруднительно.
Во-вторых, на практике дать даже $10 на благое дело желают отнюдь не все.
В итоге, мы имеем то, что мы имеем — у нас хотя бы это железо есть.
C>Так поставьте SQL-сервер на одну машину с сайтом.
Так уже тоже было. Ты себе нагрузку представляешь?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[43]: Являются ли макросы свидетельством недостаточной выр
От: IT Россия linq2db.com
Дата: 08.08.07 03:06
Оценка:
Здравствуйте, Sinclair, Вы писали:

IT>>Если у меня пять таких полей, то нужно будет наприсать 10 строчек такого кода. А можно просто перечислить все пять полей в одной. Опять же повторю. Такой паттерн имеет смысл унифицировать, если он действительно часто повторяется. Ради одного-двух раз париться не стоит.

S>Вот это место я, честно говоря, не понял. Что, есть какой-то более совершенный подход к условной генерации запросов?
S>Покажи.

Давай ещё раз вот с этого места:

if (StartDate != null)
  q = q.where(p => p.StartDate >= StartDate)

Поэтому то линк и рулит.


Это всё здорово за исключением одного — это уже не query expressions. Если мне нужно 5 проверок, то это будет выглядеть так:

if (StartDate1 != null)
  q = q.where(p => p.StartDate1 >= StartDate1)
if (StartDate2 != null)
  q = q.where(p => p.StartDate2 >= StartDate2)
if (StartDate3 != null)
  q = q.where(p => p.StartDate2 >= StartDate3)
if (StartDate4 != null)
  q = q.where(p => p.StartDate4 >= StartDate4)
if (StartDate5 != null)
  q = q.where(p => p.StartDate5 >= StartDate5)

Вместо этого хотелось бы иметь что-то типа:

grid.Source = from c in customers   
              join o in orders on c equals o.Customer into oo   
              filterby StartDate1, StartDate2, StartDate3, StartDate4, StartDate5
              select new { c.CompanyName, OrderCount = oo.Count()

Я понимаю, что в линк этого нет и я даже не собираюсь это просить, т.к. это логика специфичная исключительно для моей задачи. По-этому, я отнёс это к преимуществу макросов, т.к. в тех случаях, когда у меня вырисовывается вполне чёткий паттерн я могу совершенно спокойно добавить его в свой набор и иметь возможность заменять 10 императивных строк одной декларативной.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[48]: Являются ли макросы свидетельством недостаточной выр
От: IT Россия linq2db.com
Дата: 08.08.07 03:14
Оценка: :)))
Здравствуйте, Sinclair, Вы писали:

S>Так что не надо за меня оценивать угол моего обзора.


Синклер, ты адекватен.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[44]: Являются ли макросы свидетельством недостаточной выр
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.08.07 03:27
Оценка: :)
Здравствуйте, IT, Вы писали:
IT>Вместо этого хотелось бы иметь что-то типа:

IT>
IT>grid.Source = from c in customers   
IT>              join o in orders on c equals o.Customer into oo   
IT>              filterby StartDate1, StartDate2, StartDate3, StartDate4, StartDate5
IT>              select new { c.CompanyName, OrderCount = oo.Count()
IT>

Ага, вот теперь я понял. Итак, у нас бывают являния Более Высокого Порядка, когда даже синтаксис Линка получается слишком многословным. Далеко глядишь
Да, здесь злые макросы всё же зарулят доброго линка. Да, таки зарулят.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[22]: Являются ли макросы свидетельством недостаточной выр
От: night beast СССР  
Дата: 08.08.07 05:21
Оценка: :)
Здравствуйте, Klapaucius, Вы писали:

NB>>Дорогой друг.


K>Ну разве где-нибудь еще можно так легко найти друзей? Нигде кроме, как на rsdn.


На улицу выходить не пробовали?

NB>>Мы очень рады что вы вообще не программист,


K>Вы — коллективный псевдоним или просто представляете инициативную группу? Я для того интересуюсь чтобы знать, несу я радость многим людям или просто одному, который говорит о себе во множественном числе.


Пара индивидуумов вас устроит. Иль еще поискать?

NB>>но раз уж влезли в дискуссию, то потрудитесь изучить инструмент о котором рассуждаете.


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


За дискуссией наблюдаю с самого начала.
Насколько это позволяет несовершенный механизм rsdn доставки сообщений по почте.
Была показана идея решения. Не способны понять -- ваша проблема.

Еще вы вроде говорили о потере производительности.
Хотелось бы взглянуть на цифры.

NB>>Задачи на expression templates уже много лет не являются проблемой для С++ кодеров.


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


Похоже трудности только у вас

NB>>Если у вас с этим сложности, то почитайте документацию. Ссылки были озвучены.


K>Почему Вы считаете, что я ее не читал? Или нужно читать и читать пока не исчезнут все симптомы интереса к линейной алгебре?


Нет. Пока не поймете как пользоваться

NB>>Реализовывать в 1001 раз линейную алгебру для вас никто не будет.


K>Опять верю. Пока что ее никто не реализовал даже 1 раз. Линейную алгебру уже реализовывали на C++ один раз на 0,5, тысячу раз на 0,1 и 90050 раз на 0,01 — в том числе и один раз eao197 лично двумя сообщениями выше, так что вместе как раз 1001. Все это очень интересно, но, как говорил Дуглас Адамс, если миллион человек дыхнет на сырое мясо — оно не превратиться в зажареный бифштекс.


Угу. Цифры впечатляют. Сами придумали или генераторос случайных чисел воспользовались.

K>Меня интересует хотябы одна реализация на 1. Ну или, на худой конец, одна реализация на 0,9.


www.oonumerics.org
не считая кучи велосипедов настроенных под свои нужды.

K>Я понимаю, что уметь выдавать перекрашенный фонарный столб за межконтинентальную баллистическую ракету (ну или хотябы убедить, что нужен именно фонарный столб, а не ICBM) для программиста вопрос профессиональной компетентности, но не согласитесь ли Вы, что я как физик имею больше оснований для оценки библиотеки линейной алгебры чем самый пламенный любитель expression templates?


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

K>А пока что выслушаешь рекомендации на Blitz++, укажешь на какой-нибудь пустячек вроде четырехкратного оверхэда как здесь
Автор: Klapaucius
Дата: 11.07.07
, например, а собеседник сразу скучнеет и убегает рекламировать Blitz++ в другое место.


рекомендации простые.
не можешь пользоваться, не берись.
Re[44]: Являются ли макросы свидетельством недостаточной выр
От: awson  
Дата: 08.08.07 05:30
Оценка:
Здравствуйте, IT, Вы писали:

IT>Спасибо, друг! Повеселил!


Ну, с "почти все" я, наверное, погорячился — темы такой чудовищной длины целиком читать невозможно, однако в данном конкретном треде Вы пишете уже совсем странные вещи, например
Автор: IT
Дата: 08.08.07
:
IT>
IT>if (StartDate1 != null)
IT>  q = q.where(p => p.StartDate1 >= StartDate1)
IT>if (StartDate2 != null)
IT>  q = q.where(p => p.StartDate2 >= StartDate2)
IT>if (StartDate3 != null)
IT>  q = q.where(p => p.StartDate2 >= StartDate3)
IT>if (StartDate4 != null)
IT>  q = q.where(p => p.StartDate4 >= StartDate4)
IT>if (StartDate5 != null)
IT>  q = q.where(p => p.StartDate5 >= StartDate5)
IT>


Неужели в контексте использования в линке нельзя построить first-class составной предикат из списка полей ??? Еще раз — я линком не пользовался, поэтому интуицию черпаю из знакомства с его прародителем (haskelldb) — там бы это решительно не составило никакой проблемы безо всяких макросов.
Re[47]: Являются ли макросы свидетельством недостаточной выр
От: no4  
Дата: 08.08.07 06:01
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


C>>>Почему-то, .NET-программисты страдают "туннельным видением" — все не-MS-технологии они просто не замечают.

IB>>Наоборот, это Java-исты ничего кругом не замечают, зациклились на морально устаревших решениях и никак не могут с них слезть.
C>Можешь назвать технологию MS, которой нет в Java?

C++/CLI -- т.е. язык, который одинкаково зорошо понимает как объекты фреймфорка, так и низкоурованевые структуры.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[48]: Являются ли макросы свидетельством недостаточной выр
От: Cyberax Марс  
Дата: 08.08.07 07:56
Оценка:
Здравствуйте, IT, Вы писали:

C>>ИНСПЕКЦИИ IDE! У меня даже строковые регэкспы инспекциями проверяются.

IT>Строковые регексы не зависят от изменений в других частях приложения. А запросы зависят. И когда эти запросы задаются строковыми константами, то никакая инспекция IDE не поможет. Поможет только тотальная проверка компилятором.
Ты вообще IDEA когда-нибудь видел? Вот так выглядит диалог Analyze->Inspect code...:


Специально для тебя — посмотри на пункт "Whole Project".

Естественно, при рефакторингах IDE тоже автоматически исправляет запросы. Да, и можно поднять для inspection'а уровень предупреждения до "error", тогда он будет выполняться при компиляции.

IT>>>Можно подумать для работы с хибернейт нужно каждый раз по месту читать конфиги и открывать соединения с БД.

C>>Нет. У меня есть четко выраженая сессия, с которой я явно работаю.
IT>А если у тебя сессия одна на всё приложение, то ты тоже её везде за собой таскаешь?
Ага. Я даже ссылку на главное окно передаю везде явно. Не люблю синглтоны и неявные контексты.

C>>Это все мелочи, не вижу тут никаких проблем. Для меня многомегабайтные отчеты — далеко не самый интересный частный случай...

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

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

IT>Задача ORM — перелить данные из пустого в порожнее. Затем уже к полученному результату можно применять любые алгоритмы. Или у вас смысл алгоритмов заключается в постоянном переливании данных туда сюда?
Нет. Просто на SQL нет нормальных способов работы не с отдельными рядами, а с их набором. Тупой Java-код получается намного приятнее.

А еще есть сложные структуры и логика. Я пишу системы работы с персоналом, связаные с биллингом. Например, при добавлении человеку в его расписание нового shift'а, мне нужно проверять не получился ли у него overtime, если overtime получился — то проверить разрешен ли он ему (это включает в себя проверку его истории работы), потом еще надо проверить контрактные условия (например, один человек не может более одного раза в неделю работать на одном месте) и т.п. В общей сложности срабатывает 156 правил (и это еще далеко не предел, сейчас еще консультанты туда их добавляют по десятку в день).

На SQL это все делать — получится огромное количество мелких (и не очень) запросов. На Hibernate мы используем, в основном, навигационный доступ к данным. Причем обычно у нас в кэше находятся ВСЕ нужные данные, и у нас не делается вообще ни одного запроса к базе (кроме update'ов, естественно).

C>>"Контекст" — это ЗЛО. Мы используем глобальную/thread-local переменную.

IT>Я сейчас умру со смеху. Как по-твоему устроен контекст?
В виде thread-local переменной.

C>>А если я захочу с двумя источниками данных работать?

IT>Источник данных можно спокойно задать метаданными. Типа таблица A принадлежит источнику B.
Представь, что ты синхронизируешь несколько баз данных с одинаковой структурой. Твои действия?
Sapienti sat!
Re[51]: Являются ли макросы свидетельством недостаточной выр
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 08.08.07 07:58
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>LINQ пока даже не появился.

IB>>LINQ не для БД.
C>Ага. А Hibernate — не ORM, а универсальная система работы с данными. Не веришь?

afair, "универсальная система" это JDO, но похоже оно нафиг никому не упало.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[42]: Являются ли макросы свидетельством недостаточной выр
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 08.08.07 08:15
Оценка:
Здравствуйте, IT, Вы писали:

IT>
IT>class UI
IT>{
IT>  void OnLoad()
IT>  {
IT>    binder.List = from c in Customer select c;
IT>  }
IT>}
IT>

IT>Можно для лучшей наглядности замешать сюда ещё и ad-hoc запрос.

btw, вопрос к тебе как к знатоку. Где то в этом форуме, я видел утверждения, что типы генерируемые Linq-ом не доступны в других сборках. Означает ли это, что Linq-запросы можно использовать только in-place? И что, вообще, то утверждение означает ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[50]: Являются ли макросы свидетельством недостаточной выр
От: Cyberax Марс  
Дата: 08.08.07 08:44
Оценка:
Здравствуйте, IT, Вы писали:

C>>Я тебе в который (пятый?) раз говорю, что можно для большинства запросов Hibernate сделать контроль типов с помощью плугина к IDE. И это уже сделано. И это уже работает.

IT>Ты понимаешь какую чушь ты говоришь? А если файл, которые затронули мои изменения не открыт в IDE? Всё, не шмагла?
Зачем файл открывать? IDEA замечательно умеет ловить изменения на лету и проверять все файлы. А еще есть TeamCity, который вообще позволяет запускать инспекции на билд-сервере.

IT>>>В твоём примере ты делаешь точно тоже, что делалось 10 лет назад — ты используешь нетипизированную работу с данными.

C>>У меня возвращается List<BusinessObject>, который вполне типизирован.
IT>Ты строкой задаёшь запрос, в котором используются строковые имена таблиц и полей. Дальнейшее уже не важно.
Это НЕ имена таблиц и полей. Это имена entity, для которых поддерживается рефакторинг и проверка. Тебе screencast что ли снять?
Sapienti sat!
Re[57]: Являются ли макросы свидетельством недостаточной выр
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.08.07 08:45
Оценка:
Здравствуйте, Cyberax, Вы писали:

AVK>>Мы и сами перепишем. Если намек не понят, поясню: RSDN проект некоммерческий, поэтому никакого файловера на нем нет и не будет.

C>А как это связано?

Связано.

C> Slashdot вот тоже некоммерческий, а failover на нем есть.


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

C> Если надо новый сервер — я думаю, что уж пара десятков человек скинется по $100.


Смешно. Последний сервер RSDN стоил в районе 7К. И я бы не сказал, что он сейчас нагружен слабо.

AVK>>Прямое. Рвется постоянно связь между серверами из-за глюков сетевой карты на одном из них.

C>Так поставьте SQL-сервер на одну машину с сайтом.

Периодически приходится. Тормозит-с.
... << RSDN@Home 1.2.0 alpha rev. 688>>
AVK Blog
Re[55]: Являются ли макросы свидетельством недостаточной выр
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.08.07 08:45
Оценка:
Здравствуйте, ., Вы писали:

.>А это рабочий пример???


Нет конечно, оператора ... в шарпе еще нет.

.> Для какого экземляра A будут вызываться Foo/Bar из Find?


У Foo и Bar надо дописать static.
... << RSDN@Home 1.2.0 alpha rev. 688>>
AVK Blog
Re[32]: Являются ли макросы свидетельством недостаточной выр
От: Gaperton http://gaperton.livejournal.com
Дата: 08.08.07 08:49
Оценка: 6 (1) +1
Здравствуйте, WolfHound, Вы писали:

G>>Плохо объясняешь? Если ты словами задачу и проблему объяснить понятным образом не можешь,

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

G>>то каково то по твоему коду будет разбирать, интересно? С мега-макросами и всем прочим.

WH>А мой код очень простой.
WH>Причем он простой именно благодоря макросам.
WH>Хотя не только. Я еще использовал визитеры, замыкания и немного зашаблонил.

Сомневаюсь. Ты даже на plain russian не в состоянии "очень просто" задачу описать.

WH>Обязьянка конечно не поймет но их к разработке это либы и близко не подпустят.

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

G>>Почему их несколько, а не один?

WH>По тому что надо.
Умному и воспитанному человеку не составит разницы это объяснить. Раз не объясняешь — значит опять боишься.

G>>Сколько у тебя таких кластеров — в штуках, и сколько всего пространств, тоже в штуках?

WH>А какая разница? Ибо либа не стоит на месте и в любой момент могут появится новые.
Тебе сложно ответить на этот вопрос? Интересно, почему?

G>>Да? И чем эти разные RGB отличаются, интересно? Ну не разрядностью же, ты ведь наверняка в плавающей запятой из преобразуешь, как разумный человек.

WH>Работаю я в основном с плавучкой.
WH>Но:
WH>1)Я не в вакууме работаю
Аргумент однако .

WH>2)Некоторым алгоритмам пофигу с каким именно цветовым пространством они работают.

WH>Те я могу загрузить картинку, повернуть ее на 90 градусов, увеличить в 2 раза (point sampler'ом) и сохранить.
WH>При этом ни разу не приведя картинку в пространство с плавающей точкой.
И чего в этом хорошего? Короче, все проясняется. Понятно теперь, откуда ты сложности на свою голову нашел.

WH>Причем если дело дойдет до плавучки то придется не только приводить к плавучке но и производить нелениейные коррекции, а если есть альфа то еще и домножать каналы на занчение альфы..., а потом обратно...

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

WH>3)Некоторым алгоритмам нужны битмапы с низкой разрядностью.

Если это причина — то потери точности у нас не будет.

G>>Тогда чем? Нелинейной шкалой яркости? При применении плавающей запятой это никак не повлияет на точность, все эти гамма-коррекции и прочие нелиейные шкали яркости правильно вынести за рамки пространств, сделав преобразованиями.

WH>Тогда теряется контроль компилятора.
WH>А это критично. Ибо если использовать цвета которые скоректированны не так то полезут артефакты.
Контроль копилятора — это не критично. Проверяй тип картинки в динамике (заводишь член класса — тип картинки). Это одно целочисленное сравнение — против десятков тысяч-миллионов операций на одно преобразование, так что никакой просадки производительности не будет. Так же в динамике можно и пространства между собой преобразовывать автоматически — логика выбора преобразования это чушь по сравнению с самой обработкой. От динимики еще никто не умирал пока, из тех, кто имеет привычку писать регрешшн и unit-тесты.

WH>А делать коррекции на каждый чих это очень дорого.

WH>Я пробовал.
WH>Это просадило библиотеку и по скорости и по объему и по запутанности кода.
Что именно ты пробовал. На сколько именно процентов это "просадило" библиотеку по скорости. На сколько увеличился объем кода.

На слово тебе я не поверю. Ты так изумляешься, что я тебе не верю, когда ты говоришь, "так надо", смешно, сил нет. Напоминаю тебе — ты не Иисус Христос, чтобы тебе верить. К тому же, я уже пересказал твои макросные идеи нашим специалистам по обработке изображений, они ржали как ненормальные, услышав про анализ графа. Удивляются, как это так выходит, что буквально всем кроме тебя отсутствие макросов работать в этой области не мешает вот уже как пару десятков лет.

G>>Приведи пример двух разных RGB, если тебя не затруднит.

WH>Линейное и прецептурно линейное. Отличаются грубо говоря гамма-коррекцией (реально там болие сложная зависимость но гамма-коррекция дает неплохое приближение).
WH>Путать их нельзя. Иначе полезут артефакты.
Ну не путай, кто тебе мешает. Есть масса вариантов, как их не спутать. Заведи у класса Image член под названием color_space и не путай себе на здоровье.
Re[53]: Являются ли макросы свидетельством недостаточной выр
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.08.07 08:56
Оценка:
Здравствуйте, Cyberax, Вы писали:

AVK>>Такое ни на каких отдельно сгенеренных проксях ты не сделаешь.

C>Классно. А где об этом можно почитать?

Хороший вопрос. Ответа не знаю.

C> В документации к RealProxy я не вижу возможности динамически добавлять реализуемые типы.


Курить ObjRef.TypeInfo.CanCastTo(). Этот метод вызывается при каждом кастинге TP.

AVK>>Если это функциональный аналог, зачем тогда Tango Project?

C>Для интероперабельности, у них же написано.

А что там интероперировать, если WCF поддерживает все стандарты WS? Jini нельзя добавить поддержку веб-сервисов в полном объеме?

AVK>>А при чем тут Scala?

C>Есть мнение, что она может стать официальным продолжателям Java.

Вот когда станет, тогда и поговорим.

C> Кстати, еще и JavaFX подкатывается.


И LINQ
... << RSDN@Home 1.2.0 alpha rev. 688>>
AVK Blog
Re[43]: Являются ли макросы свидетельством недостаточной выр
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.08.07 09:06
Оценка: +1
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>btw, вопрос к тебе как к знатоку. Где то в этом форуме, я видел утверждения, что типы генерируемые Linq-ом не доступны в других сборках. Означает ли это, что Linq-запросы можно использовать только in-place? И что, вообще, то утверждение означает ?


Ты все перепутал. Анонимные типы недоступны компилятору за пределами метода. С точки зрения рантайма (а биндинг работает только в рантайме) никаких анонимных типов нет, есть обычные классы.
... << RSDN@Home 1.2.0 alpha rev. 688>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.