Bitcoin Forum
May 29, 2024, 01:27:56 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 [2] 3 4 »
21  Local / Альтернативные криптовалюты / Re: Аналитика, анализ, прогнозы. on: April 26, 2020, 08:01:12 AM
Этот кризис уникальный, у всех забрали свободу, а они согласились, и теперь сидят дома... Я думаю последствия ощутим еще через 6 месяцев где-то, когда фонда покажет себя во всей красе красноте, так что просто запасаемся поп-корном криптой и ждем. Smiley
вы так думаете, что крипта - это панацея и ей ничего не достанется от кризиса? 
22  Local / Бayнти и aиpдpoпы / Re: [BOUNTY][RUS] Делимся опытом и зарабатываем больше. on: April 23, 2020, 03:13:25 AM
Какие сейчас есть интересные баунти кампании?
IQ cash интересно, что за фрукт, на первый взгляд типичная баунти.
23  Local / Альтернативные криптовалюты / Re: Аналитика, анализ, прогнозы. on: April 23, 2020, 03:05:53 AM
Интересная инфа: Tether час назад сожгли 220 млн. USDT - https://whale-alert.io/transaction/bitcoin/a2d179c80c8cfdb3f27e2103fee9373c7747edb910d7d1b011a74fb734a96a94

И это не своп на эфир. Это просто сожгли.
Последний раз похожее было в октябре 2018. Примерно за месяц до начала дампа 14.11.2018

сожгли 220 лямов нехерасебе шикуют ребята, а что малоимущим раздать не судьба была?

24  Local / Новички / Re: Вопрос по поводу нынешней ситуации on: April 12, 2020, 08:51:50 AM
Закупать ли  биткоин сейчас или другую не менее перспективную криптовалюту?
закупать надо биток стопроцентов, в режиме самоизоляции это путь к спасению от произвола власть имущих.
25  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: April 12, 2020, 08:24:28 AM
Здравствуйте!

С Днем космонавтики! Smiley

Есть еще задания для юниоров?
26  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: April 03, 2020, 03:50:44 PM

Quote
Учебное пособие по разработке автономного и частного приложения

доказательстве концепции

Ну и где эта статья? Вот мне интересно, почему тут некоторые переводчики в упор игнорируют ссылки, которые представлены в оригинальном тексте? Они же там не просто так вставлены.

Quote
Файл Транзакции сообщения
Файл Обработчика сообщений
Файл Построителя сообщений

здесь такая же беда. Там гитхабовские ссылки вшиты. Ну и где они?


Исправил. Статья мне показалась рекламным баннером, хотя было написано - статья ниже, глаз наверное замылился Wink 

Спасибо Вам и здоровья!
27  Local / Альтернативные криптовалюты / Re: 🔹🅰RK🔹[ANN] ARK - Криптoвaлютнaя Экocиcтeмa🔹 ICO Зaвepшeнo on: April 03, 2020, 04:38:04 AM



Арк Мессенджер учебник - часть 2
Учебное пособие по разработке автономного и приватного приложения для обмена сообщениями



Приветствую всех во второй части нашей серии руководств, основанных на доказательстве концепции ARK Messenger (PoC). В первой части мы создали среду разработки и развернули собственную настраиваемую цепочку мостов. Эта серия была создана  с документацией, предоставленной делегатом Лемием как часть ARK Messenger Proof-of-Concept, финансируемой программой грантов ARK.


Одна из основных целей этой серии - успешно продемонстрировать различные способы работы разработчиков с ARK Core. В этой части серии мы научимся разрабатывать и тестировать пользовательские транзакции для нашей мостовой цепочки. Кроме того, мы также будем разрабатывать клиент, который пользователи интерфейсного приложения будут использовать для взаимодействия со службой обмена сообщениями.



Начинаем


Прежде чем мы начнем разработку и тестирование наших пользовательских транзакций, нам необходимо описать технические характеристики приложения. Это важно, потому что очень сложно вносить изменения после того, как эти параметры были установлены. В качестве примера рассмотрим технические характеристики ARK Messenger.

