Перейти к основному содержимому

Введение в инфосистемы и UML

· 2 мин. чтения

суббота, 3 февраля 2007 г. в 16:47:12

Этот предмет в ТТУ (Sissejuhatus infosusteemidesse, IDU3530) знакомит студента с таким немаловажным аспектом работы в большом коллективе, как проектирование проекта. На данный момент пусть неважно, что именно за проект - будь то тяжкая работа сантехника, которую решили закрепить на бумаге, или же программка "Тетрис" студента Васи.

Чтобы изложить понятные каждому неискушённому человеку пункты о том Что делает модель/система, Как она устроена и Каким образом идёт взаимодействие, используется разработанный для таких дел Унифицированный Язык Моделирования. Буквально это стандартизированные правила о том как рисовать одну часть модели и как к ней пририсовать другую.


UML можно рисовать как от руки, на доске, так и в специальных программах - MS Visio, Rational Rose, Argo UML. Наибольшее применение разумеется UML для нас будет иметься при проектировании программ, но в данном курсе упор делается на проектирование бизнес-структуры какой-либо организации на примере её сайта.

Для успешного получения зачёта вам прийдётся быстренько изучить Rational Rose либо в универе, либо скачать с инета бесплатную 30дневную версию. Для того чтобы разобраться в UML можно таким же образом взять книжку из библиотеки..

Если кратко, то существует много возможных диаграмм, но основные это..

  • Use-Case описывает возможности модели, которые доступны для конечного пользователя, будь то заказ, переписка или получение рассылки. Обозначения - человечек как Actor и возможности в виде овалов.

  • Class diagramm описывает уже подробно внутреннюю структуру модели, переменные, функции. Тут видимо подразумевается разбиение элементов на Объекты.

  • Sequence Diagram описывает динамику системы, т.н. общение объектов. Например вызов функции поиска поискового объекта.

  • Component Diagram показывает физическое представление отдельных частей модели. Для микросхемы это были бы отдельные чипы.

Кроме того существуют STATE diagram, Collaboration diagram и прочие

Rapid application development

· 1 мин. чтения

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

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

Взлом Wi-Fi access point-а с WEP

· 1 мин. чтения

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

Некогда я этой темой интересовался (а мой сокурсник Олег - даже диплом защитил по этой теме), но увы я не смог применить свои знания на практике - все программы хотели Linux. Но вот набрёл на статью от infosecurity ..

Итак, для взлома сети нам, кроме ноутбука с беспроводным адаптером, потребуется утилита aircrack 2.4, которую можно найти в свободном доступе в Интернете.

Rounded corners

· 2 мин. чтения

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

Не известно какой гений додумался закруглять уголки блоков в дизайне страничек, но пальму первенства можно отдать Apple и MacOS.

Возможные решения

  • решение в-лоб - делаем картинки, выпиливаем в photoshop набор уголков и настраиваем в css свойства нашего блока (div или table), см. screencast
  • CurvyCorners решение наиболее подходящее. Всё далает javascript, достаточно указать id элемента и радиусы закругления. Можно устроить и разные настройки для разных элементов. Поддерживается прозрачность и сглаживание.
  • NiftyCorners чуть посложнее - кроме javascript функций и их инициализаций надо указывать и css стили. Поддерживает прозрачность, но настроить немного сложнее. Генерирует лишние inline-тэги b для создания углов без картинок.
  • Roundozer так же при помощи JS закругляет уголки, правда немного тормознут, зато отечественного производства!
  • ShaderBorder кроме уголков ещё предлагает делать тень
  • Планируется что в CSS3 будет поддержка закруглённых углов, а пока gecko-engine браузеры могут использовать параметр
    -moz-border-radius: 4px; /* Firefox */ -khtml-border-radius: 4px; -webkit-border-radius: 4px; /* Safari, Chrome */ border-radius:4px; /* CSS3*/ behavior: url(border-radius.htc); /*IE*/

Читайте также:

Favicon

· 1 мин. чтения

Favicon или просто иконка сайта изначально вводилась для показа в панели favorites (internet explorer), откуда и взято название как вы догадались. Увы IE6 до сих пор не понимает что иконка у сайта есть.

В наиболее совместимом варианте иконка - файл ico 16x16 с палитрой в 16 или 256 цветов, выложенная в корень домена с названием favicon.ico

Кроме того - если в заголовок документа вставить анимацию, то иконка станет обладать бОльшим шармом:

