17 авг. 2009 г.

Проектирование БД. Нормализация

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

1. Первая нормальная форма
• Каждый столбец в строке должен быть атомарным, т.е. столбец может содержать одно и только одно значение для заданной строки.
• Каждая строка в таблице должна содержать одинаковое количество столбцов. Учитывая обязательную атомарность столбцов, следует, что все строки в таблице должны иметь одинаковое количество значений.
• Все строки в таблице должны быть уникальны. Значения в столбцах могут дублироваться, но строки взятые целиком – не могут.

2. Вторая нормальная форма
• Таблица должна соответствовать первой нормальной форме.
• Все столбцы, не входящие в полный первичный ключ, должны зависеть от полного первичного ключа.
Пример. Имеется таблица о станциях метро с информацией об архитекторах.
archName archSurname Title comletedDate
Александр Андреев Площадь Ленина 1958.06.01
Александр Жук Достоевская 1991.05.20
В таблице первичным ключем объявлены поля archSurname (фамилия архитектора) и title (название станции). Если таблица следует нормальной форме, то все поля, не входящие в первичный ключ, зависят от него. Итак, смотрим: archName (имя архитектора) зависит от archSurname, и это логично. Поле completedDate (дата сдачи станции в эксплуатацию) зависит от title (от ее названия), это тоже логично. Но имя архитектора совершенно не зависит от названия станции, а дата сдачи станции, в свою очередь, никак не зависит от имени архитектора. Следовательно, два поля таблицы не зависят от соответственных полей в первичном ключе и таблица не соответствует второй нормальной форме.
Как мы решим проблему? Достаточно грамотный выход — раскидать данные по двум таблицам: Stations и Architectors. При этом нам понадобится третья, связующая таблица (что, плюс ко всему, позволит присваивать один проект нескольким архитекторам).

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

16 авг. 2009 г.

ООП на PHP. Часть 1 - Введение

Я программирую на php чуть больше чем 1.5 года. Из выполненных проектов, о которых я напишу чуть позже, только 1 на ООП. И то потому что я выполнил его на Zend Framework. И на самом деле плохо понимаю сам принцип ООП. Так вот в этих статьях я буду делать заметки при детальном изучении ООП. В качестве источника я выбрал книгу "PHP5 Объектно Ориентированное Программирование". Автор: Питер Ловэйн. И множество определений я буду брать у него, так как считаю, что он разъясняет все достаточно подробно. Итак начнем.

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

Объект
Сам по себе класс не может быть объектом, зато дает способ порождению объекта. Т.е класс это своего рода чертеж или шаблон по которому создается объект. Получаем, что объект - экземпляр класса.

Модификаторы доступа
Модификаторы доступа уточняют модель объекта, контролируя, как именно можно использовать его. Т.е. модификаторы доступа определяют, что можно, а что нельзя делать с объектом. Модификаторы доступа задают правила работы с классом, это синтаксически определенный "этикет" часто называют интерфейсом

Наследование
Так же как ребенок наследует гены родителей, определяющий его внешность и поведение, также и определяется "наследование" в ООП. Смысл абсолютно такой же. Т.е. если Вы наследуете свой класс от класса написанного другим человеко, то Ваш класс будет иметь такое же поведение. Фактически вы можете вызывать функции из класса от которого наследуете свой класс. Также стоит отметить, что в PHP5 отсутствует множественное наследование, т.е один класс может иметь всего одного родителя.

Я думаю на первый раз достаточно. Первичная теория есть, а как известно без теории и нечего практиковать. Посты про ООП в PHP5 я буду писать по выходным, так как другого времени у меня нету. Надеюсь на ваши замечания. Давайте разбираться вместе :)

12 авг. 2009 г.

Сравнение марок ноутбуков

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

У моей девушки ноутбук Asus F3L. У меня Acer Aspire One ZG5. Моя девушка попросила меня переустановить операционку на ее ноуте. Диски есть, сам дистрибутив на винте, ну по-крайней мере есть раздел занятый чем-то :). До этого я сам переустановил операционку на своем малыше. У меня это заняло мин 15-20, не больше. Причем я всего лишь запустил одну программу и процесс пошел. На Asus'е оказалось не все так просто. Есть диск, который запускает якобы переустановку операционки. И там и там операционка Win XP. После перезагрузки ноута с переустановочным CD запустился мастер. Попросил выбрать куда устанавливать: на первый раздел, на второй или создать 1 большой раздел и установить туда. Выбрал установить на 1. Процесс пошел. Началось форматирование. Потом началось копирование данных. Потом началась установка Win XP. Все это заняло мин 30. Но это еще не все, после этого он попросил меня вставить диск с драйверами. Установка драйверов 30 мин, да да, я не шучу. В итоге через час с лишним имеем переустановленную винду со всеми драйверами кроме драйверов на Wi-Fi. Странно думаю я. Ищу на диски с драйверами нету. Скачиваю с оф. сайта. Все, установилось. Сеть нашел, нормально. Выключаю, включаю на след день. Он мне говорить, что не может включить Wi-Fi. Нет, не то что неизвестное устройство, а то что он выключен. Пробовал включать по разному и на корпусе кнопочки и в оборудовании, ничего не помогает....

Так вот, мораль сего поста. Теперь я буду выбирать ноутбуки по трем параметрам. И третий параметр это юсабилити. Вообще у меня было 3 своих ноутбука и все Acer, очень доволен. Нравится и дизайн и сайт тех поддержки, в отличае от Asus'овского - это просто нечто. И переустановка операционки быстро и легко. И есть у меня рабочий ноут - HP. Тоже очень мне нравится. Удобно, симпатичный. Сайт тех поддержки еще лучше чем у Acer.

Выбирайте ноутбуки с умом. Пользуйтесь мнением своих друзей и близких,не забывайте о мнении других. Иногда некоторые советуют, чтобы вы не наступили на те же самые грабли. Мне ноутбуки Asus не нравятся, и из друзей я больше ни кому не посоветую их покупать.

Реанимирование Acer Aspire One ZG5

Вчера случился у меня небольшой трабл. После выключения моего нетбука он не захотел включаться. Т.е. после того как я его включил просто черный экран, лампочка горит, кулера шуршат, но на экране ничего. Оказывается это просто процессор впал в спячку :). Ничего страшного! Проблема решается, очень просто, просто необходимо перепрошить биос. Достаточно иметь флэшку. Итак инструкция по восстановлению:

1. Форматируем флэшку в FAT
2. Скачиваем драйвера на биос на официальном сайте acer. Скачиваем самую последнюю версию.
3. Копируем в корень флешки файл FLASHIT.EXE и ****.fd, переименовываем файл биоса ****.fd (например 3309.fd) в ZG5IA32.FD (Это важно!)
4. Выключаем ноут. Подключаем питание и подключаем батарейку.
5. Вставляйте флэшку. Нажимаем Fn+Esc. Держим. Включаем ноутбук, при этом держа Fn+Esc. Лампочка должна замигать. Все, отпускаем клавиши. Еще раз нажимаем на кнопку питания. Прошивка биоса началась.
6. ВАЖНО. НЕ ВЫКЛЮЧАЙТЕ нетбук во время перепрошивки. И вообще не трогайте его. После перепрошивки он сам перезагрузится и включится. ВСЕ! Работает! Ура!

2 авг. 2009 г.

Заметки начинающего фотолюбителя

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

но ты не расстраиваешься и думаешь что все получится и начинаешь фотографировать людей в тени

людей едущих от тебя

думаешь про себя "Как много людей занимаются спортом", но вдруг встречается рыбак

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

идешь дальше, спускаешься к воде, а вчера прошел дождь - скользко, ты падаешь, рука вся в грязи, штаны тоже, но ты идешь дальше, главное фотоаппарат цел. Пейзаж - опять горизонт завален

останавливаешься и начинаешь просто любоваться тем что вокруг тебя, какое красивое небо

как классно мох оброс низ дерева

а как красив гриб растущий в(на) коре дерева

поднимаешь голову выше и видишь целое семейство

как красив полевой цветок

и желтый тоже

дорожку по которой ты пришел сюда

ты всем этим любуешься, а кто-то забивает... гвозди...

насмотревшись и отдохнув идешь обратно. Видишь что кто-то пришел на пикничок в это теплое воскресенье

встречаешь спортсмена бегущего по воздуху

а за ним собака

а кто-то кому-то верит

выходишь на дорогу, а там много людей

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

а кто-то собирает грибы

важно отличать съедобные грибы от не съедобных

семья пускающая змея с мальчиком бегущим по воздуху

и тот же спортсмен с собакой

и вот ты в городе. Идешь пьешь стаканчик кваса, едешь домой, кушаешь, пишешь новый пост в блог и понимаешь: "Прежде чем фотографировать осмотрись, вокруг много чего интересного, чего ты не увидел сразу. Не получается фотографироть что-то, фотографируй другое, интересное для тебя".
Желаю всем удачи в начинаниях фотомастерства