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

Управление IT-проектом

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

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

Попробую изложить, как на моём опыте обычно ведётся IT-проект (CMS, CRM, intranet, custom-инфосистема) или как бы этого хотелось в идеале.

Мотивация

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

Мотив - побуждение к действию, т.е. фактор, выводящий систему в состояние нестабильности.

Психология разбивает мотивацию человека по пунктам

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

Теологический дуализм. Катары и альбигойцы

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

Я долго непонимал, как и Лев Толстой , зачем придумывать видение троицы в божественной ипостаси, зачем разделять Бога как любовь на "источник-объект-любовь" в виде "отец-сын-дух".

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

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

Плагины браузеров

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

Поскольку браузер сейчас практически самая важная программа в операционной системе я привожу тут наиболее востребованные (мной) расширения и улучшения.

Первым делом - увеличьте число одновременных соединений с сервером, поскольку у вас соединение уже не dial-up. В firefox это доступно в about:config / network.http.pipelinining=true и network.http.pipelining.maxrequests=10.

Firefox

  • Sync синхронизирует закладки, историю и пароли между платформами и компами

  • FastDial показывает наиболее используемые страницы, настраивается вручную

  • Chromifox theme очень простой и красивый внешний вид на подобие браузера Google Chrome

  • Mouse gestures так же пришли из Opera и позволяют более удобную навигацию

  • All-in-One sidebar очень схож с левой панелью в Opera, где значительно удобней оперировать данными чем из меню

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

  • Web developer очень помогает показывая все используемые css и js на странице


Вторичные, не столь важные плагины:

  • NoScript - защита от XSS атак

  • ietab даёт два браузера в одном

  • GridFox - показывает параллельные линии фиксированной ширины на странице для сеточной визуальной разметки

  • Memori.ru - аналог bobrdobr.ru, del.icio.us.. онлайн закладки

  • pagerank от Google для веб-мастеров (+ для 3.5)

  • PicLens предоставляет трёхмерныйинтерфейс и подгрузку на лету при поиске картинок в гугле

  • aging tabs визуально подчёркивают давно не используемые табы

  • WindowResizer - изменение размера экрана под определённое расширение экрана

  • Mini Map sidebar показывает карты

  • Table2Clipboard позволяет копировтаь таблички сохраняя форматирование

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

  • Hide MenuBar - прячет меню, подобно IE7 + HideCaption подобно Chrome

  • Feedburner - показывает число RSS подписчиков в строке состояния

  • MeasureIt позволяет измерить в пикселях,что сколько занимает места на экране

  • ColorZilla позволяет пипеткой выбрать нужный цвет со страницы - часто экономит время

  • locationbar2 улучшает читаемость URL в адрессной строке

  • XHTML validator

  • Selenium IDE - для тестеров

  • Ad block plus

IE плагины

Chrome

Остальные:

  • Dragonfly - аналог firebug для Opera, в Safari он встроенных

Авторизация

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

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

Зачем это надо? Система как цивилизация - чем дальше она развивается, тем сложнее становятся отношения между пользователями и настаёт момент, когда необходимо

  • Разделение труда. Типичный пример - системы типа intranet, куда имеют доступ только работники компании, соответсвенно никто ничего там испортить не может, однако ввод данных осуществляется разными людьми и им просто нет нужды видеть чужие интерфейсы работы с системой.
  • Разделение аудитории. Пример - финансовые системы, сайты с разделением на admin-public, т.е. системы где большая вероятность вандализма простыми пользователями

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

Введение в инфосистемы и 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