Дерево для rsdn.ru созданнео на NemerleWeb
От: ionoy Эстония www.ammyui.com
Дата: 23.05.13 15:38
Оценка: 331 (12)
Помнится, Влад предлагал сделать на NemerleWeb новое дерево/меню для rsdn.ru.

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

Если кому интересно, посмотреть можно здесь: http://m.rsdn.ru
Самое интересное — это код. Вся структура меню состоит из трёх Unit'ов

1. MainPage https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/MVVM/MainPage.n
Здесь рендерится общая структура страницы: левая часть (поиск, прикреплённые ветки, меню) и правая, которая содержит iframe для страниц rsdn.

2. TreeNode https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/MVVM/TreeNode.n
Собственно, нода. Всё что она делает — это рендерит свои под-ноды и подгружает их по мере надобности. Одновременно является объектом, который используется как на сервере, так и на клиенте.

3. Search https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/MVVM/Search.n
Поиск. Тут стоит обратить внимание на макрос throttle, который генерирует код примерно следующего содержания:

window.clearTimeout(_timeout1);
_timeout1 = window.setTimeout(() => {
  ...code...
}, 500)


При этом генерируется поле _timeout{X} для каждого отдельного throttle.

На сервере есть ещё всего один "лишний" класс, который отвечает за загрузку дерева в память: https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/Models/TreeLoader.n

Всё остальное генерируется фреймворком.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re: Новости NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.13 08:41
Оценка: +1
Здравствуйте, ionoy, Вы писали:

I>Помнится, Влад предлагал сделать на NemerleWeb новое дерево/меню для rsdn.ru.


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

I>Пока из новых фишек только поиск и возможность прикреплять под-ветки на главную страницу.

Отличная работа! Идея с пинед-ветками вообще замечательная.

Но есть ряд замечаний.

1. Активная ветка не выделяется визуально. По сему невозможно понять, что сейчас открыто.
2. Во вложенных элементах слишком большой отступ. Ветки уезжают вправо. Надо сделать меньших отступ. Плюсы должны начинаться сразу по окочании плюсов родительского дерева.
3. Нужно показывать кнопочки для запиненых веток в дереве (не только при наведении мыши, а всегда).
4. В окне поиска хорошо бы показывать подсказку (как в окне навигации броузера).
5. При нажатии элемента с шифтом соответствующая страница должна открываться в отдельной закладке броузера (старая версия ведет себя именно так).
6. При попытке посмотреть дерево в броузере телефона, в портретном режиме размер места отводимого под дерево был столь урезан, что текст не вмещался. В альбомном (повернутом на бок) режиме тот же эффект наблюдается если открыть ветку по глубже. Нужно с этим побороться. И вообще, нужно сделать так чтобы в телефоне деревом было пользоваться так же удобно как и на компьютере.
7. Цвета не очень. Но это уже фигня.
8. Настройки нужно хранить не в куках, а не сервере. Это не дело когда на каждом девайсе нужно настраивать окружение. Доложно быть так — залогинился и работаешь со своим окружением на любом машине в любом броузере.
9. Вообще нет вертикального сплитера, так что изменить размеры окна не получается. В мобильном режиме сплитеры вообще не нужны. Долно показываться только дерево, а другие страницы всегда отрываться в новых закладках/окнах. Плюс размеры элементов в мобильном режиме должны быть крупнее, чтобы в них можно было попадать пальцем.


Вот это:
    public IconUrl : string 
    {      
      get {        
        def suffix = match(IsOpened, HasChildren) {
                      | (false, true) => "c.gif" 
                      | (true, _) => "o.gif";
                      | _ => "s.gif";
                     };
        "http://rsdn.ru/images/tree/" + Icon + suffix;
      }
    }

плохое решение. Тут нужно усложнять. Нужно сделать так чтобы были наборы иконок, и вообще, стилей. Лучше даже чтобы стиль можно было выбрать пользователем.


ЗЫ

Могу дать доступ на сервер рсдн, чтобы страница работала прямо на нем.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Новости NemerleWeb
От: Tanker  
Дата: 24.05.13 08:54
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Если кому интересно, посмотреть можно здесь: nemerlewebrsdn.apphb.com

I>Самое интересное — это код. Вся структура меню состоит из трёх Unit'ов

А как это будет выгледть ? Где можно покликать ?
The animals went in two by two, hurrah, hurrah...
Re: Дерево для rsdn.ru созданнео на NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.13 09:00
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Пока из новых фишек только поиск и возможность прикреплять под-ветки на главную страницу.


