faq для сайта скрипт

Создание FAQ (ЧаВо) с помощью jQuery

Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

faq для сайта скрипт. demo. faq для сайта скрипт фото. faq для сайта скрипт-demo. картинка faq для сайта скрипт. картинка demo. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).faq для сайта скрипт. sourse. faq для сайта скрипт фото. faq для сайта скрипт-sourse. картинка faq для сайта скрипт. картинка sourse. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Прежде всего нам необходимо вставить следующий код между тегами :

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

Вот и все готово. Ничего сложного в этом нет.

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

Всем спасибо! До завтра!

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.dscoduc.com
Перевел: Максим Шкурупий
Урок создан: 17 Мая 2009
Просмотров: 44613
Правила перепечатки

5 последних уроков рубрики «jQuery»

Анимация набора текста на jQuery

Сегодня мы бы хотели вам рассказать о библиотеке TypeIt — бесплатном jQuery плагине. С её помощью можно имитировать набор текста. Если всё настроить правильно, то можно добиться очень реалистичного эффекта.

faq для сайта скрипт. thumbnail. faq для сайта скрипт фото. faq для сайта скрипт-thumbnail. картинка faq для сайта скрипт. картинка thumbnail. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Временная шкала на jQuery

jQuery плагин для создания временной шкалы.

faq для сайта скрипт. thumbnail. faq для сайта скрипт фото. faq для сайта скрипт-thumbnail. картинка faq для сайта скрипт. картинка thumbnail. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Заметка: Перезагрузка и редирект на JavaScript

Быстрая заметка, где вы сможете найти парочку JS сниппетов для перезагрузки и перенаправления пользователей через JavaScript.

faq для сайта скрипт. thumbnail. faq для сайта скрипт фото. faq для сайта скрипт-thumbnail. картинка faq для сайта скрипт. картинка thumbnail. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Рисуем диаграмму Ганта

jQuery плагин для создания диаграммы Ганта.

faq для сайта скрипт. thumbnail. faq для сайта скрипт фото. faq для сайта скрипт-thumbnail. картинка faq для сайта скрипт. картинка thumbnail. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

AJAX и PHP: загрузка файла

Пример того как осуществить загрузку файла через PHP и jQuery ajax.

Источник

Создаем скрипт вопрос ответ на PHP для сайта

Дата публикации: 2011-04-30

faq для сайта скрипт. 100. faq для сайта скрипт фото. faq для сайта скрипт-100. картинка faq для сайта скрипт. картинка 100. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

От автора: в этом уроке мы создадим с вами систему вопросов и ответов на PHP, используя также для этих целей возможности MySQL и jQuery. Такую систему чаще всего называют FAQ или ЧАВО и ее использование ограничено лишь Вашей фантазией — ведь это может быть не только система вопрос-ответ, но и, к примеру, пошаговая инструкция при выполнении каких-либо действий или что-либо еще.

Результат, к которому мы будем стремиться показан в самом начале предлагаемого видео. Вкратце, мы будем показывать только вопросы, а ответы на эти вопросы будут скрыты. По клику на нужный вопрос — ответ на него будет плавно появляться (или выезжать — можно не ограничиваться одним эффектом). Как Вы уже, наверное, поняли — эффекты мы будем добавлять при помощи возможностей библиотеки jQuery, ну а информацию (вопрос-ответ) — будем хранить в БД и получать ее оттуда при помощи PHP. Приступим.

Время ролика: 52:06

Ссылка для скачивания исходников: Скачать исходники

Ссылка для скачивания всего архива (видео+исходники): Скачать одним архивом. Размер: 126 mb.

faq для сайта скрипт. php. faq для сайта скрипт фото. faq для сайта скрипт-php. картинка faq для сайта скрипт. картинка php. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Шаг 1. Создаем БД для системы вопрос-ответ

