Опрос о приоритетах

Больше
11 года 6 мес. назад #21 от Rapid D
Rapid D ответил в теме RE: Опрос о приоритетах
Пушкожук писал(а):

xml-файл тоже может повредиться. Нужно как-то по-другому писать в файлы (FILE_FLAG_WRITE_THROUGH? Или делать бэкапы автоматически с некоторым интервалом?)
...

В Windows Vista появилась возможность писать файлы транзакциями.
Из-за того, что в XP такого нет, я не стал заморачиваться с этим.

В общем, если кто знает как сделать сохранение более надёжным - прикладывайте код, который нужно поменять.

По моей логике, код:
zf.SaveToFile(uPath+dbFileName + '4.new');
    DeleteFile(uPath+dbFileName + '4');
    RenameFile(uPath+dbFileName + '4.new', userPath+dbFileName + '4');
подразумевает, что в любой момент существует целый файл настроек. И только при условии кривых дров, старый файл стирается быстрее, чем запишется новый.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад - 11 года 6 мес. назад #22 от !ShadoW!
!ShadoW! ответил в теме RE: Опрос о приоритетах
В крыске есть очень полезная функция - отправить контакты - где можно выбрать один или несколько контактов и получатель получит их в виде Nic - UIN
В идеале так и должно быть, но к сожалению эта функция не совсем корректно работает. Да в большинстве случаев вообще не работает. (как я понял - это происходит потому что большинство клиентов не принимает контакты - видимо они передаются каким-то особым методом. Но не понятно тогда почему нельзя сделать так, чтобы они передавались просто в виде слова(ник)-и цифр(UIN)? )

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

Благодарю за лучший ICQ клиент! :woohoo:
Последнее редактирование: 11 года 6 мес. назад пользователем !ShadoW!.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #23 от batekman
batekman ответил в теме RE: Опрос о приоритетах
Мне кажется, не надо что-либо усложнять - надо оставить R&Q просто ICQ-клиентом, а не превращать его в комбайн, навороченный бесполезными свистелками, вроде извращенского QIP.
Вот мне хотелось бы, чтобы во-первых, убрали косяк, из-за которого после перехода на полноэкранное приложение со сменой разрешения окно находится где-то за километр от того места, где было, а при попытке перетащить прыгает куда-то за пределы экрана, как у меня это и происходит. А во-вторых, давно уже пора сделать отключаемым это чудо с прокруткой окна чата, из-за которого на каждом длинном сообщении приходится делать двойной клик, чтобы прочитать, а это сбивает с мысли и мешает ориентироваться в сообщениях.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #24 от Rapid D
Rapid D ответил в теме RE: Опрос о приоритетах
batekman писал(а):

Мне кажется, не надо что-либо усложнять - надо оставить R&Q просто ICQ-клиентом...

В опросе спрашивается не о том, что сделать с R&Q, а чем заняться дальше.
R&Q так и останеться просто аськой - об этом я уже писал.
Потому и стоит вопрос стоит - делать клиент для винды или андроида.
Судя по всему, большинству нужен жабер, и чтобы 2 аськи с жабером работали в одной програме.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад - 11 года 6 мес. назад #25 от cy6
cy6 ответил в теме RE: Опрос о приоритетах
Считаю, что RnQ должен оставаться маленьким клиентом (необязательно именно аськой), даже возможно без привязки к протоколу (любой один протокол на выбор, в виде внешнего модуля), что было бы большим плюсом. Путь развития для такой задачи очевиден, оптимизация и еще раз оптимизация, исправление ошибок и самые необходимые доработки только.

Мультипротокольность, новые фичи, и так далее, могут быть в R&Q Multi, включая и протокол ICQ.

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

Rapid D писал(а):

Потому и стоит вопрос стоит - делать клиент для винды или андроида.

Не думаю, что на сегодняшний день Windows настолько сдала позиции. В будущем возможно, и даже вероятно, в связи с уходом Билла и путем развития W7. И не факт, что новым лидером станет Android, хотя весьма вероятно (учитывая размах и возможности Google). Следовательно, была бы полезна некая мультиплатформенность.
Последнее редактирование: 11 года 6 мес. назад пользователем cy6.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #26 от megas
megas ответил в теме RE: Опрос о приоритетах
Rapid D писал(а):

Wendor писал(а):

Я за jabber и за общий клиент (ICQ + Jabber в одной запущенной копии) :)

Я бы тоже ЗА, но сначала одно, а потом другое...


Самое лучшее, это если попробовать развивать первое и второе направление одновременно.