Что касается поиска. В целом он работает не плохо. Но особа часто встречающиеся слова найти очень не просто. Так, например, очень тяжело найти форум по .Net. В его названии только ".Net", а это слово используется слишком часто.

Изначально я предлагал сделать возможность поиска по подветкам. Хорошо бы придумать что-нибудь вроде этого. Тогда можно было бы искать ".Net" только среди форумов, что облегчило бы поиск именно форумов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Новости NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.13 09:01
Оценка:
Здравствуйте, Tanker, Вы писали:

I>>Если кому интересно, посмотреть можно здесь: nemerlewebrsdn.apphb.com


T>А как это будет выгледть ? Где можно покликать ?


Ты же сам ссылку процитировавший. Кликни по ней и покликай.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Дерево для rsdn.ru созданнео на NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.13 09:07
Оценка:
Вот еще что...

Нужна возможность получить url текущей открытой страницы (как сейчас на сайте).

А так же чтобы можно при переходе на такой элемент дерево синхронизировалось.

Ну, нужно не забывать, что у нас на одну страницу может ссылаться более одной ветки дерева. Например, статьи
Автор(ы): Владимиров Константин Игоревич
Дата: 28.05.2012
Освещены такие части нового стандарта, как rvalue references и lambda expressions. Подробно изложены относящиеся к ним вопросы, в том числе использование std::move и std::function
входят как в дерево статей, так и в дерево журнала.

У нас сейчас используется следующий метод. Если в юрле есть "?", то сайт открывает страницу вместе с деревом и делает активными все ветки указывающие на эту страницу:
http://rsdn.ru/?article/cpp/Cpp11NewStd.xml
Автор(ы): Владимиров Константин Игоревич
Дата: 28.05.2012
Освещены такие части нового стандарта, как rvalue references и lambda expressions. Подробно изложены относящиеся к ним вопросы, в том числе использование std::move и std::function


Если же юрла вбивается без "?", то открывается страница без дерева.

Нужно поддержать данную традицию.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Дерево для rsdn.ru созданнео на NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.13 09:20
Оценка:
На мобильниках вообще нужно отдельно проверить. Глюков очень много. Не удается даже запинить найденную ветку.

В отдельном окне тоже не открывает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Новости NemerleWeb
От: Tanker  
Дата: 24.05.13 09:44
Оценка:
Здравствуйте, VladD2, Вы писали:

I>>>Если кому интересно, посмотреть можно здесь: nemerlewebrsdn.apphb.com


T>>А как это будет выгледть ? Где можно покликать ?


VD>Ты же сам ссылку процитировавший. Кликни по ней и покликай.


Эээ, я думал новое это новое, а не старое переписаное Или предполагается сделать все тоже что есть сейчас только на другом движке ?
The animals went in two by two, hurrah, hurrah...
Re[4]: Новости NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.13 10:55
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Эээ, я думал новое это новое, а не старое переписаное Или предполагается сделать все тоже что есть сейчас только на другом движке ?


У нас явное недопонимание.

Новое дерево, естественно, должно воспроизводить старую функциональность. Кроме того хочется новую. Тот же поиск. Вот еще припинивание появилось.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Дерево для rsdn.ru созданнео на NemerleWeb
От: WolfHound  
Дата: 24.05.13 11:08
Оценка:
Здравствуйте, ionoy, Вы писали:

    public AddPinned(id : string) : void
    {
      def pinned = nweb.getCookie("pinned");
      
      if(pinned == null) nweb.setCookie("pinned", id, 360);
      else nweb.setCookie("pinned", pinned + "," + id, 360);
      
      UpdatePinned();
    }
    
    public RemovePinned(id : string) : void
    {
      def pinned = nweb.getCookie.[string]("pinned");
      when(pinned != null) nweb.setCookie("pinned", pinned.Replace(re (",?" + id) "g", ""), 360);
      
      UpdatePinned();
    }
    
    public static GetPinned() : IEnumerable[string]
    {
      match(nweb.getCookie.[string]("pinned")) {
      | null => []
      | str => str.Split(',')
      }
    }

Вот это мне не нравится.
Нужно сделать ДСЛ для печенек.
cookie Pinned : Set[int];

А вся остальная байда должна генерироваться.
Ибо если кто-то захочет такую печеньку
cookie Pinned : Set[string];

или такую
cookie Pinned : Map[int, Set[string]];

то всё станет очень сложно.

Ну и необходимость везде писать UpdatePinned тоже плохо. Система должна сама реагировать на изменение печеньки.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Новости NemerleWeb
От: ionoy Эстония www.ammyui.com
Дата: 25.05.13 07:54
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>1. Активная ветка не выделяется визуально. По сему невозможно понять, что сейчас открыто.