Прежде всего, нам необходимо создать хранилище для информации — это, конечно же, удобнее это сделать, используя БД. Если у Вас будет небольшая по объему страница и для нее не нужна будет БД — этот шаг вполне можно пропустить. Также, если Вы не хотите создавать БД вручную, то можете воспользоваться дампом БД из дополнительных материалов и просто импортировать его (как это сделать я показываю в видео).

Создадим необходимую нам БД. Об основах работы с БД я рассказывал в ряде предыдущих уроков, поэтому здесь буду объяснять предельно кратко. Если Вы используете пакет Денвер, то перейдите по ссылке //localhost/Tools/phpMyAdmin/ и Вы попадете на страницу веб-приложения phpMyAdmin, предназначенного для администрирования MySQL. На этой же странице мы даем имя создаваемой БД — назовем ее «faq».
faq для сайта скрипт. 1. faq для сайта скрипт фото. faq для сайта скрипт-1. картинка faq для сайта скрипт. картинка 1. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

После клика по кнопке «Create» создастся нужная нам БД. Вся информация в БД хранится в таблицах, поэтому нам нужно создать все необходимые таблицы в созданной БД. Создадим таблицу с тем же именем («faq») и количеством полей 3.

faq для сайта скрипт. 2. faq для сайта скрипт фото. faq для сайта скрипт-2. картинка faq для сайта скрипт. картинка 2. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

После клика по кнопке «Go» мы попадем на страницу со структурой создаваемой таблицы. Здесь мы должны дать имена 3-м создаваемым полям и указать еще некоторую информацию:

faq для сайта скрипт. 3. faq для сайта скрипт фото. faq для сайта скрипт-3. картинка faq для сайта скрипт. картинка 3. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

имя поля — «id», тип — INT, Index — PRIMARY, AUTO_INCREMENT;

имя поля — «question», тип — VARCHAR, длина — 255;

имя поля — «answer», тип — TEXT.

Давайте вкратце разберем каждое из полей. С именами, думаю понятно — в первом поле «id» мы храним идентификатор пары вопрос-ответ. Во втором поле «question» — храним вопрос и в третьем «answer» — ответ на этот вопрос.

Далее, тип поля. Для поля «id» мы указали тип INT — это целочисленный тип, т.е., в этом поле будут храниться только целые числа. Тип VARCHAR — это символьный (текстовый) тип, предназначенный для хранения небольших текстов, его длина — 255 символов. В поле типа TEXT можно хранить тексты больших объемов. Кроме того, для первого поля — «id» — мы указали Index — PRIMARY (в русскоязычной версии phpMyAdmin это «первичный ключ») и AUTO_INCREMENT. Эти два атрибута значат, что указанное поле мы не будем заполнять, его будет заполнять сервер. При этом все значения, заносимые в данное поле, будут уникальными, и каждое новое значение будет увеличено на единицу (автоинкремент). Если провести какую-нибудь знакомую аналогию, то это поле можно сравнить с номером по порядку в таблицах.M

После сохранения структуры таблицы мы можем перейти во вкладку Insert и занести в таблицу необходимые данные (хотя обычно это делается через административную часть).

faq для сайта скрипт. 4. faq для сайта скрипт фото. faq для сайта скрипт-4. картинка faq для сайта скрипт. картинка 4. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Как я говорил, мы заполняем только поля «question» и «answer», поле «id» будет заполняться сервером. Я создам 3 пары вопрос-ответ, но у вас их может быть сколь угодно много.

faq для сайта скрипт. 5. faq для сайта скрипт фото. faq для сайта скрипт-5. картинка faq для сайта скрипт. картинка 5. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Отлично! Мы создали БД и нужную нам таблицу. Теперь пришло время получить информацию из нее с помощью PHP, и создать полноценное приложение вопросов и ответов.

Шаг 2. Получение информации из БД, обработка её средствами PHP

