Re[22]: вдогонку
От: Воронков Василий Россия  
Дата: 28.10.08 18:44
Оценка:
Здравствуйте, 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-м году.

Ты погуляй по ссылкам. Сейчас в качестве full text search extension используется fts2:
http://www.sqlite.org/cvstrac/wiki?p=FtsTwo
И кстати сейчас 2008 г.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[20]: вдогонку
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.10.08 18:46
Оценка:
Здравствуйте, 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>>
AVK Blog
Re[23]: вдогонку
От: Cyberax Марс  
Дата: 28.10.08 18:49
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Браузер — это рисовалка. Точка. Все остальное — БД с full-text search и код на джава, который подгатавливает (генерирует) HTML страницы, подсвечивает в них "маркером" найденные слова и проч.

КАК ты подключишь браузер к БД?

Самый простой способ — это запустить локальный сервер и законнектиться к нему. Что Eclipse и делает.

Естественно, там браузер используется как тупая рисовалка. Тормозит, в основном, крутое дерево категорий на JavaScript'е.

Что ты ещё предлагаешь улучшить и как именно?
Sapienti sat!
Re[5]: Жизнь внутри метода
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.10.08 18:52
Оценка: 7 (3)
Andrei F.,

AVK>>UI то, конечно, делать можно. Проблема в дизайн-тайме, причем не только этого самого UI. Сколько я ни спрашивал, никто не смог мне продемонстрировать чисто функциональную компонентную модель. Что, впрочем, не мешает при этом какими то элементами ФП пользоваться.


AF>Любой интерфейс должен иметь состояние — просто потому, что пользователь так устроен Так что делать его в идеологии ФП — все равно что бегать в ластах.


Нет.

Состояние может существовать просто согласно постановке задачи (например, stateful протокол). Для того, чтобы состояние не рассыпалось, конечно достаточно линеаризации мутаторов и аксессоров, и так делают все императивные языки. Однако, это не необходимое условие. Для корректного сохранения состояния достаточно соблюдать относительный порядок вызовов мутаторов и аксессоров.

Один из подходов — это монады, о них ты уже много раз слышал. Формируется ФВП, связывающая аргумент и цепочку мутаторов/аксессоров, таким образом сохраняющая относительный порядок и таким образом поддерживающая состояние в корректном гхм... состоянии Итоговая конструкция скорее не "последовательная", а "вложенная", и обладает несимметричностью (слева значение, а справа функцию (условно говоря, ибо функции тоже значения)).

Другой подход. Теперь мы говорим, что эти обращения к состоянию образуют поток (то есть вводим понятие функционального потока). Мы можем, если хотим, производить различные операции над такими потоками, эти операции будут порождать другие потоки. Операции над потоками обобщаются до стрелок (в случае хаскеля просто класс типов Arrow). В деталях эта абстракция довольно сложна, но пользоваться ею (при наличии необходимых примитивов) вполне нормально:

    appWindow :: CompCircuit Window () (() :& QuitReq)
    appWindow = proc () -> do
        () :& Destruction := destruction
            <- unit (ordinaryWindow windowContent) -< () :& Title := constant "Accumulation demo"
        returnA -< () :& QuitReq := destruction
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[21]: вдогонку
От: Cyberax Марс  
Дата: 28.10.08 18:54
Оценка:
Здравствуйте, AndrewVK, Вы писали:

C>>А чем ты собираешься на этом зоопарке ОС просматривать помощь? У них даже нет общего оконного тулкита и браузера!

AVK>Ты еще про Эклипс? В SWT ж вроде есть совсем простенький рендерер Html. Возможностей минимум, но для хелпа вполне достаточно.
В SWT есть Browser Control, требующий нативный браузер. Причём он портирован на Mac OS X/Linux был только в прошлом году.

C>>Но какой-нибудь браузер в том или ином виде есть везде.

AVK>А хинты эклипс тоже через какой нибудь браузер показывает?
Нет, так как там очень ограниченный набор тэгов используется. Я посмотрел — оно там специальным рендерером рисует.

