Здравствуйте, Cyberax, Вы писали:
C>И как ты в него интегрируешь твою встроенную БД? Писать по отдельной интеграции на каждый браузер? C>Да, и ради чего?
Браузер — это рисовалка. Точка. Все остальное — БД с full-text search и код на джава, который подгатавливает (генерирует) HTML страницы, подсвечивает в них "маркером" найденные слова и проч.
ВВ>>SQLite поддерживает полнотекстовый поиск: ВВ>>http://www.sqlite.org/cvstrac/wiki?p=FullTextIndex C>
C>Missing features
C>The full-text module is still in an early development phase. The following features are missing but hopefully coming soon:
C> * We plan to support prefix queries (e.g. "foo*").
C> * Applications will be able to specify custom tokenizers.
C>И это в 2006 году, неудивительно, что я про него слышал. Eclipse был зарелизен в 2001-м году.
Здравствуйте, Cyberax, Вы писали:
C>А чем ты собираешься на этом зоопарке ОС просматривать помощь? У них даже нет общего оконного тулкита и браузера!
Ты еще про Эклипс? В SWT ж вроде есть совсем простенький рендерер Html. Возможностей минимум, но для хелпа вполне достаточно.
C>Но какой-нибудь браузер в том или ином виде есть везде.
А хинты эклипс тоже через какой нибудь браузер показывает?
C>Для справки: полнотекстовый поиск это не линейный поиск по SQL LIKE, а поиск по специальному индексу. Таких систем не так уж много, кстати. Из качественных свободных, пожалуй, только Lucene и остаётся.
Янус ее и использует. Точнее ее порт на дотнет, кажется от Beagle.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Браузер — это рисовалка. Точка. Все остальное — БД с full-text search и код на джава, который подгатавливает (генерирует) HTML страницы, подсвечивает в них "маркером" найденные слова и проч.
КАК ты подключишь браузер к БД?
Самый простой способ — это запустить локальный сервер и законнектиться к нему. Что Eclipse и делает.
Естественно, там браузер используется как тупая рисовалка. Тормозит, в основном, крутое дерево категорий на JavaScript'е.
Andrei F.,
AVK>>UI то, конечно, делать можно. Проблема в дизайн-тайме, причем не только этого самого UI. Сколько я ни спрашивал, никто не смог мне продемонстрировать чисто функциональную компонентную модель. Что, впрочем, не мешает при этом какими то элементами ФП пользоваться.
AF>Любой интерфейс должен иметь состояние — просто потому, что пользователь так устроен Так что делать его в идеологии ФП — все равно что бегать в ластах.
Нет.
Состояние может существовать просто согласно постановке задачи (например, stateful протокол). Для того, чтобы состояние не рассыпалось, конечно достаточно линеаризации мутаторов и аксессоров, и так делают все императивные языки. Однако, это не необходимое условие. Для корректного сохранения состояния достаточно соблюдать относительный порядок вызовов мутаторов и аксессоров.
Один из подходов — это монады, о них ты уже много раз слышал. Формируется ФВП, связывающая аргумент и цепочку мутаторов/аксессоров, таким образом сохраняющая относительный порядок и таким образом поддерживающая состояние в корректном гхм... состоянии Итоговая конструкция скорее не "последовательная", а "вложенная", и обладает несимметричностью (слева значение, а справа функцию (условно говоря, ибо функции тоже значения)).
Другой подход. Теперь мы говорим, что эти обращения к состоянию образуют поток (то есть вводим понятие функционального потока). Мы можем, если хотим, производить различные операции над такими потоками, эти операции будут порождать другие потоки. Операции над потоками обобщаются до стрелок (в случае хаскеля просто класс типов Arrow). В деталях эта абстракция довольно сложна, но пользоваться ею (при наличии необходимых примитивов) вполне нормально:
Здравствуйте, AndrewVK, Вы писали:
C>>А чем ты собираешься на этом зоопарке ОС просматривать помощь? У них даже нет общего оконного тулкита и браузера! AVK>Ты еще про Эклипс? В SWT ж вроде есть совсем простенький рендерер Html. Возможностей минимум, но для хелпа вполне достаточно.
В SWT есть Browser Control, требующий нативный браузер. Причём он портирован на Mac OS X/Linux был только в прошлом году.
C>>Но какой-нибудь браузер в том или ином виде есть везде. AVK>А хинты эклипс тоже через какой нибудь браузер показывает?
Нет, так как там очень ограниченный набор тэгов используется. Я посмотрел — оно там специальным рендерером рисует.
C>>Для справки: полнотекстовый поиск это не линейный поиск по SQL LIKE, а поиск по специальному индексу. Таких систем не так уж много, кстати. Из качественных свободных, пожалуй, только Lucene и остаётся. AVK>Янус ее и использует. Точнее ее порт на дотнет, кажется от Beagle.
Я это знаю.
Здравствуйте, Sinclair, Вы писали:
ГВ>>Не собираюсь оспаривать твои высказывания, но объясни мне, пожалуйста, почему тогда абсолютное большинство десктопного софта, написанного на яве работает в разы медленее, чем его аналоги на C/C++? S>Вкратце: потому, что десктопный софт работает совершенно по-другому, чем серверный. S>Более длинно: S>1. в серверном коде важнее не responsiveness, а throughput.
О! Спасибо. На этом, в принципе, можно и остановиться. Теперь всё ясно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Cyberax, Вы писали:
C>КАК ты подключишь браузер к БД?
На фига мне "подключать" браузер к БД? Что вообще значит "подключить" браузер к БД? У меня десктоп-приложение, браузер — не более чем контрол для отображения данных. Его использования в данном случае аналогично какому-нибудь текст-боксу. SetText или там SetHtml и все. Работает с базой код на джава.
C>Самый простой способ — это запустить локальный сервер и законнектиться к нему. Что Eclipse и делает. C>Естественно, там браузер используется как тупая рисовалка. Тормозит, в основном, крутое дерево категорий на JavaScript'е. C>Что ты ещё предлагаешь улучшить и как именно?
Хочется уже перейти на нецензурный язык Я ничего не предлагаю улучшить. Я просил, зачем нужен веб-сервер. Мне ответили. Все.
Причем употребимость веб-сервера здесь оправдывается только тем, что это позволяет, грубо говоря, одну и ту же справку пихать и в веб, и в десктоп. В остальных случаях — это маразм.
Здравствуйте, Cyberax, Вы писали:
C>В SWT есть Browser Control, требующий нативный браузер. Причём он портирован на Mac OS X/Linux был только в прошлом году.
Я не про него. Там был обычный вьювер с поддержкой несложного форматирования, не браузер.
AVK>>А хинты эклипс тоже через какой нибудь браузер показывает? C>Нет, так как там очень ограниченный набор тэгов используется.
А нафига в хелпе неограниченный?
C> Я посмотрел — оно там специальным рендерером рисует.
Ну и кто мешал это рендерер использовать и для отображения хелпа?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
Здравствуйте, AndrewVK, Вы писали:
C>>В SWT есть Browser Control, требующий нативный браузер. Причём он портирован на Mac OS X/Linux был только в прошлом году. AVK>Я не про него. Там был обычный вьювер с поддержкой несложного форматирования, не браузер.
Может ты со SWING'ом путаешь? В SWING'е, действительно, есть очень тупой нативный рендерер. Не помню я, чтоб в SWT было что-то похожее.
C>>Нет, так как там очень ограниченный набор тэгов используется. AVK>А нафига в хелпе неограниченный?
Всё же хочется побольше того, что есть в JavaDoc.
C>> Я посмотрел — оно там специальным рендерером рисует. AVK>Ну и кто мешал это рендерер использовать и для отображения хелпа?
Тупой уж слишком.
Здравствуйте, Cyberax, Вы писали:
ГВ>>Не собираюсь оспаривать твои высказывания, но объясни мне, пожалуйста, почему тогда абсолютное большинство десктопного софта, написанного на яве работает в разы медленее, чем его аналоги на C/C++? Почему mcirosoft-овский MSDN работает быстро, а IBM-овская справка (на Java) — из рук вон медленно? C>IBMовская справка — она не на Java, а на HTML. Там локально запускается web-сервер по которому ходит браузер. Так что все претензии к браузеру на С++.
ГВ>>Почему та же история повторяется с парочкой OpenOffice/MS Office? C>Скажи, а где в OpenOffice используется Java?
Меня уже поправили. Внимательней нужно было смотреть, ай-яй-яй мне.
ГВ>>UML-рисовалки, это вообще мрак. Если сравнивать Eclipse и MSVC 6.0 — это попросту не смешно. Если ява с такой уверенностью "рвёт" плюсовый код? C>Странно, а мы на GEF на Eclipse переписывали тормозючий проект с С++.
Может быть. Я только засвидетельствовал то, что видел неоднократно "своими собственными глазами". Я вполне допускаю, что много чего другого я не видел и где-то, получается, утрирую.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Pavel Dvorkin,
PD>Все же, если не сложно, сделай, пожалуйста, в разы проще, понятнее и эффективнее сортировку — любую. Или, скажем, какой-нибудь графический фильтр. Или создание и управление неким сложно организованным файлом на диске. Или математический алгоритм — матричную алгебру, к примеру.
В сортировках, графических фильтрах и сложных файлах на дисках увы дас вайст их нихт.
А вот про матричную алгебру — это пожалуйста:
Скалярное умножение вектора-строки на вектор-столбец:
bra_ket u v =
sum_product u (map coupled v)
Сложение матриц:
add_matrices :: (Num a) => t -> t1 -> [[a]] -> [[a]] -> [[a]]
add_matrices _ _ = matrix_zipWith (+) where
matrix_zipWith f a b = [zipWith f ak bk | (ak,bk) <- zip a b]
Транспонирование:
transposed a
| null (head a) = []
| otherwise = ([head mi| mi <- a])
:transposed ([tail mi| mi <- a])
Умножение матрички на скаляр:
scalar_matrix alpha a =
[[alpha*aij| aij <- ai] | ai<-a]
Умножение матрички на матричку:
matrix_matrix a b
| null a = []
| otherwise = ([sum_product (head a) bi | bi <- b])
: matrix_matrix (tail a) b
orthogonals :: (Scalar a, Fractional a) => [a] -> [[a]]
orthogonals x =
orth [x] size (next (-1))
where
orth a n m
| n == 1 = drop 1 (reverse a)
| otherwise = orth ((gram_schmidt a u ):a) (n-1) (next m)
where
u = unit_vector m size
size = length x
next i = if (i+1) == k then (i+2) else (i+1)
k = length (takeWhile (== 0) x)
gram_schmidt :: (Scalar a, Fractional a) => [[a]] -> [a] -> [a]
gram_schmidt a u =
gram_schmidt' a u u
where
gram_schmidt' [] _ w = w
gram_schmidt' (b:bs) v w
| all (== 0) b = gram_schmidt' bs v w
| otherwise = gram_schmidt' bs v w'
where
w' = vectorCombination w (-(bra_ket b v)/(bra_ket b b)) b
vectorCombination x c y
| null x = []
| null y = []
| otherwise = (head x + c * (head y))
: (vectorCombination (tail x) c (tail y))
Ну и решение СЛАУ методом выделения треугольной матрицы:
one_ket_triangle a b
| null a = []
| otherwise = (p,q):(one_ket_triangle a' b')
where
p = [bra_ket u ak | ak <- a]
q = bra_ket u b
a' = [[bra_ket ck ai | ck <- orth] | ai <- v]
b' = [ bra_ket ck b | ck <- orth]
orth = orthogonals u
u = head a
v = tail a
one_ket_solution :: (Fractional a, Scalar a) => [[a]] -> [a] -> [a]
one_ket_solution a b =
solve' (unzip (reverse (one_ket_triangle a b))) []
where
solve' (d, c) xs
| null d = xs
| otherwise = solve' ((tail d), (tail c)) (x:xs)
where
x = (head c - (sum_product (tail u) xs))/(head u)
u = head d
Представьте себе, и это всё, да. В последний раз, когда я видел решение СЛАУ (моё) оно было минимум 5 экранов — и for-ы, for-ы, много for-ов... Выбор несколько других примитивов позволяет, даже в такой "цыкло-насыщенной" задаче, избежать явного применения оператора цикла. Казалось бы, согласно маэстро Дейкстре, основополагающего примитива.
PD>Слишком уж разные у нас с вами задачи, господа...
Из ваших сообщениях в тематических форумах подозреваю что нет. Просто у меня другое отношение к заточке инструмента
AndrewVK,
LCR>>А вот про матричную алгебру — это пожалуйста:
AVK>Вот из-за таких примеров народ и бегает от ФП, как черт от ладана. Классика, блин — специфичные математические задачи, однобуквенные переменные.
Не понял. Ты предлагаешь локальные бинды обзывать my_favourite_name. Или что? Если так, то это контрпродуктивно.
Или сказывается просто отсутствие комментариев, которые я намеренно убрал, чтобы сообщение не получилось чересчур длинным, поскольку цель сообщения была дать представление о том, как может выглядеть другой способ решения. Реально нужно просто добавить удалённые комментарии
one_ket_triangle :: (Scalar a, Fractional a) => [[a]] -> [a] -> [([a],a)]
one_ket_triangle a b
--
-- Список пар (p, q) представляет собой
-- строки треугольной матрицы P и вектора-столбца q
-- в уравнении P x = q, которое было
-- получено через линейное преобразование
-- оригинального уравнения A x = b
--
| null a = []
| otherwise = (p,q):(one_ket_triangle a' b')
where
p = [bra_ket u ak | ak <- a]
q = bra_ket u b
a' = [[bra_ket ck ai | ck <- orth] | ai <- v]
b' = [ bra_ket ck b | ck <- orth]
orth = orthogonals u
u = head a
v = tail a
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>Не понял. Ты предлагаешь локальные бинды обзывать my_favourite_name. Или что? Если так, то это контрпродуктивно.
Я предлагаю использовать примеры, которые ближе к реальности, и писать их так, чтобы они не напоминали птичью тропку на снегу. Обсуждаемый тут пример IT как раз такой.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
IT>>Это всё будет работать очень и очень медленно. Это просто в принципе не может работать быстро.
LCR>верно
Вот!
LCR>Так что с "в принципе" не согласен.
Ты не понимаешь. Быстро может работать только написанное на ассемблере или его высокоуровневых аналогах вроде C. У тебя же только GC будет отрабатывать столько, сколько нормально написанная программа на ассемблере будет работать всего.
Неясность изложения обычно происходит от путаницы в мыслях.
Если нам не помогут, то мы тоже никого не пощадим.
IT,
IT>Ты не понимаешь. Быстро может работать только написанное на ассемблере или его высокоуровневых аналогах вроде C. У тебя же только GC будет отрабатывать столько, сколько нормально написанная программа на ассемблере будет работать всего.
Здравствуйте, Воронков Василий, Вы писали:
C>>КАК ты подключишь браузер к БД? ВВ>На фига мне "подключать" браузер к БД? Что вообще значит "подключить" браузер к БД? У меня десктоп-приложение, браузер — не более чем контрол для отображения данных. Его использования в данном случае аналогично какому-нибудь текст-боксу. SetText или там SetHtml и все. Работает с базой код на джава.
Вот такого контрола в Eclipse для всех платформ не было до прошлого года. Так как не везде браузер можно было так встроить — в итоге на том же Mac OS X они для контрола стали использовать встроенный Mozilla, а не местный Safari.
ВВ>Причем употребимость веб-сервера здесь оправдывается только тем, что это позволяет, грубо говоря, одну и ту же справку пихать и в веб, и в десктоп. В остальных случаях — это маразм.
Это одна из причин. Но не единственная.
Здравствуйте, Воронков Василий, Вы писали: ВВ>На фига мне "подключать" браузер к БД? Что вообще значит "подключить" браузер к БД? У меня десктоп-приложение, браузер — не более чем контрол для отображения данных. Его использования в данном случае аналогично какому-нибудь текст-боксу. SetText или там SetHtml и все. Работает с базой код на джава.
Ключевой момент — вот этот "SetHtml". Общепринятого стандарта на него нету, в отличие от "NavigateTo".
Поэтому действительно, самый кроссплатформенный способ — это сделать NavigateTo на соответствующий адрес.
В IE применяют специальные трюки для того, чтобы не поднимать честный HTTP-сервер: например, регистрируют свой псевдопротокол.
Или пользуются интерфейсом принудительной загрузки из IStream. Но это не кросс-браузерное решение.
Резюме тут примерно такое: встроить в себя браузер — нетривиальное занятие. А держать локальный HTTP-сервер стоит не слишком дорого.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.