Для урока я нашел в сети бесплатный шаблон сайта, в котором создал страницу faq.php. Обратите внимание, что расширение страницы должно быть именно php, поскольку в ней будет присутствовать код PHP. Перед получением информации из БД, мы должны с ней соединиться. Обычно соединение с БД выносят в отдельный файл, который затем просто подключают к странице. Но наш проект учебный и, к тому же, совсем небольшой, поэтому мы все будем делать на одной странице. Итак, откроем в редакторе страницу faq.php и в самом верху страницы подключимся к БД. Делается это при помощи 2-х функций: mysql_connect(«имя сервера», «пользователь», «пароль») и mysql_select_db(«имя БД»). Первой функцией мы подключаемся к серверу БД (в скобках указаны параметры, с которыми работает функция), второй — выбираем нужную БД для работы (на сервере ведь может быть не одна БД):

Так как я работаю на Денвере, то указываю имя сервера «localhost» (в Вашем случае, скорее всего, имя сервера будет таким же, даже если Вы работаете на сервере хостера… все данные по работе с сервером хостер предоставляет в инструкции). По умолчанию уже создан пользователь с именем «root», которое я и указал. Пароль для этого пользователя не создан, поэтому в качестве третьего параметра функции mysql_connect() я указал пустое значение. Также желательно дописывать при работе с сервером MySQL условие на тот случай, если при соединении с сервером произошла какая-либо ошибка. Это желательно делать по той простой причине, что если не удалось соединиться с сервером, значит не будет вытащена информация на страницу, а, значит, страница будет полупустой, кроме того, на ней еще и будут выведены всевозможные ошибки. Мы задали такое условие функцией die(), которая в случае ошибки прекратит выполнение программы и выведет сообщение, указанное в кавычках.

Второй функцией мы выбираем нужную нам БД. Теперь мы можем сохранить файл и обновить страницу. Если все сделано верно, то страница должна загрузиться без всяких сообщений и ошибок. После успешного подключения мы можем получать информацию из нужной таблицы (таблиц также может быть несколько в выбранной БД). «Общение» с сервером MySQL происходит посредством запросов. Нам нужен всего один запрос, которым мы вытащим всю информацию из таблицы «faq». В запросе нам понадобится оператор SELECT, который, собственно, и обеспечивает выборку необходимой информации. Сам запрос отправляется в БД функцией mysql_query().

Итак, в нужном месте блока page (там, где мы хотим выводить вопрос-ответ) открываем конструкцию PHP и пишем запрос:

Что такое ассоциативный массив я уже рассказывал в нескольких предыдущих уроках. Это массив, ключами которого выступает строка (ассоциация). Ключами нашего массива будут выступать имена полей в таблице «faq». Как я упоминал, функция mysql_fetch_assoc() обрабатывает 1 ряд запроса. У нас таких рядов пока что 3. Для того, чтобы было обработано все 3 ряда — нам понадобится осуществить просто 3 однотипных действия — в этом нам помогут циклы, а именно — цикл while(). О работе с данным циклом я также довольно подробно уже рассказывал, а потому здесь скажу только пару слов. Само слово while можно перевести как «пока», т.е., пока будет выполняться некое условие (оно прописывается в скобках) — мы будем выполнять некий блок действий (они прописываются в операторных скобках).

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

Весь код блока PHP, отвечающего за вывод информации вопрос-ответ будет таким:

faq для сайта скрипт. php. faq для сайта скрипт фото. faq для сайта скрипт-php. картинка faq для сайта скрипт. картинка php. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Теперь мы можем обновить страницу и увидеть, что система вопросов и ответов на PHP, практически полностью готова. Осталось добавить небольшой функционал jQuery, для достижения конечного результата.

Шаг 3. Пишем функционал jQuery

Для использования фреймворка jQuery нам, прежде всего, понадобится сама библиотека. Текущую версию ее можно скачать на сайте //jquery.com/

Сохраненную библиотеку поместим в каталог scripts под именем jquery.js (можно и в любой другой каталог под любым именем). Теперь мы должны подключить эту библиотеку на нужной странице. Делается это очень просто — внутри тегов head пропишем такую строку кода:

Теперь скажем несколько слов об основах работы с jQuery. Конечно же, в пределах одного урока невозможно научиться работе с данным фреймворком, но, на самом деле, ничего сложного здесь нет и всю работу с ним можно разделить на 3 этапа:

отбор элементов и формирование «набора jQuery» (выборки);

отслеживание событий, которые происходят с отобранными элементами;

реакция на событие.

Основа основ работы с jQuery как раз и заключена в первом пункте — отбор элементов, с которыми мы будем работать. Как же мы можем отобрать эти элементы. Все просто — для этого достаточно знаний CSS… Разработчики не стали выдумывать новый синтаксис для фреймворка и для формирования выборки использовали синтаксис CSS.

Давайте для начала определимся немного с тем, что нам нужно сделать. Все ответы изначально будут скрыты. По клику (это как раз и будет событие) на вопрос — мы покажем (это уже реакция на событие) ответ на него. А в выборку мы, соответственно, должны взять все вопросы. Как говорилось, для того, чтобы взять все вопросы, — нам достаточно знаний CSS… Мы неспроста блокам вопросов присвоили Именно по указанному классу мы и можем отобрать все элементы с этим классом в набор jQuery (хотя способов отбора jQuery нам предоставляет массу). Взять все нужные нам элементы мы можем всего одной строкой кода:

Как видите, используется синтаксис CSS, т.е., мы взяли все элементы с классом question. Далее мы будем просто отслеживать события по отобранным элементам.

Перед тем, как мы продолжим с jQuery — опишем созданные классы question и answer в таблице стилей. Для этого либо прямо на странице пропишем нужные стили, либо сделаем это в файле стилей layout.css:

Вкратце опишем то, что мы прописали в коде. Класс question:

— курсор сделаем в виде руки, т.е., такой, какой мы видим при наведении на ссылку;
— установим подчеркивание текста;
— фоновый цвет;
— рамка;
— внешний отступ сверху;
— внутренний отступ слева;
Класс answer:
— рамка;
— внутренние отступы;
— внешний отступ снизу;
— и ключевое свойство — скрываем блок.

После сохранения стилей — все ответы будут скрыты. Теперь пропишем весь код jQuery, а затем прокомментируем его:

Прежде всего, мы прописали событие ready(), в которое поместили весь остальной код. Это сделано для того, чтобы этот код выполнялся только после того, как будет полностью сформировано DOM-дерево или, говоря проще — после того, как полностью будет загружена страница. Для знакомых с английским она интуитивно понятна — после того, как будет готов (ready — готово) документ — выполним все необходимое. Что же именно мы выполним? Мы отберем все элементы с классом question (в набор попадут все наши 3 блока с вопросами). А далее мы применим к элементам набора метод toggle(). Что делает этот метод? Этот метод организует своеобразный переключатель функций. Поскольку нам необходимо только 2 состояния блоков с классом answer — показывать/скрывать — в переключатель мы поместим 2 функции (на самом деле таких функций может быть гораздо больше). Говоря простым языком — мы создали обычный выключатель с двумя положениями — on|off. Метод toggle() будет отслеживать событие клика по отобранным элементам и применять функцию, при этом одному клику будет соответствовать вызов одной функции. Чтобы было понятнее с порядком работы прописанных нами 2-х функций возьмем пример клик (реакция):

1-ый клик (вызов функции 1); 2-ой клик (вызов функции 2); ; 3-ий клик (вызов функции 1) и т.д.

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

This (этот) — это указатель на текущий элемент, т.е., тот элемент, по которому был клик. Next (следующий) — это переход от текущего к следующему элементу. Поскольку следующим после вопроса будет ответ на него — как раз и будет выбран нужный нам элемент, к которому будет применен один из методов эффектов: slideDown (раскрывает элемент набора) или slideUp (скрывает элемент набора) — в зависимости от состояния переключателя.

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

Заключение

