301

Re: FindIT - программа для поиска различной информации

Wall пишет:

Я никуда и не исчезал, собственно. Времени нет на это особо, но стараюсь иногда заглядывать.

Посмотрел код.
1. Не понравилось упоминание 'if ui == ' в нескольких местах. Плохой дизайн.
2. Конструкции типа Control()  выглядят как создание объекта, а где действие? Вы внесли действие в __init__, что напрочь убивает возможность создать объект, а потом с ним работать. У вас создание и работа возможны только в одно и тоже время. Это плохой стиль. Кстати, если бы вы этого не делали, то проблемы с коммандлайн интерфейсом не было бы. Она возникла именно из-за того, что у вас все действия выполняются в __init__.
3. config можно сделать глобальной сущностью. Зачитывать из файла 'лениво', при первом обращении к опциям. Незачем его таскать везде. Впрочем, это на любителя. Для меня конфиг - это environment, я привык что он глобальный.
4. os.environ['LANGUAGE'] = 'ru' - мне тоже не нравится. А в чем трудность? Получить текущий encoding?
5. Остальные ### непонятны. Кстати, хорошая идея, правда не новая. Обычно пишут FIXME: <объяснение>, и это понимают некоторые чекеры, так что забыть не дадут. Да и я бы вопросов не задавал, если бы было описание.

1. Временная мера - поправим на тот же вариант что и уровнем ниже.
2. Вот тут подробнее пожалуйста - с примерами конкретного кода. Вроде бы все наоборот. А действие я внес только в cli.__init__ - там иначе сложновато.
3. Насчет глобальной сущности подробнее - каким именно способом это планируется сделать - ведь его нужно где-то инициализировать. Насчет ленивого зачитывания не уверен - идею я понимаю но мне кажется что лучше работать с переменными в памяти - а потом если нужно будет записать их в конфиг - хотя наверно одно другому не мешает. Про environment подробнее - что это?


mosfet пишет:

Ещё мне не нравится, что все представления находятся рядом, их бы по файлам раскидать, только не знаю как лучше.

я тоже не знал - поэтому делил по агентам.

mosfet пишет:

Да, а как сделать pull из git gui ?

у меня это Внешние репозитории -> Получение из -> origin

Nokia N800 OS 5.2008.43-7 / Nokia 3110 Classic / Debian 5.0.0 Lenny

302

Re: FindIT - программа для поиска различной информации

alex2ndr пишет:

2. Вот тут подробнее пожалуйста - с примерами конкретного кода. Вроде бы все наоборот. А действие я внес только в cli.__init__ - там иначе сложновато.

Насколько я вижу, действие у вас и в Gtk_Presentation.__init__. Там же зовется gtk.main и показываются все окна. По-моему это уже действие.

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

Я бы хотел видеть простой интерфейс типа такого:

class XXX_Presentation(object):
    def __init__(self):
         ...
    def show(self):
         ...

где __init__ - инициализация объекта, а show - это основное действие. Можно назвать его run или еще как-нибудь, неважно. Но такой интерфейс должен работать для любых gui. Какая разница что и где показывать. То, что сделано сейчас интуитивно понятным не назовешь.

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

environment - это окружение. нечто внешнее по отношению к программе.

Посмотрите в мой бранч - я там изобразил прототипчик глобализации конфига. Там нет ленивости и сохранения, но в принципе оно работает. За основу взят прототип конфига, который я показывал раньше.
Все сделано одним коммитом: https://git.maemo.org/projects/findit/g … 5627f8bef7

770/800/810/900

303

Re: FindIT - программа для поиска различной информации

Действия какие нашёл я уже вынес в run()ы. В понедельник сделаю push.

И всё-таки меня смущают эти выполняющиеся каждый раз при поиске импортирования. Что при этом делает интерпретатор - просто ссылку в памяти обновляет или заново зачитывает в другую область?

alex2ndr пишет:

