Migrate a phpBB3 forum to Discourse

Похоже, я единственный, кто здесь пишет…

И вот, прямо перед запуском моего нового форума на Discourse, мы обнаружили очень странную проблему! Я в тупике, надеюсь, кто-то здесь сможет пролить на это свет…

Ситуация: я импортировал в Discourse две базы данных из phpBB3. Первая — это архив, по сути, наш старый форум, который 15 лет назад разделили на две части и одну из них заморозили. Вторая часть форума оставалась активной и развивалась. Я надеялся, что импортирующий скрипт объединит их при импорте, и он это сделал! :smiley:

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

У этого пользователя было две учётные записи, обе на текущем форуме. Назовём старую OldName, а новую — NewName.

На импортированном форуме теперь есть два пользователя. Один называется OldName, а тот, который должен был быть NewName, переименован в OldName1. Кроме того, посты OldName были объединены с OldName1.

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

Не знает ли кто-нибудь, что здесь произошло?
Есть ли способ найти другие подобные случаи?

1 лайк

Но, вероятно, не так, как вы думаете. Если вы просто запустили импортер дважды, все пользовательские поля import_id вступили в конфликт, поэтому пользователь с userid 123 в первой базе данных теперь является тем же пользователем, что и userid 123 в новой базе данных. То же самое касается тем и сообщений.

Я почти уверен, что каждый userid (а также тема, сообщение и, вероятно, категория), существующий как в старой, так и в новой базе данных, объединяется со старым.

Вам нужно сделать что-то, чтобы избежать конфликтов import_ids (возможно, удалить старые или изменить скрипт импорта, чтобы сделать их уникальными для каждого импорта).

4 лайка

Ну… они всё равно ОДИНАКОВЫЕ, разве нет?
Я имею в виду, что это по сути один и тот же форум: одна часть продолжала развиваться, а другая застыла во времени. Значит, ID пользователя 123 остаётся ID 123, и то же самое с ID постов и тем?

Что вы имеете в виду под пользовательскими полями import_id?

Форум выглядит нормально, все темы, посты и прочее на месте. Разве идея не в том, что они объединены?

Я не могу найти никаких других проблем с другими пользователями/постами/темами, кроме этого одного случая.

Позвольте мне, возможно, лучше объяснить ситуацию.

Изначально был один форум phpBB. В какой-то момент я его клонировал. Одна копия осталась закрытой и стала архивом. Другую часть я очистил от самых старых постов (которые теперь в архиве) и оставил открытой. В ней пользователи, темы, посты и т.д. просто прибавлялись, и их ID никогда не менялись. Поэтому я думал, что скрипт импорта просто увидит архив и текущий форум как две части одной базы данных, потому что они таковыми и являются, и воспримет это как инкрементальный импорт. И так и произошло?

Так что, пожалуйста, помогите мне понять, что, по вашему мнению, пошло не так, потому что то, на что вы указываете, — это именно то, чего я хотел добиться…

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

При импорте пользователя, темы или поста создаётся пользовательское поле XxxCustomField с именем “import_id”, чтобы вы могли отследить соответствие между старым и новым форумом.

Некоторые импортеры также создают пользовательское поле import_username, если имя пользователя изменилось. Вы можете сделать что-то вроде:

cd /var/discourse
rails c
u=User.find_by_username('username-youwant')
u.custom_fields

чтобы увидеть их.

1 лайк

потому что я хотел объединить архивную часть обратно в единый форум, вместо того чтобы иметь две «половины» одного форума. Теперь мне не нужно поддерживать отдельный древний архив phpbb2, который мне приходилось каким-то образом конвертировать в Discourse… теперь он снова цел :slight_smile: (мы создали архив, чтобы снизить нагрузку на сервер в те времена).

Я попробовал ваш запрос, спасибо.
Для случая использования в моём посте я получил {"import_id"=>"21293"} для NewName,
а для OldName1 он выдал
{"import_id"=>"8800", "import_username"=>"OldName"}
так что, ого, это показывает, что там произошло… Есть ли какая-то причина, по которой он решил, что import_id8800 принадлежит имени пользователя NewName? У них же разные import_ID.

Есть ли способ выполнить более общий поиск, потому что я не знаю, какие пользователи затронуты — именно это я и пытаюсь выяснить, поэтому я не знаю часть username-youwant.

Один из способов сделать это —:

  • Восстановить резервную копию, созданную сразу после завершения импорта архива.
  • Очистить значения import_id для постов, тем, категорий и пользователей.
  • Выполнить импорт в текущий форум.

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