Вот таким вот не слишком сложным способом, мы реализовали нашу задумку и получили в итоге довольно неплохую систему вопросов и ответов на PHP, часто задаваемых вопросов — FAQ, ЧАВО. Как говорилось выше, использовать наше творение можно не только для создания страницы FAQ. Этот же принцип может быть использован и для, к примеру, формы обратной связи на странице. Для того, чтобы она не занимала много места на странице — мы можем ее скрывать и показывать только тогда, когда пользователь решит ее заполнить. Для этого нам достаточно поместить ссылку с текстом типа «Развернуть форму» и по клику на этот текст — показывать форму. На этом урок завершен. До новых встреч!

Рад видеть ваши отзывы и вопрос в комментариях!

faq для сайта скрипт. js 150x239 1. faq для сайта скрипт фото. faq для сайта скрипт-js 150x239 1. картинка faq для сайта скрипт. картинка js 150x239 1. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Автор: Кудлай Андрей

Редакция: Рог Виктор и Андрей Бернацкий. Команда webformyself.

faq для сайта скрипт. php. faq для сайта скрипт фото. faq для сайта скрипт-php. картинка faq для сайта скрипт. картинка php. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

faq для сайта скрипт. php. faq для сайта скрипт фото. faq для сайта скрипт-php. картинка faq для сайта скрипт. картинка php. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Источник

Скрипт основные вопросы FAQ

faq для сайта скрипт. faq. faq для сайта скрипт фото. faq для сайта скрипт-faq. картинка faq для сайта скрипт. картинка faq. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).Всем привет!

Сегодня записал и выложил видео о том, как создать на своем сайте анимированную систему FAQ.

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

Скрипт FAQ как установить?

Создать саму систему не проблема, кули там: написал вопрос и ниже ответил. Вот и вся премудрость. Но, можно сделать это дело намного более удобным и красивым. Как?

В этом хитром вопросе нам поможет один хороший скрипт faq-а! Применить его можно где угодно:

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

Вот, какое решение я вам предлагаю организовать: смотреть демо.

Также я там рассмотрел некоторые нюансы работы скрипта, и одну маленькую настройку faq для сайта скрипт. smile. faq для сайта скрипт фото. faq для сайта скрипт-smile. картинка faq для сайта скрипт. картинка smile. Этот урок поможет Вам научиться легко создавать страничку ответов на часто задаваемые вопросы (FAQ).

В общем смотрим видос и применяем все на практике:

Скачать видео можно по ссылкам ниже:

Скачать сам скрипт:

ЗЫ: Пока все, будут проблемы, вопросы – пишем в комменты.

Источник

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

Чем различается скрипт и программа? Вовсе не используемым языком или наличием интерфейса.

Скрипт же, в строго обратном смысле: он предназначен для решения конкретной проблемы «здесь и сейчас». Никто не ожидает от скрипта, который отсылает статистику, способности делать это одновременно на solaris’е, freeBSD и windows embedded standard с cygwin’ом на борту.

По математико-программистким представлениям, между скриптами администрирования и программами нет разницы. Они работают по одинаковым принципам, вообще говоря, выполняют почти одно и то же.

Разница между скриптом и программой — административная.

Давайте подробнее об этих составляющих…

1) Алгоритм. У любой программы есть во-первых некая идея (что, собственно, делает программа), во-вторых — обвязка. Чтение конфигов, вывод в сислог, оповещение по почте и ещё тысяча не связанных с основной задачей операций. Но программу используют не ради чтения конфигов и записи в лог, а ради того, что она ДЕЛАЕТ. Соответственно, обычно идея заключается в выполнении каких-то действий по какому-то алгоритму. Нетривиальная идея. В фактическом коде это может быть меньше, чем чтение xml-конфига, но при этом именно рабочий алгоритм — суть программы. Он может быть или «обрабатывающим данные» (вроде SQL’я), или математическим (вроде md5sum), или работающим с конкретными особенностями конкретной железки (формата файла) — но он всегда требует высокой квалификации в предметной области для адекватного понимания принципов работы. Понятно, что код OpenSSL может читать любой программист. Понятно, что алгоритм работы OpenSSL может понять только хороший математик.

