<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум сайта Webhamster.ru &mdash; Восстановление записей из корзины]]></title>
	<link rel="self" href="https://webhamster.ru/punbb/extern.php?action=feed&amp;tid=94&amp;type=atom" />
	<updated>2017-06-06T06:30:33Z</updated>
	<generator>PunBB</generator>
	<id>https://webhamster.ru/punbb/viewtopic.php?id=94</id>
		<entry>
			<title type="html"><![CDATA[Re: Восстановление записей из корзины]]></title>
			<link rel="alternate" href="https://webhamster.ru/punbb/viewtopic.php?pid=1759#p1759" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>babaduk пишет:</cite><blockquote><p>Я мог бы попробовать реализовать эту идею.</p></blockquote></div><p>Это будет сложно даже для меня как для автора программы. Работа большая. Лучше придумайте какие-нибудь консольные программы-помогаторы на PHP, с помощью которых можно выполнять действия с базой MyTetra. Попробуйте все что вы написали реализовать в виде PHP-скрипта: запускаете, он лезет в корзину, находит файлы, составляет список, показывает его пользователю, спрашивает что восстановить, и восстанавливает, создавая через DOM в mytetra.xml нужные ветки, создавая каталоги восстанавливаемых записей, помещая туда файлы восстанавливаетмых записей, правильно их переименовывая.</p><p>Вот это будет действительно нужная вещь, и вам будет более реалистично ее сделать.</p>]]></content>
			<author>
				<name><![CDATA[xintrea]]></name>
				<uri>https://webhamster.ru/punbb/profile.php?id=2</uri>
			</author>
			<updated>2017-06-06T06:30:33Z</updated>
			<id>https://webhamster.ru/punbb/viewtopic.php?pid=1759#p1759</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Восстановление записей из корзины]]></title>
			<link rel="alternate" href="https://webhamster.ru/punbb/viewtopic.php?pid=1741#p1741" />
			<content type="html"><![CDATA[<p>Я мог бы попробовать реализовать эту идею. Однако сразу скажу что я не программист. У меня есть определенные знания в следующих сферах, в каждой понемногу: <br />&nbsp; - могу написать простой bat файл<br />&nbsp; - как ни странно я раньше неплохо разбирался в регулярных выражениях. И сейчас вспомнить их думаю не составит труда.<br />&nbsp; - есть кое какие навыки программирования на уровне написать несложный скетч для arduino.<br />&nbsp; - Когда учился разбирался в бейсике и паскале. Даже ходил на кружок ассемблера целый месяц. Почти все забыл сейчас.</p><p>Для меня в этой реализации будет по силам произвести операции по переименовыванию файлов, созданию архивов и другие похожие операции путем создания bat файла. Но будет довольно сложно работать с xml файлом, производить запись в него новых строк и т.д. Я даже не представляю в какой среде это легче всего сделать и с чего начать. Если бы кто помог, или хотя бы направил в нужную сторону я бы попытался это сделать. Чисто из спортивного интереса. Проветрить свои нейронные сети так сказать.</p>]]></content>
			<author>
				<name><![CDATA[babaduk]]></name>
				<uri>https://webhamster.ru/punbb/profile.php?id=1423</uri>
			</author>
			<updated>2017-05-18T17:42:45Z</updated>
			<id>https://webhamster.ru/punbb/viewtopic.php?pid=1741#p1741</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Восстановление записей из корзины]]></title>
			<link rel="alternate" href="https://webhamster.ru/punbb/viewtopic.php?pid=1740#p1740" />
			<content type="html"><![CDATA[<p>Мое решение, которое реализует функционал корзины.</p><p>1. Введем понятие &quot;Режим корзины&quot; - это такой режим работы приложения MyTetra, в котором работа происходит с удаленными записями. Вместо них при открытии приложения, в корневой папке находятся 2 ветки с названиями &quot;корзина&quot; и &quot;восстановление&quot;. </p><p>В ветке &quot;корзина&quot; находятся все записи, которые были удалены. Ветка &quot;Восстановление&quot; изначально пуста. Пользователь должен самостоятельно найти среди удаленных записей те, которые следует восстановить и переместить их в ветку &quot;восстановление&quot;. После перемещения этих записей следует произвести экспорт ветки &quot;восстановление&quot; в отдельную папку. Затем следует выйти из программы и сменить &quot;Режим корзины&quot; на &quot;Нормальный&quot;. Загрузить программу в &quot;Нормальном режиме&quot; и произвести импорт отобранных для восстановления записей.</p><p>2. Для перевода программы в &quot;Режим корзины&quot; следует:<br />&nbsp; - Заранее создать папку к примеру &quot;Архивные копии&quot;. Единоразово.<br />&nbsp; - В эту папку произвести архивирование следующих файлов:<br />&nbsp; &nbsp; &nbsp; mytetra.xml (файл основной базы данных)<br />&nbsp; &nbsp; &nbsp; conf.ini (из каталога программы)<br />&nbsp; &nbsp; Там будет склад файлов к примеру 18052017204023archive.zip<br />&nbsp; &nbsp; Перед каждым переводом программы в &quot;Режим корзины&quot; будет создаваться новый архив и добавляться в эту папку. Это действие будет производится автоматически, скриптом.</p><p>3.&nbsp; Перед переводом программы в &quot;Режим корзины&quot; рядом с папкой &quot;trash&quot; создается папка &quot;trash_export&quot; (в случае если папка уже существовала, она очищается). В этой папке создаются подпапки &quot;data&quot; &quot;trash&quot;. В папке &quot;data&quot; создаются все нужные файлы для работы полноценной базы данных. Для каждой удаленной записи из корзины создаются соответствующие папки в подпапке &quot;base&quot;. Данные берутся из файлов *_mytetra.xml и аккумулируются в одном новом файле mytetra.xml. </p><p>4. Файл &quot;conf.ini&quot; переименовывается в &quot;conf.ini.tmp&quot;. Вместо него создается новый файл, в котором прописаны пути к базе данных &quot;trash_export&quot;.</p><p>5. Запускается программа. В ней пользователь производит необходимые манипуляции и выгружает восстанавливаемые записи в отдельную папку.</p><p>6. После выхода из программы пользователь запускает скрипт перевода программы в &quot;Основной режим&quot;. Производится переименование &quot;conf.ini&quot; в &quot;conf.ini.exp.tmp&quot; и файла &quot;conf.ini.tmp&quot; в &quot;conf.ini&quot;.</p><p>7. Запускается программа и в ней пользователь производит импорт отобранных записей и распределяет их по своим местам.</p>]]></content>
			<author>
				<name><![CDATA[babaduk]]></name>
				<uri>https://webhamster.ru/punbb/profile.php?id=1423</uri>
			</author>
			<updated>2017-05-18T17:15:50Z</updated>
			<id>https://webhamster.ru/punbb/viewtopic.php?pid=1740#p1740</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Восстановление записей из корзины]]></title>
			<link rel="alternate" href="https://webhamster.ru/punbb/viewtopic.php?pid=1737#p1737" />
			<content type="html"><![CDATA[<p>Я примерно так себе&nbsp; и представлял. У меня возникла идея, как просматривать записи из корзины с помощью несложного, как мне кажется &quot;костыля&quot;. Его создание и алгоритм я опишу в следующем посте. </p><p>Все таки не все люди пользуются таким резервным копированием, которое выполняется настолько часто, что позволяет вытащить записи, которые были созданы и удалены совсем в короткий промежуток времени. Поэтому для меня приоритетней иметь возможность сиюминутно зайти в корзину и просмотреть что в в нее попало.</p>]]></content>
			<author>
				<name><![CDATA[babaduk]]></name>
				<uri>https://webhamster.ru/punbb/profile.php?id=1423</uri>
			</author>
			<updated>2017-05-18T11:52:25Z</updated>
			<id>https://webhamster.ru/punbb/viewtopic.php?pid=1737#p1737</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Восстановление записей из корзины]]></title>
			<link rel="alternate" href="https://webhamster.ru/punbb/viewtopic.php?pid=1733#p1733" />
			<content type="html"><![CDATA[<p>Корзина в том виде, в котором она есть сейчас - это задел на будущее. Восстановить из нее запись можно вручную, при всяких форсмажорах. В корзину скидываются файлы базы MyTetra перед их перезаписью. То есть, когда файл должен измениться, вначале его копия помещается в корзину, а потом он меняется. И еще в корзину попадают файлы удаленных записей. И при изменении дерева в корзину попадает копия файла делева mytetra.xml. Можете поэкспериментировать: поудалять, поизменять записи, и вы увидите как появляются новые файлы в корзине и удаляются старые. </p><p>Имена файлов в корзине генерируются автоматически: &quot;TempUID_имяфайла.расширение&quot;. TempUID - это уникальный идентификатор, содержащий в начале себя время UNIX timestamp и случайную строку для избегания коллизий с вероятностью 10^-15 в секунду появления файла. Например, при удалении записи с одной картинкой, в корзине появятся файлы:</p><div class="codebox"><pre><code>14950891894te1zbcsth_mytetra.xml - файл дерева перед удалением записи
1495089189i5ua2dsfjh_text.html - файл текста записи
1495089189cfl7z52n7l_image5288.png - картинка, используемая в записи</code></pre></div><p>Если удаляемые/изменяемые данные не были зашифрованы, то вручную восстановить запись просто. Во-первых, вы их можете посмотреть чтобы понять, та ли эта запись которая нужна. Во-вторых, вы можете создать пустую запись, найти каталог этой записи (сделать видимым столбец &quot;Имя директории&quot; или нажать в контекстном меню &quot;Скопировать ссылку на запись&quot;, в ссылке увидеть идентификатор и по нему найти имя директории в файле mytetra.xml). И вот в этой директории нужно подменить файлы записи (html и png), предварительно переименовав их путем удаления префикса &quot;TempUID_&quot;. Название и прочие атрибуты удаленной записи можно найти в файле 14950891894te1zbcsth_mytetra.xml, и потом прописать их в интерфейсе MyTetra или напрямую отредактировать файл mytetra.xml.</p><p><strong>Внимание!</strong> В момент ручной работы с базой MyTetra должна быть выключена. Или, как минимум, в момент подмены файлов записи, курсор должен стоять на другой записи (если вы только подменяете запись) плюс должна быть включена настройка &quot;Периодическая проверка дерева записей...&quot; если вручную меняете mytetra.xml и у вас при этом MyTetra работает.</p><p>Если удалялась зашифрованная запись, то дайствия те же самые, только посмотреть содержание файлов вы не сможете пока не поместите их в MyTetra. Понять какие файлы относятся к удаленной зашифрованной записи можно коственным путем - по времени удаления записи (соответственно по времени создания файла в корзине), по размеру файла ..._text.html (размер зашифрованного файла отличается от нешифрованного только дополнительным размером заголовка в 32 байта плюс несколько байт в хвосте для выравнивания на размер блока). При засовывании зашифрованных файлов вручную обратно в базу надо учесть, что они нормально восстановятся только в случае, если пароль не менялся.</p><p>Возможно я когда-нибудь сделаю MyTetra Crypt Tool, чтобы можно было расшифровывать файлы, зная пароль.</p><p>Ну а вообще предполагается, что когда-нибудь появится интерфейс для восстановления записей из корзины. Но как-то он оказался особенно не нужен, потому что многие настраивают резервное копирование/синхронизацию данных через системы контроля версий, и в случае проблем могут откатиться с помощью них.</p>]]></content>
			<author>
				<name><![CDATA[xintrea]]></name>
				<uri>https://webhamster.ru/punbb/profile.php?id=2</uri>
			</author>
			<updated>2017-05-18T07:12:13Z</updated>
			<id>https://webhamster.ru/punbb/viewtopic.php?pid=1733#p1733</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Восстановление записей из корзины]]></title>
			<link rel="alternate" href="https://webhamster.ru/punbb/viewtopic.php?pid=1732#p1732" />
			<content type="html"><![CDATA[<p>Нашел я все таки корзину. Ей оказалась отдельно расположенная одноименная папка. Однако мне не понятен алгоритм восстановления из нее записей. Не могли бы вы прояснить алгоритм по которому надо действовать?</p>]]></content>
			<author>
				<name><![CDATA[babaduk]]></name>
				<uri>https://webhamster.ru/punbb/profile.php?id=1423</uri>
			</author>
			<updated>2017-05-17T15:10:40Z</updated>
			<id>https://webhamster.ru/punbb/viewtopic.php?pid=1732#p1732</id>
		</entry>
</feed>