<link rel="icon" href="http://www.kurapov.name/favicon_ani.gif" type="image/gif" /> 

Также не помешает добавить в .htaccess MIME тип

AddType image/x-icon

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

Полезно также:

  • blogosphere набор популярных иконок сайтов

Ссылки в файловой системе

· 1 мин. чтения

«ln» в Unix

В действительности речь идёт разумеется об особенностях unix-файловой системы связывать папки и файлы? На практике web-разработки это мелочь, но знать полезно.

Двумя коммандами, вводимых или из консоли sh, либо через putty по ssh, мы создаём оригинальный файл и зеркало. В отличие от копии файла, зеркало, подобно shortcut в windows, занимает мизерный размер на диске, но позволяет полноценно работать с ним как с оригиналом.

touch original_file #создаём файл ln original_file copy_file #делаем ссылку

i-Node это такой тип ссылок, которые сильно связаны с файлом и удалить файл нельзя, покуда хотябы одна ссылка "осталась в живых". Вызывается -i параметром. В обычном случае удаление ссылки не удаляет файла.

Кроме обычных shortcut'ов существует и символическая ссылка:

Creates a symbolic link. MKLINK [[/D] | [/H] | [/J]] Link Target         /D      Creates a directory symbolic link.  Default is a file symbolic link.         /H      Creates a hard link instead of a symbolic link.         /J      Creates a Directory Junction.         Link    specifies the new symbolic link name.         Target  specifies the path (relative or absolute) that the new link refers to.

Алгоритмы и структуры данных

· 2 мин. чтения

Algoritmid ja andmestruktuurid для IASB ведет Виктор Леппиксон.

Его минусы:

  • Практические уроки отсутсвуют. Всё в руках студента - сам пусть учит.
  • Безразличие до проблем студентов, в частности если на экзамен все места зарегистрированы.

Немного внешнего материала..


Экзамен. Теория

  1. Что такое сериализация, где необходимо её использовать.
  2. Сложность некоего алгоритма была оценена как функция T(n), что она собой значит?
  3. (тут график нужен) Есть многоуровневая структура быстрого поиска (Мои пояснения.. Например нижняя цепочка проходит через все элементы 5-6-7-10-13-15, а верхняя только 5-7-13). Как быть если необходимо добавить новый элемент в эту структуру?
  4. Как освобождается память, отведённая под двоичное дерево.
  5. Постройте "2-3-4" дерево из элементов, которые поступили в порядке.. 200 100 120 80 10 30 210 220 230 140 130 150
  6. Oletame, et kettal paikneva andmestruktuuri realiseerimiseks B-puu, kuidas te valiksite puude jargu?
  7. Нарисуйте 3-х дерево из слов: liiga liider liiklus liialdus liikluvus liim liimipulk
  8. Lineaarne proovimise meetod (paiskpaigutus)
  9. Nullmeetodil sortimise algoritm
  10. В оперативной памяти находится две фотографии, на которой под один пиксель отведён 1 байт. Оба файла одинакового размера. На одной горы (?), на другой - карнавал в Рио-де-Жанейро. Оба файла сжимаются кодированием Хаффмана. Какая займёт меньше памяти, почему.

Экзамен. Практика

Есть такие структуры..

struct Student {char *pName,*pCode; char **pSubjects;}; struct Subject {char *pName,*pCode, *pTeacher; double nPoints; struct Subject *pNext;}

Из них составляется два массива всех студентов и всех предметов.. Известны
*pSubjectList, *pStudentList.
Необходимо написать функцию с прототипом

int NewSubject (struct Student **pStudentList, struct Subject *pSubjectList, char *pStudentCode, char *pSubjectCode)

Причём работает она таким образом..
Для получения ссылки на нужного студента - есть функция, возвращающая значение индекса в массиве студентов с прототипом
int HashFun (char*)

Таким образом NewSubject() должна проверить сначала есть ли такой студент, потом - есть ли такой предмет, потом надо хитро посмотреть сколько у данного студента есть занятых мест в Student.pSubjects, куда помещается максимум 5 мест. Так вот надо найти свободное место, выделить под него память и скопировать в него код предмета (pSubjectCode). В случае если какой-то шаг не удался - функция возвращает ноль.

Контекстное меню на javascript

· 2 мин. чтения

