Рейтинги

Один из наиболее популярных видов генерируемого пользователями контента – оценки различных материалов. Рейтинги есть практически везде: на новостных сайтах, в блогах, социальных сетях, интернет-магазинах.

Обычно пользователю предлагается указать оценку по некоторой шкале, скажем, от 1 до 5 или даже от 1 до 10.

Иногда предлагается только два варианта: плюс и минус. По факту правда получается не два, а три: можно не голосовать вообще.

А иногда и такого разнообразия нет. В Facebook, к примеру, есть только кнопочки Like. То есть остается два варианта: нажать Like или не нажать.

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

Здесь на помощь приходит статистика. Сотрудники YouTube проанализировали, как люди оценивают видео. Пользователи оценивали материалы по шкале от 1 до 5. И, как оказалось, подавляющее большинство оценок – это 1 и 5. Причем оценок 5 в разы больше, чем оценок 1.

Вобщем-то причины понятны. Люди ставят оценки в основном только если видео очень хорошее или очень плохое. Кроме того, суть оценок 1 и 5 хорошо понятна. А вот как понимать промежуточные оценки? Чем 4 отличается от 5 или от 3?

Выходит, что 5-балльная шкала – излишнее усложнение, и должно вполне хватать 2-балльной. Как, например, реализовано на StackOverflow.

А учитывая, что оценок 5 в разы больше – то может сгодиться и 1-балльная, как на Facebook. Но тут уже важно оценить, насколько понизится точность рейтинга.

Точность оценок становится особенно важна, когда речь заходит об использовании их для прогнозирования. Так, к примеру, Amazon использует оценки пользователей для системы рекомендаций товаров. А компания Netflix придает вопросам рейтингов настолько большое значение, что объявило приз 1 миллион долларов за алгоритм, который сможет повысить точность их прогнозов на 10%.

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

Павел Сурменок

http://surmenok.ru/

http://pavel.surmenok.com/

Пара ссылок про разработку для SharePoint

Фиксирую лог своих разборок с SharePoint :) Напомню, одной из моих задач была разработка иерархического списка.

Один из опробованных вариантов решения – создание типа данных, унаследованного от Folder. Подробный туториал по построению иерархического списка на основе такого подхода можно найти тут:

http://weblogs.asp.net/sharadkumar/archive/2008/07/13/manage-hierarchical-data-in-sharepoint-lists-building-a-project-team-site-template.aspx

Этот подход как-то работает. И, учитывая предусловия, заданные автором этого туториала (обойтись без написания программного кода и без использования SharePoint Designer), решение неплохое. Но меня оно не совсем устроила. При этом у меня есть и лицензионный SharePoint Designer, и против программного кода ничего не имею. Поэтому идем дальше :)

Можно разработать Web User Control (ascx), отображающий данные в нужном нам виде. Это несложно. Вот тут описаны способы подключения web user controls к сайту SharePoint:

http://sharepointinsight.blogspot.com/2007/07/web-user-controls-in-sharepoint.html

http://jcapka.blogspot.com/2009/01/i-was-explaining-my-technique-of-using.html

А здесь довольно подробно о том, как программно доступаться к элементам списков:

http://www.sharepointdevwiki.com/display/public/Accessing+list+items+using+the+object+model

Еще один вариант, лучше чем web user controls в отношении повторного использования и удобства встраивания в сайт – создание WebPart. Ставим SDK, после этого в Visual Studio появляется кучка новых типов проектов в группе SharePoint.

Обратите внимание, что для того, чтобы создать новый проект для SharePoint необходимо, чтобы на машине был установлен SharePoint. А для его установки нужна серверная ОС. У меня на компьютере установлен Windows 7. Другая проблема, которая может возникнуть – это то, что имея Visual Studio 2010 будет проблематично делать решения для SharePoint 2007. Обе этих проблемы решаемы. Здесь подробный туториал:

http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2010/07/15/using-visual-studio-2010-sharepoint-templates-to-deploy-a-web-part-in-sharepoint-2007.aspx

Создать проект без установленного SharePoint нельзя, но открывать уже существующие можно без проблем. Поэтому нужно просто иметь под рукой готовый пустой проект SharePoint. Такой проект можно найти в приложении к вышеуказанной статье. Чтобы проект был годен для SharePoint 2007 – удаляем из референсов проекта ссылки на библиотеки SharePoint версии 14 и добавляем референсы на библиотеки версии 12, которые можно взять из GAC на сервере, где установлен SharePoint 2007. Проверял, работает :)