Вот у меня к примеру две аськи (одна личная, другая рабочая), а ещё я очень давно хочу подключить свой гугловский аккаунт, только вот держать на десктопе (и трее) кучу копий окон R&Q я совсем не хочу, а вот еслиб всё это работало в одном окне...
В итоге получается, что поддержка XMPP это круто! Только вот без поддержки многоаккаунтности для меня это абсолютно не юзабильно.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #27 от agmt
agmt ответил в теме RE: Опрос о приоритетах
Насчёт андроида - дело, в целом, хорошее, ибо под него сейчас самое удобное (субъективно, конечно): Jimm ч/з Jbed, Mail.ru agent.
Но что значит R&Q под Android? По сути, не более чем такой же взгляд на хистори.

Я считаю, что над этим не стоит заморачиваться, ибо автор лучшей читалки для WM - AlReader хотел сделать порт под андроид и жутко плевался от явы. Опять же, исключительно моё имхо: формат хистори открыт, начать делать может любой из участников данного форума на общественных началах. Дело не пропадёт, а если сделать либу для хистори используя великий C (Android Native Development Kit), то получится замечательное начало кроссплатформенности.

Хотя сама по себе кроссплатформенность, опять же субъективно, нахрен не нужна, ибо wine - самая истинная кроссплатформенность, а остальное - лишь проблемы.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад - 11 года 6 мес. назад #28 от Legeon
Legeon ответил в теме RE: Опрос о приоритетах
Rapid D писал(а):

Пушкожук писал(а):

xml-файл тоже может повредиться. Нужно как-то по-другому писать в файлы (FILE_FLAG_WRITE_THROUGH? Или делать бэкапы автоматически с некоторым интервалом?)
...

В Windows Vista появилась возможность писать файлы транзакциями.
Из-за того, что в XP такого нет, я не стал заморачиваться с этим.

Дело не в ос, насколько я помню стандартные средства работы с файлами позволяют писать по смещению.

Rapid D писал(а):

В общем, если кто знает как сделать сохранение более надёжным - прикладывайте код, который нужно поменять.

По моей логике, код:

zf.SaveToFile(uPath+dbFileName + '4.new');
    DeleteFile(uPath+dbFileName + '4');
    RenameFile(uPath+dbFileName + '4.new', userPath+dbFileName + '4');
подразумевает, что в любой момент существует целый файл настроек. И только при условии кривых дров, старый файл стирается быстрее, чем запишется новый.


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

Во первых доступ на чтение к файлу настроек должен открываться только в случает
1) запуска программы
2) открытия окна настроек
После чего файл конфига считывается и доступ к нему закрывается.

Во вторых доступ на запись открывается только при нажатии на кнопку ОК или ПРИМЕНИТЬ в окне настроек.
В этот же момент происходит сохранение конфига. Больше ни в каких других частях программы (кроме запоминания пароля я так понимаю).


В итоге должно выглядеть как то так.
if(zf.SaveToFile(uPath+dbFileName + '4.new')==0) then begin
  pause(100);
  if(FileExist(uPath+dbFileName + '4.old') then DeleteFile(uPath+dbFileName + '4.old');
  pause(100);
  RenameFile(uPath+dbFileName + '4', userPath+dbFileName + '4.old');
  pause(100);
  if(RenameFile(uPath+dbFileName + '4.new', userPath+dbFileName + '4')<>0(Ошибка)) then begin
   pause(100);
   RenameFile(uPath+dbFileName + '4.old', userPath+dbFileName + '4');
   Error window;
  end;
 end;

Увы как на делфи писать уже не помню :blush:
Последнее редактирование: 11 года 6 мес. назад пользователем Legeon.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #29 от Пушкожук
Пушкожук ответил в теме RE: Опрос о приоритетах
Rapid D писал(а):

По моей логике, код:

zf.SaveToFile(uPath+dbFileName + '4.new');
    DeleteFile(uPath+dbFileName + '4');
    RenameFile(uPath+dbFileName + '4.new', userPath+dbFileName + '4');
подразумевает, что в любой момент существует целый файл настроек. И только при условии кривых дров, старый файл стирается быстрее, чем запишется новый.

Но есть же кэширование записи. То есть, после закрытия файла данные на самом деле могут лежать в кэше, а не на диске. Сколько они там пролежат - известно только разработчикам Windows :) Помню, читал на другом форуме, что данные могут месяцами не записываться на диск, если постоянно обновляются (тема была о восстановлении БД после сбоя). Флаг FILE_FLAG_WRITE_THROUGH (если верить MSDN) отключает кэширование, но, по идее, замедлит работу программы.