у меня это Внешние репозитории -> Получение из -> origin

а я русский перевод снёс и `Fetch from` меня смутило.

N800 N900

304

Re: FindIT - программа для поиска различной информации

mosfet пишет:

И всё-таки меня смущают эти выполняющиеся каждый раз при поиске импортирования. Что при этом делает интерпретатор - просто ссылку в памяти обновляет или заново зачитывает в другую область?

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

770/800/810/900

305

Re: FindIT - программа для поиска различной информации

Wall пишет:

Посмотрите в мой бранч - я там изобразил прототипчик глобализации конфига. Там нет ленивости и сохранения, но в принципе оно работает. За основу взят прототип конфига, который я показывал раньше.

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

N800 N900

306

Re: FindIT - программа для поиска различной информации

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

770/800/810/900

307

Re: FindIT - программа для поиска различной информации

Дело в том, что я рассматривал конфиг как набор некоторых параметров, передающихся через всю иерархию. Для gui это начальные параметры состояния всяких там кнопок которые меняются в процессе, для cli - это аргументы из командной строки. Но все они передаются через все объекты - от main до вывода результатов. А как ещё с cli работать, не вводя специфичные для него аргументы для __init__ов?

N800 N900

308

Re: FindIT - программа для поиска различной информации

Объекты с runами:

https://git.maemo.org/projects/findit/g … bb98dbc875

N800 N900

309

Re: FindIT - программа для поиска различной информации

Во что ещё нашел:
http://www.lorenzogil.com/projects/pycha/
http://pypi.python.org/pypi/pycha/

генератор различных диаграмм на cairo. Похоже, то что надо.

N800 N900

310

Re: FindIT - программа для поиска различной информации

mosfet пишет:

Дело в том, что я рассматривал конфиг как набор некоторых параметров, передающихся через всю иерархию. Для gui это начальные параметры состояния всяких там кнопок которые меняются в процессе, для cli - это аргументы из командной строки.

Это я понял. Поэтому и предложил свой вариант - информация из конфига не таскается через всю иерархию, а является глобальной и ее используют все gui и cli.

Давайте переведем это в практическое русло, а то мы тут будем долго теоретизировать.
Возьмем, скажем, поиск файлов. Там сейчас три параметра: ignore_dirs, start_path и count. Где здесь что-то, что не может юзать командлайн? Это просто умолчания для поиска. Если же юзер хочет поменять умолчания, тогда для cli он будет юзать параметры командной строки, а для гуи - тычать в элементы управления. Или вы не об этом?

Но все они передаются через все объекты - от main до вывода результатов. А как ещё с cli работать, не вводя специфичные для него аргументы для __init__ов?

Это я не понял совсем. Да, у вас конфиг передается через всю иерархию. Я предложил сделать его глобальным, вот и все. Вы смотрели тот коммит, на который я ссылался? Там по-моему все прозрачно - убирается параметр config отовсюду и config делается глобальным, больше ничего.

770/800/810/900

311

Re: FindIT - программа для поиска различной информации

Посмотрел в ваш бранч. Вот результат вашего подхода:

$ grep dev *
config.py:Config['ignore_dirs'] = ['/dev', '/proc', '/sys', '/mnt']
main.py:        self.config['ignore_dirs'] = ['/dev', '/proc', '/sys', '/mnt']

То есть параметр поиска 'ignore_dirs' у вас дублируется в коде cli, вместо того, чтобы браться из общего конфига программы.
То есть при смене умолчаний вы будете вынуждены менять все это в 2х местах. А смысл?

770/800/810/900

312

Re: FindIT - программа для поиска различной информации

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

Сделал диаграммы с помощью PyCha. Установился он у меня просто с помощью команды `easy_install pycha`.

N800 N900

313

Re: FindIT - программа для поиска различной информации

А, это. Ну, по крайней мере возьмите дефолты из конфига, чего их хардкодить.

770/800/810/900

314

