{"id":152,"date":"2015-09-02T18:47:44","date_gmt":"2015-09-02T18:47:44","guid":{"rendered":"http:\/\/mlapshin.com\/?page_id=152"},"modified":"2016-01-14T17:22:43","modified_gmt":"2016-01-14T17:22:43","slug":"pim","status":"publish","type":"page","link":"https:\/\/mlapshin.com\/index.php\/projects\/pim\/","title":{"rendered":"PIM"},"content":{"rendered":"<p>PIM stands for Product Information Management.\u00a0It helps big retailers efficiently acquire, author, and publish product information. More details about functionality could be found at the corporate <a href=\"https:\/\/www.informatica.com\/products\/master-data-management\/product-information-management.html#\" target=\"_blank\">web site<\/a>. Do not be confused, PIM recently was renamed to &#8220;Product 360&#8221;.<\/p>\n<h3>Screenshots<\/h3>\n<table class=\"icontable\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div id=\"attachment_207\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/mlapshin.com\/wp-content\/uploads\/2015\/09\/PIM-Dashboard.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-207\" class=\"wp-image-207 size-thumbnail\" src=\"https:\/\/mlapshin.com\/wp-content\/uploads\/2015\/09\/PIM-Dashboard-150x150.jpg\" alt=\"PIM - Dashboard\" width=\"150\" height=\"150\" \/><\/a><p id=\"caption-attachment-207\" class=\"wp-caption-text\">PIM &#8211; Dashboard<\/p><\/div><\/td>\n<td>\n<div id=\"attachment_210\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/mlapshin.com\/wp-content\/uploads\/2015\/09\/PIM-Product-Details.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-210\" class=\"wp-image-210 size-thumbnail\" src=\"https:\/\/mlapshin.com\/wp-content\/uploads\/2015\/09\/PIM-Product-Details-150x150.jpg\" alt=\"PIM - Product Details\" width=\"150\" height=\"150\" \/><\/a><p id=\"caption-attachment-210\" class=\"wp-caption-text\">PIM &#8211; Product Details<\/p><\/div><\/td>\n<td>\n<div id=\"attachment_213\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/mlapshin.com\/wp-content\/uploads\/2015\/09\/PIM-Flexible-UI1.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-213\" class=\"wp-image-213 size-thumbnail\" src=\"https:\/\/mlapshin.com\/wp-content\/uploads\/2015\/09\/PIM-Flexible-UI1-150x150.jpg\" alt=\"PIM - Flexible UI\" width=\"150\" height=\"150\" \/><\/a><p id=\"caption-attachment-213\" class=\"wp-caption-text\">PIM &#8211; Flexible UI<\/p><\/div><\/td>\n<td>\n<div id=\"attachment_469\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/mlapshin.com\/wp-content\/uploads\/2015\/09\/PIM-Rich-Client-Multimedia-Perspective.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-469\" class=\"wp-image-469 size-thumbnail\" title=\"PIM - Rich Client - Multimedia Perspective\" src=\"https:\/\/mlapshin.com\/wp-content\/uploads\/2015\/09\/PIM-Rich-Client-Multimedia-Perspective-150x150.jpg\" alt=\"PIM - Rich Client - Multimedia Perspective\" width=\"150\" height=\"150\" \/><\/a><p id=\"caption-attachment-469\" class=\"wp-caption-text\">PIM &#8211; Rich Client<\/p><\/div><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Videos<\/h3>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=UJW0VDJoAas\" target=\"_blank\">Informatica PIM. Do it right.<\/a><\/li>\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=Aq-a0jhLiR8\" target=\"_blank\">Informatica PIM-MDM integration demo<\/a><\/li>\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=mci92Xp6Gdk\" target=\"_blank\">Data quality rules within Informatica PIM<\/a><\/li>\n<\/ul>\n<h3>The team<\/h3>\n<p>The whole development team consists of about 50 people. We have 5\u00a0scrum teams. Four\u00a0of them are in\u00a0Germany, Stuttgart.\u00a0The last (but not least) is in Russia, Saint-Petersburg.\u00a0I joined the Russian PIM team in January, 2015. In the best times our\u00a0team consisted of 11 people.<\/p>\n<p>We use the Scrum framework\u00a0and\u00a0have been constantly improving our processes\u00a0to achieve the best possible results.<\/p>\n<h3>My role<\/h3>\n<p>My primary role is to lead development of the Web UI. Other tasks include scrum mastering\u00a0and\u00a0improving other parts of the system. Sometimes I participate in job interviews as a technical expert.<\/p>\n<h3>A bit of history<\/h3>\n<p>In its usual way Informatica acquired\u00a0Heiler Software AG in 2013 together with the PIM project that lasted\u00a0already for several years. It is exactly the same way how I came to Informatica when Siperian Inc. where I was working was bought in 2011.<\/p>\n<h3>Architecture<\/h3>\n<p>The system originally was created\u00a0by German developers and its core is of very good quality. The system consists of the core server part that has several very well-designed\u00a0APIs: Command API, Report API, REST API, OSGi extension points. It allows to customize easily almost every part of the system. So, there is a big customer ecosystem around the project.<\/p>\n<p>The system core is database-independent. It\u00a0supports Oracle\u00a0and\u00a0MySQL as the primary databases, but it could work with others. The data layer operates with business model artifacts. It is very optimized for work with large data sets. It\u00a0consists of two main parts: entity detail access and list access. The entity detail access provides CRUD operations whereas the list access provides high-performance read-only methods to fetch entities data in a table form. PIM programmers are\u00a0saved from creating direct DB calls \u00a0which allows to use caching on different levels and speeds up the whole process.<\/p>\n<p>The data schema is predefined, but it has a good reserve of different fields that customers could use on they own. Also there is a special configuration tool that allows easy tuning of\u00a0all data schema types and fields.<\/p>\n<h3>Technologies<\/h3>\n<p>Major involved\u00a0technologies\u00a0are\u00a0J2EE, Eclipse OSGI, Vaadin, Guice, Spring, MS SQL Server, REST, Swing (for the rich client). We use Jetty servlet container.<\/p>\n<p>The rich client is\u00a0based\u00a0on the Eclipse platform, so it inherits all its good sides and looks pretty well. However,\u00a0some time\u00a0ago it was decided the system needs a Web UI to be competitive. Our team is responsible for this important part of the system.<\/p>\n<p>The Web UI is based on the Vaadin framework. I always had been skeptical about conversion of Java into JavaScript, but after working a while with the project I noticed that UI could be created very fast, it has a good quality and it is written with\u00a0good old Java language.<\/p>\n<p>Another interesting part of the Web UI is heavy usage of Guice framework for dependency injection. It requires time to get used to this style of coding, but it is\u00a0worth it.\u00a0\u00a0The code becomes much clearer, easily\u00a0configurable and what is most important, easily testable.<\/p>\n<p>For unit testing we use Mockito framework.<\/p>\n<h3>Codebase<\/h3>\n<h6>Core<\/h6>\n<ul>\n<li>443 plugins, ~12000 classes<\/li>\n<li>Tests: 130 plugins, ~2200 classes<\/li>\n<\/ul>\n<h6>Web UI<\/h6>\n<ul>\n<li>47 plugins, ~1700 classes<\/li>\n<li>Tests: 17 plugins, ~200 classes<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>PIM stands for Product Information Management.\u00a0It helps big retailers efficiently acquire, author, and publish product information. More details about functionality could be found at the corporate web site. Do not be confused, PIM recently was renamed to &#8220;Product 360&#8221;. Screenshots&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/mlapshin.com\/index.php\/projects\/pim\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":140,"menu_order":10,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-152","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/pages\/152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/comments?post=152"}],"version-history":[{"count":23,"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/pages\/152\/revisions"}],"predecessor-version":[{"id":470,"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/pages\/152\/revisions\/470"}],"up":[{"embeddable":true,"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/pages\/140"}],"wp:attachment":[{"href":"https:\/\/mlapshin.com\/index.php\/wp-json\/wp\/v2\/media?parent=152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}