Legeon писал(а):

Дело не в ос, насколько я помню стандартные средства работы с файлами позволяют писать по смещению.

Файл настроек представляет собой zip-архив, поэтому можно только писать его полностью, с начала и до конца.
Ещё проблема в том, что в архиве хранятся не только настройки, а много чего ещё:
  • тексты автосообщений и доп. статусов
  • контакт-лист
  • база данных контактов
  • список видящих, невидящих, игнора и др.
  • список открытых вкладок чата
  • непрочитанные входящие сообщения
  • неотправленные исходящие сообщения (которые можно просмотреть в Меню-Дополнительно-Исходящие)
При изменении любого файла происходит перезапись всего архива.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад - 11 года 6 мес. назад #30 от cy6
cy6 ответил в теме RE: Опрос о приоритетах
Legeon писал(а):

В итоге должно выглядеть как то так.

if(zf.SaveToFile(uPath+dbFileName + '4.new')==0) then begin
  pause(100);
  if(FileExist(uPath+dbFileName + '4.old') then DeleteFile(uPath+dbFileName + '4.old');
  pause(100);
  RenameFile(uPath+dbFileName + '4', userPath+dbFileName + '4.old');
  pause(100);
  if(RenameFile(uPath+dbFileName + '4.new', userPath+dbFileName + '4')<>0(Ошибка)) then begin
   pause(100);
   RenameFile(uPath+dbFileName + '4.old', userPath+dbFileName + '4');
   Error window;
  end;
 end;

Давненько досовских фукций типа "pause" не встречала. :silly:
Вообще то, для Windows уже давно сделали вот такое WaitForSingleObjectEx

А также, асинхронный I/O (см. состояние Alertable).
Правила применения этих WinAPI функций от языка (Deplhi/C/C++) не зависят, разве что синтаксис чуть отличается.

Пушкожук писал(а):

Rapid D писал(а):

По моей логике, код:

zf.SaveToFile(uPath+dbFileName + '4.new');
    DeleteFile(uPath+dbFileName + '4');
    RenameFile(uPath+dbFileName + '4.new', userPath+dbFileName + '4');

Самое интересное еще может скрываться в объектном методе "zf.SaveToFile".
Есть большие сомнения, что реализация класса владельца пишет свой поток одной порцией (то есть одним вызовом WriteFile), это скорее всего только объектная чать выглядит красиво. :) Это плюс к проблеме неопределенного по времени кэширования.
Последнее редактирование: 11 года 6 мес. назад пользователем cy6.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #31 от Legeon
Legeon ответил в теме RE: Опрос о приоритетах
cy6 писал(а):

Давненько досовских фукций типа "pause" не встречала. :silly:
Вообще то, для Windows уже давно сделали вот такое WaitForSingleObjectEx

А также, асинхронный I/O (см. состояние Alertable).
Правила применения этих WinAPI функций от языка (Deplhi/C/C++) не зависят, разве что синтаксис чуть отличается.

Самое интересное еще может скрываться в объектном методе "zf.SaveToFile".
Есть большие сомнения, что реализация класса владельца пишет свой поток одной порцией (то есть одним вызовом WriteFile), это скорее всего только объектная чать выглядит красиво. :) Это плюс к проблеме неопределенного по времени кэширования.

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

А по поводу хеша, не так часто что то в этот конфиг пишеться.

К тому же, как я уже раньше писал, так ли целесообразен этот зип что там формат.

Может отказаться от подобного и разделить эту мегабазу на несколько xml файлов без всяких сжатий.

Кстати кстати, а где можно последние исходники глянуть и в чем их можно открыть? Может гляну что там...? Вспомню молодость)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #32 от Пушкожук
Пушкожук ответил в теме RE: Опрос о приоритетах
Legeon писал(а):

Может отказаться от подобного и разделить эту мегабазу на несколько xml файлов без всяких сжатий.

Раньше так и было, правда, были не xml-файлы, но они были отдельно. С версии 1104 появился zip-архив.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #33 от Zetl
Zetl ответил в теме RE: Опрос о приоритетах
Предлагаю реализовать то, что написано здесь .

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #34 от DarkHeavy
DarkHeavy ответил в теме RE: Опрос о приоритетах
rrrFer_ писал(а):

DarkHeavy писал(а):