Re: FindIT - программа для поиска различной информации

Извиняюсь за отсутствие - жестоко приболел.

2 Wall
Назрел такой теоретический вопрос - думал о предложенном вами варианте конфига с указанием типа прямо в файле и потом преобразовании его через eval. Но кроме этого указания типов есть еще одна задача - нужно как-то автоматически генерить представление этого объекта конфигурации - иначе придеться его менять на каждое изменение в файле конфига. Первая идея у меня была указать типы вызываемых объектов в спецификации конфига (т е если тип переменной string то вставлять в представление gtk.Entry, если boolean то checkbox и тд). Но вот от спецификации решили отказаться(заманчивый вариант что и говорить) - а с этой проблеммой как быть? есть идеи? ввести спецификацию ради этого?

Nokia N800 OS 5.2008.43-7 / Nokia 3110 Classic / Debian 5.0.0 Lenny

315

Re: FindIT - программа для поиска различной информации

Вделал конфиг, аргументы из командной строки передаются в .Control поиска через self.params, оттуда в конкретное представление поиска:

== main.py ==
class Cli_Presentation(object):
...
search_toplevel = search_module.search.Control('Cli', self.params).run()
...

class Gtk_Presentation(object):
...
search = search_module.search.Control('Gtk', None)
...


== files/search.py ==
class Control(object):
...
self.present = eval(ui + '_Presentation(self.start_search, params)')
...

Соответственно, в интерактивные представления передаётся, но ими не используется.

N800 N900

316

Re: FindIT - программа для поиска различной информации

alex2ndr пишет:

Назрел такой теоретический вопрос - думал о предложенном вами варианте конфига с указанием типа прямо в файле и потом преобразовании его через eval. Но кроме этого указания типов есть еще одна задача - нужно как-то автоматически генерить представление этого объекта конфигурации - иначе придеться его менять на каждое изменение в файле конфига.

Это я не осилил, сорри. Я думал, что в конфиг будем вставлять то, что нужно и когда оно нужно. То есть он вторичен по отношению к изменениям в программе. Соответственно, на этапе вставки этого чего-то в конфиг его тип уже будет известен. А ваша теория в чем состоит?

770/800/810/900

317

Re: FindIT - программа для поиска различной информации

mosfet пишет:

Вделал конфиг, аргументы из командной строки передаются в .Control поиска через self.params, оттуда в конкретное представление поиска

OK.

На всякий случай: Если хотите взять чужое изменение к себе в бранч, то используйте git-cherry-pick. Я понимаю, что в этом случае вам проще было так, потому что я все забабахал одним коммитом. Просто на тот случай, если вы не помните о git-cherry-pick.

770/800/810/900

318

Re: FindIT - программа для поиска различной информации

Могу сделать диалог настроек, чтобы усложнить всем жизнь с конфигом smile

N800 N900

319

Re: FindIT - программа для поиска различной информации

Wall пишет:

Это я не осилил, сорри. Я думал, что в конфиг будем вставлять то, что нужно и когда оно нужно. То есть он вторичен по отношению к изменениям в программе. Соответственно, на этапе вставки этого чего-то в конфиг его тип уже будет известен. А ваша теория в чем состоит?

