Pull to refresh
11
0
Send message
Вначале хотел в песочницу добавить — кармы не хватило, потом в персональный блог — тоже самое. Так что информационная безопасность показалась ближе всего.
Если ты уже специалист в области IT — можно вообще наплевать на часть собеседования с HR. Они всё равно ничего не будут решать.
Честные выборы нужны для возможности смены власти. Например, если вы сейчас за теперяшнюю власть, совсем не значит, что вы будете за неё через 5 лет… 10… или 17… А потом уже будет поздно. Т.к. все гайки закручены.

Кроме того если заранее известно, что после тебя обязательно будет другая власть, то и не захочешь, чтобы как только отойдёшь от власти оказался в тюрьме.
PTR — это одна из основных вещей. Некоторые сервера вообще отказываются принимать почту (не то что в спам фолдер) если PTR нет.
Массовая почтовая рассылка через Exim или как не попасть в спам.

И от себя немного — почему просто так желательно не отправлять

$result = mail('yourmail@domain.ru', 'subject', 'message');


Например, если будет всё русскими буквами, то некоторые почтовые сервера не поймут какая кодировка. Для тела письма — в заголовках можно передать utf-8, а для сабжекта и to нужно добавить в само поле обозначение кодировки.

Вобщем, у меня приблизительно так выглядит это:

mail("=?utf-8?B?".base64_encode($to_name)."?= <$to_mail>",
"=?utf-8?B?".base64_encode($topic)."?=",
chunk_split(base64_encode($message)),
"From: =?utf-8?B?".base64_encode($from_name)."?= <$from_mail>\n
Content-Type: text/html; charset=utf-8\n
Content-Transfer-Encoding: base64\n
Content-Disposition: inline\nMIME-Version: 1.0");


Думаю, что phpmailer всё это учитывает.
Не уверен, что вы поняли задачу. Дублировать ячейки всего документа при создании каждой ривизии никто не собирается.
И всё же небольшое ТЗ было изложено в посте
Требования к структуре
Обязательные
  • Возможность сохранения предыдущих значений ячеек
  • Возможность просмотра предыдущих ревизий онлайн документа
  • Возможность отката на предыдущую версию
  • Некоторые параметры могут не иметь разных версий (id, sheet_id)
  • Внедрение в используемую ORM

Желательные
  • Минимально возможные трудозатраты на перенос данных в новую структуру, выборку, изменение и добавление данных
  • Экономия дискового пространства
  • Подсветка изменившихся ячеек при просмотре старых ревизий

Там реализовано так:

revision
--rev_id
--rev_page
--rev_text_id
--rev_comment

--rev_parent_id

page
--page_id
--page_namespace
--page_title

--page_latest (где хранится айдишник последней ревизии)

text
--old_id
--old_text (сам текст страницы)
--old_flags

Каждое изменение текста страницы создаёт новую ревизию и новую запись в таблице text.

Выборка страницы происходит так:

SELECT page_title,old_text,old_flags  
FROM `page`,`revision`,`text`  
WHERE page_is_redirect = '0' 
AND page_namespace = '8' 
AND (page_title NOT LIKE '%/%' ) 
AND (page_latest=rev_id) 
AND (rev_text_id=old_id) 
AND (page_len <= 10000)  


А теперь, почему нам не подходит
1) один текст на страницу vs много ячеек в открытом документе.
2) у одного текста в медиавики — одна ревизия. У нас контент у ячеек может появляться в разных ревизиях.
3) Сама суть — у медиавики — кто-то зашел подправить текст. Сделал необходимые изменения, посмотрел на превью, сохранил. У нас — несколько пользователей как умолишённые одновременно заполняют ячейки, подбирают им цвет и т.п.

Теперь ещё по-поводу настоящих google docs — при просмотре истории ревизий — по умолчанию ревизии включают в себя не каждое изменение ячейки — а несколько недавних изменений, но если выбрать «show more detailed revisions» — тогда уже любое изменение можно посмотреть/откатить. Видно они место не экономят… Для нашей структуры, если необходимы абсолютно все изменения, а не только в рамках «жизни» ревизии — можно просто сделать так, чтобы ревизии всегда просрачивались экспаерелись.
Объясните, пожалуйста. Такая структура придумывалась не один день, и вариант с timestamp также рассматривался, но был отсеен как раз из-за непростой и небыстрой выборки данных, просмотра данных на какую-то дату и слишком быстрому разрастанию бд. Не говоря уже о том, что с ревизиями — при необходимости можно сделать несколько веток одного документа.

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

Про количество ячеек не понял вопроса. Если это про «row_number» и «col_number» — то это номер рядка и номер колонки.
Кроме того, что некоторым другим сущностям, кроме ячеек может понадобиться версионность, так и некоторым данным такая версионность будет не нужна — например, id, sheet_id, row_number, col_number, creator_id (т.е. вся таблица cells).

Не забывайте, что пример из поста сильно упрощён, чтобы объяснить алгоритм. В реальности — обязательно будут связи с другими таблицами. Всё тоже самое что и в обычной структуре любого проекта, только с версионностью некоторых данных.
Это звучит красиво, если не вдуматься как именно будут выбираться данные до заданного таймстемпа.

Как я полагаю, если делать через таймстемп (как из вашего примера) — нам понадобятся совершенно другие выборки. Т.е. последний вариант документа мы выбираем одним образом, предыдущие — совершенно по другому и как будет выглядеть запрос выбирающий значения ячеек на какую-то дату? Кроме того, как я полагаю, удаление записи будет выглядеть как затирание значений полей, для которых нужна эта версионность?

Восстановление данных также как и просмотр документа потребуют программирования отдельной логики. В описанном в посте примере просмотр данных на определённую ревизию и восстановление этих данных больше усилий не потребует.

Потом, у нас ещё есть не только значение ячейки, но и её цвет (а на реальном примере — будет намного больше параметров). Получается, что пока пользователь будет подбирать цвет ячейки каждый новый цвет будет создавать запись в бд.
А что нужно будет сделать для того чтобы посмотреть как выглядел документ раньше? В этом случае вся разница сведётся к тому, чтобы использовать timestamp вместо revision_id и быстрее точно не будет.
12 ...
27

Information

Rating
Does not participate
Location
Кокосовы (Килинг) о-ва
Date of birth
Registered
Activity