Visual Studio автоматически собирает solution package (wsp), который можно разворачивать на SharePoint’е. Далее закидываем этот package на сервер и разворачиваем с помощью утилиты stsadm. Как это делать можно почитать тут:

http://www.sharepointnutsandbolts.com/2007/07/building-and-deploying-sharepoint.html

Вот этим путём я и пошел. Позже мне добрые люди подсказали ссылку на готовый WebPart для иерархических списков:

http://dyakov.design.officelive.com/hieviewwp.aspx

Возможно этот вариант будет лучше, чем писать с нуля.

Написал этот пост по большей части чтобы ссылки не потерять и зафиксировать опыт. Но возможно кому-то будет полезно :)

Павел Сурменок

http://surmenok.ru/

http://pavel.surmenok.com/

nopCommerce

Для платформы ASP .NET мало хороших CMS. Еще меньше бесплатных хороших CMS. И совсем нет бесплатных хороших CMS для электронной коммерции :)

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

Коммерческие разработки вроде Kentico хороши, но стоят денег. А Sitecore вообще шифруется: цены я смог получить только после недельного ожидания и нескольких часов разговоров с их продажниками в Дании :) Минимальная версия SItecore вышла бы нам в 9900 евро. Максимальная что-то около 83000 евро.

Среди бесплатных CMS для электронной коммерции есть, пожалуй, лишь один серьезный продукт. Это nopCommerce. Российская разработка: разработчики из Ярославля. Open Source. Деньги берут за документацию и за право не ставить на сайте их логотип.

Функционал довольно мощный. Скидки, налоги, оплата, доставка, возвраты товаров, рейтинги, отзывы, форум, новости, статьи… Общий объем кода около 15 мегабайт, количество таблиц в БД превышает сотню.

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

Чудеса начинаются, когда нужно хорошенько кастомизировать магазин. Тут-то выясняется, что архитектура слегка страдает.

Например, что делать, если нужно добавить поле в какую-то таблицу? В Kentico, Sitecore или даже в бесплатной Umbraco для этого достаточно зайти в веб-интерфейс администрирования сайта в раздел “Developer” и отредактировать список полей нужной сущности. Что нужно сделать в nopCommerce для решения этой задачи? Процесс очень простой. Вот здесь он описан подробней.

1. Добавить свойство в соответствующий класс

2.Обновить методы репозитория (Update/Insert)

3. Добавить поле в таблицу базы данных

4. Обновить модель Entity Framework (edmx файл)

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

Добавить новую сущность? Без проблем, только шагов будет пять.

О качестве кода говорить не буду, лучше оцените сами :) Там, например, местами HTML собирается в code-behind из html generic controls. Хорошо хоть не конкатенацией строк. И кода этого 15 мегабайт.

Почему же всё так грустно в мире CMS для e-commerce? Есть что-то более приятное для e-commerce?

Павел Сурменок

http://surmenok.ru/, зеркало в ЖЖ: http://surmenok.livejournal.com/

http://pavel.surmenok.com/ – English-only version

Иерархические списки в SharePoint

Как-то внезапно в зону моих интересов (и интересов моих заказчиков) попал SharePoint. Сейчас мы (компания BetaCode) занимаемся проектом по внедрению SharePoint и интеграции его с Microsoft Team Foundation Server и Microsoft Project.

Одна из технических задач – создание иерархического списка Tasks с неограниченной вложенностью.

Провели исследования и выяснили, что подходов по созданию иерархий в SharePoint несколько.

Во-первых, можно создать несколько Lookup column: Parent1, Parent2, … , Parent10. И соответственно у элемента второго уровня вложенности задавать Parent1, у элемента третьего уровня – Parent2 и т.п. Далее в View делаем группировку по Parent1, Parent2 и т.п. Это как-то коряво, и это не даёт неограниченной вложенности.

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

Это очень просто реализуемый вариант. Но не лишен недостатков. Так, в стандартном View можно смотреть список только каждого уровня в отдельности. Т.е. при открытии списка видим только корневые элементы, при открытии кого-то из этих корневых – видим его дочерние элементы. В общем всё как обычно с папками. А хотелось бы сразу видеть дерево. Примерно как в TFS в запросах Iteration backlog.