Попробую пояснить подробно и разчернуто
Естественно конфиг вторичен по отношению к программе.
Только я хотел бы сделать универсальный объект конфига которому пофиг размер файла конфига - при добавлении новых опций в файл не требовалось бы работать с кодом который их оттуда читает - т е с объектом config. Введение спецификации (ну или вашего метода через eval) было решением половины проблем - мы указываем тип переменной в файле спецификации и объект конфига при запросе берет из файла конфига значение, а из файла спецификаци тип и возвращаем его по запросу - и от неважно сколько опций у нас в файле конфига - добавляем новые и описываем их в спецификации - а в код объекта не лезем и нас не волнует как он работает. Зачем это нужно я описал для TWINc в посте #245 - http://n8xx.com/message-28950.html#p28950 . В этом направлении все нормально и даже есть 2 решения - через eval и через спецификацию конфига. Но теперь продолжаем мыслить в направлении дальнейшего развития объекта. Нам нужно графическое представление настроек - т е нужно окошко в котором мы все эти настройки сможем поменять(т е пользователь сможет поменять). А тут встает та же проблема что и с типами - каждую опцию надо представить - т е у нее должно быть какое-либо описание и элемент которым ее можно регулировать (gtk.Entry, gtk.Spin, выпадающий список для опций и тд). И получается что вся наша автоматизация с типами пропадает втуне - нам все равно клепать ручками окошко представления всех этих опций - ввели новый параметр в конфиг(а если мы будем делать модульную структуру то это будет делаться регулярно) и вручную правим окошко представления. На мой взгляд это не true way smile Поэтому я предлагаю сделать чтобы это окошко генерилось само на основании файла конфига. Как я это вижу сейчас(навскидку) - расширяем файл спецификации до списка спецификации по каждой опции - например так для пути поиска файлов по умолчанию -
default_start_dir = string, entry, "Путь поиска по умолчанию"
,где
string - тип переменной
entry - объект представления, описывающий как это будет выглядеть - что то типа gtk.Hbox в который пакована gtk.label и gtk.entry с сотв параметрами (количество таких объектов не очень велико - чуть меньше чем типов)
"Путь поиска по умолчанию" - строка описания параметра, которая будет стоять перед(или над) полем ввода значения(т е это значение gtk.label).
Т е если нам нужно добавить новую опцию в конфиг то мы пишем значение опции в файле конфига и описываем тип и представление в файле спецификации - не знаю меньше ли работы по стравнению с ручной правкой представления - но зато внутрь объекта лазать не придеться. Лучшей идеи у меня пока нет.

Надеюсь понятно объяснил wink

Nokia N800 OS 5.2008.43-7 / Nokia 3110 Classic / Debian 5.0.0 Lenny

320

Re: FindIT - программа для поиска различной информации

mosfet пишет:

Могу сделать диалог настроек, чтобы усложнить всем жизнь с конфигом smile

спасибо - я уже представил масштаб проблемы - см. пост выше big_smile

Nokia N800 OS 5.2008.43-7 / Nokia 3110 Classic / Debian 5.0.0 Lenny

321

Re: FindIT - программа для поиска различной информации

alex2ndr пишет:

Надеюсь понятно объяснил wink

да! даже я понял!

Предлагаю на время забыть об этом. Иначе погрязнем. Нет предела совершенству,а идеал недостижим smile
Но в TODO можно записать.

770/800/810/900

322

Re: FindIT - программа для поиска различной информации

Сделал отображение результатов в нотебуке. Как сразу же переходить к показу найденного и как закрывать табы пока не придумал.

N800 N900

323 Отредактировано alex2ndr (20-05-2009 11:18:21)

Re: FindIT - программа для поиска различной информации

Интересная статейка - как раз под нашу ситуацию подходит -
http://www.opennet.ru/opennews/art.shtml?num=21793
Многие вещи в ней описанные я уже понял на практике.

Сейчас у нас похоже некоторый спад(сезонный вероятно) - мне например просто некогда из-за некоторых домашних дел. Но бросать нашу разработку я не собираюсь.

Nokia N800 OS 5.2008.43-7 / Nokia 3110 Classic / Debian 5.0.0 Lenny

324

Re: FindIT - программа для поиска различной информации

Почему же, разработка идёт:
https://git.maemo.org/projects/findit/gitweb?p=findit

я туда уже много чего добавил smile

N800 N900

325

Re: FindIT - программа для поиска различной информации

Рад что проект теплиться wink
у меня вот сча спад по не зависящим от меня причинам sad

Nokia N800 OS 5.2008.43-7 / Nokia 3110 Classic / Debian 5.0.0 Lenny