Контекстное меню всплывает при нажатии правой кнопкой мыши по некоторому объекту, отсюда и его название. К сожалению многие (windows) разработчики пытаются впихнуть в него все возможные действия над объектом, из-за чего скорость работы и удобство может значительно упасть.

Для web-разработки нет определённых стандартов в создании такого меню для своего сайта, но есть несколько таких javascript'ов:

Вызвать событие

Firefox, IE и Safari поддерживают простой атрибут у html-элементов:

<body oncontextmenu='alert(10);'>

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

Не забудьте сделать ещё event-ы убирающие меню при обычном щелчке по пустому месту, при минимизации страницы или потери фокуса.

function ContextMenu(e,ID){ 
e = e ? e : window.event;
var mouse_position = { 'x' : e.clientX, 'y' : e.clientY };
if( typeof( window.pageYOffset ) == 'number' ) {
scroll_position={'x':window.pageXOffset, 'y': window.pageYOffset};
} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
scroll_position={'x':document.documentElement.scrollLeft, 'y': document.documentElement.scrollTop};
} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
scroll_position={'x':document.body.scrollLeft, 'y': document.body.scrollTop};
}

$('context_menu').innerHTML=$('context_menu_prototype').innerHTML.replace(/\[ID\]/g,ID);
Menu.Select(ID);
$('context_menu').style.left = mouse_position.x + scroll_position.x + 'px';
$('context_menu').style.top = mouse_position.y + scroll_position.y + 'px';
$('context_menu').show();
return false;
}

Интересные статьи по этой теме:

DB дизайн

· 1 мин. чтения

Дизайн базы данных дело приятное и также важное при создании новой системы.
Под дизайном я подразумеваю

  1. Разбиение  проекта на независимые логические существа данных, т.е. таблицы. Обычно ни клиент ни управляющий проектом не описывают их.
  2. Создание структуры таблицы с корректными типами данных.
  3. Создание связей между таблицами через Foreign Key , если возможно
  4. Создание функций, триггеров, последовательностей и прочих надстроек если это возможно.

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

Sphinx

· 2 мин. чтения

Sphinx - полнотекстовый поисковик по Mysql и Postgre, отличающийся скоростью от своих конкурентов, представленный на РИТ-2007 Петром Зайцевым . Использовать его имеет смысл только на больших проектах, где объем данных вынуждает уже использовать выделенный сервер.Sphinx - полнотекстовый поисковик по Mysql и Postgre, отличающийся скоростью от своих конкурентов, представленный на [РИТ-2007](ht

Обычный поиск как известно очень простой и очень медленный (условно 1.2 МБ/сек)

SELECT * FROM my_table WHERE my_col LIKE '%word%'

Второй вариант - boolean search не настолько гибкий, но побыстрей (41 МБ/сек). Конкурентов MnoGoSearch (140 МБ/сек) и Lucene, Sphinx обходит с 2200 МБ/сек.

Понятно что каждое решение имеет свою сложность, порой не линейную в зависимости от размера БД и очевидно что Sphinx аппаратно не в состоянии пробежать 2 ГБ данных в секунду, дело в том что сначала БД индексируется, а потом searchd.exe демон висит в памяти, кушая от 100 мб оперативки, и предоставляет результаты выборки по API, в PHP или ruby .

  1. Создание таблицы в базе данных по которой будет проводится поиск. В качестве тестовой предлагается test.documents вместе с данными и dump-файлом
  2. Создание конфиг файла. Если конфиг файл вы меняете впервые то замените @CONFDIR@ на реальную папку.
  3. Запуск индексатора.
    indexer.exe --all
  4. Запуск сервиса searchd.exe с портом 3312, который будет выдавать результаты поиска по индексу.
  5. Собственно запрос через API. В качестве примера есть test.php.

Object mapping и Active record

· 1 мин. чтения

ORM (практически в коде известный как Active record ) - достаточно простой, но очень эффективный метод соединения принципов объектно-ориентированного программирования с базой данных.

XML import через PHP

· 1 мин. чтения

XML создан для многих целей, одна из которых - удобство в переносимости данных из одной программы в другую. Особенно удобно создавать parser на этой основе. После простейшего парсинга, структура xml становится некоторым множеством переменных (массивом или объектом), а данные xml - значением этих переменных.

Увы для полноценного универсального xml парсера нужен большой и сложный объект, где обязательна присутсвовать рекурсия что-бы стало доступно всё богатсво этого стандарта.

Но для простейших файлов можно воспользоваться такой функцией.. 

/**  
 * Simple xml parsing function
 * doesnt understand selfending tags like
 *
 * @param string $text
 * @return array
 */
function xml2array($text) {
$reg_exp = '/<(.*?)>(.*?)/';
preg_match_all($reg_exp, $text, $match);

foreach ($match[1] as $key=>$val) {
if ( preg_match($reg_exp, $match[2][$key]) ) {
$array[$val][] = $this->xml2array($match[2][$key]);
} else {
$array[$val] = $match[2][$key];
}
}
return $array;
}

Не забывайте правда и о том, что рекурсия вызывает нехилую нагрузку на память и xml-файл в 400 кб может спокойно разрастись и перейти лимит в 10 мб, отведённый по умолчанию под php-процесс.

ini_set('memory_limit','30M');

Mysql import - export

· 1 мин. чтения

Экспорт БД через shell

mysqldump -uroot -ppass base > dump.sql

Импортировать данные из sql файла в mysql как известно можно несколькими путями.

Первый вариант - закачать файл и через консоль обратится напрямую к демону для импортаmysql -uroot -ppass base < dump.sql

Второй вариант естественно phpmyadmin, но он подходит лишь для небольших данных. Если база более 10 мб, то возникает проблема с загрузкой таких больших данных через браузер.

Третий вариант иногда реализовался в phpmyadmin - чтение sql файла по частям. Очень советую испробовать BigDump.

При переносе данных учитывайте что переносимые данные будут в местном часовом поясе и вам может понадобится либо конвертирование данных, либо ручная установка временной зоны

select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));