ARK Messenger реализует пользовательскую транзакцию сообщения. Это транзакция, которая будет содержать зашифрованное сообщение, отправляемое пользователем. Транзакция должна соответствовать следующим правилам:

  • Установите сумму перевода на 0 и примените низкую статическую комиссию (в настоящее время 0,01).
  • Уметь хранить относительно большой объем данных сообщения (1024 байта).
  • Должен иметь уникальный тип и группу типов (101, 1001).

Это были соображения, сделанные до разработки пользовательской транзакции. В дополнение к изложению ваших технических спецификаций вы можете ознакомиться с принципами работы пользовательских транзакций в ARK. Приведенная ниже статья даст вам прочную основу для понимания того, как интеллектуальные / пользовательские транзакции работают в ARK Core Blockchain Framework.

Как понимать и описывать типы пользовательских транзакций.




Создание пользовательской транзакции

Создание пользовательской транзакции - простой процесс. В качестве шаблона мы будем использовать пользовательскую транзакцию ARK Messenger - Message Transaction.

Пользовательская транзакция сообщения основана на транзакции регистрации бизнеса из руководства выше. Для справки, вы можете найти код здесь.

Чтобы создать собственную пользовательскую транзакцию, мы рассмотрим класс транзакции, обработчик транзакции и конструктор транзакций ниже. Пожалуйста, используйте файлы ниже, работая над каждым:



Транзакция сообщения (создание нашей пользовательской транзакции)

В самом верху мы определяем наш пользовательский тип и группу типов:
Code:
const MESSAGE_TYPE = 101;const MESSAGE_TYPE_GROUP = 1001;

Чуть ниже мы определяем нашу схему транзакций:

Code:
public static getSchema(): Transactions.schemas.TransactionSchema {return schemas.extend(schemas.transactionBaseSchema, {…}}

Одно отличие, которое вы заметите, в отличие от транзакции регистрации бизнеса, мы включили поле receientId в нашу схему. Это связано с тем, что это поле используется в качестве «идентификатора канала» для наших целей. Кроме того, мы определяем остальную часть транзакции и наш объект сообщения, который будет использоваться для данных сообщения.

Ниже схемы мы определяем нашу статическую плату 0,01. Мы используем значение 1000000, поскольку ARK SDK не работает с числами с плавающей запятой, а количество десятичных разрядов равно 8.

Что касается функциональности serde (сериализатор / десериализатор); в основном она работает так же, как транзакция регистрации бизнеса, за исключением двух важных вещей:

Буферная функция writeUint8 ограничена размером 256 байт. Поскольку мы хотим обрабатывать данные сообщения максимум 1024 байта, мы должны вместо этого использовать вариант writeUint16.
Поскольку мы хотим использовать в транзакции receientId, мы должны включить его и в процесс serde:

Сериализатор:
Code:
const { addressBuffer, addressError } = Identities.Address.toBuffer(data.recipientId);
options.addressError = addressError;
buffer.append(addressBuffer);

Десериализатор:
Code:
data.recipientId = Identities.Address.fromBuffer(buf.readBytes(21).toBuffer());

Обработчик сообщений


Далее мы будем работать с обработчиком транзакций сообщений. Поскольку транзакция сообщения относительно проста, мы можем опустить большую часть логики из обработчика транзакции регистрации бизнеса.

Используя throwIfCannotBeApplied, мы явно проверяем правильность данных сообщения:

Code:
const { data }: Interfaces.ITransaction = transaction;const { message }: { message: string } = data.asset.messageData;if (!message) {throw new MessageTransactionAssetError();}await super.throwIfCannotBeApplied(transaction, wallet, databaseWalletManager);

В applyToSender и revertForSender мы выполняем действия по умолчанию применить и отменить. Методы applyToRecipient и revertForRecipient не используются, поскольку ни один из атрибутов получателя не изменяется в результате обработки Message Transaction.

Кроме того, мы позволяем базовому TransactionHandler… обрабатывать все остальное.



Построитель сообщений


Компоновщик, представленный в этом файле, будет использоваться в клиенте ARK Messenger для создания Message Transactions, когда пользователь отправляет сообщение.

Сначала мы инициализируем объект данных с помощью метода class constructor ():

Code:
constructor() {super();this.data.type = MessageTransaction.type;this.data.typeGroup = MessageTransaction.typeGroup;this.data.version = 2;this.data.fee = Utils.BigNumber.make("1000000");this.data.amount = Utils.BigNumber.ZERO;this.data.asset = { messageData: {} };this.data.recipientId = undefined;};

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

Code:
public messageData(message: string): MessageTransactionBuilder {this.data.asset.messageData = {message,};};

Наконец, нам нужно добавить нестандартные поля в объект данных транзакции, когда он вызывается с помощью getStruct ():

Code:
const struct: Interfaces.ITransactionData = super.getStruct();struct.amount = this.data.amount;struct.asset = this.data.asset;struct.recipientId = this.data.recipientId;return struct;};