4 лайка

Верно. У них разные import_id, но одинаковое имя пользователя. Если вы хотите, чтобы они считались одним пользователем, им нужно иметь одинаковое имя пользователя (или вы можете искусственно сделать так, чтобы у них был одинаковый import_id).

Может быть, попробовать поискать так:

User.where("username like '%1'")

Это также найдёт тех, кто случайно захотел закончить своё имя пользователя цифрой 1.

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

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

1 лайк

Довольно полезно. Я переносу свой игровой форум на Discord. Хостинг для phpBB (этот: https://www.cloudways.com/en/phpbb-hosting.php), который я использовал, не поддерживает приложения, кроме PHP. Поэтому я сейчас изучаю другую платформу для этого.

Я пытаюсь мигрировать форум phpBB 3.2.9 в Discourse. У меня около 2 800 пользователей и почти 36 000 сообщений. Для импорта я использую репозиторий Git от @gerhard с веткой phpbb3.

Миграция пользователей и личных сообщений проходит успешно. Однако с сообщениями возникла проблема: перенесено только около 2 800 сообщений. Я получаю сообщения об ошибках, подобные следующим:

    12201 / 35281 ( 34.6%)  [68323 items/min]  Failed to map post with ID 14742
undefined method `name' for nil:NilClass
/var/www/discourse/script/import_scripts/phpbb3/support/bbcode/xml_to_markdown.rb:57:in `visit'
/var/www/discourse/script/import_scripts/phpbb3/support/bbcode/xml_to_markdown.rb:25:in `convert'
/var/www/discourse/script/import_scripts/phpbb3/support/text_processor.rb:41:in `process_raw_text'
/var/www/discourse/script/import_scripts/phpbb3/support/text_processor.rb:68:in `process_post'
/var/www/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:35:in `map_post'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:130:in `block (2 levels) in import_posts'
/var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
/usr/local/lib/ruby/gems/2.6.0/gems/rack-mini-profiler-1.1.4/lib/patches/db/mysql2.rb:8:in `each'
/usr/local/lib/ruby/gems/2.6.0/gems/rack-mini-profiler-1.1.4/lib/patches/db/mysql2.rb:8:in `each'
/var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:128:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:869:in `loop'
/var/www/discourse/script/import_scripts/base.rb:869:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:186:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:122:in `import_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:33:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
./script/import_scripts/phpbb3.rb:33:in `<module:PhpBB3>'
./script/import_scripts/phpbb3.rb:14:in `<module:ImportScripts>'
./script/import_scripts/phpbb3.rb:13:in `<main>'
    12202 / 35281 ( 34.6%)  [68322 items/min]  Failed to map post with ID 14744
undefined method `name' for nil:NilClass

Я не эксперт в Ruby, поэтому не совсем понимаю, как отладить эту проблему. Похоже, что отсутствует какой-то метод. Но как его найти и почему перенесено почти 2 800 сообщений?

Есть ли у кого-нибудь идеи, что вызывает эту проблему и, конечно, как её исправить?

Спасибо!

1 лайк

Иногда в коде появляются гоблины, а в базе данных — гоблины.

Если миграция останавливается из-за ошибки (звучит так, будто это происходит в данном случае), я делаю следующее: смотрю на сообщение об ошибке, открываю проблемный файл в скрипте и оборачиваю ошибку в простой блок:

begin
   #проблемная строка или строки кода на Ruby
rescue
   puts "ошибка! в <проблемной процедуре> переменная #{variable} бла-бла-бла моё замечательное сообщение"
end

Недавно я перенёс более 1 миллиона сообщений, и перехват ошибок, как в примере выше, и «продолжение работы» спасли мне жизнь.

Каждая миграция уникальна, хотя у меня не так много опыта, как у других, но я делал это примерно 20 разными способами и 100 раз, LOL. Мой опыт показывает, что конструкция begin rescue end очень важна.

Конечно, можно копнуть глубже и посмотреть, нет ли более серьёзной проблемы позже; но иногда просто хочется продолжать работать и переносить данные дальше :slight_smile:

2 лайка

Добро пожаловать @TBauer :wave:

Возможно, вы пропустили это предупреждение в первом сообщении.

2 лайка

@TBauer, похоже, использует эту экспериментальную ветку, так что, думаю, всё в порядке. Она всё ещё не поддерживается, но я всё же хотел бы узнать, что вызывает эту ошибку.

@TBauer, не могли бы вы прислать мне содержимое столбца post_text в таблице phpbb_posts для сообщения с ID 14742 в личном сообщении или опубликовать его здесь?

Я предполагаю, что вы недавно обновились до phpBB 3.2, и процесс преобразования старого формата BBCode в новый ещё не завершён. Именно поэтому ошибка может возникать после 2800 сообщений. Если это так, возможно, стоит запустить текстовый репарсер phpBB 3.2+ через CLI. Скрипт импорта в настоящее время не поддерживает смешивание старых и новых форматов хранения BBCode, а преобразование BBCode в Markdown будет работать значительно лучше с новым форматом. :wink:

4 лайка

Нет, миграция не останавливается. Скрипт выполняется до своего обычного завершения. Просто он не мигрирует множество постов. В данном случае я получил сообщения, подобные приведённым выше. Я проверил несколько постов в базе данных, и, похоже, все они старые и не содержат XML-кода.

@Helmi: конечно, я прочитал это. Именно поэтому я использовал экспериментальную ветку кода. :wink:

1 лайк

Возможно, это решение. Сначала попробую именно это. Я заметил, что сообщения, в которых произошла ошибка, находятся в формате BBCode, а не в XML. Значит, следующим шагом попробую конвертировать после повторного разбора…

2 лайка

Извините, когда я читал ваш пост, это не было для меня до конца ясно.

@Helmi: без проблем. :smiley:

@gerhard: сработало! После конвертации постов в новый формат я смог импортировать их. Исключение возникло только при импорте четырёх постов, но в моём случае это допустимо.

   35264 / 35281 (100.0%)  [4879 элементов/мин]  Исключение при создании поста 39353. Пропуск.
неизвестный атрибут 'reply_id' для PostReply.
/usr/local/lib/ruby/gems/2.6.0/gems/activemodel-6.0.1/lib/active_model/attribute_assignment.rb:53:in `_assign_attribute'
/usr/local/lib/ruby/gems/2.6.0/gems/activemodel-6.0.1/lib/active_model/attribute_assignment.rb:44:in `block in _assign_attributes'
/usr/local/lib/ruby/gems/2.6.0/gems/activemodel-6.0.1/lib/active_model/attribute_assignment.rb:43:in `each'
/usr/local/lib/ruby/gems/2.6.0/gems/activemodel-6.0.1/lib/active_model/attribute_assignment.rb:43:in `_assign_attributes'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/attribute_assignment.rb:22:in `_assign_attributes'
/usr/local/lib/ruby/gems/2.6.0/gems/activemodel-6.0.1/lib/active_model/attribute_assignment.rb:35:in `assign_attributes'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/core.rb:326:in `initialize'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/inheritance.rb:70:in `new'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/inheritance.rb:70:in `new'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/reflection.rb:158:in `build_association'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/associations/association.rb:325:in `build_record'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/associations/collection_association.rb:108:in `build'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/associations/collection_proxy.rb:316:in `build'
/var/www/discourse/app/models/post.rb:1064:in `create_reply_relationship_with'
/var/www/discourse/app/models/post.rb:750:in `block in save_reply_relationships'
/var/www/discourse/app/models/post.rb:748:in `each'
/var/www/discourse/app/models/post.rb:748:in `save_reply_relationships'
/var/www/discourse/lib/post_creator.rb:187:in `block in create'
/var/www/discourse/lib/post_creator.rb:360:in `block (2 levels) in transaction'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `block in transaction'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `transaction'
/usr/local/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:212:in `transaction'
/var/www/discourse/lib/post_creator.rb:359:in `block in transaction'
/var/www/discourse/lib/distributed_mutex.rb:33:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/post_creator.rb:358:in `transaction'
/var/www/discourse/lib/post_creator.rb:168:in `create'
/var/www/discourse/script/import_scripts/base.rb:555:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:503:in `block in create_posts'
/usr/local/lib/ruby/gems/2.6.0/gems/rack-mini-profiler-1.1.4/lib/patches/db/mysql2.rb:8:in `each'
/usr/local/lib/ruby/gems/2.6.0/gems/rack-mini-profiler-1.1.4/lib/patches/db/mysql2.rb:8:in `each'
/var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:128:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:869:in `loop'
/var/www/discourse/script/import_scripts/base.rb:869:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:186:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:122:in `import_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:33:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
script/import_scripts/phpbb3.rb:33:in `<module:PhpBB3>'
script/import_scripts/phpbb3.rb:14:in `<module:ImportScripts>'
script/import_scripts/phpbb3.rb:13:in `<main>'

Спасибо за импортер и отличную работу! :slight_smile:

3 лайка

Привет @gerhard, мы на самом деле используем этот скрипт для импорта очень старого форума phpBB, который нужно спасти от удаления.. Всё идёт довольно хорошо, но в конце на форуме возникают проблемы с кодировкой. Заголовки и содержимое сообщений отображаются с некорректной кодировкой.

Форум был на французском языке, и дамп SQL, который мы скачали с pBB, имеет кодировку UTF-8. Что мы упустили, пожалуйста?

Спасибо большое, эта работа просто потрясающая! :open_mouth:

Возможно, где-то возникло несоответствие кодировок… Не зря это явление назвали адом кодировок MySQL.

Давным-давно я написал скрипт для исправления баз данных, содержащих данные в кодировке UTF-8 внутри таблиц с кодировкой latin1. Возможно, это поможет? В противном случае вам придётся разобраться с этим самостоятельно.

3 лайка

Привет, @gerhard, спасибо за ответ. Подскажите, пожалуйста, какой формат должен быть у моего файла дампа SQL? На самом деле VS Code говорит, что это UTF-8. Так что… должно работать, верно?

Эти проблемы с кодировкой сводят меня с ума.. :frowning:

@gerhard : РЕДАКТИРОВАНИЕ : Пример того, что у меня в файле дампа, ниже.

#
# Скрипт резервного копирования phpBB
# Дамп таблиц для phpbb3_
# ДАТА : 06-04-2020 08:26:04 GMT
#
# Таблица: phpbb3_posts
DROP TABLE IF EXISTS phpbb3_posts;
CREATE TABLE `phpbb3_posts` (
  `post_id` mediumint(8) unsigned NOT NULL auto_increment,
  `topic_id` mediumint(8) unsigned NOT NULL default '0',
  `forum_id` mediumint(8) unsigned NOT NULL default '0',
  `poster_id` mediumint(8) unsigned NOT NULL default '0',
  `icon_id` mediumint(8) unsigned NOT NULL default '0',
  `poster_ip` varchar(40) collate utf8_bin NOT NULL default '',
  `post_time` int(11) unsigned NOT NULL default '0',
  `post_approved` tinyint(1) unsigned NOT NULL default '1',
  `post_reported` tinyint(1) unsigned NOT NULL default '0',
  `enable_bbcode` tinyint(1) unsigned NOT NULL default '1',
  `enable_smilies` tinyint(1) unsigned NOT NULL default '1',
  `enable_magic_url` tinyint(1) unsigned NOT NULL default '1',
  `enable_sig` tinyint(1) unsigned NOT NULL default '1',
  `post_username` varchar(255) collate utf8_bin NOT NULL default '',
  `post_subject` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL default '',
  `post_text` mediumtext character set utf8 collate utf8_unicode_ci NOT NULL,
  `post_checksum` varchar(32) collate utf8_bin NOT NULL default '',
  `post_attachment` tinyint(1) unsigned NOT NULL default '0',
  `bbcode_bitfield` varchar(255) collate utf8_bin NOT NULL default '',
  `bbcode_uid` varchar(8) collate utf8_bin NOT NULL default '',
  `post_postcount` tinyint(1) unsigned NOT NULL default '1',
  `post_edit_time` int(11) unsigned NOT NULL default '0',
  `post_edit_reason` varchar(255) collate utf8_bin NOT NULL default '',
  `post_edit_user` mediumint(8) unsigned NOT NULL default '0',
  `post_edit_count` smallint(4) unsigned NOT NULL default '0',
  `post_edit_locked` tinyint(1) unsigned NOT NULL default '0',
  PRIMARY KEY  (`post_id`),
  KEY `forum_id` (`forum_id`),
  KEY `topic_id` (`topic_id`),
  KEY `poster_ip` (`poster_ip`),
  KEY `poster_id` (`poster_id`),
  KEY `post_approved` (`post_approved`),
  KEY `tid_post_time` (`topic_id`,`post_time`),
  KEY `post_username` (`post_username`)
) ENGINE=MyISAM AUTO_INCREMENT=33585 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

INSERT INTO phpbb3_posts (post_id, topic_id, forum_id, poster_id, icon_id, poster_ip, post_time, post_approved, post_reported, enable_bbcode, enable_smilies, enable_magic_url, enable_sig, post_username, post_subject, post_text, post_checksum, post_attachment, bbcode_bitfield, bbcode_uid, post_postcount, post_edit_time, post_edit_reason, post_edit_user, post_edit_count, post_edit_locked) VALUES (3, 2, 1, 2, 0, '82.225.50.160', 1135852994, 1, 0, 1, 1, 1, 0, '', 'ФОРУМ УДАЛЕН ХАКЕРОМ - 28/12/05 !!!', '28/12/05 форум стал жертвой <!-- s:cry: --><img src="{SMILIES_PATH}/icon_cry.gif" alt=":cry:" title="Crying or Very sad" /><!-- s:cry: --> визита хакера <!-- s:pan --><img src="{SMILIES_PATH}/panpan.gif" alt=":pan" title="panpan" /><!-- s:pan -->, который мог скрупулезно <!-- s:sick --><img src="{SMILIES_PATH}/sick.gif" alt=":sick" title="sick" /><!-- s:sick -->: он, найдя способ подключиться к Форуму как Администратор форума, просто удалил все наши сообщения <!-- s:evil: --><img src="{SMILIES_PATH}/icon_evil.gif" alt=":evil:" title="Evil or Very Mad" /><!-- s:evil: --> !!! \r\n\r\nК сожалению, и я извиняюсь <!-- s:oops: --><img src="{SMILIES_PATH}/icon_redface.gif" alt=":oops:" title="Embarassed" /><!-- s:oops: --> (я должен был подумать об этом!!!), никакой резервной копии сайта не существовало, и я не смог восстановить ни одного из старых сообщений !!!\r\n\r\n[b:f3vjqlv5]ТЕПЕРЬ НАМ ПРИХОДИТСЯ ВОЗРОДИТЬ ЭТОТ ФОРУМ И ПОКАЗАТЬ, ЧТО ТАКОЙ ТЕРРОРИЗМ НЕ ОСТАНОВИТ ПРОГРЕСС DUB И SOUNDS SYSTEM !!![/b:f3vjqlv5]:thumb \r\n\r\nРаз уж все потеряно: не сумев восстановить сообщения, я предпочел все удалить и установить последнюю версию программного обеспечения форума, которая исправляет ряд уязвимостей безопасности. В результате [b:f3vjqlv5]СТАРЫЕ УЧАСТНИКИ ДОЛЖНЫ ПЕРЕЗАРЕГИСТРИРОВАТЬСЯ...[/b:f3vjqlv5]\r\n\r\nУважение всем\r\nRed Lion', '', 0, 'QA==', 'f3vjqlv5', 1, 0, '', 2, 0, 0),(5, 3, 4, 3, 0, '82.225.50.160', 1135856969, 1, 0, 1, 1, 1, 1, '', 'DUB FACTORY RED LION SOUND встречает IRATION STEPPAS 21/01/06', 'Привет всем,\r\n\r\nМощная вечеринка Roots Dub &amp; Steppa в поддержку фестиваля «Перевал 1000» ассоциации L\'anamounto\r\n\r\nRED LION Sound приветствуют гигантов из Лидса:\r\n\r\nIRATION STEPPAS на сессии 100% heavy weight bass....\r\n\r\nОсторожно!!!\r\n\r\nЭто состоится 21 января в ADAEP в Гренобле... Вход 10 евро 22H&amp;gt;&amp;gt;5H\r\nБольше информации скоро появится,\r\nпока что вы всегда можете послушать фрагменты вечеринки, которая прошла в Шалон-сюр-Сон в прошлом году:\r\n\r\n<!-- m --><a class="postlink" href="http://dubnews.free.fr/iration/irationmix.html">http://dubnews.free.fr/iration/irationmix.html</a><!-- m -->\r\n\r\na+steph\r\nLions\'Den', '', 0, 'QA==', '2vvambac', 1, 0, '', 3, 0, 0),(6, 2, 1, 5, 0, '172.206.42.240', 1135857292, 1, 0, 1, 1, 1, 1, '', '', 'Давай, за работу !!!\r\n\r\nЛайон прав, нельзя терять надежду и, главное, не бросать этот форум под предлогом, что больше нет информации, информация — это мы все! \r\n\r\nЕдинство снова !!! \r\n\r\nУважение команде RedLion\r\nБлагословения\r\nBokson', '', 0, 'QA==', '185llc4j', 1, 0, '', 5, 0, 0),(7, 2, 1, 4, 0, '81.56.248.144', 1135857298, 1, 0, 1, 1, 1, 0, '', '', 'Бедствие.... серьезно......\r\nНадо же, некоторые находят время бесить других без всякой пользы....\r\nхорошо.......\r\nне стоит еще и злиться или кричать на этого хакера, это может ему понравиться......\r\n\r\nвот, я снова зарегистрирован\r\n\r\nуважение,\r\nmathieu', '', 0, 'QA==', '3ra8xkgy', 1, 0, '', 4, 0, 0),(8, 4, 11, 5, 0, '172.206.42.240', 1135857735, 1, 0, 1, 1, 1, 1, '', 'Отношение Усилитель - Колонки', 'Irie \r\n\r\nРаз нас взломали, я снова задаю свой вопрос! \r\nКак рассчитать эту историю с импедансом! \r\nЧто если мостить усилитель, использовать его в стерео и т.д... \r\nИ я снова задаю вопрос: у меня 2 колонки bass reflex 750 ватт при 8 омах\r\nмой усилитель позади 2x700 ватт при 8 омах (например), если я его мостить и смогу получить 1x1400 ватт, которые я подаю на 2 сабвуфера, так как я его мостил, он переключается на 4 ома мой усилитель, поэтому колонки должны это выдержать, но, к сожалению, в характеристиках колонок указано, что они не выдерживают импеданс менее 4,75 ома \r\n\r\nКак мне поступить, ты можешь немного подробнее объяснить, Лайон, то, что ты начал (до прихода яростного хакера) \r\nК тому же ты уже объяснял мне, но я немного забыл !!!\r\n\r\nСпасибо\r\nBokson', '', 0, 'QA==', '3bec5jss', 1, 0, '', 5, 0, 0),(9, 5, 3, 5, 0, '172.206.42.240', 1135857870, 1, 0, 1, 1, 1, 1, '', 'Почему человек разрушает !', 'Tena и Stellin \r\n\r\nВопрос приходит мне в голову, я не могу ответить на него один, думаю, потому что ответ слишком широк! \r\n\r\nПочему люди разрушают то, что создал другой? \r\n\r\nРевность, фрустрации .... Не знаю, не могу понять.\r\n\r\nBokson', '', 0, 'QA==', '34xwhk4b', 1, 0, '', 5, 0, 0),(10, 2, 1, 6, 0, '82.64.69.118', 1135859358, 1, 0, 1, 1, 1, 1, '', '', 'Ладно, начинаем с нуля, это не так уж плохо <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->\r\n\r\nBig Up !!\r\n\r\n\r\nNao\r\nGuidance,,,,', '', 0, 'QA==', '143421z7', 1, 0, '', 6, 0, 0),(11, 2, 1, 7, 0, '212.147.0.191', 1135861490, 1, 0, 1, 1, 1, 0, '', '', 'Да, рад снова видеть форум в строю!  <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) --> \r\n\r\nДолгой жизни этому очень познавательному форуму! \r\n\r\nКаждый учит одного!\r\n\r\nJ-M', '', 0, 'QA==', '3gohbqv1', 1, 0, '', 7, 0, 0),(12, 2, 1, 8, 0, '82.235.34.36', 1135864108, 1, 0, 1, 1, 1, 0, '', 'Все отлично!!', 'Рад видеть, что вы быстро решили проблему!\r\nУважение всей компании...\r\nдо скорого\r\nmanu', '', 0, 'QA==', '3oql1d2j', 1, 0, '', 8, 0, 0),(13, 6, 4, 8, 0, '82.235.34.36', 1135865115, 1, 0, 1, 1, 1, 0, '', 'Dub Addict Sound встречает Jr CONY &amp; SHANTI D. 3/02/06', 'Через неделю после Red Lion и Iration, вы можете\r\nснова насладиться басами в RAIL theatre в ЛИОНЕ..\r\nмы принимаем JUNIOR CONY &amp; Shant D...\r\nBoudou и Roots massacre дадут живой концерт, 19Dub отвечает за подборку\r\nа Phil поет.\r\nс 21:00 до 3:00 за 7 евро\r\n\r\nпока всем...', '', 0, 'QA==', '1y0bfm7j', 1, 0, '', 8, 0, 0),(14, 7, 4, 9, 0, '83.156.49.183', 1135865763, 1, 0, 1, 1, 1, 1, '', 'БОРДО: Manasseh, Manutension, Iration Steppas &amp; Uzinadub', '4SANS в Бордо представляет начиная с 22:00 8) :\r\n\r\n21 января <!-- s:hola --><img src="{SMILIES_PATH}/fun_59.gif" alt=":hola" title="hola" /><!-- s:hola --> \r\n\r\nMANASSEH feat Brother Culture\r\nMANUTENSION feat MC Tablloyd\r\nCRYSTAL DISTORSION\r\n\r\nза 10 евро\r\n\r\n\r\n25 февраля <!-- s:hola --><img src="{SMILIES_PATH}/fun_59.gif" alt=":hola" title="hola" /><!-- s:hola --> \r\n\r\nIRATION STEPPAS\r\nUZINADUB\r\nGG PROJECT\r\nELISA DO BRASIL\r\n\r\nЗа 10 евро\r\n\r\nТак что две отличные вечеринки в Бордо в начале 2006 года <!-- s:bravo --><img src="{SMILIES_PATH}/bravoo.gif" alt=":bravo" title="bravo" /><!-- s:bravo -->', '', 0, 'QA==', '319buiqc', 1, 0, '', 9, 0, 0),(15, 6, 4, 3, 0, '82.225.50.160', 1135865811, 1, 0, 1, 1, 1, 1, '', '', 'а на следующий день DUB FACTORY №2 в субботу 4 февраля с 21:00&gt;&gt;5:00\r\n\r\n[b:2d4j075e][color=red:2d4j075e]RED LION SOUND feat Sis ilie Meets JAH FREE Feat GARY JAMES[/b:2d4j075e][/color:2d4j075e]\r\n\r\nВход 10 евро\r\nСтенд с дисками UK Dub\r\na+steph', '', 0, 'Qg==', '2d4j075e', 1, 0, '', 3, 0, 0),(16, 6, 4, 9, 0, '83.156.49.183', 1135865981, 1, 0, 1, 1, 1, 1, '', '', 'Эта вечеринка с JAH FREE и RED LION просто зашибенная!!!!!!!!!!!! <!-- s:wink: --><img src="{SMILIES_PATH}/icon_wink.gif" alt=":wink:" title="Wink" /><!-- s:wink: -->', '', 0, 'Qg==', 'sirogssh', 1, 0, '', 9, 0, 0),(17, 4, 11, 2, 0, '82.225.50.160', 1135866119, 1, 0, 1, 1, 1, 0, '', 'Последовательное и параллельное соединение', 'Да, Bokson, мы разберемся с этой историей об импедансе:\r\n\r\nИмпеданс — это сопротивление (среди прочего) цепи или компонента, поэтому тебе нужно представить свой динамик как резистор, подключенный к цепи с выходом усилителя. Именно полное сопротивление этой цепи (с одним или несколькими резисторами, соединенными между собой) определит сопротивление, ПРИ КОТОРОМ будет работать твой усилитель.\r\n\r\nВозьмем пример твоего усилителя : \r\nТехнические характеристики :\r\n750 ватт при 8 омах x 2 (2 канала)\r\n1400 ватт при 8 омах x 1 (мостовой выход)\r\n\r\nЯ подключаю 1 динамик 750 ватт при 8 омах к одному из 2 каналов (не мостовой режим), и все хорошо?\r\nЯ добавляю 2-й динамик 750/8. У меня есть два решения : \r\n\r\nЛибо я подключаю 2-й динамик ко второму каналу усилителя, и у меня есть 2 динамика по 750 Вт / 8 Ом, подключенных к 2 каналам по 700 Вт / 8 Ом\r\n\r\nЛибо я решаю\tподключить 2 динамика последовательно или параллельно :\r\n\r\n[b:1ms11ykd] Последовательно :\nкогда несколько динамиков подключены последовательно, их импеданс Z складывается[/b:1ms11ykd], что дает : \r\n\r\n[b:1ms11ykd]Zt (выход усилителя) =  Z (динамик1) + Z (динамик2) + ?[/b:1ms11ykd]\r\n \r\nто есть для нашего примера :\r\n8 Ом +  8 Ом =  16 Ом \r\n\r\nтаким образом, в этом случае для корректной работы твой усилитель должен быть способен выдавать 750 Вт + 750 Вт = 1500 Вт при 16 Ом на одном канале (если подключить 2 динамика последовательно и к одному каналу усилителя)\r\n\r\n[b:1ms11ykd] Параллельно :\nкогда несколько динамиков подключены параллельно, складываются обратные величины их импеданса [/b:1ms11ykd], что дает :\r\n\r\n[b:1ms11ykd]1/Zt = 1/Z (динамик1) + 1/Z (динамик2) + ?[/b:1ms11ykd]\r\n\r\nто есть в нашем примере :\r\n1/8 + 1/8 = 2/8  значит Zt= 8/2=4 Ом\r\n\r\nтаким образом, в этом случае для корректной работы твой усилитель должен быть способен выдавать 750 Вт + 750 Вт = 1500 Вт при 4 Ом на одном канале \r\n(если подключить 2 динамика параллельно и к одному каналу усилителя)\r\n\r\n\r\nИ если [b:1ms11ykd]я решаю подключить 4 динамика к одному каналу (цепь)[/b:1ms11ykd], у меня будет :\r\n\r\n[b:1ms11ykd]Если все динамики соединены последовательно :\n\n8 Ом +  8 Ом + 8 Ом +  8 Ом = 32 Ом[/b:1ms11ykd]\r\n\r\nтаким образом, в этом случае для корректной работы твой усилитель должен быть способен выдавать 750 Вт + 750 Вт + 750 Вт + 750 Вт = 3000 Вт при 32 Ом на одном канале\r\n \r\n[b:1ms11ykd]Если все динамики соединены параллельно :\n1/Zt= 1/8+1/8+1/8+1/8= 4/8 Zt=8/4=2 Ом[/b:1ms11ykd]\r\n\r\nтаким образом, в этом случае для корректной работы твой усилитель должен быть способен выдавать 750 Вт + 750 Вт + 750 Вт + 750 Вт = 3000 Вт при 2 Ом на одном канале\r\n\r\n[b:1ms11ykd]Если 2 x 2 динамика, соединенных последовательно, подключены параллельно :\n1/Zt = 1/(8+8)+1/(8+8)=1/16+1/16= 2/16 Zt = 16/2=8 Ом[/b:1ms11ykd]\r\n\r\nтаким образом, в этом случае для корректной работы твой усилитель должен быть способен выдавать 750 Вт + 750 Вт + 750 Вт + 750 Вт = 3000 Вт при 8 Ом на одном канале\r\n\r\n[b:1ms11ykd]Для 2 x 2 динамиков, соединенных параллельно и подключенных последовательно :\nZt=(1/(1/8+1/8))+(1/(1/8+1/8)=1/(2/8)+1/(2/8)=4+4=8 Ом[/b:1ms11ykd]\r\n\r\nтаким образом, в этом случае для корректной работы твой усилитель должен быть способен выдавать 750 Вт + 750 Вт + 750 Вт + 750 Вт = 3000 Вт при 8 Ом на одном канале\r\n\r\nВ случае, если у тебя 6 динамиков, я оставляю тебе расчет.\r\n\r\nЧто касается твоего усилителя, тебе не нужно ничего настраивать (именно то, как ты подключишь колонки между собой, определит, при каком импедансе будет работать твой усилитель), тебе просто нужно проверить в технических характеристиках, какие импедансы он может выдержать (и заодно, какую мощность он может выдать при каждом импедансе)...\r\n\r\nУважение\r\nRed Lion', '', 0, 'QA==', '1ms11ykd', 1, 1136464838, '', 2, 1, 0),(18, 8, 4, 3, 0, '82.225.50.160', 1135866440, 1, 0, 1, 1, 1, 1, '', 'DUB FACTORY 2: RED LION SOUND встречает JAH FREE feat GARY JAMES', '[b:79akxjmn][size=150:79akxjmn]DUB FACTORY №2 в субботу 4 февраля с 21:00&gt;&gt;5:00[/size:79akxjmn][/b:79akxjmn]\r\n\r\n<!-- s:hola --><img src="{SMILIES_PATH}/fun_59.gif" alt=":hola" title="hola" /><!-- s:hola --> <!-- s:hola --><img src="{SMILIES_PATH}/fun_59.gif" alt=":hola" title="hola" /><!-- s:hola --> <!-- s:hola --><img src="{SMILIES_PATH}/fun_59.gif" alt=":hola" title="hola" /><!-- s:hola -->\r\n[b:79akxjmn][color=red:79akxjmn][size=167:79akxjmn]RED LION SOUND feat\n
...
...
2 лайка

Последний импорт vBulletin, который я выполнил, привёл к тому, что в разных сообщениях оказалась разная кодировка. Я написал код, который пытается применить несколько методов преобразования кодировки.

1 лайк