Эффект высокой контрастности (HDR)

· 1 мин. чтения

HDRi (High Dynamic Range Image) - это методика нацеленная на исправление диапазона яркости для цифровых фотографий и изображений.

Предпосылки

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

Решение

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

Nintendo Wii

· 1 мин. чтения

Мало кто помнит о старинных 8 и 16ти битных приставках Dendy и Sega, но Nintendo была среди них и вдруг вспомнила об интерфесах которые были сделаны и в прошлом. Я конечно говорю о ИК-пистолете, но идея об использовании не только тактильного ввода, но и пространственного не столь нова.. Однако маркетинг и новые игры возможно принесут значительный успех компании - первая партия приставок разошлась за несколько часов.
Представьте в будующем - мобильник, наигрывающий любимую вам мелодию при определённом ритме раскачивания..Интерфес windows реагирующий на датчики укреплённые на перчатке-массиве датчиков а-ля Minority Report

Toshiba Satellite L20-181

· 2 мин. чтения

Лет пять назад, когда я ещё в армии был, купил я себе дешёвенький лаптоп Toshiba satellite. По уровню развития можно сказать что 128 мб оперативки позволяли запускать максимум Windows XP. Время шло, он хорошо отслужил мне в университете в качестве доступа в интернет и записной книжки.

Продавать лаптоп смысла нет - за два года он теряет в цене чуть ли не в десять раз. Поэтому я его решил поставить в качестве домашнего сервера на кухне, что-бы не шуметь. Подключил к нему такой же старенький внешний диск на 300 гб, поставил utorrent, открыл web-доступ, настроил пересылку портов на рутере, поставил dyndns и лёгенький фтп-сервер и вуаля - можно с любого места добавить что-то на загрузку.

Единственная проблема - слишком шумный уж оказался лаптоп.. я его уже и переворачивал и что только не делал. Пришлось разобрать и почистить кулер - собственно отсюда и статья. Но сравнивая в дальнейшем внутреннюю структуру с такими эталонами технического искуссва  как Apple Mac Book и Dell Latitude, нельзя не смотреть на эту конструкцию осуждающе..

Прежде всего сзади снимаются основные панельки для доступа к памяти. Я наверно минут десять пытался силой разорвать этот кирпич, потому что он нивкакую не хотел открываться, даже клавиатуру погнул.. потому что не заметил одного винтика. После этого клавиатура легко достаётся, снимаются хрупкие соединения

И находим видеокарту. Раскручиваем кулер и чистим эту многолетнюю прослойку пыли, мешающей охлаждению.

Теперь остаётся всего-лишь собрать всё в обратном порядке так, что-бы всё заново заработало. Если у вас вдруг чёрный экран, проверьте на месте ли оперативка. У меня правда после сборки осталось с десяток винтиков...