Тестирование построителя пользовательских транзакций

Есть несколько способов проверить вашу пользовательскую транзакцию. Один из лучших вариантов - создать тестовый файл с помощью Jest. Этот тестер также используется для других пакетов ARK, так что это хорошая синергия.

Вверху мы импортируем все необходимые пакеты:
Code:
import “jest-extended”;
import { Managers, Transactions } from “@arkecosystem/crypto”;
import { MessageTransactionBuilder } from “../src/builders”;
import { MessageTransaction } from “../src/transactions”;

Затем нам нужно внести некоторые коррективы с помощью менеджера конфигурации, чтобы иметь возможность фактически создать транзакцию. Сначала мы выбираем предустановку сети testnet и устанавливаем height равной 2. Это активирует этап AIP11.

Code:
Managers.configManager.setFromPreset(“testnet”);
Managers.configManager.setHeight(2);

Теперь мы включаем нашу новую пользовательскую транзакцию в реестр транзакций:
Code:
Transactions.TransactionRegistry.registerTransactionType(MessageTransaction);

На этом настройка завершена. Осталось создать тест, который проверяет, что транзакция может быть построена и проверена:
Code:
describe(“Test builder”, () => {
      it(“should verify correctly”, () => {
      const builder = new MessageTransactionBuilder();
      const tx = builder
         .messageData(“SomeMessage”)
         .nonce(“3”)
         .recipientId(“AYeceuGa7tTsyG6jgq7X6qKdoXt9iJJKN6”)        .sign(“clay harbor enemy utility margin pretty hub comic piece  aerobic umbrella acquire”);
      expect(tx.build().verified).toBeTrue();
      expect(tx.verify()).toBeTrue();
      });
});

Наконец, мы проверим эти транзакции в сети.


Тестирование пользовательской транзакции в сети

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

Информацию о том, как создать плагин, можно найти здесь: Как написать основной плагин.

Вы можете посмотреть наш файл плагина Message Transaction здесь: plugin.js.

Чтобы интегрировать плагин Message Transaction в bridgechain, мы просто должны включить его в конец файла plugins.js, который находится в ./packages/core/bin/config/ enjnetwork broadcast/plugins.js

Code:
module.exports = {….“message-transaction”: {},};

Теперь, когда мы запустим yarn setup для установки bridgechain, она также автоматически установит пользовательскую транзакцию и включит ее в качестве плагина при запуске.

Когда bridgechain работает (локально), мы можем проверить правильность интеграции пользовательской транзакции, проверив следующую конечную точку API: http://127.0.0.1:11003/api/transactions/types

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

Проверка завершается, когда транзакция транслируется и обрабатывается сетью. Теперь мы успешно реализовали нашу Message Transaction! Следующим шагом является разработка клиента чата, с которым пользователь будет взаимодействовать.


Использование пользовательской транзакции в клиенте

Как упоминалось ранее, клиент был создан с помощью ReactJS и написан на TypeScript. С полной кодовой базой можно ознакомиться здесь.

