пятница, 28 ноября 2008 г.

Классификацией веб-инструментов

Столкнулся с интересной классификацией веб-инструментов читая дипломную работу "Towards an Integrated Approach to Collaborative Web Usage". Изначально классификация описана в "Discovering User Access Patterns on the World-Wide Web". Привожу её ниже с незначительными модификациями.

Уровень 0
Система которая доставляет документы в соответствии с указанным адресом – пользователь обязан задать URI программе, чтобы она доставила документ с данного адреса. Общее название програм находящихся на данном уровне – веб браузеры ("Web browser"). В настоящее время большинство веб браузеров имеют дополнительные функции – например предоставляют механизмы закладок, возможность проследить историю посещений страниц по дням и так далее.

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

Уровень 2
Програмные системы которые сохраняют информацию о пользователе (user profile) и извещают его если новая информация найдена. Информация пользователя в системах данного уровня как правило статична: пользователь вводит информацию о своих интересах (как правило используя ключевые слова) и система ищет документы (информацию) основываясь на соответствии её данным параметрам (как правило аналогично инструментам первого уровня). Одним из примеров инструмента данного уровня является Google alerts.

Уровень 3
Более динамичный и дедуктивный подход перемещает инструмент на третий уровень. Если инструменты второго уровня требуют предварительного ввода параметров, то инструменты третьего уровня должны уметь определять их анализирую поведение пользователя. Прежде всего такая способность необходима для широкой аудитории, когда пользователи не способны сформулировать свои интересы в виде ключевых слов, потому, что их интересы меняются в зависимости от того чем они занимаются в данный момент или эволюционируют со временем. Одним из примеров инструмента данного уровня может являтся подсистемы существующие в Amazon или Google предлагающие пользователям новые ссылки / продукты базируясь на предыдущих поисках или покупках.

Уровень 4
Инструменты данной категории должны уметь обучаться на основании как поведения пользователя так и поведения/архитектуры источников информации.

пятница, 21 ноября 2008 г.

Почему клиенты иногда пропадают как будто их и небыло?

Безусловно я не являюсь специалистоом по маркетингу, но тем не менее думаю, что часто встречающееся высказывани - “клиенты дадут знать, что им не нравится” часто оказывается всего лишь мифом.

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

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

Я думая, что вы не настолько юны, чтобы это была ваша первая машина. НО, возможно в процессе выбора вы решили сменить марку машины, а не только модель. Опять же, вернётсь ли вы в салон проиводителю марки машину которую вы использовали до этого, чтобы объяснить, чем она вас больше не устраивает?
Нет

Если поставщик позвонит вам и всётаки спросит, какую машину вы выбрали и почему не его – дадите ли вы правдивый ответ на его вопросы? Скорее всего нет – вместо правдивого вы дадите самый короткий ответ и скорее всего они не совпадут.

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

Более того, потребители очень редко извещают производителя о том, что их не устраивает после покупки если они не ожидают, что производитель изменит эти свойства товара. Подумайте например о себе – вы когда нибудь посылали своё мнение о товарах таким например фирмам как SONY, HP, AEG, Microsoft итд после того как вы поняли, что в их продуктах нет вообще определённых, нужных вам, функций или если интерфейс неудобен (с вашей точки зрения)?

Суммируя выше сказанное, если вы разрабатываете продукт то не стоит всегда принимать решения исходя из надежды на обратную связь: «Давайте сделаем так-то и если пользователям это не понравутся они дадут нам об этом знать». Достаточно часто ожидание обратной связи практически безнадёжное занятие. Вы получите её только (!) если у вас хорошие и прочные отношение с клиентом или у них нет реального выбора (никто другой не делает того, что делаете вы и нужно ему) и поэтому единственным вариантом исправить проблему будет пожаловатся о ней вам.

пятница, 14 ноября 2008 г.

Оценка эффективности деятельности учёного

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

Как ранее упоминалось, одной из возможностей, является сравнение количества опубликованных статей.
Если мы говорим, не о докторантах, а о пост-док позициях, то здесь иногда, для увеличения вероятности включения в список только действительно научных статей, принято брать в расчёт только те статьи которые появились
1. В уважаемых издательствах (для computer science это Springer или IEEE Computer Society)
2. Попали в индекс баз данных используемых как стандард и имеющих определённый стандард для включения (для computer science это ISI Web of Science или совсем на худой конец открытая DBLP).

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

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

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