Но мы пишем не о программах — о скриптах. Так вот, скрипт не должен реализовывать нетривиальные алгоритмы. Если вы у себя в скрипте пишите аналог base64 — это плохой скрипт. Если вы у себя в скрипте пишите отправку сообщений по smtp методом «открыли сокет, записали» — это омерзительный скрипт. Если вы у себя в скрипте ловите данные с ком-порта и пишите туда ответ (для управления УПСом) — это писец какой-то, а не скрипт.

Скрипт НЕ ДОЛЖЕН содержать в себе алгоритма в терминах «предметной области». У скрипта нет предметной области, скрипт — обвязка вокруг программ, которые уже работают с предметными областями. В некоторых случаях скриптовый язык может предоставлять весь инструментарий:

Это скрипт. Просто скрипт. Не смотря на то, что он реализует офигенный объём работы. А вот если у вас md5 — класс, объявленный в скрипте 5 строчками выше с имплементацией md5 (или url, или open, или smtp, etc) — это уже потуга на программу. Но программа — это много сложнее, чем алгоритм, её составляющий — и подобное не должно реализовываться в скриптах. НИКОГДА.

2) Любая программа должна обладать известным поведением. Математики предлагают описывать поведение программы в всеобъемлющих терминах; практика же говорит, что обычно кроме алгоритма программа ещё содержит баги и фичи, которые влияют на её поведение, к которым надо адаптироваться. Адаптироваться к ним куда проще, когда есть некоторая практика использования программы.

«KDC has been valid once but invalid now» — если это сообщение от скрипта — всё, хоронить. Прямо тут, на месте. У программы это вполне разумное сообщение по которому можно гуглить и выяснять, что именно не так. Это прямое следствие наличия в программе некой предметной логики, специфичной и требующей от пользователей не изучать её насквозь, а принять бехивиористически. То бишь как набор утверждений о поведении программы. «Данная версия программы не понимает файлы больше 2Гб в размере». Это не укладывается в алгоритм (а если уложится — будет занимать этак с том дискретной математики) — но это нужно знать в практическом смысле. «Данная программа плохо себя ведёт в условиях симметричной нагрузки на аплоад/даунлоад, лучше запустить две копии, каждая из которых будет работать в свою сторону симметрично» — понимание _ПОЧЕМУ_ потребует титанических усилий, проще принять это как данность. Чем сложнее алгоритм, тем больше жизни нужно потратить на его исследование, адаптацию и глубокое изучение. На всё жизни не хватит, значит, проще принять как данное и сконцентрироваться на важном.

Скрипт же, обратно, должен быть кристально понятен каждому, кто его посмотрит (с поправками на знание скриптового языка). Никаких (if every in self.__datarange__ is not in any map(__systable__.lang, __localtable__.map, lambda (a,b):[a in b or b in a for every __sys__.pair(a,b)])) raise «Missed i18n constitution».

3) Скрипт решает задачу _ЗДЕСЬ_И_СЕЙЧАС_. Программа решает задачу _ТАМ_И_ВСЕГДА_ (с поправкой на опыт эксплуатации из п.2). Когда вы пишите скрипт, вы делаете так, чтобы оно работало в вашей системе. Оно не годится для свободного использования в других системах (хотя может быть ЛЕГКО (см п.1) адаптировано). Программа должна быть адаптируема к куче вариантов применения, реализация этой адаптации в скрипте приводит к потере его простоты и превращению его, собственно, в программу. Кроме того (увы и ах), но знание КАК ПРАВИЛЬНО писать программу не эквивалентно написанию правильного алгоритма. Вы можете написать потрясающую библиотеку, но если вы не сможете запустить её на машине, у которой понедельник первый день недели (или второй — кому как повезёт), то грош цена вашей библиотеке. Необходимость думать об этом — это уже написание программ — скрипту такое допустимо (хотя и не желательно).