Чтобы использовать пользовательскую транзакцию в нашем клиенте чата, мы сначала должны включить некоторые файлы в наш проект. Части, которые нам нужны - это Transaction Message и Message Transaction Builder. Мы можем просто скопировать и вставить их ранее и поместить в папку / src /. Поскольку Message Transaction Handler используется только для ядра, его можно опустить.

Теперь мы можем просто импортировать Message Transaction Builder в любое место нашего приложения, чтобы использовать его. В клиенте ARK Messenger он импортируется в отдельный файл утилит, как вы можете видеть здесь.

Code:
import { encryptMessage, fetchRemoteNonce, broadcastTransaction } from ‘./index’;import { Transactions } from ‘@arkecosystem/crypto’;import { ITransactionData, IPostTransactionResponse } from ‘../interfaces’;import { MessageTransaction } from ‘../custom-transactions/message-transaction/transactions’;import { MessageTransactionBuilder } from ‘../custom-transactions/message-transaction/builders’;

Необходимо зарегистрировать новый тип транзакции в Реестре транзакций:

Code:
Transactions.TransactionRegistry.registerTransactionType(MessageTransaction);

Мы используем пользовательскую версию сети, определенную в переменной среды. Мы храним это в переменной const, которая будет передана построителю транзакций:

Code:
const NETWORK = Number(process.env.REACT_APP_NETWORK);

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

Code:
const createMessageTransaction = async (recipientId: string,encryptedMessage: string,passphrase: string,senderId: string): Promise<ITransactionData> => {const nonce = await fetchRemoteNonce(senderId);const tx = new MessageTransactionBuilder().network(NETWORK).recipientId(recipientId).messageData(encryptedMessage).nonce(nonce).sign(passphrase);return tx.getStruct();};export const sendMessage = async (recipientId: string,text: string,channelPassphrase: string,userPassphrase: string,userAddress: string): Promise<IPostTransactionResponse | void> => {const encryptedMessage = encryptMessage(text, channelPassphrase);try {const tx = await createMessageTransaction(recipientId,encryptedMessage,userPassphrase,userAddress);return broadcastTransaction(tx);} catch (err) {console.error(err);}};

Альтернативы этому подходу:

  • Загрузите пользовательскую транзакцию в качестве модуля в NPM.
  • Используйте подмодули Git.



Следующие шаги

В нашем следующем и последнем уроке мы будем развертывать bridgechain и запускать клиентское приложение. Кроме того, мы выделим все примеры, касающиеся того, как разработчики могут работать с ядром ARK. Благодаря будущим обновлениям и улучшениям, ARK Core будет оставаться одним из самых простых и гибких способов создания блокчейн-решений.

Если вы застряли в какой-то момент, обязательно ознакомьтесь с нашими документами в центре обучения ARK. Кроме того, наша команда и разработчики сообщества активны в Slack, поэтому не стесняйтесь обращаться к нам!

Прочитайте наш новый технический документ, следите за нами в социальных сетях (Twitter | Facebook | Reddit), присоединяйтесь к нашему сообществу (Slack | Discord) и следите за обновлениями в нашем блоге на Medium и Steemit.


Перевод. Оригинал:ARK Messenger Tutorial — Part Two
28  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: April 03, 2020, 03:26:26 AM

2-ое задание - моё.


сделал: https://bitcointalk.org/index.php?topic=1661696.msg54146934#msg54146934
29  Local / Бизнес / Re: Stake - Казино с 12 играми на любой вкус !!! on: April 02, 2020, 05:03:00 AM


20-миллиардный конкурс ставок! 🍀
Заканчивается: при достижении ставки 20 000 000 000
Минимальная награда: 100 000 сатоши!