В-третьих, можно добавить одну Lookup column Parent, с помощью которой задавать отношения Child-Parent между элементами. А View разработать свой. При этом придется раскуривать объектную модель SharePoint и написано некоторое количество хорошо отлаженного кода :) При этом хорошо бы воспользоваться толковым контролом для отображения иерархических списков. Например DevExpress TreeList или что-то подобное подешевле.

Возможно позже напишу более подробно о том, как эту задачу решать. Когда закончим.

Павел Сурменок

http://surmenok.ru/

http://pavel.surmenok.com/

Bing интегрируется с Facebook

http://microgeek.ru/blogs/bing/781/

«Поисковик Bing объявил о партнерстве с социальной сетью Facebook для получения публичных данных кнопок Like It, которые сейчас доступны практически на каждом сайте.

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

Пользователь ищет рестораны в Сан-Франциско и кроме обычной выдачи получает результаты связанные с рекомендациями его друзей, в данном случае, друг по имени Adam Sohn порекомендовал заведение Alexander’s Steakhouse.

Эта интеграция окажет огромное влияние на поиск. Теперь занимаясь поиском книги по какой-то технологии вы увидите рекомендации нескольких ваших друзей из Facebook и в зависимости от вашего мнения о персоне, предпочтете тот и иной вариант. Вы ищите по названию фильма информацию о нем и видите друзей которые рекомендуют этот фильм. Поиск становится персональным!

На самом деле вариантов использования Like it великое множество и это нововведение дает Bing огромное конкурентное преимущество, по крайней мере, пока данная возможность не появится в других поисковиках.

Другой возможностью в Bing станет поиск людей по Facebook.»

 

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

 

Павел Сурменок

http://surmenok.ru/

Robotic cars

Google сделала и уже вовсю пользует полностью автоматические автомобили.

http://syndicated.livejournal.com/nextbigfuture/652464.html

Автомобили на базе Toyota Prius оснащены кучей датчиков, среди которых видеокамеры, радары, какая-то вращающаяся лазерная хреновина на крыше (позволяет получить точную 3D-карту местности в радиусе 60 метров), какие-то механические датчики на колёсах и т.п. Данные с этих датчиков, равно как детальные карты местности, обрабатываются компьютером, которые собственно и управляет автомобилем.

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

Супер! Хочу себе такую машинку :)

А на фоне этой новости уже строят планы, как вводить в жизнь простых американцев роботизированные автомобили, грузовики, автобусы. http://syndicated.livejournal.com/nextbigfuture/653144.html

Будущее где-то рядом.

 

Павел Сурменок

http://surmenok.ru/

Интеграция сайтов в социалками

Социальные сети интересны в их соединении с вебом и с мобильными устройствами.

Как социалки связаны с вебом? Если говорить о российских соцсетях (которые просто клоны популярных англоязычных), то до недавних пор никак. Сейчас по-тихоньку начинают делать аналоги функций англоязычных социалок (вконтакт берет идеи у фэйсбука, например).

У Facebook такие возможности развиты давно. Могу отметить два направления интеграции сайтов с фэйсбуком.

Во-первых, это размещение на сайтах кнопочек “Like” и “ Share”. Как они работают? Просто. Жмёшь Like – и в фэйсбуке сохраняется соответствующая отметка, что тебе понравилась эта страничка. Она отображается у тебя на «стене» (“Pavel likes Почему программист – до сих пор самая востребованная профессия | kraynov.com on kraynov.com”).

Кнопка “Share” чуть более мощная. Жмёшь – выплывает окошко, где можно дописать свой небольшой комментарий к ссылке. После подтверждения отправки – ссылка с комментарием появляется у тебя в «статусе», на «стене», на странице «новости» у друзей.

В общем, это позволяет легко (парой кликой) поделиться понравившейся ссылкой с друзьями. Посмотреть, как это работает, можно например тут:

http://www.kraynov.com/2010/10/31/developer-the-most-needed-trade/

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

Вторая интересная возможность интеграции социалок с сайтами – использование на сайте функции авторизации, предоставленной социалкой. Зашёл на сайт, захотел что-то откомментить или запостить. При этом не обязательно на этом сайте регистрироваться. Если вы уже авторизованы на фэйсбуке – сайт об этом узнает. Например, я захожу сюда:

http://www.forbes.ru/ekonomika-opinion/vlast/59186-sobyanin-i-probki

и сразу внизу вижу форму, в которой можно оставить коммент.

Есть ли такая возможность у Вконтакта – не знаю, надо почитать документацию.

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

 

Павел Сурменок

http://surmenok.ru/

3D печать самолётов и авто