Ну и ещё важное отличие между скриптами и программами. Программы (в форме библиотек) могут «наслаиваться» друг на друга. Этой программе нужен libYYY, которая использует libZZZ и libAAA, при этом libAAA использует libZZZ и libc. Это нормально.

Скрипты же НЕ ДОЛЖНЫ ЗАВИСЕТЬ ДРУГ ОТ ДРУГА. Ситуация, когда скрипт зависит от сервисов другого скрипта, который зависит от третьего — ненормальная.

Заметим, речь идёт о зависимости. Вполне можно представить себе скрипт, который вызывает другие скрипты и выдаёт обобщённый результат по ним, но это уже грань. Чуть сложнее (например, «запустить скрипт А если скрипт Б не отработал») — уже за гранью фола. Нехорошо. А если скрипт А не отработал но не сообщил об этом? Или чуть-чуть отработал, но потом отвалился так, что скрипту Б не получится доделать (а мы, как авторы скрипта А, и подумать не могли о подобном)?

Что же вообще должен делать хороший скрипт? Сращивать несколько программ в конкретную систему. Можете считать программы за детали конструктора. А сам конструктор — за скрипт. Вам НЕ СЛЕДУЕТ нарезать винтовую нарезку на шпинделе — возьмите шпиндель с нарезкой. Вам не следует делать эллиптический валик из этой резинки — оно всё равно будет плохо работать. Если у вас в конструкторе нет квадратной пластинки с дырками по краям, то это проблема нехватки деталек. Вы можете попытаться сделать квадратную пластину из пары прямоугольных, но не следует делать её и сотни длинных полосок.

Бывает так, что скрипты перерождаются в программы. Внезапно в скрипте появляется некая логика (алгоритм), которая становится нетривиальна (и полезна). В этот момент нужно поймать это — и не полениться потратить в три раза больше времени, но сделать её программой. Обеспечить её «мясом», которое отличает программу от скрипта. Добавить сотню проверок условий, заменить все константы на конфигурируемые переменные, приготовить её для работы в «непривычных» условиях. Желательно сделать её публичной (тогда может наработаться практика использования).

Обычный пайп представляет из себя практически идеальный инструмент для конструирования простых программ:

Грань, в которой заканчивается скрипт найти сложно. Скажем так, цикл — ещё терпимо. Проверка условия — нормально. Но вот проверка условия в цикле (больше, чем выход из цикла) — это уже плохо. Если же у вас цикл, в котором по проверке условия запускается цикл — это 100% программа. Если у неё нет всего того, что должно быть у программы, значит это просто очень плохая программа. Но никак не скрипт.

Когда я смотрю на сборники «полезных скриптов» (вот тут (forum.sysadmins.ru), например), я понимаю, что это программы. Ужасные программы без сопроводительной документации, процедуры установки, без проверки условий… Так нельзя.

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

Применение копипастнутых скриптов — подобие ранне-досового копирования на дискетках полезных программулин. Работает — радуемся, не работает — пофигу, сломало всё — злимся. В условиях выбора между копипастнутым скриптом и программой (и минимальной обвязкой) следует выбирать программы. Даже если внедрение программы потребует дополнительных усилий по изучению, налаживанию и т.д. Наладив программу, вы получите программу. Отладив скрипт вы получите лишь костыль, прочность и долговечностью которого не знает даже автор.

Каждый раз, когда возникает подобная ситуация: делать скрипт или искать программу, следует начать с поиска программы. Потому что программирование увлекает (да нафига нам nagios, мы и сами напишем пачку скриптов мониторинга), а изучение чужого — утомляет (ну хрена она работает не так как я ожидаю?). Но последствия «недопрограммирования» — отсутствие документации к тому «дымоходу», который вы сделали. А последствие внедрённого решения — система, которая умеет работать сама по себе.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *