IBM Lotus Connections представляет собой продукт для построения социальных сетей, предназначенный для современных организаций. Profiles, являющийся одним из компонентов продукта, предоставляет настраиваемый интерактивный каталог пользователей.
В статье описывается реализация расширения Lotus Connections Profiles, которое позволяет владельцам профилей дополнять страницу собственного профиля информацией о направлениях своих исследований и полученных грантах. Другие пользователи (наблюдатели страницы профиля), посетив страницу, увидят список названий грантов, полученных владельцем профиля, и облако тегов ключевых слов, основанное на направлениях исследований владельца профиля.
В приведенном в статье примере приложения в качестве источника данных для исследовательских грантов, предоставленных пользователю Profiles Национальным институтом здравоохранения США (NIH), используется Web-сайт Tracking Accountability in U.S. Government Grants System (TAGGS). Информация о грантах дает лишь частичное представление о направлениях исследований получателя. Приложение также можно настроить на сбор текстов публикаций владельца профиля в Интернете (например, статьи в журнале Diabetes). Все текстовые данные пользователя, полученные из TAGGS и интернет-публикаций, хранятся в базе данных неструктурированного (текстового) контента IBM Content Analytics, называемой коллекцией анализа текста.
С помощью Content Analytics наше приложение извлекает из коллекции анализа текстов сведения о направлениях исследований пользователя. Хотя Content Analytics предоставляет ряд возможностей для сложного анализа текста, в статье основное внимание уделяется простому анализу частоты встречаемости терминов. Выходные данные анализа представляют собой упорядоченный список наиболее часто встречающихся слов в названиях полученных грантов и резюме публикаций пользователя Profile. Список отображается на странице профиля в виде облака тегов направлений исследований.
В разделе Ресурсы приведены ссылки на информацию о продукте Lotus Connections Profiles, виджете Tag Cloud, Web-сайте TAGGS, Content Analytics и других вопросах.
Архитектура примера приложения показана на рисунке 1. Обычно у Web-приложений серверная сторона состоит из нескольких концептуальных уровней.
Рисунок 1. Архитектура приложения
- Уровень представления (Web-уровень)
- Отвечает за обработку запросов клиента Web-браузера и за отображение в браузере пользовательского интерфейса Profiles в режиме HTML. Web-уровень базируется на сервере Connections, расширенном специфичными для приложения виджетами My Grant Awards и My Keywords. Являясь расширениями Profiles, виджеты соответствуют спецификациям IBM iWidget. В обоих виджетах содержатся оформленные в виде iWidget-совместимых компонентов специальные функции, реализованые при помощи Dojo и JavaScript. Оба виджета состоят из XML- и JavaScript-файлов.
XML-файл объявляет экземпляр iWidget согласно синтаксису определений iWidget (раздел 9.1 Спецификации iWidget 1.0). В соответствии с этим синтаксисом XML-файл содержит описание JavaScript (Dojo) объекта, который визуализирует содержимое виджета. Этот XML-файл содержит также раздел с исходной HTML-разметкой и исходным JavaScript-кодом для передачи управления визуализацией пользовательского интерфейса в Dojo-объект.
JavaScript-файл содержит реализацию Dojo-объекта, отвечающего за визуализацию пользовательского интерфейса. Для извлечения данных из бизнес-уровня при помощи технологии Java Servlet объект использует асинхронные HTTP-вызовы GET и POST (
dojo.xhrGetиdojo.xhrPost). Данные возвращаются в объект в виде ответа сервлета в HTTP-формате, а затем используются для перезаписи DOM Web-страницы на стороне клиента. - Бизнес-уровень
- Содержит Profiles и JEE-приложения расширения. Последние содержат Java-сервлеты для поддержки виджетов My Grant Awards и My Keywords. Логика сервлетов опирается на специальные методы извлечения (в нашем случае с сайтов TAGGS или Diabetes Journal) и анализа данных (для вычисления частоты встречаемости ключевых слов, используемых в публикациях журнала Diabetes Journal).
Сервлеты возвращают сообщения HTTP-ответов в XML- или JSON-формате. Profiles и JEE-приложения расширения развертываются на WebSphere Application Server как EAR-файлы.
- Уровень интеграции
- Отвечает за представление механизма Web-сканирования Content Analytics и возможностей анализа текста в виде сервисов для бизнес-уровня. JEE-приложение расширения взаимодействует с Content Analytics посредством Java API. Поскольку Content Analytics не позволяет сканировать динамически сгенерированные Web-страницы, приложение имеет собственную реализацию поискового робота.
В оставшейся части статьи описываются подробности реализации функций на стороне клиента и пользовательского интерфейса для упоминавшихся выше виджетов My Grant Awards и My Keywords. Приводятся фрагменты исходного XML- и JavaScript-кода.
Виджет My Grant Awards отображает список предоставленных владельцу профиля грантов на исследования, как показано на рисунке 2.
Рисунок 2. Внешний вид виджета My Grant Awards
Содержимое виджета представлено единственным элементом - HTML-таблицей с информацией о предоставленных грантах на исследования. В части 4 данной серии будет описано получение данных для заполнения таблицы.
Приведенный в листинге 13 XML-файл, на который ссылается файл widgets-config.xml, используется для объявления дополнительного виджета в настройках пользовательского интерфейса Profiles. Развертывание дополнительных виджетов для использования в Profiles описано в Приложении к данной статье.
В листинге 1 приводится содержимое XML-файла виджета My Grants Awards.
Листинг 1. XML-файл iWidget для виджета My Grant Awards
1 <iw:iwidget id="grants" xmlns:iw=http://www.ibm.com/xmlns/prod/iWidget 2 iScope="GrantsWidgetClass" 3 supportedModes="view" 4 title="My Grant Awards"> 5 <iw:resource uri="grants.js" /> 6 <iw:content mode="view"> 7 <![CDATA[ 8 <div id="grantsWidget"> 9 <script type="text/javascript"> 10 iContext.iScope().getGrantAwards(); 11 </script> 12 </div> 13 ]]> 14 </iw:content> 15 </iw:iwidget> |
Содержание листинга 1:
- Строка 1: объявление, в котором определяется экземпляр iWidget с идентификатором
grants. - Строка 2: продолжение объявления:
GrantsWidgetClass- имя JavaScript-объекта. - Строка 3: указывает, что виджет поддерживает только режим просмотра; это означает, что пользователь Profiles не может изменить содержимое отображаемого виджета.
- Строка 4: название виджета -
My Grant Awards. - Строка 5: определяет раздел resource iWidget.
- Строки 6-14: раздел content iWidget.
Раздел resource связывает объявление iWidget с файлом исходного кода, реализующего JavaScript-объект. Имя класса для этого объекта указывается в строке 2 листинга 1. Экземпляр объекта GrantsWidgetClass отвечает за визуализацию DOM виджета. Подробности реализации объекта приведены в разделе Dojo/JavaScript-код.
Раздел content содержит исходный код, который служит точкой входа для визуализации DOM виджета My Grant Awards. В строках 8 - 12 листинга 1 статический HTML-код для виджета My Grant Awards состоит из единственного элемента DIV с именем grantsWidget. В строке 10 содержимое элемента получает динамически генерируемый посредством getGrantAwards() вызов метода. Это компонентный метод JavaScript-объекта GrantsWidgetClass.
К iWidget-компонентам, которые обеспечивают общее управление для Web-страницы (например, макет), можно обращаться посредством высокоуровневого спецификатора объектов iContext. Вызов iScope() возвращает экземпляр объекта GrantsWidgetClass (строка 2), который инициализируется до загрузки iWidget.
Реализация JavaScript-объекта GrantsWidgetClass отвечает за визуализацию DOM виджета My Grant Awards. В листинге 2 показаны Dojo-объявления в файле grants.js.
Листинг 2. Dojo-объявления в файле grants.js
1 dojo.require("dojox.xml.DomParser");
2 dojo.provide("GrantsWidgetClass");
3 dojo.declare("GrantsWidgetClass",
4 null,
5 {
6 getGrantAwards: function() {
7 var userName = profilesData.displayedUser.displayName;
8 retrieveGrantsXML(userName);
9 }
10 }
11 );
|
В строке 1 листинга 2 определяются имена Dojox-процедур, которые будут использоваться для анализа DOM и извлечения информации. В оставшейся части кода листинга 2 объявляется Dojo-класс GrantsWidgetClass, в том числе его методы и переменные. Метод getGrantAwards класса GrantWidgetClass вызывается для заполнения HTML-тега DIV значением идентификатора grantsWidget, как показано в листинге 1. Метод GetGrantAwards() вызывает JavaScript-функцию retrieveGrantsXML с параметром, представляющим имя владельца профиля, отображаемого приложением Profiles.
Высокоуровневое описание функции retrieveGrantsXML приведено в листинге 3.
Листинг 3. Описание функции retrieveGrantsXML
1 var retrieveGrantsXML = function(authorName) {
2 /* ... */
3 var xhrArgs = {
4 url: "/pubApi/grants",
5 handleAs: "text",
6 preventCache: true,
7 content: {
8 investigator: authorName
9 },
10 load: function(data) {
11 /* ... */
12 var doc = dojox.xml.DomParser.parse(data,"text/xml");
13 var results = doc.getElementsByTagName("award");
14 /* ... */
15 },
16 error: function(error) { /* ...код обработки ошибок... */ }
17 };
18 var deferred = dojo.xhrGet(xhrArgs);
19 };
|
В листинге 3:
- Строка 18: JavaScript-функция
retrieveGrantsXMLреализует асинхронный HTTP-запрос GET посредством вызова процедурыdojo.xhrGet. - Строки 3-17: инициализация аргументов для этого вызова.
- Строка 4: при активизации GET-запроса управление передается на сторону сервера - сервлету по указанному URL.
- Строки 7-9: передаваемые в сервлет параметры перечислены в разделе
content. - Строки 10-15: код, отвечающий за обновления содержимого виджета, находится в функции
load.Эта функция вызывается сразу после получения браузером ответа от сервлета. Содержимое ответа передается в переменной
data, являющейся параметром функцииload.
Типичный ответ генерируется сервлетом My Grant Awards в XML-формате. В листинге 4 показан пример.
Листинг 4. Типичный ответ сервлета My Grant Awards
1 <grants-list faculty="Joel Francis Habener" GAManagerVersion="1.0"> 2 <award> 3 <fiscal_year>2008</fiscal_year> 4 <opdiv>NIH</opdiv> 5 <award_number>R01DK030834</award_number> 6 <award_title>GLUCAGON BIOSYNTHESIS AND METABOLISM</award_title> 7 <principal_investigator>JOEL F HABENER</principal_investigator> 8 </award> 9 </grants-list> |
Результаты анализа ответа сервлета, выполненного с помощью анализатора Dojo XML DOM (строки 12-13 в листинге 3), выводятся в виде HTML-таблицы, аналогичной таблице на рисунке 2.
Виджет My Keywords позволяет пользователям быстро узнавать об основных направлениях исследований владельца профиля. Он отображает ключевые слова, которые чаще всего встречаются в публикациях владельца профиля, описаниях грантов и других Web-ресурсах, таких как PubMed. В отличие от виджета My Grant Awards виджет My Keywords имеет элементы управления, которые позволяют владельцу профиля настраивать внешний вид виджета и отображаемое содержимое.
Каждый пользователь профиля может переключаться между представлением в виде списка и представлением в виде облака. На рисунке 3 показано представление в виде списка.
Рисунок 3. Виджет My Keywords, представление в виде списка
На рисунке 4 показано представление в виде облака.
Рисунок 4. Виджет My Keywords, представление в виде облака
Используя дополнительные элементы управления, владелец профиля может настраивать отображаемое виджетом содержимое, как показано на рисунке 5. Например, он может выбрать несколько источников для извлечения ключевых слов или исключить некоторые ключевые слова (на рисунке 5 они называются stop words) из показа.
Рисунок 5. Виджет My Keywords, дополнительные элементы управления
В представлении виджета в виде облака, изображенном на рисунке 4, выводятся ключевые слова для пользователя Profiles по имени Alice, просматривающей свой собственный профиль. Когда другой Profiles-пользователь Bob будет просматривать профиль Alice, виджет My Keywords выделит ключевые слова пользователя Alice, соответствующие ключевым словам в профиле пользователя Bob. На рисунке 6 показано просматриваемое пользователем Bob представление профиля пользователя Alice, в котором выделены общие ключевые слова.
Рисунок 6. Виджет My Keywords, представление в виде облака с выделением общих ключевых слов
Общая структура исходного XML-кода виджета My Keywords идентична исходному коду виджета My Grant Awards, но детали реализации существенно разнятся. В примере кода в листинге 5 создается строка со списком имен источников, используемых для извлечения ключевых слов. Названия источников можно увидеть на рисунке 5 под заголовком Extract keywords from.
Листинг 5. Построение списка источников ключевых слов
1 kwGetExtractableSources = function() {
2 str_extract_from = ";
3 if (dojo.byId("chkbox_1").checked) {
4 str_extract_from += ",source_1";
5 }
6 if (dojo.byId("chkbox_2").checked) {
7 str_extract_from += ",source_2";
8 }
9 str_extract_from = str_extract_from.substring(1,str_extract_from.length);
10 if(str_extract_from==") {
11 str_extract_from = "default_source";
12 }
13 return str_extract_from;
14 }
|
Строка вместе с другими параметрами передается в сервлет My Keywords.
Подобно виджету My Grant Awards, виджет My Keywords имеет свой собственный JavaScript-объект, отвечающий за визуализацию графического интерфейса. Один из методов объекта получает вызываемый из виджета My Keywords XML-файл iWidget, как показано в листинге 6. Этот метод принимает строку, представляющую собой список источников. Строка извлекается путем вызова функции, показанной в листинге 5.
Листинг 6. Первоначальное обновление содержимого виджета My Keywords
1 document.getElementById("kw_status").innerHTML += "Loading keywords...";
2 iContext.iScope().kwInitialUpdate (kwGetExtractableSources());
|
В листинге 7 показан код, который обрабатывает нажатия на кнопку Update current view в нижней части рисунка 5.
Листинг 7. Обработка нажатия на кнопку Update current view
1 <script type="text/javascript">
2 kwProcessUpdateCall = function() {
3 str_extract_from = kwGetExtractableSources();
4 iContext.iScope().kwInterimUpdate(kwGetExtractableSources(),
5 kwCurrPage, kwCurrView);
6 }
7 </script>
8 <form name=stopWordsForm>
9 <textarea name=stopWordsText id=kw_stopwords_editable cols=25 rows=5>
10 </textarea>
12 </form>
13 <input type="button" class="lotusBtn lotusBtnSpecial" name="submit_all"
14 value="Update current view" onClick=kwProcessUpdateCall();/>
|
Обратите внимание на два вызываемых метода:
kwInitialUpdateв строке 2 листинга 6;kwInterimUpdateв строке 4 листинга 7.
Эти методы являются точками входа для визуализации графического пользовательского интерфейса виджета. Более подробная информация приведена в разделе Визуализация графического пользовательского интерфейса виджета.
Основанная на ролях авторизация для элементов управления виджета
Пользователи, работающие с Lotus Connections Profile, выступают в одной из двух ролей: владельца профиля или наблюдателя профиля. Владелец профиля создает профиль и может изменять его. Наблюдатели могут просматривать профиль, но не могут его изменить.
Виджет My Grant Awards выглядит одинаково как для владельца профиля, так и для наблюдателя. Однако виджет My Keywords отображается владельцу профиля иначе, чем наблюдателю. У наблюдателей отсутствует разрешение на изменение содержимого, отображаемого виджетом My Keywords. Элементы управления, доступные для владельца профиля, показаны на рисунке 5.
Основанная на ролях авторизация виджета реализована в Dojo-функции onLoad, которую вызывает Dojo после завершения процесса загрузки виджета. Функция onLoad, показанная в листинге 8, использует две переменные:
pObserved- представляет пользователя, чей профиль просматривается в данный момент.pLoggedIn- представляет пользователя, вошедшего в данный момент в приложение Profiles.
Листинг 8. Основанная на ролях простая авторизация при помощи Dojo-функции onLoad()
1 onLoad: function () {
2 var pObserved = this.personObserved;
3 var pLoggedIn = this.personLoggedIn;
4 if(pObserved != null & pLoggedIn != null & pObserved == pLoggedIn) {
5 dojo.byId('kw_cust_expand').style.display = ";
6 }
7 }
|
В зависимости от результата посимвольного сравнения этих двух переменных HTML-элемент с идентификатором kw_cust_expand либо отображается, либо нет. Этот HTML-элемент представляет ссылку Customize this view, как показано на рисунках 3 и 4. Так как виджет загружается только один раз (когда браузер загружает страницу Profiles), нет необходимости постоянно поддерживать авторизацию роли.
Важно отметить, что метод kwInitialUpdate вызывается кодом инициализации виджета My Keywords (см. листинг 6) до загрузки виджета. Dojo-функция onLoad вызывается после вызова метода kwInitialUpdate, поэтому kwInitialUpdate инициализирует объектные переменные personObserved и personLoggedIn, используемые Dojo-функцией onLoad.
Визуализация графического пользовательского интерфейса виджета
Две точки входа (два метода) для визуализации графического пользовательского интерфейса виджета обсуждались ранее (см. листинги 6 и 7):
kwInitialUpdateдля обновления содержимого виджета при первоначальной загрузке;kwInterimUpdateдля обновления содержимого виджета после нажатия пользователем кнопки Update current view (см. рисунок 5).
Первоначальное обновление содержимого виджета осуществляется с помощью вызова функции kwUpdateContents, как показано в строке 4 листинга 9.
Листинг 9. Реализации методов первоначального и промежуточного обновления виджета My Keywords
1 kwInitialUpdate: function(extractableSources) {
2 /* initialization of personObserved and personLoggedIn */
3 /* ... */
4 kwUpdateContents(this,personObserved,0);
5 }
6 kwInterimUpdate: function(extractableSources, currPageId, currView) {
7 /* ... */
8 kwUpdateStopWords(this, personLoggedIn,extractableSources,currPageId);
9 }
|
В листинге 10 показана реализация функции, рассмотренной выше.
Листинг 10. Реализация асинхронного HTTP-вызова GET для виджета My Keywords
1 var kwUpdateContents = function(kwClassInstance,investigatorName,currPage) {
2 var xhrArgs = {
3 url: "/termsfrequency_proxy/termsfrequency",
4 handleAs: "text",
5 preventCache: true,
6 content: {
7 investigator: investigatorName,
8 compare_with: kwClassInstance.personLoggedIn,
9 extract_from: termsSources,
10 threshold: 2
11 },
12 load: function(data) {
13 /* ... */
14 kwClassInstance.xmlParsed = dojox.xml.DomParser.parse(data);
15 kwUpdateWidgetInternals(kwClassInstance,currPage);
16 /* ... */
17 },
18 error: function(error) {
19 /* обработка ошибок ... */
20 }
21 };
22 var deferred = dojo.xhrGet(xhrArgs);
23 };
|
В листинге 10 HTTP-запрос GET вызывается асинхронно с использованием URL /termsfrequency_proxy/termsfrequency и параметров запроса из раздела content (строки 6-11). Когда HTTP-запрос GET возвращает данные, функция load выполняет визуализацию графического пользовательского интерфейса, вызывая инкапсулированную в функции kwUpdateWidgetInternals реализацию.
Метод kwInterimUpdate вызывает функцию kwUpdateStopWords, которая (в отличие от kwUpdateContents) вызывает асинхронный HTTP-запрос POST. После обработки HTTP-запроса POST на стороне сервера управление возвращается функции kwUpdateStopWords, которая вызывает kwUpdateContents (см. строки 14 и 15 в листинге 11).
Листинг 11. Реализация асинхронного HTTP-вызова POST для виджета My Keywords
1 var kwUpdateStopWords =
2 function(kwClassInstance,userName,termsSources,currPage) {
3 var stopWordsEditable = dojo.byId("kw_stopwords_editable");
4 var stopWordsGiven = ";
5 if(stopWordsEditable.value != "Add your own stop words to here...") {
6 stopWordsGiven = stopWordsEditable.value;
7 }
8 var xhrArgs = {
9 url: "/termsfrequency_proxy/termsfrequency",
10 postData: "updated_stopwords_list="+stopWordsGiven+"+
11 "&investigator="+username+"&terms_sources="+termsSources,
12 error: function(error) {/* ... обработка ошибок ... */}
13 };
14 var handler = dojo.xhrPost(xhrArgs);
15 handler.addCallback(kwUpdateContents(kwClassInstance,userName,currPage));
16 };
|
Использование виджета Dojo Tag Cloud
Для отображения пользователю ключевых слов в виде облака (см. рисунки 4 и 6) используется метод kwDisplayCloudView. Облако реализовано с помощью объекта Dojo Tag Cloud, который создается с нуля каждый раз, когда обновляется виджет My Keywords.
Виджет Dojo Tag Cloud работает с предназначенным только для чтения хранилищем данных dojo.data.ItemFileReadStore. Во время инициализации виджета в хранилище данных помещаются следующие метаданные: список ключевых слов и частота их встречаемости, а также дополнительная разметка, которая будет использоваться для визуализации соответствующего облака тегов. Ответ сервлета My Keywords заполняет хранилище данных XML- и JSON-представлениями ключевых слов и частоты их встречаемости. Виджет My Keywords использует XML в режиме списка и JSON в режиме облака.
В листинге 12 показана реализация логики визуализации виджета Dojo Tag Cloud.
Листинг 12. Реализация виджета dojo.TagCloud
1 kwDisplayCloudView: function() {
2 var kwCloudDivName = "kw_cloud_placeholder";
3 var kwCloudRootName = "kw_cloud_root";
4 if(this.oCloud == null) {
5 this.jsonStore =
6 new dojo.data.ItemFileReadStore({data:this.termsJson,clearOnClose:true});
7 var kwCloudDiv = dojo.byId(kwCloudDivName);
8 this.oCloud = new myDojo.TagCloud({store: this.jsonStore},kwCloudDiv);
9 } else {
10 this.jsonStore.close();
11 this.jsonStore._jsonData = this.termsJson;
12 this.jsonStore.fetch();
13 this.oCloud.destroy();
14 kwCreateCloudDiv(kwCloudDivName, kwCloudRootName);
15 var kwCloudDiv = dojo.byId(kwCloudDivName);
16 this.oCloud = new myDojo.TagCloud({store: this.jsonStore},kwCloudDiv);
17 }
18 }
19
20 var kwCreateCloudDiv = function(divName, rootName) {
21 _kwCreateCloudDiv_impl('div', {id: divName, widgetid: "}, rootName);
22 }
23
24 _kwCreateCloudDiv_impl = function(tag, attrs, ref, pos){
25 var n = dojo.doc.createElement(tag);
26 if(attrs) dojo.attr(n, attrs);
27 if(ref) dojo.place(n, ref, pos);
28 return n;
29 }
|
Содержимое листинга 12:
- Строки 5-8: обработка исходного объекта
dojo.TagCloud. - Строки 10-16: очистка ранее созданного объекта
dojo.TagCloudи связанного с ним хранилища данных, предназначенного только для чтения. - Строки 2, 7, 8: исходный объект
dojo.TagCloudприкрепляется к предварительно созданному DOM-элементу: все последующие созданные заново объектыdojo.TagCloudделают то же самое, сначала уничтожая DOM-элемент. - Строки 14, 15 и 20-29: данный DOM-элемент создается с нуля, после чего внутри этого DOM-элемента создается
dojo.TagCloud.
В статье демонстрируется практическое применение интеграции IBM Lotus Connections и IBM Content Analytics, позволяющей пользователям Connections предоставлять широкий доступ к информации о направлениях своих исследований и полученных ими грантах. В статье представлена архитектура приложения и подробно описаны виджеты iWidgets My Keywords и My Grant Awards. Вы познакомились с HTML- и JavaScript-реализацией виджетов с использованием Dojo. Примеры исходного кода помогли проиллюстрировать авторизацию на основе ролей Profiles. Вы также узнали, как реализовать HTTP-взаимодействие между виджетами и Java-сервлетами.
Часть 4 серии будет посвящена реализации сервлета и интеграции с Content Analytics.
Развертывание дополнительных виджетов в приложении Profiles
Путь к XML-файлам, объявляющим виджеты, обсуждаемые в статье, указывается в конфигурационном файле виджетов widgets-config.xml. Чтобы настроить существующие виджеты или сделать доступными в Profiles собственные виджеты, необходимо изменить настройки в файле widgets-config.xml. Подробности приведены в документе Настройка виджетов в Profiles (EN). Этот конфигурационный файл используется для настройки содержимого пользовательского интерфейса Lotus Connections Profiles.
В листинге 13 приведен пример XML-файла объявления виджета My Grant Awards как части определения виджета My Grant Awards в конфигурацонном файле виджета Profiles.
Листинг 13. Определение виджета My Grant Awards в файле widgets-config.xml
<widgetDef defId="myGrantAwards" bundleRefId="extraBundle"
url="{context_root}/extra-widgets/grantsWidget.xml?version={version}"/>
|
- Оригинал статьи: Smarter collaboration for the education industry using Lotus Connections, Part 3: Use Profiles to share research interests and grant awards (EN).
- Прочтите предыдущие части серии:
- Часть 1: интеграция Lotus Connections с RESTful Web-приложением.
- Часть 2: оптимизация назначения студентов в исследовательские проекты. Использование модели оптимизации IBM ILOG с данными из реляционной базы данных.
- IBM
Lotus Connections. Узнайте больше об IBM Lotus Connections.
- IBM Lotus Connections Information Center: доступ ко всей документации по продукту.
-
Lotus Connections Profiles: узнайте больше о просмотре профилей.
-
Tag Cloud: подробная информация в Википедии.
-
diabetes: интерактивный журнал Американской Диабетической Ассоциации.
-
TAGGS: система отслеживания и отчетности по грантам правительства США. Центральный репозиторий предоставленных грантов по двенадцати операционным подразделениям Министерства здравоохранения и социальных услуг США.
-
IBM
Content Analytics Information Center: созданный IBM механизм извлечения и анализа текста.
-
IBM iWidget Specification V1.0: определяет простую компонентную модель и объясняет, как ее можно расширить для повышения совместимости.
- developerWorks в
Twitter. Следите за твитами developerWorks.
- Подкасты DeveloperWorks. Слушайте интервью и дискуссии, адресованные разработчикам программного обеспечения.
- Демонстрации по запросу на developerWorks. Смотрите на developerWorks предоставляемые по запросу демонстрации - от установки и настройки продуктов для начинающих до продвинутых функциональных возможностей для опытных разработчиков.
Карл Осипов (Carl Osipov) - архитектор ПО, подразделениe стратегий и технологий IBM Software Group. Обладает большим опытом в области распределенных вычислений, разработке приложений по распознаванию живой речи и компьютерной обработке естественного языка. Имеет ряд публикаций и выступлений по вопросам Сервис-ориентированной архитектуры и управлением разпознования речи перед образовательской и бизнес аудиторией. На данный момент он в основном занимается проектированием технологий повторного использования для составных бизнес-сервисов.

Илья Афанасьев (Ilya Afanasiev) - инженер-программист, имеющий более 7 лет опыта успешной работы и богатый набор навыков в различных областях, включая исследования, разработку, поддержку и обеспечение качества программного обеспечения. Поступил на работу в IBM в 2007 году в качестве программиста систем z/OS в российской лаборатории систем и технологий. В настоящее время основное внимание уделяет разработке и созданию прототипов пользовательских Web-интерфейсов, поиску информации и разработке Java EE-приложений. Интересуется глубинным анализом текста и анализом неструктурированного текста.