Postscriptum: редко делается, но теоретическо необходимо - как в количестве ссылок так и количестве статей учитывать количество соавторов. Т.е если в статье 3 автора, то каждому идёт в зачёт только 1/3 статьи. Кроме того правильно было бы при подсчёте ссылок исключить самоцитирование любым из соавторов.

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

Доплнительно к рассматрению эффективность за все годы (общее значение учёного) принято анализировать те же параметры за последние 5 лет (насколько человек активенный в данный момент)

четверг, 6 ноября 2008 г.

2008: Промежуточные результаты предмета "Сетевые приложения I".

Промежуточные результаты предмета "Сетевые приложения I".

Первая часть семестра традиционно посвящена как собственно обучению, так и выполнению первой части задания из которого складывается общая оценка - написанию обзорной работы по любой теме так или иначе связанной с предметом.
ПС: вторая часть, которая даёт 80% оценки, это собственно проект с использованием изученных технологий и языков программирования.

Как и всегда работу сдали не более 60% студентов. Учитывая, что мы имеем дело уже со вторым курсом, меня это поражает в очередной раз - зачем декларировать предмет и его игнорировать?

Основной задачей в написании работы является научить студентов самостоятельно мыслить и если не генерировать новые идеи, то хотя бы прорабатывать исходный материал (чужие статьи). Таким образом работа должна выполняться следуя следующим шагам:

1. Выбрать тему
2. Проанализировать несколько источников информации по данной теме
3. Написать отчёт о том, что вы поняли (персональное изложение изученного материала)

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

В результате проверки появилась таблица стандартных ответов. Один из них:

1. Не соответствует требованию по цитированию

Означает, что вы решили, что вы самый хитрый / хитрая и скопиравали текст из интернета, может быть заменив несколько слов в том или ином месте предложени, и теперь выдаёте работу за свою. Требования к работе однозначно говорят о том, что работа должна быть плодом вашего, а не чужого творчества. Объём цитирования не должен превышать 1% и разрешён только для цитирования фраз которые неизбежно должны быть приведены в оригинале.

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


Кроме того что надо написать работу, от студентов требовалось следовать определённому шаблону. Зачем это сделано? Во первых требовалось стандартизировать каким то образом работы, чтобы мовно было установить общий для всех критерий размера работы (минимальная и максимальная длина).

Во вторых, попытаться научить студентов следовать определённым правилам написания работ принятым в научной среде нашей области (информационные технологии).

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

Таким образом следование шаблону позволяет
1. Стандартизировать работы
2. Попытаться научить писать работы в формате акцептируемом на конференциях

Как и по первому пункту о самостоятельности работы, около 20% не осознали эту задачу, а потому дополнительным стандартным ответом был:


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


3. Не соответствует требованию по объёму:
Объём определятся текстом и картинки не идут в зачёт. Тем более когда картинки, переводы строк, начало новой страницы ставиться лишь для того, чтобы увеличить объём работы. Всё это настолько очевидно, что возникает ощущение, что кто-то кого-то держит за дурака.


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

Microsoft & gadgets

Для тех кто знает английский - мои рекомендации прочитать данный пост: Is Microsoft serious about gadgets? пытаюшийся показать стратегические решения MS о Vista Sidebar

среда, 5 ноября 2008 г.

Производительности JavaScript

Недавно в очереди моих задач появилась задача измерения производительности JavaScript. Реальная задача была сформулирована как «найти оптимальный путь разработки нового приложения, чтобы не сильно ограничить область применения и не иметь существенных проблем с производительностью (скоростью / объёмом данных, которые приложение сможет обработать)». Как правило разрабатывая определённые приложения у вас есть выбор – сделать программное обеспечение либо с «desktop» либо с web интерфейсом.


Оговоримся, что естественно, такой выбор присутствует не всегда. Если вам необходимо работать с широкой аудиторией, то единственным вариантом часто оказывается web интерфейс. Если мы имеем дело с локальным приложением или когда мы контролируем и можем хорошо предсказать среду применения нашего программного обеспечения (например имеем дело с конкретной фирмой) то часто разрабатывается desktop (или так называемое Windows) приложение - прежде всего из-за возможности сделать его быстрее, и больших возможностей для создания интерфейса с точки зрения набора элементов ввода и вывода данных (controls).