Ставка приближается к новой вехе из общей суммы 20 миллиардов ставок, сделанных на платформе. Чтобы выиграть это испытание, вы должны поймать 20-миллиардную ставку в любой игре с суммой ставки выше 0 и выиграть гарантированный приз в размере 100 000 сатоши. Если вам повезло,  и ваша прибыль (или убыток) выше 1001 сатоши, она будет умножена в 100 раз и это ваш выигрыш! Максимальный выигрыш, который вы можете получить, - это 1 BTC   или в другой монете в этом размере, которую мы поддерживаем. Таким образом, чем больше сумма ставки, тем больше вы можете получить выигрыш, независимо от того, выиграете вы или проиграете. Если 20-миллиардная ставка не удовлетворяет одному из требований, вознаграждается следующий участник по списку. Кроме того, первые 100 постеров на эту тему получат бонус в 20 000 сатоши в конце акции. Пожалуйста, не пытайтесь вводить альты, это будет строго наказано.

Требования

  • Сделайте 20-миллиардную ставку с любой ставкой, превышающей 0.
  • Скрытые ставки должны быть отключены (для 20-миллиардной ставки).
  • Ограниченная выплата за победу в этом испытании составляет 1 BTC или в другой монете в этом размере, которую мы поддерживаем. (стоимость учитывается в день зачисления).
  • Действительному победителю для 20-миллиардной ставки выигрыш будет выплачен в соответствующей валюте (валюте, в которой сделана ставка).
  • 1 действительная запись на семью. (для постеров форума).
  • В комментарии напишите свое имя пользователя ниже. (для постеров форума).
  • 10+ Количество сообщений на форуме (для постеров форума).




* Мы объявим победителя по этой теме, как только это произойдет! Удачи всем! 🍀

** Примечание. В случае, если 20-миллиардная ставка не будет разыграна, мы продолжим поднимать ставку по одной за раз, пока у нас не будет действительного победителя!


Перевод. Оригинал: https://forum.stake.com/topic/33916-%F0%9F%8E%891-btc-20-billionth-bet-challengeminimum-reward-guaranteed/
30  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: April 02, 2020, 04:31:43 AM
Новые задания на перевод для разных пользователей:
1. 🎉[1 BTC] 20 Billionth Bet Challenge|Minimum Reward Guaranteed!
2. 🏆 [0.08 BTC] Keep It Going
3. CSGO: ESL Pro League Money Back Special
4. Bitcoin Bros Are Directing Their Powerful Computers Toward Coronavirus COVID-19 Research
5. 400,000 new people have joined Folding@Home's fight against COVID-19
6. NEW COVID-19 SMALL MOLECULE SCREENING SIMULATIONS ARE RUNNING ON FULL FOLDING@HOME!

Половина переводов в тему по Stake (ссылка была выше), другая половина в тему по foldingcoin. Отмечу, что часть заданий очень простые.

Заберу 1-ое задание.

сделал: https://bitcointalk.org/index.php?topic=4850780.msg54140635#msg54140635


А можно взять еще одно задание?
31  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: March 31, 2020, 05:50:49 AM
Я Wink возьму и переведу №1, если никто из новичков еще не сделал это.

уже поздно, конкурс закончился вчера, раньше надо было переводить

 Shockedну я уже перевел, так на всякий случай:
https://forum.stake.com/topic/33908-008-btc-safe-sound-mines-challenge-%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4/
32  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: March 31, 2020, 04:27:27 AM
Итак, задания для новичков и джуниоров):
1. Перевести новый конкурс на русский и опубликовать в теме по stake. Ссылка на конкурс: 🏆 [0.08 BTC] Safe & Sound | Mines Challenge 😷
2. Перевести статью с обзором новостей в казино Cloudbet и опубликовать в их теме в том же разделе. What's new for 2020 in Cloudbet's bitcoin casino

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

Я Wink возьму и переведу №1, если никто из новичков еще не сделал это.
33  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: March 30, 2020, 10:48:23 AM

С добрым утром Cheesy После того, как в том топике всё разобрали: и причины, и ссылки, вы просто взяли собрали в кучу всё и выдали в своём посте. Ну что могу сказать: креативненько Grin
Доброе!

а я просто задание выполнил, назвал причину и основание, а еще то, что судебное решение не требуется, а что нужен обязательно "эксклюзив"  Huh 