VD>2. Во вложенных элементах слишком большой отступ. Ветки уезжают вправо. Надо сделать меньших отступ.
VD>Плюсы должны начинаться сразу по окочании плюсов родительского дерева.
VD>3. Нужно показывать кнопочки для запиненых веток в дереве (не только при наведении мыши, а всегда).
Согласен.

VD>4. В окне поиска хорошо бы показывать подсказку (как в окне навигации броузера).

Watermark?

VD>5. При нажатии элемента с шифтом соответствующая страница должна открываться в отдельной закладке броузера (старая версия ведет себя именно так).

Ок, посмотрим.

VD>6. При попытке посмотреть дерево в броузере телефона, в портретном режиме размер места отводимого под дерево был столь урезан, что текст не вмещался. В альбомном (повернутом на бок) режиме тот же эффект наблюдается если открыть ветку по глубже. Нужно с этим побороться. И вообще, нужно сделать так чтобы в телефоне деревом было пользоваться так же удобно как и на компьютере.

Да, с телефоном пока проблема. Я там только ошибки рендеринга исправил, о юзабилити не думал.

VD>8. Настройки нужно хранить не в куках, а не сервере. Это не дело когда на каждом девайсе нужно настраивать окружение. Доложно быть так — залогинился и работаешь со своим окружением на любом машине в любом броузере.

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

VD>9. Вообще нет вертикального сплитера, так что изменить размеры окна не получается. В мобильном режиме сплитеры вообще не нужны. Долно показываться только дерево, а другие страницы всегда отрываться в новых закладках/окнах. Плюс размеры элементов в мобильном режиме должны быть крупнее, чтобы в них можно было попадать пальцем.

+1

VD>Вот это:

VD>
VD>    public IconUrl : string 
VD>    {      
VD>      get {        
VD>        def suffix = match(IsOpened, HasChildren) {
VD>                      | (false, true) => "c.gif" 
VD>                      | (true, _) => "o.gif";
VD>                      | _ => "s.gif";
VD>                     };
VD>        "http://rsdn.ru/images/tree/" + Icon + suffix;
VD>      }
VD>    }
VD>

VD>плохое решение. Тут нужно усложнять. Нужно сделать так чтобы были наборы иконок, и вообще, стилей. Лучше даже чтобы стиль можно было выбрать пользователем.
Эта логика фактически копирует текущую, я сам ничего не выдумывал. Предлагайте наборы иконок, сделаем сменные шкуры.

VD>Могу дать доступ на сервер рсдн, чтобы страница работала прямо на нем.

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

VD>Изначально я предлагал сделать возможность поиска по подветкам. Хорошо бы придумать что-нибудь вроде этого. Тогда можно было бы искать ".Net" только среди форумов, что облегчило бы поиск именно форумов.

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

VD>У нас сейчас используется следующий метод. Если в юрле есть "?", то сайт открывает страницу вместе с деревом и делает активными все ветки указывающие на эту страницу:

http://rsdn.ru/?article/cpp/Cpp11NewStd.xml
Автор(ы): Владимиров Константин Игоревич
Дата: 28.05.2012
Освещены такие части нового стандарта, как rvalue references и lambda expressions. Подробно изложены относящиеся к ним вопросы, в том числе использование std::move и std::function

ОК, посмотрим.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[2]: Дерево для rsdn.ru созданнео на NemerleWeb
От: ionoy Эстония www.ammyui.com
Дата: 25.05.13 08:07
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Нужно сделать ДСЛ для печенек.

Согласен, DSL пригодится.

WH>
WH>cookie Pinned : Set[int];
WH>

Тут надо определится с коллекциями, которые можно будет сериализовывать. Далеко не все .NET контейнеры для этого подходят.

WH>Ну и необходимость везде писать UpdatePinned тоже плохо. Система должна сама реагировать на изменение печеньки.

В принципе, если у нас код наподобие такого:

ValueInCookies : string { get { //read value from cookies } }
   
Method() : void {
   "Hello, " + ValueInCookies;
}


То работать будет и сейчас.
У нас по-любому сейчас нет выборочного биндинга. На любое изменение все биндинги пересчитываются заново.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[3]: Дерево для rsdn.ru созданнео на NemerleWeb
От: WolfHound  
Дата: 25.05.13 13:13
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Тут надо определится с коллекциями, которые можно будет сериализовывать. Далеко не все .NET контейнеры для этого подходят.

Set, MultiSet, Dictionary, MultiDictionary и List.
Этого думаю хватит.

I>У нас по-любому сейчас нет выборочного биндинга. На любое изменение все биндинги пересчитываются заново.

Это плохо. До релиза нужно исправить.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Дерево для rsdn.ru созданнео на NemerleWeb
От: ionoy Эстония www.ammyui.com
Дата: 25.05.13 13:51
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>У нас по-любому сейчас нет выборочного биндинга. На любое изменение все биндинги пересчитываются заново.

WH>Это плохо. До релиза нужно исправить.

Это не очень хорошо, согласен. Но пока перформанс устраивает, просто нет смысла браться за такую большую работу. Пока ещё не решены более важные вопросы.
Есди кто готов помочь, то я с радостью бы объяснил что примерно надо делать, но самому просто некогда.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[3]: Новости NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.13 10:55
Оценка:
Здравствуйте, ionoy, Вы писали:

VD>>4. В окне поиска хорошо бы показывать подсказку (как в окне навигации броузера).

I>Watermark?

Нет. Выпадающий список с вариантами.

Вообще, подумалось, что это дело можно под консоль стилизовать. Консолька с автодполнением. Будет прикольно.

I>У нас нет доступа к рсдн серверу, поэтому и привязывать к логину пока не получится.


В понедельник постучись на скайп — сделаем.

VD>>
VD>>                      | (false, true) => "c.gif" 
VD>>                      | (true, _) => "o.gif";
VD>>                      | _ => "s.gif";
VD>>                     };
VD>>        "http://rsdn.ru/images/tree/" + Icon + suffix;
VD>>

VD>>плохое решение. Тут нужно усложнять. Нужно сделать так чтобы были наборы иконок, и вообще, стилей. Лучше даже чтобы стиль можно было выбрать пользователем.
I>Эта логика фактически копирует текущую, я сам ничего не выдумывал. Предлагайте наборы иконок, сделаем сменные шкуры.

Надо просто каталог в переменную пометить и где-нить считывание настройки из профиля сделать.

VD>>Изначально я предлагал сделать возможность поиска по подветкам. Хорошо бы придумать что-нибудь вроде этого. Тогда можно было бы искать ".Net" только среди форумов, что облегчило бы поиск именно форумов.

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

Попробуй найти форум по .Net или Nemerle. Тебе будет выдано туева хуча веток где встречается .Net или Nemerle. Найти нужный элемент очень сложно. Если же искать только по форумам, то найти будет элементарно (форумов по .Net — три, а по Nemerle — два.

Можно, конечно, попробовать поднимать вверх результаты в которых искомое слова находится вначале названия и те имена которых полностью совпадают с исходной строкой. Кроме того имеет смысл, тогда, поднимать в верх форумы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Новости NemerleWeb
От: _NN_ www.nemerleweb.com
Дата: 26.05.13 11:27
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Мне кажется будет лучшим решением добавить категории как в поиске гугла.
Скажем: Все | Форумы | Статьи
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Новости NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.13 11:36
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Мне кажется будет лучшим решением добавить категории как в поиске гугла.

_NN>Скажем: Все | Форумы | Статьи

Эти категории есть в виде корневых веток дерева. Я как раз и предлагал прикрепить поиск к ним. Ну, типа наводишь на ветку мышь, а рядом появляется полупрозрачная кнопка с лупой. подводишь к ней мышь и появляется окошко поиска. При поиске в нем поиск идет только по подветкам текущей ветки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Новости NemerleWeb
От: _NN_ www.nemerleweb.com
Дата: 26.05.13 11:39
Оценка:
Здравствуйте, VladD2, Вы писали:

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


_NN>>Мне кажется будет лучшим решением добавить категории как в поиске гугла.

_NN>>Скажем: Все | Форумы | Статьи

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


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

А так вбил в поиск, не нашлось с первого раза, выбрал категорию и нашел.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: Новости NemerleWeb
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.13 11:41
Оценка: +1
Здравствуйте, _NN_, Вы писали:

_NN>Мне кажется это менее удобно.

_NN>Нужно найти корневую ветку, подвести , попасть в лупу.

_NN>А так вбил в поиск, не нашлось с первого раза, выбрал категорию и нашел.


Я не агитирую за конкретное решение. Но есть проблема поиска часто встречаемых фраз и ее нужно как-то решить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Дерево для rsdn.ru созданнео на NemerleWeb
От: wildwind Россия  
Дата: 26.05.13 15:01
Оценка:
При подведении указателя к иконке пина она исчезает.
Opera 12.02.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.