Поскольку наши знания и предыдущий опыт в основном связан с разаработкой приложений на базе Microsoft технологий и имея задачу написать приложение с объёмным интерфейсом ввода данных (как например MS Excel или Google spreadsheets), мы решили сравнить следующие технологии: JavaScript (Web), Visual Studio 2005 C# / .Net 2.0 и Visual Basic 6.0 (разработка «desktop» приложений).


Первым шагом был поиск в Интернете того, что было уже проделано, чтобы не изобретать велосипед. В течении этого шага я наткнулся на эту станицу позволяющую измерить производительность JavaScript-а на своём компьютере, которая достаточно просто сделано – в принципе для каждого из нас не составит огромного труда создать тоже самое.

Сделав нечто подобное в VB6 и VS2005/C# я получил следующие результаты сравнивая деление цифр integer типа:


- JavaScript в 5 раз медленее чем VB6

- JavaScript в 100 times раз медленее чем VS2005/C#


Результаты выглядят достаточно логично так как JavaScript является интерпретируемым языком (не компилируется в executable) и поэтому существенно медленее.

воскресенье, 2 ноября 2008 г.

Как закрыть под-окно (popup window) открытое createPopup

Предположим у нас имеется задача создать выпадающее меню и для этого мы испульзуем javascript функцию createPopup. Далее, мы хотели бы построить меню наподобии MS Excel 2007, где у нас имеется возможность выбрать несколько (!) вариантов прежде чем применить данный выбор - как правило это означает, что имеется кнопка внутри меню, при нажатии на которую выбор (например фильтрация по выбранным элементам) запускается.

Традиционный метод скрыть под-окно соданное createPopup это кликнуть на пространство основного документа в любом месте вне под-окна. Примерно тоже самое получится если из под-окна вы запустите переход на новый документ (адрес) в основном окне. К сожалению ни один из перечисленных вариантов, не соответствует поставленной в начале задаче. Другой вариант - close() метод вызванный из под-окна, но он сгенерирует диалог с вопросом "Действительно ли вы хотите закрыть данный документ". Тоже не совсем подходющий метод для закрытия меню.

Комментарий: тривиальный поиск через поисковые машины к сожалению не даёт ответа на поставленный вопрос - 95% сайтов выданных как результат поиска описывают методы работы с под окнами открытыми используя window.open

В принципе, ниже приведённый код должен позволить выполнить поставленную задачу.

В данном примере меню появляется при нажатии мышкой (клик) на ячейку таблицы в первом ряды/первый столбец (адресс 0 / 0 ). Меню содержит список и кнопку. Меню создаётся вызовом функции test: которая вызывается в следующем коде: onclick="test(closeAction)". При вызове в функцию передаётся параметром имя функции которая будет закрывать под-окно.

Функция test делает следующее:
1. Генерирует под-окно используя createPopup
2. Устанавливает функцию закрытия под-окна как метод вызываемый при нажатии кнопки в под-окне.
3. Сохраняет ссылку на под-окно в глобальной переменной.

Функция закрытия под-окна использует данную глобальную переменную и вызывает hide().


<html>
<script language="javascript">
var mpopup

function test(clickEv)
{
var wnd= window.createPopup();
wnd.document.body.style.border="solid black 1px";
wnd.document.body.innerHTML="<select><option>a<option>b</select>
<br/><input id="'a1'" type="\">";
wnd.document.getElementById("a1").attachEvent("onclick",clickEv);

wnd.show(150,150,200,50,document.body);
mpopup=wnd;
}

function closeAction()
{
mpopup.hide()
}
</script>

<body>
<table>
<tr><th onclick="test(closeAction)">1kasdkjshd</th>
<th>1kasdkjshd</th><th>1kasdkjshd</th><th>1kasdkjshd</th>
<th>1kasdkjshd</th><th>1kasdkjshd</th><th>1kasdkjshd</th>
</tr><tr>
<td>1kasdkjshd</td><td>1kasdkjshd</td><td>1kasdkjshd</td>
<td>1kasdkjshd</td><td>1kasdkjshd</td><td>1kasdkjshd</td>
</tr><tr>
<td>1kasdkjshd</td><td>1kasdkjshd</td><td>1kasdkjshd</td>
<td>1kasdkjshd</td><td>1kasdkjshd</td><td>1kasdkjshd</td>
</tr></table>
</body> </html>


PS: Следующая конструкция позволит вам получить доступ к объектам внутри основного документа (окна) из под-окна: parent.document.
getElementById('xxx')
,
где xxx - id объекта к которому вы хотите получить доступ.