Если маленькие 3D принтеры уже можно купить за смешные деньги и поставить дома на стол, то большие 3D-принтеры пока могут позволить себе не многие.

А ведь они открывают большие перспективы. Airbus, например, к 2020 году планирует научиться печатать крылья самолетов.

«Airbus is targeting sometime beyond 2020 to be able to fabricate an airplane wing using additive manufacturing.

EADS (Airbus) has large-scale structures grown from ALM-enabled (additive layer manufacturing) manufacturing systems on our technology road maps. The prospect is growing a full-sized airliner wing, which we have earmarked for some time beyond 2020. This is not a far-fetched notion. Go to [Airbus wing-making facility] Broughton in North Wales and you’ll see 35 meter-long gantry machining center with CNC (computer numerical controlled machine tools) heads for bespoke machining of whole wing skins. Change the machining head to a laser-deposition head and you can start to see the possibilities straight away.»

А в перспективе планируется печатать все основные детали самолёта.

http://nextbigfuture.com/2010/10/large-format-3d-printers-making-large.html

http://nextbigfuture.com/2010/10/utopium-project-to-use-carbon-nanotube.html

http://www.theengineer.co.uk/in-depth/the-big-story/the-rise-of-additive-manufacturing/1002560.article

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

«97% Cost Reduction; 83% Time Reduction

All 188 components were produced in 4 weeks and assembled in 2.5 weeks for a total production time of 6.5 weeks. Using conventional fabrication processes, such as machining and casting (with in-house and outside resources) a manufacturer would expect to spend 9 months or more producing a model like this. Using the FDM process in-house, a manufacturer could expect costs of roughly $25,000, versus an estimated $800,000 to $1 million for conventional processes. These numbers represent about a 97% reduction in production costs and 83% reduction in production time.»

Афигительный improvement! Вместо 6,5 недель времени – 2,5 недели. А вместо миллиона долларов затрат – всего 25 тысяч.

 

Тем временем по другую сторону океана другие ребята пытаются печатать автомобили. 3-колёсный гибрид.

http://nextbigfuture.com/2010/11/additive-manufacturing-company.html

«The plan is complete the prototype of the three-wheel, two-door Urbee by spring (of 2011), then work on hand-building ten “pilot cars.” The hope is those cars will be mass produced in Manitoba, Kor said, adding, it’s not so outlandish an idea.

Urbee is the first prototype car ever to have its entire body 3D printed with an additive process. All exterior components – including the glass panel prototypes – were created using Dimension 3D Printers and Fortus 3D Production Systems at Stratasys’ digital manufacturing service – RedEye on Demand.»

 

Павел Сурменок

http://surmenok.ru/

Semantic Web на .NET

Не зря я последний месяц почитывал разные вещи про онтологизирование и про Semantic Web в частности. Похоже, в одном из проектов это пригодится.

А значит пора выбирать инструменты. Нужен triple-store и движок запросов к нему. Всё это должно вставать на Windows Server 2008 R2 и иметь интерфейс для .NET. Еще желательно чтобы бесплатно или за не сильно большие деньги.

Технология глубокого гугления дала следующие результаты.

 

http://code.google.com/p/linqtordf/

«LinqToRdf is a Semantic Web framework for .NET. It provides an easy way to integrate Semantic Web queries into your software. At the core of the system sits a LINQ query provider (like LINQ to SQL) that converts your queries into the SPARQL query language. You don’t have to know that much SPARQL or RDF to be able to use it. It also provides a UML-style design surface allowing you to create RDF files, and to generate compatible C# code to work with the RDF.

It provides developers with an intuitive way to make queries on semantic web databases. The project has been going for a year and it’s starting to be noticed by semantic web early adopters in the .NET community. LINQ provides a standardised query language and platform enabling any developer to understand systems using semantic web technologies via LinqToRdf. It will help those who don’t have the time to ascend the semantic web learning curve to become productive quickly.»

«LinqToRdf uses the SemWeb.NET framework by Joshua Tauberer, which provides a platform for working with OWL and SPARQL. It also uses the .NET 3.5 namespace System.Linq which will be released as part of Visual Studio .NET 2008.»

Интересная разработка.

 

http://www.intellidimension.com/products/semantics-platform/

«Semantics Platform is a family of products for building medium and large scale semantics-based applications using the Microsoft .NET framework. It provides semantic technology for the storage, services and presentation layers of an application.

  • RDF Data Storage
  • SPARQL Query and Inference Rule Processing
  • Class libraries for the Microsoft .NET Framework
  • Microsoft SQL Server Support
  • Microsoft ASP.NET Web Components
  • Microsoft Silverlight Libraries
  • Developer Tools»

