LXF169:Рубрика сисадмина
Olkol (обсуждение | вклад) (→ImageMagick) |
Olkol (обсуждение | вклад) (→Время для кое-чего покрасивее) |
||
(не показаны 8 промежуточных версий 1 участника) | |||
Строка 36: | Строка 36: | ||
Мой второй пример создает коллаж из миниатюр всех изображений, которые есть в каталоге Pictures: | Мой второй пример создает коллаж из миниатюр всех изображений, которые есть в каталоге Pictures: | ||
+ | {{Врезка|right|Ширина=30%|Заголовок=Формат от скрипта |Содержание= | ||
+ | Одно из преимуществ командной строки, разумеется, в построении из команд скриптов. Например, вот цикл в скрипте, который преобразует все файлы JPG в текущем каталоге в PNG: | ||
+ | $ for f in *.jpg; do convert $f $(basename $f.jpg).png; done | ||
+ | |||
+ | При поддержке практически всех известных человечеству форматов возможности программы неисчерпаемы. | ||
+ | }} | ||
$ montage -label ‘%t\n%[width]x%[height]’ -size | $ montage -label ‘%t\n%[width]x%[height]’ -size | ||
Строка 44: | Строка 50: | ||
Наряду с управлением ImageMagick из командной строки (или из скрипта), есть библиотеки, предоставляющие доступ ко всему этому великолепию для работы с изображениями на языках C, Java, Perl, PHP и Ruby. ImageMagick почти наверняка есть в вашем дистрибутиве, и его установка должна быть простой. Существует версия также и для Windows. | Наряду с управлением ImageMagick из командной строки (или из скрипта), есть библиотеки, предоставляющие доступ ко всему этому великолепию для работы с изображениями на языках C, Java, Perl, PHP и Ruby. ImageMagick почти наверняка есть в вашем дистрибутиве, и его установка должна быть простой. Существует версия также и для Windows. | ||
+ | |||
+ | ===Стек LAMP=== | ||
+ | |||
+ | ''M – это MySQL. Третья часть нашей серии, и в ней мы осваиваем базы данных.'' | ||
+ | |||
+ | В этом месяце мы рассмотрим «M» в стеке LAMP – MySQL. Сперва вкратце ознакомимся с теорией баз данных, затем перейдем к SQL и, наконец, установим MySQL и создадим базу данных. Как и в предыдущих статьях, здесь я пользуюсь CentOS 6.2 – и советую вам последовать моему примеру и установить его на виртуальную машину. | ||
+ | |||
+ | ====Пособие по нырку в базы данных==== | ||
+ | |||
+ | На то, чтобы стать гуру в базах данных, можно потратить всю жизнь, но основы не слишком сложны. Начнем с начала: в базах данных информация хранится в таблицах, и у каждой таблицы есть имя. Таблица состоит из столбцов и строк. У каждого столбца есть имя и тип данных. Эти типы данных отчасти зависят от используемого сервера баз данных, и необязательно должны напрямую соответствовать типам данных, используемым в серверных языках программирования. Например, MySQL поддерживает 8-битные целые числа в виде типа TINYINT, которого нет в PHP. | ||
+ | |||
+ | Один столбец внутри каждой таблицы назначается первичным ключом. Он должен быть уникален внутри таблицы; иными словами, запросив данные из таблицы для заданного первичного ключа, вы получите в ответ максимум одну строку. Так же часто один или несколько столбцов содержат так называемые внешние ключи, которые представляют собой перекрестные ссылки на первичные ключи в других таблицах. Структура базы данных – ее таблицы, их столбцы и типы данных и взаимосвязи между ключами – называется схемой базы данных. | ||
+ | |||
+ | Рассмотрим пример. На рисунке показаны две таблицы books [книги] и borrowers [читатели], которые могут составить базу данных, используемую библиотекой, выдающей книги на дом. База данных позволяет нам следить за книгами в библиотеке – выданы они или нет, и если да – кто их взял и когда вернет. | ||
+ | |||
+ | В таблице book каждой книге назначен уникальный идентификатор книги; он выступает в роли первичного ключа таблицы. Может возникнуть соблазн использовать как первичный ключ ISBN книги – в конце концов, он обязан быть уникальным. Но тогда в библиотеке нельзя будет держать больше одного экземпляра каждой книги. Использование собственного «идентификатора книги» в качестве первичного ключа позволяет избежать этой проблемы. Посмотрев на таблицу на рисунке, мы видим, что одну из книг взял читатель 102. Это внешний ключ. 102 ссылается на первичный ключ в таблице borrower. Посмотрев в эту таблицу, мы видим, что книгу взяла Джейн Смит [Jane Smith]. | ||
+ | |||
+ | ====Язык структурных запросов====Для создания таблиц, выполнения к ним запросов и их обновления используется древний язык под названием SQL (Structured Query Language – язык структурированных запросов). Он появился в 1974 году и стал стандартом ANSI в 1986, и этим сильно отличается от всех прочих языков программирования, с которыми вы можете быть знакомы. О нем написаны целые книги, но так как в этом месяце мне не выделили всю площадь журнала, придется довольствоваться несколькими примерами, чтобы вы поняли основную идею. | ||
+ | |||
+ | Для начала, вот пара SQL-запросов: | ||
+ | |||
+ | select * from books where author = ‘Charles Dickens’ | ||
+ | |||
+ | select author,title from books where onloan = 1 | ||
+ | |||
+ | Каждый из этих запросов возвращает «результирующее множество» – набор из нуля или более строк, содержащий соответствующие запросу записи. В первом примере * означает, что мы хотим получить все столбцы. Посмотреть в таблицу, вы увидите, что мы получим две строки (так как Чарльз Диккенс написал две из наших книг). Во втором примере в результатах нам нужны только столбцы author и title, и так как только одна книга из таблицы выдана на руки, результат будет состоять из одной строки. | ||
+ | |||
+ | Не все запросы возвращают строки данных. Следующий запрос возвратит просто количество выданных книг: | ||
+ | |||
+ | select count(*) from books where onloan = 1 | ||
+ | |||
+ | Теперь предположим, что в библиотеку поступила новая книга. Вот SQL-запрос для добавления новой строки в таблицу: | ||
+ | |||
+ | insert into books values (6, ‘Birdsong’, ‘Sebastian Faulks’, 0, null, null) | ||
+ | |||
+ | Обратите внимание, что первоначально книга никому не выдана. Ключевое слово null означает, что элементу не присвоено никакого значения. | ||
+ | |||
+ | И вот наша библиотека решила избавиться от единственной книги Дугласа Адамса [Douglas Adams] (позор!), и нам нужно удалить ее из базы данных следующим SQL-запросом: | ||
+ | |||
+ | delete from books where bookid = 4 | ||
+ | |||
+ | Обратите внимание, что поскольку здесь мы выбираем данные по первичному ключу, мы удалим максимум одну строку. Другой пример – если бы мы захотели удалить все книги Чарльза Диккенса [Charles Dickens] (еще худший позор!), это можно было бы сделать так: | ||
+ | |||
+ | delete from books where author = ‘Charles Dickens’ | ||
+ | |||
+ | Наконец, представим, что читатель Джон Доу [John Doe] сообщил библиотеке об изменении своего адреса, поэтому нужно обновить базу данных следующим образом: | ||
+ | |||
+ | update borrowers set address = ‘15 Lemon Street, Liverpool’ where name = ‘John Doe’ | ||
+ | |||
+ | В этих примерах есть несколько вещей, на которые нужно обратить внимание. Во-первых, ключевые слова SQL (вроде select, where, insert и delete) я писал в нижнем регистре. Это нормально, так как SQL не чувствителен к регистру; но большинство рьяных сторонников SQL написали бы их заглавными буквами. Во-вторых, здесь мы только смотрим на выражения языка SQL. Далее на нашем уроке мы увидим, как выполнять эти команды в клиенте командной строки MySQL, а через месяц – из кода PHP, но пока это чистый SQL. | ||
+ | |||
+ | ====Более сложные запросы==== | ||
+ | Прежде чем завершить наше мини-руководство по SQL, мне хочется показать вам чуть более хитрый запрос. Пусть нам нужно вывести список заголовков книг и читателей для книг, выданных на руки. Эта информация разбита между двумя таблицами, поэтому нам нужно объединить результаты из обеих. Запрос выглядит следующим образом: | ||
+ | |||
+ | select books.title,borrowers.name from books,borrowers where books.onloan = 1 and books.borrowerid = borrowers.borrowerid ; | ||
+ | |||
+ | Обратите внимание, что теперь имена столбцов нужно указывать с именами таблиц, например, books.title вместо просто title. Такой типа запроса называется объединением. А в выражении where – два условия, соединенные логическим «и (and)». Второе условие – books.borrowerid = borrowers.borrowerid – гарантирует, что мы получим только те сочетания данных из двух таблиц, которые соответствуют одному и тому же взятию книги на руки. | ||
+ | |||
+ | Здесь мы коснулись SQL лишь в общих чертах. Мы не говорили о командах создания новых баз данных и таблиц или о хранимых процедурах – которые по сути являются именованными фрагментами кода SQL, хранимыми на сервере. Мы также вовсе не упомянули об управлении доступом. В MySQL есть довольно тонкая схема управления доступом, которая позволяет создавать учетные записи пользователей и затем указывать, например, что для заданных таблиц (или даже заданных столбцов таблицы) пользователь имеет право только на чтение. У нашего пользователя root есть полный доступ ко всему, но вы вряд ли захотите использовать эту учетную запись в реальном web-приложении. Давайте установим MySQL и выполним эти действия по-настоящему. MySQL есть в репозиториях CentOS, поэтому установка проста: | ||
+ | |||
+ | yum install mysql mysql-server | ||
+ | |||
+ | Пакет mysql-server содержит сам сервер (mysqld), а пакет mysql (среди прочего) – клиент командной строки MySQL, к которому мы вскоре перейдем. | ||
+ | |||
+ | Также есть обычные команды управления сервисами. Сначала нужно обеспечить запуск сервиса при загрузке системы: | ||
+ | |||
+ | # chkconfig mysqld on | ||
+ | |||
+ | Затем нужно запустить сервис прямо сейчас: | ||
+ | |||
+ | # service mysqld start | ||
+ | |||
+ | После этого выполните команду mysql_secure_installation для создания начальной конфигурации. Это нужно сделать только один раз. У вас запросят пароль root, но на данном этапе его еще нет, поэтому просто нажмите Enter. Затем вам предложат задать новый пароль root; задайте хороший надежный пароль, потому что у этого пользователя есть полный административный контроль над всей базой данных. Правильнее будет назначить пароль, отличный от пароля root в Linux. Затем, следуя указаниям программы, вы должны: | ||
+ | |||
+ | » Удалить анонимных пользователей. | ||
+ | |||
+ | » Отключить удаленный вход в систему от имени root. | ||
+ | |||
+ | » Удалить тестовую базу данных. | ||
+ | |||
+ | Теперь можно двигаться дальше. Мы пойдем кратчайшим путем, начав прямо с создания базы данных library, которой пользуемся в примерах. Для этого воспользуемся готовым скриптом из команд SQL – createlibrary-database. Этот скрипт приведен на рисунке и также должен быть на вашем диске. | ||
+ | |||
+ | В командной строке MySQL этот скрипт запускается так: | ||
+ | |||
+ | $ mysql -u root -prootpw < create-library-database | ||
+ | |||
+ | Здесь rootpw – пароль пользователя root MySQL, которого мы создали ранее. | ||
+ | |||
+ | Если все пройдет удачно, создастся база данных, и мы сможем выполнять вышеописанные запросы. Зайдите на сервер MySQL и выберите базу данных library: | ||
+ | |||
+ | $ mysql -u root -prootpw library | ||
+ | |||
+ | MySQL напечатает несколько строк сообщений, затем отобразит строку ввода, из которой и выполняются запросы, например: | ||
+ | |||
+ | mysql> select author,title from books where onloan = 1; | ||
+ | |||
+ | +---------------+--------------------+ | ||
+ | |||
+ | | author | title | | ||
+ | |||
+ | +---------------+--------------------+ | ||
+ | |||
+ | | Дж. K. Роулинг | Кубок Огня | | ||
+ | |||
+ | +---------------+--------------------+ | ||
+ | |||
+ | 1 row in set (0.00 sec) | ||
+ | {{Врезка|right|Ширина=40%|Заголовок=Снова в школу |Содержание= | ||
+ | Если вы хотите больше узнать об SQL (но не хотите покупать книгу), я бы посоветовал зайти на w3schools.com и щелкнуть по ссылке «Learn SQL» (Изучаем SQL). Здесь вы найдете руководства, список команд SQL и чудесное маленькое приложение, которое позволит набирать SQL-запросы и выполнять их на тестовой базе данных. Если немного расширить наши рамки, на сайте также есть материал для изучения HTML, CSS, PHP, XML и многого другого. Если вы никогда не были на этом сайте, зайдите туда немедля. Обещаю, вы не пожалеете! | ||
+ | }} | ||
+ | {{Врезка|right|Ширина=40%|Заголовок=Версия Enterprise |Содержание= | ||
+ | Теперь MySQL принадлежит Oracle, и программа движется по пути других приложений (вроде Tripwire), которые были открытыми, а затем стали коммерческими. Бесплатная открытая версия все еще доступна (и работает отлично), но функциональность уровня предприятия теперь добавляется в платную версию продукта. Эта версия обеспечивает средства «горячего» резервного копирования, репликацию, поддержку отказоустойчивости, масштабируемость, аудит и, разумеется, техподдержку. За подробностями заходите на www.mysql.com/products/enterprise. | ||
+ | }} | ||
+ | Обратите внимание, что выражения в MySQL заканчиваются точкой с запятой. Это часть синтаксиса MySQL, а не SQL (если вы похожи на меня, то будете постоянно про эти точки с запятой забывать!). | ||
+ | |||
+ | Другие SQL-запросы и команды, которые мы видели ранее, можно запустить точно так же. Если вы следуете за мной, надеюсь, вам захотелось попробовать выполнить несколько собственных запросов. | ||
+ | |||
+ | ===Ссылочная целостность=== | ||
+ | |||
+ | Обычно с MySQL используется два серверных движка: MyISAM и InnoDB. В версиях MySQL до 5.5 в таблицах по умолчанию использовался MyISAM, а если вам нужна была таблица InnoDB, это указывалось при ее создании. Начиная с MySQL 5.5 и выше, по умолчанию применяется InnoDB. Одно из преимуществ InnoDB – в принудительном обеспечении ссылочной целостности данных. | ||
+ | |||
+ | «Ссылочная целостность» звучит весьма по-технарски, но по сути это означает, что если внешний ключ существует в таблице, этот ключ (в виде первичного ключа) должен существовать в таблице, на которую ссылается внешний ключ. Например, если бы мы удалили Джейн Смит из таблицы borrowers нашей базы данных library, ссылочная целостность бы нарушилась, потому что ключ этого пользователя (102) указывается в таблице books. | ||
+ | |||
+ | Поскольку наша база данных использует движок InnoDB и ссылка внешнего ключа была объявлена в структуре таблицы, при попытке удалить Джейн Смит система вежливо нам откажет: | ||
+ | |||
+ | mysql> delete from borrowers where name = ‘Jane Smith’; | ||
+ | |||
+ | ERROR 1451 (23000): Cannot delete or update a parent row: | ||
+ | |||
+ | a foreign key constraint fails (`library`.`books`, | ||
+ | |||
+ | CONSTRAINT `books_ibfk_1` FOREIGN KEY (`borrowerid`) | ||
+ | |||
+ | REFERENCES `borrowers` (`borrowerid`)) | ||
+ | |||
+ | ===Время для кое-чего покрасивее=== | ||
+ | |||
+ | Если вы устали от командной строки и хотите увидеть что-нибудь графическое, установите MySQL Workbench. С этой программой вы можете: | ||
+ | |||
+ | » Создавать схемы баз данных, генерировать базы данных и управлять ими визуально. | ||
+ | |||
+ | » Создавать, оптимизировать и выполнять SQL-запросы. | ||
+ | |||
+ | » Настраивать серверы и учетные записи пользователей. | ||
+ | |||
+ | » Переносить базы данных с SQL Server, Sybase и PostgreSQL. | ||
+ | |||
+ | К сожалению, ее нет в репозиториях CentOS, но ее можно загрузить с сайта MySQL. Сделайте следующее: | ||
+ | |||
+ | » Зайдите на www.mysql.com/downloads. | ||
+ | |||
+ | » Щелкните по ссылке MySQL Workbench. | ||
+ | |||
+ | » В выпадающем списке выберите RedHat Linux 6. | ||
+ | |||
+ | » Щелкните по ссылке для загрузки 32-битной или 64-битной версии. | ||
+ | |||
+ | » Щелкните по “No thanks, just start my download! [Нет, спасибо, просто начать загрузку!]”, чтобы пропустить регистрацию. | ||
+ | |||
+ | » Сохраните файл (он будет в вашем каталоге Downloads). | ||
+ | |||
+ | » Скопируйте файл в /tmp. | ||
+ | |||
+ | » Переключитесь на пользователя root и выполните команды: | ||
+ | |||
+ | # yum install libzip pexpect gtkmm24 | ||
+ | |||
+ | # rpm -i /tmp/mysql*rpm | ||
+ | |||
+ | Первая команда установит требуемые зависимости пакета, вторая – сам пакет. | ||
+ | |||
+ | На экранном снимке показан просмотр схемы базы данных в MySQL и отображение результатов простого запроса. Учтите, что хотя MySQL – графическая программа, вам все равно придется набирать свой SQL-запрос! Мне особенно нравится возможность MySQL Workbench по «реинжинирингу» базы данных и построению аккуратной диаграммы «сущность – связь» со схемами таблиц и отношениями между ними. | ||
+ | |||
+ | Через месяц, в последней части серии, мы соединим все части стека LAMP вместе. Мы разработаем web-приложение, которое позволит пользователям библиотеки отправлять запросы к базе данных библиотеки через HTML-форму, и напишем серверный код на PHP, который выполняет эти запросы к базе данных и формирует результат, отформатированный в HTML. Увидимся! | | ||
+ | |||
+ | ===Ссылочная целостность=== | ||
+ | |||
+ | Обычно с MySQL используется два серверных движка: MyISAM и InnoDB. В версиях MySQL до 5.5 в таблицах по умолчанию использовался MyISAM, а если вам нужна была таблица InnoDB, это указывалось при ее создании. Начиная с MySQL 5.5 и выше, по умолчанию применяется InnoDB. Одно из преимуществ InnoDB – в принудительном обеспечении ссылочной целостности данных. | ||
+ | |||
+ | «Ссылочная целостность» звучит весьма по-технарски, но по сути это означает, что если внешний ключ существует в таблице, этот ключ (в виде первичного ключа) должен существовать в таблице, на которую ссылается внешний ключ. Например, если бы мы удалили Джейн Смит из таблицы borrowers нашей базы данных library, ссылочная целостность бы нарушилась, потому что ключ этого пользователя (102) указывается в таблице books. | ||
+ | |||
+ | Поскольку наша база данных использует движок InnoDB и ссылка внешнего ключа была объявлена в структуре таблицы, при попытке удалить Джейн Смит система вежливо нам откажет: | ||
+ | |||
+ | mysql> delete from borrowers where name = ‘Jane Smith’; | ||
+ | |||
+ | ERROR 1451 (23000): Cannot delete or update a parent row: | ||
+ | |||
+ | a foreign key constraint fails (`library`.`books`, | ||
+ | |||
+ | CONSTRAINT `books_ibfk_1` FOREIGN KEY (`borrowerid`) | ||
+ | |||
+ | REFERENCES `borrowers` (`borrowerid`)) | ||
+ | |||
+ | ===Время для кое-чего покрасивее=== | ||
+ | |||
+ | Если вы устали от командной строки и хотите увидеть что-нибудь графическое, установите MySQL Workbench. С этой программой вы можете: | ||
+ | |||
+ | » Создавать схемы баз данных, генерировать базы данных и управлять ими визуально. | ||
+ | |||
+ | » Создавать, оптимизировать и выполнять SQL-запросы. | ||
+ | |||
+ | » Настраивать серверы и учетные записи пользователей. | ||
+ | |||
+ | » Переносить базы данных с SQL Server, Sybase и PostgreSQL. | ||
+ | |||
+ | К сожалению, ее нет в репозиториях CentOS, но ее можно загрузить с сайта MySQL. Сделайте следующее: | ||
+ | |||
+ | » Зайдите на www.mysql.com/downloads. | ||
+ | |||
+ | » Щелкните по ссылке MySQL Workbench. | ||
+ | |||
+ | » В выпадающем списке выберите RedHat Linux 6. | ||
+ | |||
+ | » Щелкните по ссылке для загрузки 32-битной или 64-битной версии. | ||
+ | |||
+ | » Щелкните по “No thanks, just start my download! [Нет, спасибо, просто начать загрузку!]”, чтобы пропустить регистрацию. | ||
+ | |||
+ | » Сохраните файл (он будет в вашем каталоге Downloads). | ||
+ | |||
+ | » Скопируйте файл в /tmp. | ||
+ | |||
+ | » Переключитесь на пользователя root и выполните команды: | ||
+ | |||
+ | # yum install libzip pexpect gtkmm24 | ||
+ | |||
+ | # rpm -i /tmp/mysql*rpm | ||
+ | |||
+ | Первая команда установит требуемые зависимости пакета, вторая – сам пакет. | ||
+ | |||
+ | На экранном снимке показан просмотр схемы базы данных в MySQL и отображение результатов простого запроса. Учтите, что хотя MySQL – графическая программа, вам все равно придется набирать свой SQL-запрос! Мне особенно нравится возможность MySQL Workbench по «реинжинирингу» базы данных и построению аккуратной диаграммы «сущность – связь» со схемами таблиц и отношениями между ними. | ||
+ | |||
+ | Через месяц, в последней части серии, мы соединим все части стека LAMP вместе. Мы разработаем web-приложение, которое позволит пользователям библиотеки отправлять запросы к базе данных библиотеки через HTML-форму, и напишем серверный код на PHP, который выполняет эти запросы к базе данных и формирует результат, отформатированный в HTML. Увидимся! | |
Текущая версия на 09:27, 14 ноября 2018
|
|
|
Содержание |
[править] По рецептам доктора Брауна
Эзотерическое системное администрирование из причудливых заворотов кишок серверной
[править] ImageMagick
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Рассмотрим утилиту, которая делает с изображениями все, что ни пожелаешь, разве что не рисует их.
Так как мой раздел посвящен системному администрированию, то, решив привлечь ваше внимание к удивительному набору утилит управления изображениями под названием ImageMagick, я немного сойду с лыжни. Идея о наборе утилит для редактирования изображений, работающих чисто в командной строке, может удивить даже самых опытных любителей Linux, но ImageMagick именно таков (хотя для некоторых операций есть оболочка в виде меню).
От широты возможностей ImageMagick захватывает дух. Хотя им нельзя закрасить на фото усы вашей тещи, почти со всем прочим он справится. Можно преобразовать изображение в другой формат (поддерживается более 100), перевернуть, отразить, масштабировать, обрезать и трансформировать изображение, размыть его и увеличить резкость, изменить цвета, определить края, добавить текст и фигуры и многое другое.
Охватить все возможности ImageMagick всего в нескольких примерах нельзя, но вот два. Первый создает изображение, содержащее текст, который располагается вдоль 360-градусной дуги:
$ convert -background khaki -fill sienna -font acmesa.TTF -pointsize 144 label:”Рецепты доктора Брауна. “ -distort Arc 360 arctext.png
Мой второй пример создает коллаж из миниатюр всех изображений, которые есть в каталоге Pictures:
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
$ montage -label ‘%t\n%[width]x%[height]’ -size
512x512 ‘/home/chris/Pictures/*.jpg[120x90]’ -auto-orient -geometry +5+5 -tile 5x -frame 5 -shadow photos.png
Результат – аккуратная серия миниатюр, каждая с заголовком и в красивой рамке с тенью. Эти примеры иллюстрируют работу только двух команд – convert и montage. Есть еще девять: animate, compare, composite, conjure, display, identify, import, mogrify и stream. В совокупности у них столько опций и параметров, что ошалеет самый отпетый наркоман командной строки. К счастью, на www.imagemagick.org очень много готовых примеров, покрывающих все: от размытия до аффинных преобразований.
Наряду с управлением ImageMagick из командной строки (или из скрипта), есть библиотеки, предоставляющие доступ ко всему этому великолепию для работы с изображениями на языках C, Java, Perl, PHP и Ruby. ImageMagick почти наверняка есть в вашем дистрибутиве, и его установка должна быть простой. Существует версия также и для Windows.
[править] Стек LAMP
M – это MySQL. Третья часть нашей серии, и в ней мы осваиваем базы данных.
В этом месяце мы рассмотрим «M» в стеке LAMP – MySQL. Сперва вкратце ознакомимся с теорией баз данных, затем перейдем к SQL и, наконец, установим MySQL и создадим базу данных. Как и в предыдущих статьях, здесь я пользуюсь CentOS 6.2 – и советую вам последовать моему примеру и установить его на виртуальную машину.
[править] Пособие по нырку в базы данных
На то, чтобы стать гуру в базах данных, можно потратить всю жизнь, но основы не слишком сложны. Начнем с начала: в базах данных информация хранится в таблицах, и у каждой таблицы есть имя. Таблица состоит из столбцов и строк. У каждого столбца есть имя и тип данных. Эти типы данных отчасти зависят от используемого сервера баз данных, и необязательно должны напрямую соответствовать типам данных, используемым в серверных языках программирования. Например, MySQL поддерживает 8-битные целые числа в виде типа TINYINT, которого нет в PHP.
Один столбец внутри каждой таблицы назначается первичным ключом. Он должен быть уникален внутри таблицы; иными словами, запросив данные из таблицы для заданного первичного ключа, вы получите в ответ максимум одну строку. Так же часто один или несколько столбцов содержат так называемые внешние ключи, которые представляют собой перекрестные ссылки на первичные ключи в других таблицах. Структура базы данных – ее таблицы, их столбцы и типы данных и взаимосвязи между ключами – называется схемой базы данных.
Рассмотрим пример. На рисунке показаны две таблицы books [книги] и borrowers [читатели], которые могут составить базу данных, используемую библиотекой, выдающей книги на дом. База данных позволяет нам следить за книгами в библиотеке – выданы они или нет, и если да – кто их взял и когда вернет.
В таблице book каждой книге назначен уникальный идентификатор книги; он выступает в роли первичного ключа таблицы. Может возникнуть соблазн использовать как первичный ключ ISBN книги – в конце концов, он обязан быть уникальным. Но тогда в библиотеке нельзя будет держать больше одного экземпляра каждой книги. Использование собственного «идентификатора книги» в качестве первичного ключа позволяет избежать этой проблемы. Посмотрев на таблицу на рисунке, мы видим, что одну из книг взял читатель 102. Это внешний ключ. 102 ссылается на первичный ключ в таблице borrower. Посмотрев в эту таблицу, мы видим, что книгу взяла Джейн Смит [Jane Smith].
====Язык структурных запросов====Для создания таблиц, выполнения к ним запросов и их обновления используется древний язык под названием SQL (Structured Query Language – язык структурированных запросов). Он появился в 1974 году и стал стандартом ANSI в 1986, и этим сильно отличается от всех прочих языков программирования, с которыми вы можете быть знакомы. О нем написаны целые книги, но так как в этом месяце мне не выделили всю площадь журнала, придется довольствоваться несколькими примерами, чтобы вы поняли основную идею.
Для начала, вот пара SQL-запросов:
select * from books where author = ‘Charles Dickens’
select author,title from books where onloan = 1
Каждый из этих запросов возвращает «результирующее множество» – набор из нуля или более строк, содержащий соответствующие запросу записи. В первом примере * означает, что мы хотим получить все столбцы. Посмотреть в таблицу, вы увидите, что мы получим две строки (так как Чарльз Диккенс написал две из наших книг). Во втором примере в результатах нам нужны только столбцы author и title, и так как только одна книга из таблицы выдана на руки, результат будет состоять из одной строки.
Не все запросы возвращают строки данных. Следующий запрос возвратит просто количество выданных книг:
select count(*) from books where onloan = 1
Теперь предположим, что в библиотеку поступила новая книга. Вот SQL-запрос для добавления новой строки в таблицу:
insert into books values (6, ‘Birdsong’, ‘Sebastian Faulks’, 0, null, null)
Обратите внимание, что первоначально книга никому не выдана. Ключевое слово null означает, что элементу не присвоено никакого значения.
И вот наша библиотека решила избавиться от единственной книги Дугласа Адамса [Douglas Adams] (позор!), и нам нужно удалить ее из базы данных следующим SQL-запросом:
delete from books where bookid = 4
Обратите внимание, что поскольку здесь мы выбираем данные по первичному ключу, мы удалим максимум одну строку. Другой пример – если бы мы захотели удалить все книги Чарльза Диккенса [Charles Dickens] (еще худший позор!), это можно было бы сделать так:
delete from books where author = ‘Charles Dickens’
Наконец, представим, что читатель Джон Доу [John Doe] сообщил библиотеке об изменении своего адреса, поэтому нужно обновить базу данных следующим образом:
update borrowers set address = ‘15 Lemon Street, Liverpool’ where name = ‘John Doe’
В этих примерах есть несколько вещей, на которые нужно обратить внимание. Во-первых, ключевые слова SQL (вроде select, where, insert и delete) я писал в нижнем регистре. Это нормально, так как SQL не чувствителен к регистру; но большинство рьяных сторонников SQL написали бы их заглавными буквами. Во-вторых, здесь мы только смотрим на выражения языка SQL. Далее на нашем уроке мы увидим, как выполнять эти команды в клиенте командной строки MySQL, а через месяц – из кода PHP, но пока это чистый SQL.
[править] Более сложные запросы
Прежде чем завершить наше мини-руководство по SQL, мне хочется показать вам чуть более хитрый запрос. Пусть нам нужно вывести список заголовков книг и читателей для книг, выданных на руки. Эта информация разбита между двумя таблицами, поэтому нам нужно объединить результаты из обеих. Запрос выглядит следующим образом:
select books.title,borrowers.name from books,borrowers where books.onloan = 1 and books.borrowerid = borrowers.borrowerid ;
Обратите внимание, что теперь имена столбцов нужно указывать с именами таблиц, например, books.title вместо просто title. Такой типа запроса называется объединением. А в выражении where – два условия, соединенные логическим «и (and)». Второе условие – books.borrowerid = borrowers.borrowerid – гарантирует, что мы получим только те сочетания данных из двух таблиц, которые соответствуют одному и тому же взятию книги на руки.
Здесь мы коснулись SQL лишь в общих чертах. Мы не говорили о командах создания новых баз данных и таблиц или о хранимых процедурах – которые по сути являются именованными фрагментами кода SQL, хранимыми на сервере. Мы также вовсе не упомянули об управлении доступом. В MySQL есть довольно тонкая схема управления доступом, которая позволяет создавать учетные записи пользователей и затем указывать, например, что для заданных таблиц (или даже заданных столбцов таблицы) пользователь имеет право только на чтение. У нашего пользователя root есть полный доступ ко всему, но вы вряд ли захотите использовать эту учетную запись в реальном web-приложении. Давайте установим MySQL и выполним эти действия по-настоящему. MySQL есть в репозиториях CentOS, поэтому установка проста:
yum install mysql mysql-server
Пакет mysql-server содержит сам сервер (mysqld), а пакет mysql (среди прочего) – клиент командной строки MySQL, к которому мы вскоре перейдем.
Также есть обычные команды управления сервисами. Сначала нужно обеспечить запуск сервиса при загрузке системы:
# chkconfig mysqld on
Затем нужно запустить сервис прямо сейчас:
# service mysqld start
После этого выполните команду mysql_secure_installation для создания начальной конфигурации. Это нужно сделать только один раз. У вас запросят пароль root, но на данном этапе его еще нет, поэтому просто нажмите Enter. Затем вам предложат задать новый пароль root; задайте хороший надежный пароль, потому что у этого пользователя есть полный административный контроль над всей базой данных. Правильнее будет назначить пароль, отличный от пароля root в Linux. Затем, следуя указаниям программы, вы должны:
» Удалить анонимных пользователей.
» Отключить удаленный вход в систему от имени root.
» Удалить тестовую базу данных.
Теперь можно двигаться дальше. Мы пойдем кратчайшим путем, начав прямо с создания базы данных library, которой пользуемся в примерах. Для этого воспользуемся готовым скриптом из команд SQL – createlibrary-database. Этот скрипт приведен на рисунке и также должен быть на вашем диске.
В командной строке MySQL этот скрипт запускается так:
$ mysql -u root -prootpw < create-library-database
Здесь rootpw – пароль пользователя root MySQL, которого мы создали ранее.
Если все пройдет удачно, создастся база данных, и мы сможем выполнять вышеописанные запросы. Зайдите на сервер MySQL и выберите базу данных library:
$ mysql -u root -prootpw library
MySQL напечатает несколько строк сообщений, затем отобразит строку ввода, из которой и выполняются запросы, например:
mysql> select author,title from books where onloan = 1;
+---------------+--------------------+
| author | title |
+---------------+--------------------+
| Дж. K. Роулинг | Кубок Огня |
+---------------+--------------------+
1 row in set (0.00 sec)
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Обратите внимание, что выражения в MySQL заканчиваются точкой с запятой. Это часть синтаксиса MySQL, а не SQL (если вы похожи на меня, то будете постоянно про эти точки с запятой забывать!).
Другие SQL-запросы и команды, которые мы видели ранее, можно запустить точно так же. Если вы следуете за мной, надеюсь, вам захотелось попробовать выполнить несколько собственных запросов.
[править] Ссылочная целостность
Обычно с MySQL используется два серверных движка: MyISAM и InnoDB. В версиях MySQL до 5.5 в таблицах по умолчанию использовался MyISAM, а если вам нужна была таблица InnoDB, это указывалось при ее создании. Начиная с MySQL 5.5 и выше, по умолчанию применяется InnoDB. Одно из преимуществ InnoDB – в принудительном обеспечении ссылочной целостности данных.
«Ссылочная целостность» звучит весьма по-технарски, но по сути это означает, что если внешний ключ существует в таблице, этот ключ (в виде первичного ключа) должен существовать в таблице, на которую ссылается внешний ключ. Например, если бы мы удалили Джейн Смит из таблицы borrowers нашей базы данных library, ссылочная целостность бы нарушилась, потому что ключ этого пользователя (102) указывается в таблице books.
Поскольку наша база данных использует движок InnoDB и ссылка внешнего ключа была объявлена в структуре таблицы, при попытке удалить Джейн Смит система вежливо нам откажет:
mysql> delete from borrowers where name = ‘Jane Smith’;
ERROR 1451 (23000): Cannot delete or update a parent row:
a foreign key constraint fails (`library`.`books`,
CONSTRAINT `books_ibfk_1` FOREIGN KEY (`borrowerid`)
REFERENCES `borrowers` (`borrowerid`))
[править] Время для кое-чего покрасивее
Если вы устали от командной строки и хотите увидеть что-нибудь графическое, установите MySQL Workbench. С этой программой вы можете:
» Создавать схемы баз данных, генерировать базы данных и управлять ими визуально.
» Создавать, оптимизировать и выполнять SQL-запросы.
» Настраивать серверы и учетные записи пользователей.
» Переносить базы данных с SQL Server, Sybase и PostgreSQL.
К сожалению, ее нет в репозиториях CentOS, но ее можно загрузить с сайта MySQL. Сделайте следующее:
» Зайдите на www.mysql.com/downloads.
» Щелкните по ссылке MySQL Workbench.
» В выпадающем списке выберите RedHat Linux 6.
» Щелкните по ссылке для загрузки 32-битной или 64-битной версии.
» Щелкните по “No thanks, just start my download! [Нет, спасибо, просто начать загрузку!]”, чтобы пропустить регистрацию.
» Сохраните файл (он будет в вашем каталоге Downloads).
» Скопируйте файл в /tmp.
» Переключитесь на пользователя root и выполните команды:
- yum install libzip pexpect gtkmm24
- rpm -i /tmp/mysql*rpm
Первая команда установит требуемые зависимости пакета, вторая – сам пакет.
На экранном снимке показан просмотр схемы базы данных в MySQL и отображение результатов простого запроса. Учтите, что хотя MySQL – графическая программа, вам все равно придется набирать свой SQL-запрос! Мне особенно нравится возможность MySQL Workbench по «реинжинирингу» базы данных и построению аккуратной диаграммы «сущность – связь» со схемами таблиц и отношениями между ними.
Через месяц, в последней части серии, мы соединим все части стека LAMP вместе. Мы разработаем web-приложение, которое позволит пользователям библиотеки отправлять запросы к базе данных библиотеки через HTML-форму, и напишем серверный код на PHP, который выполняет эти запросы к базе данных и формирует результат, отформатированный в HTML. Увидимся! |
[править] Ссылочная целостность
Обычно с MySQL используется два серверных движка: MyISAM и InnoDB. В версиях MySQL до 5.5 в таблицах по умолчанию использовался MyISAM, а если вам нужна была таблица InnoDB, это указывалось при ее создании. Начиная с MySQL 5.5 и выше, по умолчанию применяется InnoDB. Одно из преимуществ InnoDB – в принудительном обеспечении ссылочной целостности данных.
«Ссылочная целостность» звучит весьма по-технарски, но по сути это означает, что если внешний ключ существует в таблице, этот ключ (в виде первичного ключа) должен существовать в таблице, на которую ссылается внешний ключ. Например, если бы мы удалили Джейн Смит из таблицы borrowers нашей базы данных library, ссылочная целостность бы нарушилась, потому что ключ этого пользователя (102) указывается в таблице books.
Поскольку наша база данных использует движок InnoDB и ссылка внешнего ключа была объявлена в структуре таблицы, при попытке удалить Джейн Смит система вежливо нам откажет:
mysql> delete from borrowers where name = ‘Jane Smith’;
ERROR 1451 (23000): Cannot delete or update a parent row:
a foreign key constraint fails (`library`.`books`,
CONSTRAINT `books_ibfk_1` FOREIGN KEY (`borrowerid`)
REFERENCES `borrowers` (`borrowerid`))
[править] Время для кое-чего покрасивее
Если вы устали от командной строки и хотите увидеть что-нибудь графическое, установите MySQL Workbench. С этой программой вы можете:
» Создавать схемы баз данных, генерировать базы данных и управлять ими визуально.
» Создавать, оптимизировать и выполнять SQL-запросы.
» Настраивать серверы и учетные записи пользователей.
» Переносить базы данных с SQL Server, Sybase и PostgreSQL.
К сожалению, ее нет в репозиториях CentOS, но ее можно загрузить с сайта MySQL. Сделайте следующее:
» Зайдите на www.mysql.com/downloads.
» Щелкните по ссылке MySQL Workbench.
» В выпадающем списке выберите RedHat Linux 6.
» Щелкните по ссылке для загрузки 32-битной или 64-битной версии.
» Щелкните по “No thanks, just start my download! [Нет, спасибо, просто начать загрузку!]”, чтобы пропустить регистрацию.
» Сохраните файл (он будет в вашем каталоге Downloads).
» Скопируйте файл в /tmp.
» Переключитесь на пользователя root и выполните команды:
# yum install libzip pexpect gtkmm24
# rpm -i /tmp/mysql*rpm
Первая команда установит требуемые зависимости пакета, вторая – сам пакет.
На экранном снимке показан просмотр схемы базы данных в MySQL и отображение результатов простого запроса. Учтите, что хотя MySQL – графическая программа, вам все равно придется набирать свой SQL-запрос! Мне особенно нравится возможность MySQL Workbench по «реинжинирингу» базы данных и построению аккуратной диаграммы «сущность – связь» со схемами таблиц и отношениями между ними.
Через месяц, в последней части серии, мы соединим все части стека LAMP вместе. Мы разработаем web-приложение, которое позволит пользователям библиотеки отправлять запросы к базе данных библиотеки через HTML-форму, и напишем серверный код на PHP, который выполняет эти запросы к базе данных и формирует результат, отформатированный в HTML. Увидимся! |