Gimp

редактор gimp

редактор gimp

Бесплатный графический редактор Gimp 2 для российских дизайнеров является чем-то весьма необычным. Все настолько привыкли работать в фотошопе, что им и в голову не приходит, что есть редакторы, снискавшие в международном масштабе славу хоть и уступающую несколько Фотошопу, но всё же очень приличную.

Данный редактор так же, как и Фотошоп позволяет легко и комфортно работать со слоями. Инструментарий в нём очень обширен, панель инструментов — ничуть не меньше фотошоповской. Однако, конечно же, для работы в нём необходим некий навык, поскольку иконки различных действий несколько отличаются от их аналогов в Photoshop. Но и это — не проблема…
Прочитать остальную часть записи »

Мысли вслух о дачном домике.

Решил я наконец обзавестись дачей. И мысли мои никак не идут в русло фотошопа и веб-дизайна.
Сижу, подбираю материал для изготовления различных элементов дачного домика. Так что бы было недорого и практично.

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

Прочитать остальную часть записи »

О дизайне веб-сайта


Стильное графическое оформление оформление сайта является одним из важнейших элементов успешности интернет-проекта.

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

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

Прочитать остальную часть записи »

Мини-обзор нового ноутбука Sony Vaio P

Японские корпорации являются излюбленными для «гаджетманьяков», так как именно они выпускают подчас такие устройства, которые другие компании выпустить бы побоялись. Особенным почетом пользуется компания Sony, чьи изделия заключают в себе не только передовую начинку, но и отличный узнаваемый дизайн.

Последний громкий анонс компании — ноутбук Sony Vaio P (не путать с нетбуками, так как творение Sony схоже с ними только размерами). Маленький восьмидюймовый малыш оснащен великолепной клавиатурой, что неестественно для такого размера экрана, и весит всего 630 грамм — поистине выдающийся результат!
Прочитать остальную часть записи »

Photoshop для начинающих: как вставить фото в готовую рамку?

вставляем фото в рамкуЭта статья поможет Вам красиво оформить любую фотографию, затратив при этом минимум усилий!

Вы наверняка встречали в Интернете готовые рамки для фотошопа. Давайте разберемся, как их использовать! Например, Вам нужно оформить цифровое фото (свое, ребенка, подруги и т.п).
Для начала скачайте подходящую случаю рамку – чаще всего они размещены на подобных сайтах по разделам (детские рамки, свадебные и другие). Затем открываете программу Photoshop и начинаете творить!

1. Создайте чистый документ: File – New (указания даны для англоязычной версии программы, но мало-мальски грамотному пользователю будет не сложно понять их смысл на русском). Задайте необходимый размер будущего шедевра (например, для стандартной фотографии 10х15 значение Width должно быть 15 см, а значение Height – 10 см).
2. Откройте два файла – один с фотографией, другой с рамкой. Прочитать остальную часть записи »

Делаем загар при помощи Photoshop

Делаем загар

Сделать красивый, ровный загар на фотографии достаточно просто с помощью программы Adobe Photoshop. Так как данная программа русифицирована не у всех, я расскажу, как сделать эффект загара и в русской, и в английской версии.

Итак, приступим. Открываем новую фотографию и выбираем инструмент «Быстрая маска» (в английской версии — Quick mask). Нажимаем Q на клавиатуре или выбираем иконку с тёмным кругом в квадрате, которая находится в самом низу панели инструментов. Двойным щелчком мыши по данной иконке открываем параметры. Они должны быть такими: Color Indicates: Selected Areas, Opacity 50%. Прочитать остальную часть записи »

Кто может быть web-дизайнером?

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

Руководство по actionscript. часть 2, стр. 001

ГЛАВА 9

Интерфейс — это конструкция языка ActionScript, которая описывает новый тип данных подобно описанию типа данных с помощью класса. Однако, тогда как класс не только описывает тип данных, но и предоставляет для него реализацию, интерфейс только описывает тип данных в абстрактных терминах и не предоставляет реализацию для этого типа данных. Иными словами, класс не только объявляет группу методов и переменных, но и реализует определенное поведение; тела методов и значения переменных управляют поведением класса. Вместо того чтобы предоставлять собственную реализацию, интерфейс принимается одним или несколькими классами, которые согласны предоставить для него реализацию. Экземпляры класса, предоставляющего реализацию для интерфейса, принадлежат как типу данных класса, так и типу данных, описанному интерфейсом. Являясь одновременно членом нескольких типов данных, экземпляры могут выполнять в приложении различные функции.

I Не путайте термин «интерфейс», обсуждаемый в данной главе, с другими применени-мй а * ями этого слова. В этой главе «интерфейс» обозначает конструкцию языка ActionScript, а не графический интерфейс пользователя (GUI) или открытый API класса, которые в общей теории объектно-ориентированного программирования иногда именуются интерфейсами.

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

Аргумент в пользу интерфейсов

Предположим, мы создаем протоколирующий класс Logger, который рапортует о статусных сообщениях («записях журнала») программы в процессе ее выполнения. Многие классы получают статусные сообщения от класса Logger и по-разному реагируют на них. Например, один класс — LogUI — отображает журнальные сообщения на экране, другой класс — LiveLog — отправляет предупреждение специалисту службы поддержки с помощью сетевого инструмента администрирования, а еще один класс — LogTracker — добавляет журнальные сообщения в базу для ведения статистики. Для получения журнальных сообщений каждый класс определяет метод update ( ). Чтобы отправить сообщение объектам всех заинтересованных классов, класс Logger вызывает метод update ( ).

Пока все это кажется логичным, но что произойдет, если мы забудем определить метод update ( ) в классе LogUI? Статусное сообщение будет отправлено, однако объекты класса LogUI не получат его. Нам необходим такой подход, который

гарантирует, что каждый получатель журнальных сообщений определяет метод update ( ).

Чтобы предоставить такую гарантию, предположим, что мы ввели новое требование в нашу программу: любой объект, желающий получать журнальные сообщения от класса Logger, должен быть экземпляром базового класса LogRecipient (мы предоставим его описание) или экземпляром одного из подклассов класса LogRecipient. Реализация метода update ( ) в классе LogRecipient будет включать базовую функциональность, попросту отображая журнальное сообщение с помощью функции trace ( ):

public class LogRecipient { public function update (msg:String)-.void { trace(msg);

}

}

Теперь любой класс, который желает получать журнальные сообщения от класса Logger, просто расширяет класс LogRecipient и, если требуется специфическое поведение, перекрывает метод update ( ) класса LogRecipient, реализуя желаемое поведение. Например, следующий класс LogTracker расширяет класс LogRecipient и перекрывает метод update ( ), реализуя функциональность сохранения информации в базе данных:

public class LogTracker extends LogRecipient { // Перекрытый метод update( ) класса LogRecipient override public function update (msg:String):void { // Сохранение сообщения об ошибке в базе данных. Код не показан…

Продолжение:

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,

41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,

77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,

109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,

135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158

Руководство по actionscript. часть 2, стр. 002

}

}

Возвращаясь к классу Logger, мы определим метод addRecipient ( ), который выполняет регистрацию объекта, желающего получать журнальные сообщения. Базовое описание метода addRecipient ( ) представлено ниже. Обратите внимание, что в метод addRecipient ( ) могут передаваться только экземпляры класса LogRecipient и его подклассов:

public class Logger { public function addRecipient (1r:LogRecipient):Boolean { // Размещаемый здесь код должен выполнять регистрацию объекта 1г // для получения статусных сообщений и возвращать значение типа Boolean. // которое отражает результат выполненной операции (код не показан).

}

}

Если передаваемый в метод addRecipient ( ) объект не принадлежит типу LogRecipient, компилятор сгенерирует ошибку несоответствия типов. Если этот объект является экземпляром подкласса класса LogRecipient, в котором не реализован метод update ( ), то по крайней мере будет выполнена базовая версия метода update ( ) (определенная в классе LogRecipient).

Приемлемый вариант, не правда ли? Почти. Однако есть проблема. Что делать в том случае, если класс, желающий получать события от класса LogRecipient,

уже расширяет другой класс? Например, предположим, что класс LogUI расширяет класс flash. display. Sprite:

public class LogUI extends Sprite { public function update (msg:String):void { // Отображение статусного сообщения на экране, код не показан…

}

}

В языке ActionScript класс не может расширять несколько классов. Класс LogUI уже расширяет класс Sprite, поэтому он не может расширять еще и класс LogRecipient. Следовательно, экземпляры класса LogUI не могут регистрироваться в классе Logger, чтобы получать от него статусные сообщения. В данной ситуации нам крайне необходим способ, позволяющий указать, что на самом деле экземпляры класса LogUI принадлежат двум типам данных: LogUI и LogRecipient.

Руководство по actionscript. часть 2, стр. 003

В игру вступают… интерфейсы!

Интерфейсы и классы с несколькими типами данных

В предыдущем разделе мы создали тип данных LogRecipient, определив класс LogRecipient. Ограничение данного подхода заключается в том, что каждый получатель сообщений от класса Logger должен быть экземпляром либо класса LogRecipient, либо одного из его подклассов. Чтобы избавиться от этого ограничения, мы можем описать тип данных LogRecipient путем создания интерфейса LogRecipient, а не путем создания одноименного класса. В этом случае экземпляры любого класса, который формально согласен предоставить реализацию для метода update ( ), могут регистрироваться для получения журнальных сообщений. Посмотрим, как это работает.

Синтаксически интерфейс представляет собой просто список методов. Например, следующий код создает интерфейс LogRecipient, содержащий один-единственный метод update ( ) (обратите внимание, что интерфейсы, как и классы, могут быть описаны с помощью модификаторов управления доступом public и internal).

public interface LogRecipient { function update(msg:String):void;

}

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

Например, чтобы указать, что класс LogUI согласен определить метод update ( ) (описанный в интерфейсе LogRecipient), мы используем следующий код:

class LogUI extends Sprite implements LogRecipient { public function update (msg:String):void { // Отображение статусного сообщения на экране, код не показан…

}

}

Вместо того чтобы расширять класс LogRecipient, LogUI расширяет класс Sprite и реализует интерфейс LogRecipient. Поскольку класс LogUI реализует интерфейс LogRecipient, он должен определить метод update ( ). В противном случае компилятор сгенерирует следующую ошибку:

Interface method update in namespace LogRecipient not implemented by class LogUI.



Полезные ссылки
Случайные записи
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 024
  • 25.02.2011">Руководство по actionscript. часть 6, стр. 094
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.43
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 102
  • 05.03.2011">Руководство по actionscript. часть 5, стр. 001
  • 04.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.11
  • 06.07.2011">Acer выпустила нетбук с Android
  • 28.02.2011">Руководство по actionscript. часть 6, стр. 017
  • 18.11.2011">Обзор LG Optimus LTE
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.26
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.73
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.26
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 042
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 065
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.90
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...