Со слов разработчика: «We just pushed out the v2.0 of our Semantics Platform. It’s a complete product family built on the .NET Framework for loading, storing, query and reasoning on small or very large sets of RDF data. We offer a storage solution built on SQL Server that supports SPARQL and reasoning or our distributed store that can be deployed across multiple servers in a cluster.

We offer a free evaluation to any of the technology and a free express edition for the core RDF .NET libraries that include all the parsers, streams, SPARQL and inference rule processing. The express edition is actually quite powerful since it contains all the core SPARQL processing algorithms that are in our high-end products. The express edition also contains some visual development tools to make it simple to load RDF data and query it.»

Пожалуй, самая зрелая Semantic Web платформа для .NET. Но стоит денег :)

 

http://razor.occams.info/code/semweb/

«SemWeb.NET is a Semantic Web/RDF library written in C# for Mono or Microsoft’s .NET. The library can be used for reading and writing RDF (XML, N3), keeping RDF in persistent storage (memory, MySQL, etc.), querying persistent storage via simple graph matching and SPARQL, and making SPARQL queries to remote endpoints. Limited RDFS and general-purpose inferencing is also possible. SemWeb’s API is straight-forward and flexible.»

«SemWeb is used in ROWLEX, F-Spot (Gnome photo management), Beagle (Gnome desktop search) for its experimental RDF access layer, and (at least at one time) Sentient Knowledge Explorer (a commercial data visualizer).»

«SemWeb was first released in June 2005 and has been more recently tested with triple stores of over 1 billion statements»

Интересная вещь. Позволяет в т.ч. сесть на SQL Server.

 

http://rowlex.nc3a.nato.int/

«ROWLEX is a powerful open source toolkit for software developers. It has been built to simplify the use of fundamental semantic web technologies (RDF and OWL) under Microsoft’s .NET platform.
ROWLEX stands for Relaxed OWL EXperience. That is exactly what it is. It allows programmers to create and browse RDF documents while keeping the focus on the business objects. It abstracts away the level of RDF triples and elevates the level of the programming work to (OWL) classes and properties. ROWLEX opens the way to experience the beauty of the open world assumptions within the reliable .NET environment.»

Похоже что это нечто для работы с данными в RDF как с custom business objects, позволяя сконвертить схему в библиотеку классов .NET.

 

http://sourceforge.net/projects/dotsesame/

«The dotSesame project is a C# port of the Sesame project, which is originally written in Java. It is an open source RDF database with support for RDF Schema inferencing and querying. Full documentation of Sesame can be found at http://www.openrdf.org/»

«Sesame is an open source RDF framework with support for RDF Schema inferencing and querying. Originally, it was developed by Aduna (then known as Aidministrator) as a research prototype for the EU research project On-To-Knowledge. Now, it is further developed and maintained by Aduna in cooperation with NLnet Foundation, developers from Ontotext, and a number of volunteer developers who contribute ideas, bug reports and fixes.

Sesame has been designed with flexibility in mind. It can be deployed on top of a variety of storage systems (relational databases, in-memory, filesystems, keyword indexers, etc.), and offers a large scala of tools to developers to leverage the power of RDF and RDF Schema, such as a flexible access API, which supports both local and remote (through HTTP or RMI) access, and several query languages, of which SeRQL is the most powerful one.»

Смущает природа проекта. Порт с Java на .NET – думаю, не лучшая идея.

 

http://virtuoso.openlinksw.com/

«Virtuoso is an innovative enterprise grade multi-model data server for agile enterprises & individuals. It delivers an unrivaled platform agnostic solution for data management, access, and integration.

The unique hybrid server architecture of Virtuoso enables it to offer traditionally distinct server functionality within a single product offering that covers the following areas:

  • Relational Data Management
  • RDF Data Management
  • XML Data Management
  • Free Text Content Management & Full Text Indexing
  • Document Web Server
  • Linked Data Server
  • Web Application Server
  • Web Services Deployment (SOAP or REST)»

Эта штука, похоже, умеет очень многое, явно больше того, что мне нужно. Но стоит ну очень приличных денег. Давно я не видел софт, который за unlimitied лицензию на один сервер требует 160 000 долларов :)

 

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

 

Павел Сурменок

http://surmenok.ru/