Немаловажным фактором, который учитывают поисковые системы, анализируя написанные нами статьи, является объем статьи, количество ключевых слов, и т.д.
Для облегчения жизни как блоггерам, так и профессиональным копирайтерам двое талантливых программистов Денис Каплунов и Даниил Абрамов создали замечательную программу Textus Pro. Она совершенно бесплатна, за что ребятам отдельное большое человеческое спасибо!
Данный софт позволяет подсчитать количество символов, слов с пробелами и без пробелов, количество ключевых слов в тексте. Для копирайтеров предусмотрен практичный расчет стоимости статьи в соответствии цена за 1000 символов.
Какие возможности предоставляет вам эта программа?
Статистика использования ключевых слов – частота и плотность. Причем есть отдельная опция, которая позволяет учитывать при подсчете не только прямые вхождения, но и словоформы. В результате подсчета, выбранные ключевые слова выделяются в тексте синей подсветкой.
Статистика использования всех слов в тексте – частота и плотность. Вы получите четкое представление о том, какие слова в тексте используются и в каком количестве. Если вы заметите, что некоторые ваши словесные обороты излишне часто употребляются в тексте – вы сможете их заменить синонимами, чтобы увеличить качество и читабельность.
Вы получите возможность проводить такой анализ, указывая необходимые личные параметры (учет стоп-слов, чисел, коротких слов).
При работе с исходным текстом вы сможете выбрать удобный для вас шрифт, увеличить/уменьшить размер текста, приглушить стоп-слова и знаки препинания.
Также перед вами будет нужная статистика самого текста: количество слов и знаков (с пробелами и без пробелов), тошнота текста.
Вы сможете рассчитать точную стоимость вашей работы исходя из количества символов и цены за 1000 знаков.
Масса других «фишек», чтобы ваша работа с программой была максимально удобной.
Данная статья предназначена для начинающих программистов, которые никогда не работали с потоками, и хотели бы узнать основы работы с ними. Желательно, чтоб читатель знал основы ООП и имел какой-нибудь опыт работы в Delphi.
Для начала давайте определимся, что под словом "поток" я подразумеваю именно Thread, который еще имеет название "нить". Нередко встречал на форумах мнения, что потоки не нужны вообще, любую программу можно написать так, что она будет замечательно работать и без них. Конечно, если не делать ничего серьёзней "Hello World" это так и есть, но если постепенно набирать опыт, рано или поздно любой начинающий программист упрётся в возможности "плоского" кода, возникнет необходимость распараллелить задачи. А некоторые задачи вообще нельзя реализовать без использования потоков, например работа с сокетами, COM-портом, длительное ожидание каких-либо событий, и т.д.
Всем известно, что Windows система многозадачная. Попросту говоря, это означает, что несколько программ могут работать одновременно под управлением ОС. Все мы открывали диспетчер задач и видели список процессов. Процесс - это экземпляр выполняемого приложения. На самом деле сам по себе он ничего не выполняет, он создаётся при запуске приложения, содержит в себе служебную информацию, через которую система с ним работает, так же ему выделяется необходимая память под код и данные. Для того, чтобы программа заработала, в нём создаётся поток. Любой процесс содержит в себе хотя бы один поток, и именно он отвечает за выполнение кода и получает на это процессорное время. Этим и достигается мнимая параллельность работы программ, или, как её еще называют, псевдопараллельность. Почему мнимая? Да потому, что реально процессор в каждый момент времени может выполнять только один участок кода. Windows раздаёт процессорное время всем потокам в системе по очереди, тем самым создаётся впечатление, что они работают одновременно. Реально работающие параллельно потоки могут быть только на машинах с двумя и более процессорами.
Для создания дополнительных потоков в Delphi существует базовый класс TThread, от него мы и будем наследоваться при реализации своих потоков. Для того, чтобы создать "скелет" нового класса, можно выбрать в меню File - New - Thread Object, Delphi создаст новый модуль с заготовкой этого класса. Я же для наглядности опишу его в модуле формы. Как видите, в этой заготовке добавлен один метод - Execute. Именно его нам и нужно переопределить, код внутри него и будет работать в отдельном потоке. И так, попробуем написать пример - запустим в потоке бесконечный цикл:
Запустите пример на выполнение и нажмите кнопку. Вроде ничего не происходит - форма не зависла, реагирует на перемещения. На самом деле это не так - откройте диспетчер задач и вы увидите, что процессор загружен по-полной. Сейчас в процессе вашего приложения работает два потока - один был создан изначально, при запуске приложения. Второй, который так грузит процессор - мы создали по нажатию кнопки. Итак, давайте разберём, что же означает код в Button1Click:
тут мы создали экземпляр класса TNewThread. Конструктор Create имеет всего один параметр - CreateSuspended типа boolean, который указывает, запустить новый поток сразу после создания (если false), или дождаться команды (если true).
свойство FreeOnTerminate определяет, что поток после выполнения автоматически завершится, объект будет уничтожен, и нам не придётся его уничтожать вручную. В нашем примере это не имеет значения, так как сам по себе он никогда не завершится, но понадобится в следующих примерах.
Свойство Priority, если вы еще не догадались из названия, устанавливает приоритет потока. Да да, каждый поток в системе имеет свой приоритет. Если процессорного времени не хватает, система начинает распределять его согласно приоритетам потоков. Свойство Priority может принимать следующие значения:
tpTimeCritical - критический
tpHighest - очень высокий
tpHigher - высокий
tpNormal - средний
tpLower - низкий
tpLowest - очень низкий
tpIdle - поток работает во время простоя системы
Ставить высокие приоритеты потокам не стоит, если этого не требует задача, так как это сильно нагружает систему.
Ну и собственно, запуск потока.
Думаю, теперь вам понятно, как создаются потоки. Заметьте, ничего сложного. Но не всё так просто. Казалось бы - пишем любой код внутри метода Execute и всё, а нет, потоки имеют одно неприятное свойство - они ничего не знают друг о друге. И что такого? - спросите вы. А вот что: допустим, вы пытаетесь из другого потока изменить свойство какого-нибудь компонента на форме. Как известно, VCL однопоточна, весь код внутри приложения выполняется последовательно. Допустим, в процессе работы изменились какие-то данные внутри классов VCL, система отбирает время у основного потока, передаёт по кругу остальным потокам и возвращает обратно, при этом выполнение кода продолжается с того места, где приостановилось. Если мы из своего потока что-то меняем, к примеру, на форме, задействуется много механизмов внутри VCL (напомню, выполнение основного потока пока "приостановлено"), соответственно за это время успеют измениться какие-либо данные. И тут вдруг время снова отдаётся основному потоку, он спокойно продолжает своё выполнение, но данные уже изменены! К чему это может привести - предугадать нельзя. Вы можете проверить это тысячу раз, и ничего не произойдёт, а на тысяча первый программа рухнет. И это относится не только к взаимодействию дополнительных потоков с главным, но и к взаимодействию потоков между собой. Писать такие ненадёжные программы конечно нельзя.
Синхронизации потоков
Если вы создали шаблон класса автоматически, то, наверное, заметили комментарий, который дружелюбная Delphi поместила в новый модуль. Он гласит: "Methods and properties of objects in visual components can only be used in a method called using Synchronize". Это значит, что обращение к визуальным компонентам возможно только путём вызова процедуры Synchronize. Давайте рассмотрим пример, но теперь наш поток не будет разогревать процессор впустую, а будет делать что-нибудь полезное, к примеру, прокручивать ProgressBar на форме. В качестве параметра в процедуру Synchronize передаётся метод нашего потока, но сам он передаётся без параметров. Параметры можно передать, добавив поля нужного типа в описание нашего класса. У нас будет одно поле - тот самый прогресс:
Вот теперь ProgressBar двигается, и это вполне безопасно. А безопасно вот почему: процедура Synchronize на время приостанавливает выполнение нашего потока, и передаёт управление главному потоку, т.е. SetProgress выполняется в главном потоке. Это нужно запомнить, потому что некоторые допускают ошибки, выполняя внутри Synchronize длительную работу, при этом, что очевидно, форма зависает на длительное время. Поэтому используйте Synchronize для вывода информации - то самое двигание прогресса, обновления заголовков компонентов и т.д.
Вы наверное заметили, что внутри цикла мы используем процедуру Sleep. В однопоточном приложении Sleep используется редко, а вот в потоках его использовать очень удобно. Пример - бесконечный цикл, пока не выполнится какое-нибудь условие. Если не вставить туда Sleep мы будем просто нагружать систему бесполезной работой.
Надеюсь, вы поняли как работает Synchronize. Но есть еще один довольно удобный способ передать информацию форме - посылка сообщения. Давайте рассмотрим и его. Для этого объявим константу:
В объявление класса формы добавим новый метод, а затем и его реализацию:
Используя функцию SendMessage, мы посылаем окну приложения сообщение, один из параметров которого содержит нужный нам прогресс. Сообщение становится в очередь, и согласно этой очереди будет обработано главным потоком, где и выполнится метод SetProgressPos. Но тут есть один нюанс: SendMessage, как и в случае с Synchronize, приостановит выполнение нашего потока, пока основной поток не обработает сообщение. Если использовать PostMessage этого не произойдёт, наш поток отправит сообщение и продолжит свою работу, а уж когда оно там обработается - неважно. Какую из этих функций использовать - решать вам, всё зависит от задачи.
Вот, в принципе, мы и рассмотрели основные способы работы с компонентами VCL из потоков. А как быть, если в нашей программе не один новый поток, а несколько? И нужно организовать работу с одними и теми же данными? Тут нам на помощь приходят другие способы синхронизации. Один из них мы и рассмотрим. Для его реализации нужно добавить в проект модуль SyncObjs.
Критические секции
Работают они следующим образом: внутри критической секции может работать только один поток, другие ждут его завершения. Чтобы лучше понять, везде приводят сравнение с узкой трубой: представьте, с одной стороны "толпятся" потоки, но в трубу может "пролезть" только один, а когда он "пролезет" - начнёт движение второй, и так по порядку. Еще проще понять это на примере и тем же ProgressBar'ом. Итак, запустите один из примеров, приведённых ранее. Нажмите на кнопку, подождите несколько секунд, а затем нажмите еще раз. Что происходит? ProgressBar начал прыгать. Прыгает потому, что у нас работает не один поток, а два, и каждый из них передаёт разные значения прогресса. Теперь немного переделаем код, в событии onCreate формы создадим критическую секцию:
У TCriticalSection есть два нужных нам метода, Enter и Leave, соответственно вход и выход из неё. Поместим наш код в критическую секцию:
Попробуйте запустить приложение и нажать несколько раз на кнопку, а потом посчитайте, сколько раз пройдёт прогресс. Понятно, в чем суть? Первый раз, нажимая на кнопку, мы создаём поток, он занимает критическую секцию и начинает работу. Нажимаем второй - создаётся второй поток, но критическая секция занята, и он ждёт, пока её не освободит первый. Третий, четвёртый - все пройдут только по-очереди.
Критические секции удобно использовать при обработке одних и тех же данных (списков, массивов) разными потоками. Поняв, как они работают, вы всегда найдёте им применение.
В этой небольшой статье рассмотрены не все способы синхронизации, есть еще события (TEvent), а так же объекты системы, такие как мьютексы (Mutex), семафоры (Semaphore), но они больше подходят для взаимодействия между приложениями. Остальное, что касается использования класса TThread, вы можете узнать самостоятельно, в help'е всё довольно подробно описано. Цель этой статьи - показать начинающим, что не всё так сложно и страшно, главное разобраться, что есть что. И побольше практики - самое главное опыт!
Из приложений Delphi вы можете получить доступ к .MDB-файлам Microsoft Access, используя драйверы ODBC. Delphi действительно может дать все необходимое, но некоторые вещи не столь очевидные. Вот шаги для достижения вашей цели.
Что вам нужно: Первое: проверьте, установлен ли ODBC Administrator (файл ODBCADM.EXE в WINDOWS\SYSTEM, вам также необходим файл DBCINST.DLL для установки новых драйверов и ODBC.DLL). Администратор ODBC должен присутствовать в Панели Управления в виде иконки ODBC. Если у вас его не было, то после установки Delphi он должен появиться. Если вы получаете сообщение типа "Your ODBC is not up-to-date IDAPI needs ODBC greater then 2.0", у вас имеется старая версия администратора и вы должны обновить ее до версии, включенной в поставку Delphi. Проверьте, имеете ли вы доступ к драйверу Access ODBC, установленному в Windows. Вы можете сделать это, щелкнув на "Drivers" в диалоговом окне "Data Sources", появляющемся при запуске ODBC Administrator. Delphi должна в диалоге добавить пункты Access Files (*.mdb) и Access Data (*.mdb), работающие с файлами Access 1.10 и использующие драйвер SIMBA.DLL (имейте в виду, что для данного DLL необходимы также файлы RED110.DLL и SIMADMIN.DLL, устанавливаемые для вас Delphi). Данные файлы должны поставляться с дистрибутивом вашей программы как часть ReportSmith Runtime библиотеки. Если вы хотите работать с файлами Access 2.0 или 2.5, вам необходимо иметь другой набор драйверов от Microsoft. Ключевой файл - MSAJT200.DLL, также необходимы файлы MSJETERR.DLL и MSJETINT.DLL. В США набор ODBC Desktop Drivers, Version 2.0. стоит $10.25. Он также доступен в январском выпуске MSDN, Level 2 (Development Platform) CD4 \ODBC\X86 как часть ODBC 2.1 SDK. Очевидно есть обновление этих драйверов для файлов Access 2.5 на форуме MSACCESS CompuServe. Имейте в виду, что драйвер Access ODBC, поставляемый с некоторыми приложениями Microsoft (например, MS Office) могут использоваться только другими MS-приложениями. К сожалению, они могут сыграть с вами злую шутку: сначала заработать, а потом отказать в совершенно неподходящий момент! Поэтому не обращайте внимания (запретите себе обращать внимание!) на строчку "Access 2.0 for MS Office (*.mdb)" в списке драйверов ODBC Administrator. Вы можете установить новые ODBC драйверы с помощью ODBC Administrator в Панели Управления.
Добавление источника данных ODBC (Data Source): если у вас имеются все необходимые файлы, можете начинать. Представленный здесь пример использует драйвер Access 1.10, обеспечиваемый Delphi. Используя ODBC Administrator, установите источник данных для ваших файлов Access: щелчок на кнопке "Add" в окне "data sources" выведет диалог "Add Data Source", выберите Access Files (*.mdb) (или что-либо подходящее, в зависимости от установленных драйверов). В диалоге "ODBC Microsoft Access Setup" необходимо ввести имя в поле "Data Source Name". В данном примере мы используем "My Test". Введите описание "Data Source" в поле Description. Щелкните на "Select Database" для открытия диалога "Select Database". Перейдите в директорию, где хранятся ваши Access .MDB-файлы и выберите один. Мы выберем файл TEST.MDB в директории C:\DELPROJ\ACCESS. Нажмите OK в диалоге "Setup". Теперь в списке источников данных (Data Sources) должен появиться "My Test" (Access Files *.mdb). Нажмите Close для выхода из ODBC Administrator. Используя этот метод, вы можете установить и другие, необходимые вам, источники данных.
Настройка Borland Database Engine: загрузите теперь Borland Database Engine (BDE) Configuration Utility. На странице "Drivers" щелкните на кнопке New ODBC Driver. Имейте в виду, что это добавит драйвер Access в BDE и полностью отдельное управление дополнительно к драйверам Access в Windows, устанавливаемым при помощи ODBC Administrator. В открывшемся диалоге Add ODBC Driver в верхнем поле редактировании введите ACCESS (или что-то типа этого). BDE автоматически добавит на первое место ODBC_. В combobox, расположенном немного ниже, выберите Access Files (*.mdb). Выберите Data Source в следующем combobox (Default Data Source Name), это должен быть источник данных, который вы установили с помощью ODBC Administration Utility. Здесь можно не беспокоиться о вашем выборе, поскольку позднее это можно изменить (позже вы узнаете как это можно сделать). Нажмите OK. После установки драйвера BDE, вы можете использовать его более чем с одним источником данных ODBC, применяя различные псевдонимы (Alias) для каждого ODBC Data Source. Для установки псевдонима переключитесь на страницу "Aliases" и нажмите на кнопку "New Alias". В диалоговом окне "Add New Alias" введите необходимое имя псевдонима в поле "Alias Name". В нашем примере мы используем MY_TEST (не забывайте, что пробелы в псевдониме недопустимы). В combobox Alias Type выберите имя ODBC-драйвера, который вы только что создали (в нашем случае ODBC_ACCESS). Нажмите OK. Если вы имеете более одного ODBC Data Source, измените параметр ODBC DSN ("DSN" = "Data Source Name") в списке "Parameters" псевдонима на подходящий источник данных ODBC Data Source, как установлено в ODBC Administrator. Имейте в виду, что вы не должны ничего добавлять в параметр Path (путь), так как ODBC Data Source уже имеет эту информацию. Если вы добавляете параметр Path, убедитесь, что путь правильный, в противном случае ничего работать не будет! Теперь сохраните конфигурацию BDE, выбирая пункты меню File|Save, и выходите из Database Engine Configuration Utility.
В Delphi: Создайте новый проект и расположите на форме компоненты Table и DataSource из вкладки Data Access палитры компонентов. Затем из вкладки Data Controls выберите компонент DBGrid и также расположите его на форме. В Table, в Инспекторе Объектов, назначьте свойству DatabaseName псевдоним MY_TEST, установленный нами в BDE Configuration Utility. Теперь спуститесь ниже и раскройте список TableName. Вас попросят зарегистрироваться в базе данных Access MY_TEST. Обратите внимание, что если бюджет не установлен, то User Name и Password можно не заполнять, просто нажмите на кнопку OK. После некоторой паузы раскроется список, содержащий доступные таблицы для ODBC Data Source указанного псевдонима BDE. Выберите TEST. В DataSource, в Инспекторе Объектов, назначьте свойству DataSet таблицу Table1. В DBGrid, также в Инспекторе Объектов, назначьте свойству DataSource значение DataSource1. Возвратитесь к таблице, и в том же Инспекторе Объектов установите свойство Active в True. Данные из таблицы TEST отобразятся в табличной сетке. Это все! Одну вещь все-таки стоит упомянуть: если вы создаете приложение, использующее таблицы Access и запускаете его из-под Delphi IDE, то при попытке изменения данных в таблице(ах) вы получите ошибку. Если же вы запустите скомпилированный .EXE-файл вне Delphi (предварительно Delphi закрыв), то все будет ОК. Сообщения об ошибках ODBC, к несчастью, очень туманные и бывает достаточно трудно понять его источник в вашем приложении, в этом случае проверьте установку ODBC Administrator и BDE Configuration Utility, они также могут помочь понять источник ошибки. Для получения дополнительной информации обратитесь к ODBC 2.0 Programmer's Reference или SDK Guide от Microsoft Press (ISBN 1-55615-658-8, цена в США составляет $24.95). В этом документе вы получите исчерпывающую информацию о возможных ошибках при использовании Access-файлов посредством ODBC. Также здесь вы можете найти рапорты пользователей о найденных ошибках, в том числе и при использовании Delphi. Более того, я выяснил, что большинство описанных проблем возникает при неправильных настройках ODBC, т.е. те шаги, которые я описал выше. Надеюсь, что с развитием технологии доступа к базам данных такие сложности уйдут в прошлое. Кроме того, имейте в виду, что если вам необходимо создать новую таблицу Access 1.10, вы можете воспользоваться Database Desktop, включаемый в поставку Delphi.
Авторы данной технологии Ralph Friedman (CompuServe 100064,3102), Bob Swart и Chris Frizelle.
Взято из Советов по Delphi от Валентина Озерова
--------------------------------------------------------------------------------
Может кто-нибудь, предпочтительно из персонала Borland, ПОЖАЛУЙСТА, дать мне ПОЛНЫЙ рассказ о том, как с помощью Delphi и сопутствующего программного обеспечения получить доступ и работать с базами данных MS Access. Среди прочего, мне необходимо узнать...
Нижеследующая инструкция в точности повторяет ту технологию, с которой я работаю на данный момент, надеюсь, что это поможет.
Драйвер ODBC, предусмотренный для доступа к Access 2.0, разработан только для работы в пределах среды Microsoft Office. Для работы со связкой ODBC/Access в Delphi, вам необходим Microsoft ODBC Desktop Driver kit, part# 273-054-030, доступный через Microsoft Direct за $10.25US (если вы живете не в США, воспользуйтесь службой WINEXT). Он также доступен в январском выпуске MSDN, Level 2 (Development Platform) CD4 \ODBC\X86 как часть ODBC 2.1 SDK. Имейте в виду, что смена драйверов (в частности Desktop Drivers) может негативно сказаться на работе других приложений Microsoft. Для информации (и замечаний) обращайтесь в форум WINEXT.
Также вам необходимы следующие файлы ODBC:
Минимум:
ODBC.DLL 03.10.1994, Версия 2.00.1510
ODBCINST.DLL 03.10.1994, Версия 2.00.1510
ODBCINST.HLP 11.08.1993
ODBCADM.EXE 11.08.1993, Версия 1.02.3129
Рекомендуется:
ODBC.DLL 12.07.1994, Версия 2.10.2401
ODBCINST.DLL 12.07.1994, Версия 2.10.2401
ODBCINST.HLP 12.07.1994
ODBCADM.EXE 12.07.1994, Версия 2.10.2309
Нижеследующие шаги приведут вас к искомой цели:
1. Используя администратора ODBC, установите источник данных (datasource) для вашей базы данных. Не забудьте задать путь к вашему mdb-файлу. Для нашего примера создайте источник с именем MYDSN.
2. Загрузите утилиту BDE Configuration.
3. Выберите пункт "New Driver".
4. Назначьте драйверу имя (в нашем случае ODBC_MYDSN).
5. В выпадающем списке драйверов выберите "Microsoft Access Driver (*.mdb)
6. В выпадающем списке имен выберите MYDSN
7. Перейдите на страницу "Alias" (псевдонимы).
8. Выберите "New Alias" (новый псевдоним).
9. Введите MYDSN в поле имени.
10. Для Alias Type (тип псевдонима) выберите ODBC_MYDSN.
11. На форме Delphi разместите компоненты DataSource, Table, и DBGrid.
12. Установите DBGrid1.DataSource на DataSource1.
13. Установите DataSource1.DataSet на Table1.
14. Установите Table1.DatabaseName на MYDSN.
15. В свойстве TableName компонента Table1 щелкните на стрелочку "вниз" и вы увидите диалог "Login". Нажмите OK и после короткой паузы вы увидите список всех имен ваших таблиц. Выберите одно.
16. Установите свойство Active Table1 в True и данные вашей таблицы появятся в табличной сетке.
С появлением и продвижением микрософтом OLE DB и реализацией в Дельфи ADO (начиная с версии 5.0) работа с MS Access через ODBC перестала быть актуальной. За исключением особых случаев рекомендуется пользоваться именно ADO линейкой компонентов для связи с MS Access
Многие мои друзья и знакомые часто спрашивают меня о том, как устроен мой сайт, сколько у меня таблиц в базе данных, как я храню данные и по каким полям веду поиск. Я, конечно, не выдаю все свои государственные тайны, но всегда понимаю причину таких вопросов и пытаюсь помочь людям построить быструю и надежную базу данных - т.е. тщательно продумать структуру БД таким образом, чтобы при увеличении нагрузки или объема таблиц динамический веб-сайт не превратился в тормозное усмертие.
А ведь многие новички (веб-строители) даже не догадываются о том, что крупные динамические сайты тормозят вовсе не из-за нагрузки скриптов на процессор, а в основном из-за неоптимизированного или дохленького MySQL-сервера. При этом во многом все зависит от того, как устроена ваша база данных.
Итак, начнем ликбез. Сразу всем вопрос: что делает MySQL во время записи в таблицы типа INSERT или UPDATE? Правильно - БЛОКИРУЕТ ТАБЛИЦЫ и пишет в них данные. Скорость записи и поиска может быть достаточно низкой, поэтому статус таблиц запрещает другим процессам считывать из них данные до окончания операции записи или обновления и снятия блокировки. При этом может получиться так, что во время записи единственного поля в длинные таблицы, ваш MySQL-сервер надолго заблокирует доступ к таблице остальным скриптам.
Например, вы создали таблицу новостей такого типа:
ID - номер, первичный ключ TEMA - тема новости MESS - сообщение, сама новость VIEWS - количество просмотров
При каждом обращении к новостям, скрипт будет выводить саму новость, а потом увеличивать поле VIEWS запросом UPDATE table 'NEWS' set VIEWS=VIEWS+1 where id=ID. При этом количество апдейтов будет довольно высоким. При высокой посещаемости веб-ресурса или при "нападении" на сайт поискового робота (эти ребята страдают многопоточностью и могут запросто повесить ваш сайт своими запросами) несколько одновременных процессов станут пытаться сделать UPDATE и SELECT. При каждом UPDATE таблица будет блокироваться (на это уходит время) и все остальные процессы будут ждать завершения операции. А если таблица достаточно большая? Например, несколько тысяч записей. Ежу понятно, что построится очередь из нескольких десятков скриптов, ожидающих ответа MySQL-сервера. Каждый будет жрать память и держать остальные процессы. В итоге все у вас зависнет и переглючит. Выход: делать вместо одной таблицы несколько. Советую разделять поля по типу их использования. Одну таблицу - только для вывода и редких обновлений или вставок. Другую - для частых обновлений, но редкого вывода. Например, значения счетчика обращений держать отдельно в таблицу вида:
ID - номер, первичный ключ VIEWS - количество просмотров
Сами новости лучше держать в другой таблице, где нет поля VIEWS. При этом таблица с новостями будет тяжелой (много текста, полей, индексов), а таблица COUNT (счетчик) будет очень легкой и быстрой. Таблица NEWS будет кешироваться и выводиться очень быстро при любых объемах, а таблица COUNT будет быстро обновляться из-за того, что она очень легкая (всего два целочисленных поля). Разделение данных по нескольким таблицам существенно ускоряет работу MySQL-сервера. Гораздо быстрее работают несколько мелких запросов по каждой таблице, чем один длинный запрос по одной или нескольким таблицам. Имейте это в виду, чтобы спать спокойно.
Дальше - круче. Чтобы не блокировать лишний раз свои таблицы используйте при вставках директиву DELAYED. Пример: INSERT DELAYED into STAT (ID,IP,UTIME) values (null,$ip,NOW()). Он позволяет серверу ответвлять поток в режиме ожидания, а саму вставку производить тогда, когда сервер освободится от других запросов или поступит следующий аналогичный INSERT DELAYED. Обычно отложенный метод подходит для любых операций с кумулятивными таблицами (когда в основном идут INSERTы, а данные копятся, а не модифицируются), при которых не особо важно когда именно подействуют изменения - мгновенно или через несколько секунд, минут. Например, если хотите собирать IPадреса своих посетителей, УРЛы, по которым они ходят или страницы, откуда пришли, время. При добавлении с задержкой скрипт отработает почти мгновенно, еще до выполнения операции.
Операция UPDATE идет в три этапа: поиск того, что будете менять, затем запись данных, обновление индексов. При этом, чем больше таблица, тем дольше поиск. Если есть индексы, то операция кешируется и выполняется достаточно быстро. Но сам процесс очень емкий. И только дурак не догонит, что большая таблица со множеством индексов и записей, будет тормозить при UPDATE. INSERT же выполняется одним залпом, очень быстро. Поэтому обычно используют аддитивные записи (вставками INSERT) во временные таблицы, потом блокируют основные талицы, суммируют обновления, и плюют их в основную таблицу. Получается, что в основном, главные таблицы работают только в режиме вывода, а обновления идут гораздо реже и быстрее. Например, можно копить данные о загрузках новостей во временной таблице, а по крону или иным образом обновлять счетчик каждые 10 минут (или реже). Это ускорит работу сервера.
При запросах SELECT * FROM таблица скрипт получит все поля данной таблицы. А нужно ли это? Использование * ведет к лишнему расходу ресурсов. Гораздо эффективнее использовать точные названия полей, которые нужны скрипту. Например: SELECT id,name FROM таблица. При таком запросе передача займет меньше времени и понадобится меньше ресурсов. Старайтесь ограничивать вывод при помощи директивы LIMIT. Это также ускоряет вывод.
Поиск по БД идет быстрее если вместо LIKE '%слово%', ставить 'слово%'. Операции с шаблонами регулярных выражений кешируются только в том случае, если в начале отсутствует символ %. Поэтому при построении поисковых запросов с LIKE избегайте начинающих символов %.
При построении таблиц для наиболее используемых полей (при поиске, сортировке и т.д.) обязательно создавайте индексы. Без индексов таблицы будут сильно тормозить. Индексы служат для кеширования и позволяют существенно ускорить вывод данных из таблиц. При этом таблицы будут занимать больше места на диске и в памяти. Но это в наше время не проблема.
Используйте надлежащий тип полей для своих записей. Тип TINYINT занимает 1 байт - самый быстрый. Таблицы с MEDIUMINT быстрее таблиц с INT. Если ставить полям свойство NOT NULL, то в целом их работа будет быстрее. VARCHAR медленее CHAR, поэтому таблицы переменной длины (где есть тип VARCHAR или TEXT) занимают меньше дискового пространства, но работают медленнее.
По своему опыту скажу, что для большинства сайтов подходят изложенные советы по работе с MySQL. Чтобы еще больше ускорить свой сервер, советую частоиспользуемые операции проводить по крону выделенными процессами и писать данные в различные файлы. Например, раз в 20 минут запускать скрипт, который будет создавать файл с новостями. Или например, генерить файл с новостями при их добавлениях или обновлениях. Таким образом, вы экономите на каждом обращении к БД. Интерактивность при этом не теряется, а производительность увеличивается во много раз. Особенно, повторяю, при высокой посещаемости ресурса. Старайтесь отделить интерактивные операции от фоновых. Например, на ПротоПлексе работает один интерактивный движок, но в фоне по заданиям трудятся с десяток различных роботов, которые генерируют часто вызываемые страницы, рассылают письма и т.д. Крупный сайт - это не только то, что вы видите, но и бек-енд (обратная сторона). В фоновом режиме можно быстро и эффективно готовить контент, освобождая основной движок от лишней работы.
В общем, основы должны быть всем понятны. Дробите все на мелочи, будь то запросы, таблицы или операции. Структура БД должна быть такой, чтобы не выполнялось ничего лишнего. Регулярно проводите OPTIMIZE на таблицах с переменной длиной, особенно, если в них идут удаления записей. Тестируйте свои запросы на скорость, упрощайте их.
Иногда возникает необходимость защитить свое творение, представлен разработанный мною подход, дорогие читатели, на ваше суждение и понимание, данная статья посвещена конфигурированию в 8 версии.
Итак для начала вы создали отчет, обработку или документ который конечно же является шедевром и те ноу хау которые вы там воплотили, не хочется по каким либо причинам, моральным или материальным, делится с клиентом.
1) Разработчики восьмой платформы для этих целей нам предлагают закрыть модуль паролем. Ну что же, большое вам за это спасибо.
Однажды у меня возникла ситуация когда клиент пожелал платить деньги позже, ну что же, хорошо, но прокактить вам жадины меня не придется, работа была сделана в срок и естественно была запоролена.
2) Но ведь от этого она не теряет свой функционал и рабочие свойства, мне могут сказать что работа выполнена плохо и денег мы вам не дадим. Ну что ж, в свой запороленый модуль я вставил такой код:
//СИСТЕМА ЗАЩИТЫ
Который вызывался перед ключевой процедурой или функцией, как вы видите она привязана ко времени и когда оно, время, приходит значение сохраняется даже перевод стрелок не спасает вредного клиента от головной боли, и ему придется раскошелится или связаться с разработчиком.
3)Идем дальше, бывают ситуации когда нужно позволить пользователю обновить конфигурацию, но если вы поставили пароль то при объединении он его обязательно спросит, что же делать, мой вам совет выполните все ваши важные и ключевые процедуры, функции (Даже можно включить вызов из них функции защиты) в экпортном виде, в модуле внешней обработки (модуль которой конечно вы закрыли).
Обработка готова и ваш документ умеет к ней обращатся, теперь нужно сохранить ее в двоичном виде макета, в объекте метаданных который вы разрабатывали.
Можно использовать такой код :
И теперь обращаясь к нашим любимым процедурам через созданную и закрытую обработку, мы не имеем проблем с обновлением.
В этой статье мы рассмотрим технику создания инифайлов их назначение и применение. Начнем с ответа на вопрос зачем же нужны эти инифайлы?! Предположим, что вы создали приложение, в котором пользователь может настраивать цвет фона, шрифт надписей и так далее. Когда он повторно включит вашу программу он очень сильно разочаруется, так как всего его старания по настройке интерфейса вашей программы пропали даром - программа будет иметь такой вид, который сделали вы при проектировании программы. Так вот чтобы эти настройки сохранять, лучше всего пользоваться инифайлами.
Одно из главных преимуществ инифайлов заключается в том, что эти файлы подерживают переменные разных типов (String, Integer, Boolean). В этих файлах очень удобно хранить различные настройки, например параметры шрифта, цвет фона, какие checkbox'ы выбрал пользователь и многое другое.
Теперь начнем разбираться с этими инифайлами. Для начала создайте новое приложение. Добавьте в секцию uses слово inifiles. Сохраните и откомпилируйте ваше приложение. Теперь сделаем, чтобы при каждом открытии программы форма имела такие размеры, какие установил пользователь последний раз. Для начала нам надо создать объект типа Inifile. Создается он методом Create(Filename:string); причем если в переменной Filename не указан путь к фалу, то он создаться в директории Windows, что не очень-то удобно. Поэтому мы создадим этот файл в директории нашей программы. Напишем это в обработчик события OnDestroy для формы:
Если файл с таким именем существует, то он откроется для чтения, а если нет - то он будет создан. Это очень удобно, так как не надо обрабатывать возможные исключительные ситуации, которые могут возникнуть при обращении к файлу.
Вот файл MyIni.ini после завершения работы программы (у вас естественно значения будут другими):
Теперь подробно разберемся как записывать информацию в инифайлы:
После того, как вы создали инифайл, в него можно записывать три вида переменных: Integer, String, Boolean, это осуществляется соответствующими процедурами: WriteInteger, WriteString, WriteBool. У всех этих процедур одинаковые параметры. В общем объявление этих процедур выглядит так:
Здесь Section -это имя секции, куда будут помещены параметры и значения. В файле имена секций заключены в квадратные скобки. Обычно в секции объединяют схожие параметры.
Ident - это название параметра, которому будет присваиваться какое-нибудь значение.
Value - это собственно значение, которое будет присвоено параметру. В файле оно стоит после знака равно.
Теперь напишем обработчик события OnCreate для формы, в котором будем считывать значения из файла и изменять размеры формы в соответствии с полученными значениями. Код должен иметь такой вид:
В этом коде все просто: открыли файл, прочитали из соответствующих секций необходимые параметры и присвоили их форме. Чтение значений из инифайла по сути ничем не отличается от записи в них. Указываете секцию, где хранится необходимый параметр, указываете параметр и читаете его значение. Как вы видите все просто!
Теперь я отвечу еще на один вопрос, который может появиться - почему не обычные текстовые файлы и не реестр? Отвечаю: из текстового файла очень сложно получить и обработать необходимую информацию. Многие рекомендуют для Win95/98/2000/Me, короче для всех 32-разрядных ОС использовать именно реестр, но лично я считаю, что инифайлы удобнее, так как при при переносе программы на другой компьютер, нужно перенести только один инифайл, а во-вторых, если вы что-нибудь в реестре случайно удалите, то может случиться каюк.
Не всегда хорошая программа стоит много денег. Не которые бесплатные программы, например, такие как VirtualDub или 7-Zip стали более популярными, чем их платные аналоги. Создание таких программ начинается с простого энтузиазма людей, которые хотят сделать вещь полезную всем. А результат работы целой команды людей всегда оказывается успешным.
3D-редактор Blender 2.45
Не всегда хорошая программа стоит много денег. Не которые бесплатные программы, например, такие как VirtualDub или 7-Zip стали более популярными, чем их платные аналоги. Создание таких программ начинается с простого энтузиазма людей, которые хотят сделать вещь полезную всем. А результат работы целой команды людей всегда оказывается успешным.
Так случилось и с программой трехмерной графики Blender. Это ещё один пример коллективной работы многих людей. И сейчас Blender является полноценным бесплатным 3D-редактором.
Внешний вид всех программ для работы с трехмерной графикой очень похож. По этому производители коммерческих пакетов для работы с 3D выпускают специальные брошюры, где подробно разъясняются отличия в «горячих клавишах» и инструментах управления сценой между их программой и приложением, с которого они хотят переманить пользователя.
Программисты, сделавшие Blender, не ставят перед собой цель заработать деньги, и им не нужно подстраиваться под тех, кто раньше работал в другом 3D-редакторе. Поэтому, открывая для себя Blender, работе с трехмерной графикой приходится учиться заново.
Необычный внешний вид Blender говорит о том, что разработчики создавали свой проект «с нуля», не привязываясь к внешнему виду прочих программ для работы с трехмерной графикой. В какой-то мере это было правильное решение, ведь только так можно было создать удобный и в то же время принципиально новый интерфейс. Казалось бы, что можно придумать удобнее нескольких окон проекций и панели с настройками объектов?
Удобнее может быть только возможность гибкой настройки интерфейса под нужды каждого пользователя. В Blender реализована технология, благодаря которой внешний вид программы изменяется до неузнаваемости. Изюминка интерфейса Blender состоит в том, что в процессе работы над трехмерной сценой можно «разбивать» окно программы на части. Каждая часть – независимое окно, в котором отображается определенный вид на трехмерную сцену, настройки объекта, линейка временной шкалы timeline или любой другой режим работы программы.
Таких частей может быть неограниченно много – все зависит от разрешения экрана. Но сколько бы окошек ни было создано, они никогда не пересекутся между собой. Размер одного зависит от размера остальных, то есть если пользователь увеличивает размер одной части, размер соседних уменьшается, но никаких "накладываний" окон друг на друга не происходит. Это невероятно удобно, и тут создателям коммерческих приложений стоило бы посмотреть в сторону Blender, чтобы взять новшество на заметку.
Еще одна сильная сторона программы – хорошая поддержка «горячих клавиш», при помощи которых можно выполнять практически любые операции. Сочетаний довольно много, и запомнить все сразу тяжело, однако их знание значительно ускоряет и упрощает работу в Blender.
Таким образом, сложным интерфейс программы кажется только с непривычки. На самом же деле, инструменты Blender расположены очень удобно. Для того чтобы это понять, нужно поработать в программе какое-то время, привыкнуть к ней.
Для создания трехмерных моделей используются полигональные и NURBS-поверхности. Имеются в Blender и инструменты сплайнового моделирования. Создание 3D-объектов производится также с использованием кривых Безье иB-сплайнов.
Инструментарий Blender столь универсален, что позволяет воссоздавать даже очень сложные органические формы. Для этой цели можно использовать метаболы и технологию «трехмерной лепки» с помощью виртуальных кистей. Редактирование формы трехмерной модели с помощью кистей производится примерно так же, как это делается в Maya. Вносить изменения в геометрию можно в режиме симметрии, что особенно важно при моделировании персонажей.
В программе можно создавать обычную анимацию, а также работать над персонажной оснасткой, строить скелет и выполнять привязку костей к внешней оболочке. Трехмерный редактор работает с прямой и инверсной кинематикой.
В программе предусмотрена и возможность работы с частицами. Система частиц может быть привязана к любому трехмерному объекту. Поток частиц управляется с помощью направляющих кривых, эффектов ветра и завихрений. Кроме этого, влияние на частицы может определяться как окрашивание, в зависимости от силы воздействия на них. Есть вариант проверить, как частицы будут отражаться от движущейся трехмерной поверхности, или заставить их подчиняться законам гравитации. С помощью статической системы частиц можно даже моделировать волосы.
Blender включает в себя симулятор флюидов, благодаря которому в программе можно моделировать «текучие» эффекты жидкостей. Нужно отметить, что эта разновидность эффектов присутствует далеко не во всех 3D-редакторах, например, в 3ds Max нет инструментов для моделирования текучих флюидов.
Создать реалистичную анимацию особенно сложно, если необходимо имитировать физически точное поведение тел. В Blender есть инструменты для просчета поведения тел в определенных условиях. В режиме реального времени можно просчитать деформацию мягких тел, а затем «запечь» ее для экономии ресурсов и оптимизации визуализации анимации. Физически точное поведение может быть определено также и для упругих тел, с последующим «запеканием» измененных параметров в анимационные кривые.
Что касается визуализации, то и тут возможности Blender на высоте. Можно рассчитывать на поддержку рендеринга по слоям, на получение эффектов смазанного движения и глубины резкости (depth of field). Также поддерживается "мультяшный" рендеринг и имитация глобального освещения (ambient occlusion). Вместе с программой удобно использовать бесплатный движок визуализации YafRay, который может похвастаться работой с HDRI, возможностями просчета каустики и глобального освещения. Есть и другие подключаемые визуализаторы, например, Indigo.
В Blender-сообществе – был выпущен первый 3D-мультфильм, полностью созданный при помощи этой программы. Короткометражный фильм Elephants Dream создавался в течение полугода командой из шести аниматоров и других специалистов, которые постоянно работали в офисе компании Montevideo, поддерживающей проект. Приложить свою руку к созданию мультфильма могли все желающие, помогая основной команде разработчиков удаленно, через интернет.
Целью проекта было показать, что Blender является полноценным 3D-редактором, который с успехом может использоваться не только студентами и школьниками в целях обучения, но и профессионалами, работающими в команде над производством сложных проектов.
Одной из особенностей проекта Elephants Dream стало то, что в интернете был выложен для свободной загрузки не только сам фильм, но и все исходные материалы, которые использовались при его создании: сцены, текстуры и т.д.
После успеха Elephants Dream CG-энтузиасты, работающие в Blender, создали ещё один анимационный проект - фильм Peach. В нем аниматоры обращают внимание общественности на другие сильные стороны Blender, которые не удалось показать в первом фильме. В частности, это касается средств для работы с мехом и шерстью. И Peach стал "забавным и пушистым".
Blender – это отличный инструмент для трехмерного моделирования и анимации. Вне всякого сомнения, у этой программы есть будущее, она постоянно совершенствуется и обрастает новыми возможностями.
Clarion Co. Ltd. это японская компания название которой происходит от древнегреческого духового инструмента кларион. Он похож на современную S-образную трубу, но с меньшим расширением и более толстыми стенками. Такое название компании Clarion указывает на близкую ее связь с музыкой. И действительно, звучание компонентов Clarion весьма «музыкальное».
Clarion – модельный ряд мультимедиа для автомобиля.
Clarion Co. Ltd. это японская компания название которой происходит от древнегреческого духового инструмента кларион. Он похож на современную S-образную трубу, но с меньшим расширением и более толстыми стенками. Такое название компании Clarion указывает на близкую ее связь с музыкой. И действительно, звучание компонентов Clarion весьма «музыкальное».
Эта статья не просто текст это презентация новой линейки техники производимой компанией Clarion. По этому здесь нет оценки достоинств и недостатков конкретных аппаратов.
Первое это концепция нового каталога Clarion. Она включает в себя три ключевых фактора.
• Максимально тесная интеграция функциональных и развлекательных возможностей в один комплекс автомобильной электроники
• Стремление сделать звучание совершенным
• Безопасность вождения за счёт использования различных систем – начиная от hands free (возможность общаться по телефону, не отвлекаясь от дороги) и заканчивая удобным управлением аппаратурой с использованием командных шин и общих центров управления
Специалисты Clarion хорошо потрудились над совершенствованием своей продукции по всем трем направлениям и создали не мало новинок. Насколько они получились удачными, можно узнать сами, опробовав интересующие модели в магазинах или прочитав объективные оценки компетентных специалистов в области Car Audio.
Поскольку новых моделей много и каждая имеет массу особенностей, подробных технических характеристик приводится, не будет (это лишь обзорная статья по ключевым новинкам). Их можно без труда найти на русском сайте Clarion. Навигационные мультимедиакомплексы
Clarion MAX973HD
Превосходный аппарат, объединивший «под одной крышей» все нужные современному автомобилисту функции: подробнейшая навигация, воспроизведение музыки и видео, средства для интеграции мобильного телефона в общую систему, подключение всевозможной периферии – как проводами, так и по беспроводному каналу. И конечно, аппарат готов для совместной работы с плеерами Apple iPod.
Особенности модели
• Сенсорный монитор, 7 дюймов по диагонали
• Встроенный 30-гигабайтный жёсткий диск для хранения дорожных карт и медиаданных
• Встроенный DVD/CD/MP3/WMA-плеер
• AV-входы для подключения дополнительного оборудования, полная совместимость с iPod
• Просмотр карт в масштабе от 25 м до 256 км, различные режимы отображения карт в зависимости от времени суток
• Голосовые подсказки, функция расчёта оптимального маршрута, вычисление времени в пути с учётом дорожной ситуации
• Трёхмерное настраиваемое меню
• Усилитель MOSFET (номинальная мощность 4х31 Вт)
• Bluetooth и возможность подключения внешней камеры обзора
• Работа в двух зонах
Кроме флагманской модели MAX973HD в новом каталоге компании есть два не менее интересных мультимедиакомбайна с DVD-плеером, 7-дюймовым экраном и возможностью подключения блока навигации: MAX678RVD и VRX878RVD. И почти то же самое, только без навигации, – VRX578RUSB.
Наконец – VRX378RUSB. Однодиновое устройство, совмещающее мультиформатный DVD-плеер и медиаресивер. Аппарат обладает обширными возможностями для тесной интеграции всего автомобильного оборудования. Дисплей 3,5 дюйма, присутствуют поддержка iPod, Bluetooth и возможность подключения внешней камеры обзора.
Мониторы
В каталоге Clarion представлены четыре монитора. Два потолочных называются OHM1073 (10,2”) и OHM773 (7”). Монтируемых в подголовники тоже два: 7” и 5,6”.
Все модели имеют формат 16:9.
Потолочные мониторы могут крепиться через «прокладку» – плоский модуль (по сути, это компактный DVD-проигрыватель), который превратит монитор в автономный медиацентр с возможностью воспроизведения DVD, CD и различных «сжатых» аудиоформатов.
Головные устройства.
Clarion предлагает широкий ассортимент головных устройств – от необычных до типичных по возможностям, но добротных аппаратов. В новом модельном ряду «голов» имеется много чего интересного. Например – FB278RBT. В этом устройстве нет CD-привода. В нём вообще нет движущихся частей. Музыка может воспроизводиться с карты памяти SD (слот на торце съёмной панели), с iPod или с любого устройства с протоколом передачи данных BT-Audio (Bluetooth Audio). FB278RBT не боится встрясок – самое то для любителей внедорожного экстрима, у которых частенько заедает музыка во время путешествий по ухабам. Цвет подсветки можно выбрать в настройках.
Не менее интересен 2-диновый 6-дисковый CD/MP3/WMA-ресивер WXZ468RMP в ретродизайне. Большие рукоятки, поддержка iPod, система оптимизации области прослушивания, 9-полосный эквалайзер, цифровой радиоприёмник, усилитель 4х50 Вт и много ещё чего любопытного.
Необычный двухдиновый CD/MP3/WMA-ресивер DUB278RMP привлекает внимание минимумом кнопок. Действительно, это и была одна из главных задач разработчиков – сделать стильный функциональный аппарат, визуально не перегрузив его фасад органами управления. Между тем DUB278RMP имеет на передней панели множество удобных навигационных клавиш, линейный и даже USB-порт для подключения внешних накопителей информации. Все эти прелести скрыты под различными откидными панельками. В аппарат встроены MOSFET-усилитель 4х50 Вт, цифровой тюнер и система динамического усиления баса. Подсветка клавиш и дисплея имеет 728 цветовых оттенков.
Модели DXZ378RMP и DB178RMP похожи по дизайну – у обеих в левой части «звёздное небо» из кнопок, удобные вращающиеся регуляторы и съёмные «мордочки». Обе воспроизводят CD/MP3/WMA, оснащаются цифровым тюнером с RDS и усилителем с пиковой мощностью 4х50 Вт (4х25 Вт по стандарту DIN). Однако старшая модель (DXZ378RMP) имеет также возможность управления по шине CeNET и флуоресцентный дисплей вместо жидкокристаллического у 178-й.
По своим функциональным возможностям и мощности усилителя CD/MP3/WMA-ресивер DB568RUSB практически не отличается от DXZ378RMP, однако вдобавок оснащён USB-портом на передней панели и функцией управления Slidetrack. Передняя панель съёмная.
Ресивер DXZ578RUSB является развитием DB568RUSB, описанного выше. Он имеет более технократичный дизайн, обладает всеми достоинствами 568-го, но встроенный усилитель тут немного мощнее (4х53 Вт в пике), появился 6-канальный линейный выход на внешнее усиление. Список поддерживаемых форматов пополнил ААС наряду с возможностью управления iPod через опциональный переходник.
Флагманом среди однодиновых CD-ресиверов является модель DXZ778RUSB с моторизированной откидной панелью. Аппарат характеризуется ещё более полным управлением звуком: НЧ- и ВЧ-фильтры, 3-точечный параметрический эквалайзер, встроенный активный кроссовер (три полосы), возможность отключения встроенного усилителя. Пользователь может выбрать один из 728 оттенков подсветки, управлять iPod и подключать hands free. USB-порт и другие особенности более простых моделей во флагмане, разумеется, также представлены.
Также Clarion предлагает достойный арсенал периферийных аппаратов и аксессуаров для каждой категории своей продукции, позволяющих обеспечить наилучшее взаимодействие компонентов автомобильной медиасистемы.
Усилители и акустика.
Ассортимент продукции Clarion традиционно не ограничивается мультимедиаустройствами и «головами». В каталоге компании также можно найти усилители мощности, различные сабвуферы и акустику.
Усилитель мощности APA4320 (на фото). Долговременная выходная мощность 4х80 Вт или суммарно 640 Вт в пике. Модель APA2160 имеет не четыре, а два канала, но мощность на каждый канал тут такая же.
Сногсшибательный 30-сантиметровый сабвуфер SRM3093HX с пиковой мощностью 1,2 кВт (номинал 300 Вт), частотным диапазоном от 15 Гц. В серию HX также входят двухполосная акустика и отдельный твитер.
Всего компания представила около трех десятков моделей автоакустики, предназначенной для инсталляций совершенно разных классов и, соответственно, стоимости.
Итак, вы создали список ключевых слов, которые будете использовать для поисковиков. Теперь пришло время узнать, как правильно разместить эти слова для того, чтобы получить максимальную оценку от поисковой системы. Эта статья посвящена всем вебмастерам, которые занимаются не только созданием сайтов, но и их продвижением в сети интернет.
Создайте "входные страницы" (дорвеи) для вашего сайта, используя всевозможные комбинации ключевых слов на странице. В идеале, необходимо создать каждую отдельную страницу для конкретного ключевого слова и для конкретной поисковой машины, так как каждая поисковая система использует свой алгоритм оценки релевантности. Сразу должен сказать, что дорвеи - это хорошая идея, но на практике их разработка может занять массу времени. С тех пор, как поисковые системы стали регулярно менять алгоритмы оценки страниц, вебмастерам приходится постоянно работать над созданием новых дорвеев, обеспечивающих высокий рейтинг в поисковой системе. Более того, если вы работаете над большим количеством ключевых слов, вам придется создавать сотни дорвеев! И вскоре, вы столкнетесь с тем, что их создание будет отнимать больше времени, чем обычная работа над сайтом.
Метод, который я хочу предложить работает. Изначально, не беспокойтесь о разных алгоритмах в поисковых системах. Создайте разные дорвеи, пропишите их в поисковые системы, и отслеживайте траффик. Регулярно создавайте дорвеи и проверяйте статистику посещений, до тех пор, пока не определите рейтинг ваших страниц в поисковиках (почти все поисковые системы дают эту возможность). Когда вы определили нахождение страниц в рейтинге, создайте новый дорвей - в котором неоднократно повторяется конкретное ключевое слово в смеси с другими ключевыми словами. Зарегистрируйте этот дорвей в поисковиках и следите за его рейтингом. Как только вы определили поисковики, которые низко оценивают этот дорвей, создайте новые дорвеи для конкретной поисковой системы, основываясь на рейтинге предыдущих дорвеев. Продолжайте оптимизировать его до тех пор, пока не достигните должного результата.
Пойдем дальше. Я надеюсь, вы вкурсе, что такое meta tags, tittle tags, meta-description tags, meta-keywordstags, the heading tags, и alt tags. Если вы не знаете, что это такое, бросайте читать эту статью и отправляйтесь в магазин за руководством по созданию HTML-страниц.
Предположим, у вас сайт туристической фирмы и вам необходимо использовать ключевые слова "Путешествие в Австралию". Приступим к созданию нашего дорвея.
Самый важный тэг в создании дорвея. Всегда вписывайте основное ключевое слово вначало, повторяя его в середине и в конце тэгов .Но НИКОГДА не вписывайте ключевое слово (или два ключевых слова) два раза подряд - поисковые системы воспримут это как спам. Также, содержимое тэгов является заголовком в результатах поиска поисковой системы, т.е.вы должны создать абсолютно читаемый заголовок. Вот пример: "Путешествие в Австралию - открой для себя как можно совершить путешествие в Австралию всего за ***$". Здесь мы создали заголовок, в котором ключевые слова используются в начале и повторяются в середине. Также, чередуйте заглавные и прописные буквы в слове "путешествие". Создайте подобные дорвеи, используя варианты: "путешествие в австралию", "Путешествие в Австралию", "путешествие в Австралию" и т.п.
Содержимое страницы. ALT-тэг Переходим к содержимому страницы. Начните свою страницу с изображения рисунка, имеющего прямое отношение к теме вашего сайта. Поместите его вверху страницы. В ALT тэге рисунка впишите "Путешествие в Австралию". Можете дополнить тэг другими словами, но начните обязательно с основных. Теперь создайте заголовок. Используйте размер H1 для заголовка. Снова, впишите основные ключевые слова в заголовок. Также как и в ALT-тэг, вы можете добавить другие слова, но после основных. Переходим к тексту страницы. От текста, расположенного в начале страницы зависит практически все. Содержанием текста вы должны направить посетителя к вашей основной странице сайта. Вставьте ссылку на основную страницу сайта на видном месте, чтобы посетитель мог не напрягаясь уйти по ней. Не вставляйте лишних ссылок и лишних баннеров - не давайте посетителю уйти.
Придерживайтесь следующих правил:
1) Первое, что необходимо помнить: некоторые поисковые системы не читают Meta-тэги, и используют первые слова на странице в качестве ключевых. Поэтому первые строки должны быть качественно составлены и удобочитаемы для посетителя.
2) Составьте предложения так, чтобы в них обязательно присутствовали ключевые слова - по одному разу в предложении. При этом ваши предложения должны иметь грамматический смысл, а не представлять из себя набор фраз. Посетитель должен получить приятное впечатление при чтении текста.
3) Не делайте ваши параграфы слишком длинными. Каждый должен быть от силы из 3-4 предложений. Посетители веб-страниц просто не будут читать большие громоздкие тексты.
4) Попытайтесь сделать так, чтобы текстовые ссылки включали в себя ключевые слова. Зачастую поисковики высоко ранжируют такие страницы.
5) Если это возможно, делайте ссылки на страницы которые имеют ключевое слово в имени файла. Поисковые системы учитывают это.
6) Нет конкретного ограничения на количество слов в странице - но постарайтесь создать ваш дорвей с 500-600 словами.
Созданную страницу назовите ключевыми словами, разделенными дефисом:travel-to-australia.html Это даст вам высокую оценку поисковиками (например Nothern Light), которые обращают внимание на присутствие ключевого слова в URL.
Теперь вам нужно правильно прописать дорвеи в поисковых системах. Многие вебмастера, загрузив дорвеи на сервер начинают регистрировать их один за другим в поисковых системах. Это распространенная ошибка. Поисковые системы низко оценивают страницу, с которой есть несколько ссылок, но нет ссылок на нее, а бывает так, что такие страницы оцениваются как дорвеи и тогда поисковая машина заносит URL в черный список - блэклист.
Что вам еще нужно сделать, так это сделать ссылку на дорвей с вашей основной страницы, но сделать это так, чтобы ссылка существовала только для поисковой машины - но не для посетителя. Однако не делайте текстовые ссылки под цвет фона - 99% поисковиков занесут вас в блэклист за такие проделки. Вот здесь я вам открою свой маленький секрет Создайте небольшую картинку под цвет вашего фона. Назовите рисунок именем дорвея - travel-to-australia.gif Вставьте рисунок в конец основной страницы и сделайте с него ссылку на дорвей. В ALT-тэг рисунка также вставьте ключевые слова . Не забудьте установить border=0 для рисунка.
Создайте подобные дорвеи для других ключевых слов, скопируйте тот же рисунок на основной странице еще раз, изменив его имя, ALT-тэг и ссылку. Повторяйте этот процесс для каждого ключевого слова или фразы. Таким образом, когда будет создано достаточное количество дорвеев, вы можете прописать вашу основную страницу сайта в поисковые системы. Не прописывайте все страницы сайта - пропишите только основную страницу. Несмотря на то, что на обнаружение всех страниц сайта уйдет больше времени, я настоятельно рекомендую поступить именно так: спайдер, пройдясь по ссылкам и обнаружив тем самым дорвеи и не узнав их, придаст более высокое ранжирование им!