Мораль разработчикам - делайте важную область продукта удобной для поддержки, даже если это происходит редко. Внутрь Dell можно попасть отвинтив один винт (!).

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

RSS2.0

· 1 мин. чтения

RSS это чистое содержание сайта, завёрнутое в стандартном XML формате

RSS позволяет

  1. облегчить чтение сайта благодаря тому что дизайн сайта никоим образом не мешает и не запутывает
  2. читать несколько сайтов одновременно, благодаря тому что данные можно собирать и смешивать как угодно в rss-читалке типа Sage , которая в последнее время интегрирована в браузер

Структуру RSS можно найти на любом продвинутом сайте. Соединить вывод новостей со структурой - простое дело для программиста. Проверить корректность структуры можно feedvalidator -ом

Кроме того в стандартных блогах возможно использовать уже существующие плагины и вести статистику ко всему прочему.. Например от feedburner .

Хотя rss и отличная web 2 технология, не стоит ставить сотню иконок, символизирующих продвинутость и возможности чтения в rss всей ленты или тематической ленты новостей.
Достаточно добавить в head вашего сайта  тэгlink rel="alternate" type="application/rdf+xml" title="RSS feed" href="/pathto/rss" /

и Firefox укажет в адрессной строке rss иконку.

QR код

· 1 мин. чтения

QR-код это один из видов двумерных видов кодирования информации. Схожий со штрих-кодами, QR-код поддерживается некоторыми мобильными телефонами и предназначен для облегчённой передачи рутинных данных. Система поддерживает восстановление до 30% данных и в теории до 4000 символов.
Отлично использовать в качестве визитной карточки, сгенерировать можно на kaywa.

QR-код взялся на себя популяризировать сайт semapedia , где предлагается вместо URL использовать коды в реальном мире. Благодаря встроенным в мобильные телефоны фотоаппараты, код легко фотографируется и распознаётся. iMatrix - одна из таких программ для iPhone.

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

Аутентификация с ID-card

· 1 мин. чтения

ID-карта это обычная пластиковая карточка с чипом, где хранятся личные сертификаты гражданина или постоянного жителя Эстонии.

Оффициальный сайт — id.ee. Есть два разработчика приложения - SK + ideelabor и RIA + Smartlink.

Установка

  1. Устройство для чтение карточки можно купить в SEB-банке за 95 EEK
  2. Устанавливаем утилиту
  3. Устанавливаем драйверы из IE, а для Firefox скачиваем и запускаем idCardmozutilsmozilla-util.exe для установки в Firefox
  4. Если в Firefox по прежнему не получается работать, то надо
    • экспортировать из ID-card tool (Certificates / Save to file / Autentication certificate) сертификат авторизации в файл
    • импортировать его в Firefox (Tools / Options / Advanced / View certificates / Import)

ID-card login

Создать аутентификацию и авторизацию на своём сайте достаточно просто, но надо иметь https-поддержку, а это значит выделенный IP.

  1. Создаём .htaccess файл в папке для корня https, обычно это чтотот типа secure/htdocs/ со следующим содержимым:

    SSLVerifyClient Optional SSLVerifyDepth 3

  2. Ставим в эту же папку index.php.Теперь при переходе к этой папке в скрипте будет доступна переменная $GLOBALS["SSL_CLIENT_S_DN"].

  3. Проверяем кто выдал сертификат $GLOBALS["SSL_CLIENT_I_DN"] и ищем в БД соответсвующий личный код.

https://github.com/riho/Drupal-ID-Card 

http://code.google.com/p/esteid/source/browse/misc/configure-apache.sh

Blockquote

· 1 мин. чтения

Ибо кто имеет, тому дано будет и приумножится, а кто не имеет, у того отнимется и то, что имеет

В HTML стандарте имеется специальный тэг blockquote цель которого как раз таки - цитирование. Многие зачем-то начинают использовать отдельные структуры типа параграфов с особыми классами, или ещё ужасней - таблицы.

С моей точки зрения, редактору достаточно заключить цитату в данный тэг, что-бы всё форматирование автоматически установилось.

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

  • Big Curly Quotes надстраивает внутри цитаты - параграфы
  • Pullquotes использует картинки
  • DesignMeme вариант суперски использует дополнения before и after, которые увы IE не понимает

Для русских сайтов полезно также знать о знаках препинания .