Сделать возможность записывать историю переписки только с определёнными UIN'ами.
Другими словами добавить в поп-ап меню, которое появляется при нажатии на номер контакта правой кнопкой, "галочку" записывать историю. Глобально запись/не запись истории выставляется в настройках, но если надо, чтобы история записывалась не для всех, выбираем контакт и снимает "галочку" записывать истори. непосредственно с контакта ;)

Ну пожалуйста!

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


Был бы очень признателен ;) Спасибо ;)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #35 от Legeon
Legeon ответил в теме RE: Опрос о приоритетах
Еще, еще.
Нужно чтобы в окне чата работали кнопки Page Up, Page Down, Home и End, не то чтобы без них никак но навигация затрудняется.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #36 от LubitelSofta
LubitelSofta ответил в теме RE: Опрос о приоритетах
:blink: эти кнопки даже в квипе работают... в миранде тоже.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад #37 от cy6
cy6 ответил в теме RE: Опрос о приоритетах
Legeon писал(а):

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

А разве процедура Pause есть вообще в актуальных версиях Delphi (Delphi 6 и выше)? Не смогла найти ее исходник в CRT. :unsure:

Приостановка потока выглядит так: SleepEx .
Но прежде чем его приостанавливать (тем более на длительный интервал), не стоит ли разобраться, есть ли какая другая асинхронная обработка в этом потоке(те же UserAPC которые так любит Delphi), и чем это чревато?
Да и зачем все это мучение, когда WinAPI всегда может точно сказать, когда закончилась какая-либо операция?

Имхо, ненадежность записи "db5", это вопрос надежности кода компонента SciZipFile.
Вряд ли сама крыса этим грешит.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад - 11 года 6 мес. назад #38 от Rapid D
Rapid D ответил в теме RE: Опрос о приоритетах
Legeon писал(а):

Еще, еще.
Нужно чтобы в окне чата работали кнопки Page Up, Page Down, Home и End, не то чтобы без них никак но навигация затрудняется.

Хм, а зажать ctrl или alt, и потом нажимать "Page Up, Page Down, Home и End" - так вам очень не нравица?


cy6 писал(а):

Legeon писал(а):

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

А разве процедура Pause есть вообще в актуальных версиях Delphi (Delphi 6 и выше)? Не смогла найти ее исходник в CRT. :unsure:

...
Имхо, ненадежность записи "db5", это вопрос надежности кода компонента SciZipFile.
Вряд ли сама крыса этим грешит.

По моему мы с вами уже это обсуждали, и меня даже убедили в ненадёжности "кода компонента SciZipFile".
А потому, считайте, что строка "zf.SaveToFile(uPath+dbFileName + '4.new');" передаёт весь файл одним куском!

Можно попробовать добавить флаг FILE_FLAG_WRITE_THROUGH для записи БД (включаемое отдельной настройкой, для неблагоприятных компов).
Правда тогда наверное придёться выносить сохранение в отдельный поток, чтобы вся программа не подвисала.
Последнее редактирование: 11 года 6 мес. назад пользователем Rapid D.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад - 11 года 6 мес. назад #39 от agmt
agmt ответил в теме RE: Опрос о приоритетах
А в чём проблема сделать так:

DeleteFile(userPath+dbFileName + '4.old');
RenameFile(uPath+dbFileName + '4', userPath+dbFileName + '4.old');
zf.SaveToFile(uPath+dbFileName + '4');

А при загрузке

zf.LoadFromFile(uPath+dbFileName + '4');
if(not IsOkCRC(zf)) then
begin
zf.Close();
DeleteFile(userPath+dbFileName + '4');
RenameFile(uPath+dbFileName + '4.old', userPath+dbFileName + '4');
zf.LoadFromFile(uPath+dbFileName + '4');
end;


Added: по ходу, именно такое поведение и реализовано в случае галочки "Делать резервные копии файлов перед записью", быть может, кроме загрузки=)
P.S. больше смущают ошибки с хистори. Особенно, что пока не запустишь R&QRepair, который работает медленно, хистори не будет сохраняться.
Последнее редактирование: 11 года 6 мес. назад пользователем agmt.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад - 11 года 6 мес. назад #40 от dvizik
dvizik ответил в теме RE: Опрос о приоритетах
Доработать историю - импорт/экспорт
Доработать передачу файлов
Мультипротокольность сделать
И со статусами разобраться!
Последнее редактирование: 11 года 6 мес. назад пользователем dvizik.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: bassvazoozaDelphukdekTiMeTraSheRLaDyStRaNGed0CeNTRapid D
Время создания страницы: 0.509 секунд
Работает на Kunena форум