C>>Для справки: полнотекстовый поиск это не линейный поиск по SQL LIKE, а поиск по специальному индексу. Таких систем не так уж много, кстати. Из качественных свободных, пожалуй, только Lucene и остаётся.

AVK>Янус ее и использует. Точнее ее порт на дотнет, кажется от Beagle.
Я это знаю.
Sapienti sat!
Re[12]: вдогонку
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.10.08 19:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

ГВ>>Не собираюсь оспаривать твои высказывания, но объясни мне, пожалуйста, почему тогда абсолютное большинство десктопного софта, написанного на яве работает в разы медленее, чем его аналоги на C/C++?

S>Вкратце: потому, что десктопный софт работает совершенно по-другому, чем серверный.
S>Более длинно:
S>1. в серверном коде важнее не responsiveness, а throughput.

О! Спасибо. На этом, в принципе, можно и остановиться. Теперь всё ясно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[24]: вдогонку
От: Воронков Василий Россия  
Дата: 28.10.08 19:02
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>КАК ты подключишь браузер к БД?


На фига мне "подключать" браузер к БД? Что вообще значит "подключить" браузер к БД? У меня десктоп-приложение, браузер — не более чем контрол для отображения данных. Его использования в данном случае аналогично какому-нибудь текст-боксу. SetText или там SetHtml и все. Работает с базой код на джава.

C>Самый простой способ — это запустить локальный сервер и законнектиться к нему. Что Eclipse и делает.

C>Естественно, там браузер используется как тупая рисовалка. Тормозит, в основном, крутое дерево категорий на JavaScript'е.
C>Что ты ещё предлагаешь улучшить и как именно?

Хочется уже перейти на нецензурный язык Я ничего не предлагаю улучшить. Я просил, зачем нужен веб-сервер. Мне ответили. Все.
Причем употребимость веб-сервера здесь оправдывается только тем, что это позволяет, грубо говоря, одну и ту же справку пихать и в веб, и в десктоп. В остальных случаях — это маразм.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[22]: вдогонку
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.10.08 19:12
Оценка:
Здравствуйте, 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>>
AVK Blog
Re[23]: вдогонку
От: Cyberax Марс  
Дата: 28.10.08 19:19
Оценка:
Здравствуйте, AndrewVK, Вы писали:

C>>В SWT есть Browser Control, требующий нативный браузер. Причём он портирован на Mac OS X/Linux был только в прошлом году.

AVK>Я не про него. Там был обычный вьювер с поддержкой несложного форматирования, не браузер.
Может ты со SWING'ом путаешь? В SWING'е, действительно, есть очень тупой нативный рендерер. Не помню я, чтоб в SWT было что-то похожее.

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

AVK>А нафига в хелпе неограниченный?
Всё же хочется побольше того, что есть в JavaDoc.

C>> Я посмотрел — оно там специальным рендерером рисует.

AVK>Ну и кто мешал это рендерер использовать и для отображения хелпа?
Тупой уж слишком.
Sapienti sat!
Re[12]: вдогонку
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.10.08 19:43
Оценка:
Здравствуйте, 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.: Винодельческие провинции — это есть рулез!
Re[4]: Жизнь внутри метода
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.10.08 20:33
Оценка: 14 (3)
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


Умножение матрички на вектор-столбец справа
matrix_ket a v = [sum_product ai v| ai <- a]


Умножение матрички на вектор-строку слева
bra_matrix v a = [bra_ket v ai | ai <- a]


Умножение вектор-строка * матричка * вектор-столбец
bra_matrix_ket u a v = bra_ket u (matrix_ket a v)


Ортогонализация Грамма-Шмидта
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>Слишком уж разные у нас с вами задачи, господа...


Из ваших сообщениях в тематических форумах подозреваю что нет. Просто у меня другое отношение к заточке инструмента
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[5]: Жизнь внутри метода
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.10.08 20:43
Оценка: +2 -1
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>А вот про матричную алгебру — это пожалуйста:


Вот из-за таких примеров народ и бегает от ФП, как черт от ладана. Классика, блин — специфичные математические задачи, однобуквенные переменные.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[5]: Жизнь внутри метода
От: IT Россия linq2db.com
Дата: 28.10.08 21:08
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Представьте себе, и это всё, да.


Это всё будет работать очень и очень медленно. Это просто в принципе не может работать быстро.
Неясность изложения обычно происходит от путаницы в мыслях.
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Жизнь внутри метода
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.10.08 21:16
Оценка:
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

или (ещё лучше) использовать literate style.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[6]: Жизнь внутри метода
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.10.08 21:18
Оценка: +1
IT,

LCR>>Представьте себе, и это всё, да.


IT>Это всё будет работать очень и очень медленно. Это просто в принципе не может работать быстро.


Что возможно верно в случае данного компилятора и не верно в общем случае. Так что с "в принципе" не согласен.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[7]: Жизнь внутри метода
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.10.08 21:25
Оценка: +1
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Не понял. Ты предлагаешь локальные бинды обзывать my_favourite_name. Или что? Если так, то это контрпродуктивно.


Я предлагаю использовать примеры, которые ближе к реальности, и писать их так, чтобы они не напоминали птичью тропку на снегу. Обсуждаемый тут пример IT как раз такой.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[7]: Жизнь внутри метода
От: IT Россия linq2db.com
Дата: 28.10.08 21:28
Оценка: :))) :))
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

IT>>Это всё будет работать очень и очень медленно. Это просто в принципе не может работать быстро.


LCR>верно


Вот!

LCR>Так что с "в принципе" не согласен.


Ты не понимаешь. Быстро может работать только написанное на ассемблере или его высокоуровневых аналогах вроде C. У тебя же только GC будет отрабатывать столько, сколько нормально написанная программа на ассемблере будет работать всего.
Неясность изложения обычно происходит от путаницы в мыслях.
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: Жизнь внутри метода
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.10.08 21:36
Оценка:
IT,

IT>Ты не понимаешь. Быстро может работать только написанное на ассемблере или его высокоуровневых аналогах вроде C. У тебя же только GC будет отрабатывать столько, сколько нормально написанная программа на ассемблере будет работать всего.


Ааааа, дошло!
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[25]: вдогонку
От: Cyberax Марс  
Дата: 28.10.08 22:39
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

C>>КАК ты подключишь браузер к БД?

ВВ>На фига мне "подключать" браузер к БД? Что вообще значит "подключить" браузер к БД? У меня десктоп-приложение, браузер — не более чем контрол для отображения данных. Его использования в данном случае аналогично какому-нибудь текст-боксу. SetText или там SetHtml и все. Работает с базой код на джава.
Вот такого контрола в Eclipse для всех платформ не было до прошлого года. Так как не везде браузер можно было так встроить — в итоге на том же Mac OS X они для контрола стали использовать встроенный Mozilla, а не местный Safari.

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

Это одна из причин. Но не единственная.
Sapienti sat!
Re[25]: вдогонку
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.10.08 03:51
Оценка: 9 (2)
Здравствуйте, Воронков Василий, Вы писали:
ВВ>На фига мне "подключать" браузер к БД? Что вообще значит "подключить" браузер к БД? У меня десктоп-приложение, браузер — не более чем контрол для отображения данных. Его использования в данном случае аналогично какому-нибудь текст-боксу. SetText или там SetHtml и все. Работает с базой код на джава.
Ключевой момент — вот этот "SetHtml". Общепринятого стандарта на него нету, в отличие от "NavigateTo".
Поэтому действительно, самый кроссплатформенный способ — это сделать NavigateTo на соответствующий адрес.
В IE применяют специальные трюки для того, чтобы не поднимать честный HTTP-сервер: например, регистрируют свой псевдопротокол.
Или пользуются интерфейсом принудительной загрузки из IStream. Но это не кросс-браузерное решение.

Резюме тут примерно такое: встроить в себя браузер — нетривиальное занятие. А держать локальный HTTP-сервер стоит не слишком дорого.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.