За ваши старания, я уже дал вам мерит. Продолжайте дальнейший рост и развитие на форуме  Wink

Спасибо, добрый человек!
Буду стараться во благо родного форума!
34  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: March 30, 2020, 05:10:33 AM

С добрым утром Cheesy После того, как в том топике всё разобрали: и причины, и ссылки, вы просто взяли собрали в кучу всё и выдали в своём посте. Ну что могу сказать: креативненько Grin
Доброе!

а я просто задание выполнил, назвал причину и основание, а еще то, что судебное решение не требуется, а что нужен обязательно "эксклюзив"  Huh 
35  Local / Разное / Re: Форум недоступен из России on: March 30, 2020, 04:31:54 AM
Многие провайдеры от души блокируют весь ресурс типа по привычке.
То есть, ты предпочел бы, чтобы провайдеры подменяли сертификат и смотрели твой трафик? Не пори херню и учи матчасть, "по привычке"...  Cheesy

Я написал "по привычке"  в смысле "традиционно" как написано в источнике, наверное, у провайдеров типа такая практика сразу блокировать весь ресурс.
а как они могут смотреть траф, если сайт на https Huh
36  Local / Новички / Re: Раздача мерита нуждающимся/Есть задания l on: March 30, 2020, 04:29:10 AM
Так, вот задание прямо под носом: найти судебное решение и подробно описать причину блокировки этого форума в теме Форум недоступен из России
На сайте https://sudrf.ru/index.php?id=300#sp такое ощущение, что бесконечный поиск происходит.

Причина блокировки, страница на форуме об онлайн-казино.


Ответил здесь подробно: https://bitcointalk.org/index.php?topic=5235502.msg54121512#msg54121512

37  Local / Разное / Re: Форум недоступен из России on: March 30, 2020, 04:17:20 AM
Привет!

Bitcointalk  частично заблокирован Роскомнадзором по запросу ФНС еще от 21 декабря 2017 г. во внесудебном порядке (решение суда не требуется).

Реквизиты основания внесения в реестр: ФНС 2-6-20/2017-07-13-1796-АИ


Причина частичной блокировки форума с 25 марта 2020 -  страница об онлайн-казино: https://bitcointalk.org/index.php?topic=1620600.0.

Многие провайдеры от души блокируют весь ресурс типа по привычке.

 
источник: https://bits.media/roskomnadzor-chastichno-zablokiroval-kriptovalyutnyy-forum-bitcointalk/


38  Local / Новички / Re: Merit - что это и как этим пользоваться on: December 27, 2019, 05:24:37 PM
парни, как быстро получить меритов?
39  Local / Токены / Re: [ANN][ICO] ZrCoin [11|05—09|06] Первый промышленный опцион on: December 10, 2017, 05:12:59 AM
вот позитивная новость! а что если фото  выложить в этой ветке? 

Фото и видео можно посмотреть здесь: https://www.facebook.com/mukaltin.sy
Возможно, без аккаунта на фейсбуке просмотр будет не доступен.


Но блин почему сюда эту инфу не выкладываютHuh И самый главный вопрос почему не сделать было раньше фундамент когда на улице не стоит мороз -30 и сэкономить бабло? Не понимаю я этого чего так долго выжидали
Без проекта фундамент нельзя делать, потому что в проект могут внести изменения или не согласовать. Согласование проекта та еще тягомотина.


без проекта вообще строить заводы по-моему нельзя Smiley
40  Local / Работа / Re: Прокачать 10 аккаунтов on: December 07, 2017, 04:55:11 AM
Здравствуйте.

Ищу человека, который сможет заняться и прокачать 5-10 аккаунтов до member.

По данной таблице это 2.5 мес. https://bitcointalk.org/index.php?topic=1762094.0

Раз в 2 недели понадобится заходить в каждый из 10 акков и постить 14 осмысленных сообщений на английском языке!

Оплата 100-200$

оплата  за 1 аккаунт 100-200$  ?
Pages: « 1 [2] 3 4 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!