<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8913242779059219542</id><updated>2011-08-10T06:22:36.089-07:00</updated><category term='SharePoint'/><category term='Feed Me Oil'/><category term='Games'/><category term='iOS'/><category term='Develoment'/><category term='SQL Server'/><category term='AnjLab'/><title type='text'>Alex Zakharov Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-4236926707227503548</id><published>2011-05-27T09:26:00.000-07:00</published><updated>2011-06-02T04:22:18.112-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AnjLab'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Feed Me Oil'/><title type='text'>Feed Me Oil</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;Today, June 2, 2011 is important day for us, &lt;a href="http://anjlab.com/"&gt;AnjLab&lt;/a&gt; team, big milestone. Today, under &lt;a href="http://holywatergames.com/"&gt;HolyWaterGames&lt;/a&gt; brand, together with &lt;a href="http://chillingo.com/"&gt;Chillingo&lt;/a&gt; / EA, famous games publisher, we released ‘Feed Me Oil’ game for iPhone, iPad and iPod Touch.  It is available at &lt;a href="http://itunes.apple.com/us/app/feed-me-oil-hd/id422035154?mt=8"&gt;Apple AppStore&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;iframe width="560" height="349" src="http://www.youtube.com/embed/X6qhbZkMA0Q" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Behind this event more than year of hard work, starting with experiments with liquid physics and finishing with many marketing activities. I can say, this game is unique on iOS market from technological point of view. It is based on math modeling of liquid behavior; ‘oil’ in the game is not animation or set of pre-set templates, it acts as real oil – stream, distribution, mixing. In result, each level of the game has endless number of solutions and space for improving your score.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First version of the game was strong and complex, amusement for real geeks.  We saw the game from our point of view, tried to make it attractive to ourselves. Many thanks to Chillingo guys, they looked to the game as average user and gave us many useful suggestions how to improve it, make more friendly. Also we integrated Chillingo’s Crystal technology, which allows users to share results and compete with each other. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thus, the game was announced on &lt;a href="http://www.chillingo.com/gdc/"&gt;Game Developers Conference 2011&lt;/a&gt; in San Francisco in Fabruary, published as &lt;a href="http://www.chillingo.com/upcoming_games.htm"&gt;upcoming &lt;/a&gt;be Chillingo in May. We have very positive and promising reaction on this. We hope the game will be popular. Maybe as popular as Angry Birds or Cut the Rope.  However, nobody knows. Even experienced marketing guys confess the fact: it is very hard to predict success or fail of a game, too many factors influence on it.  We have good reviews and preliminary estimates, but will see - now it will be going on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At least we got very good experience. I mean two things: experience in development for iOS, and experience in creating product from the scratch, from initial idea to completed product for so specific and mature market, which AppStore is. Will keep moving in this direction, updates and new versions of Feed me Oil are already planned.&lt;/div&gt;&lt;span lang="EN-US" style="font-size:11.0pt;line-height:115%;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font: minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;; mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language: EN-US;mso-bidi-language:AR-SA"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-4236926707227503548?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/4236926707227503548/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=4236926707227503548' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/4236926707227503548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/4236926707227503548'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2011/05/feed-me-oil.html' title='Feed Me Oil'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/X6qhbZkMA0Q/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-839538357553957516</id><published>2011-04-11T06:26:00.001-07:00</published><updated>2011-04-11T08:42:33.565-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Develoment'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Integrate Reporting Services 2008 with SharePoint Server 2010</title><content type='html'>Short instruction:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Install MS SQL Server Reporting Services (SSRS) 2008 R2 in SharePoint Integrated mode. The service should run under domain account, do not use built-in account like SYSTEM.&lt;/li&gt;&lt;li&gt;Enable reporting services for SharePoint farm. Go to SharePont Administration Center, open General Application Setings - Reporting Services - Add Report Server. Specify RS URL (http:///reportserver), domain account to connect. If feature activated successfully for all site collections, on Defaults settings page make sure parameters 'Enable Windows Authentification' and 'Enable RS ActiveX sownload' are on.&lt;/li&gt;&lt;li&gt;Create reports library. Open your SharePoint site and create new Document Library (by default), open Library settings - Advances Settings and set 'Allow management of content types' on. Return to library settings and click 'Add from existing types' link in Content Types settings. In dialog, choose 'Reporting Services content types' group and add all available types.&lt;/li&gt;&lt;li&gt;Deploy reports with SQL Server BI development studio. In your report project properties, set TargetServerURL = http://server, TargetReportFolder = http://server/site/list. The same for TargetDataSourceFolder. In common case you can use different lists to store reports and datasources. Instead VS you can deploy with PowerShell using &lt;a href="http://www.roelvanlisdonk.nl/?p=1174"&gt;this script&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;You can add report on any page of SharePoint site with special RS webpart.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-839538357553957516?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/839538357553957516/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=839538357553957516' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/839538357553957516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/839538357553957516'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2011/04/integrate-reporting-services-2008-with.html' title='Integrate Reporting Services 2008 with SharePoint Server 2010'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-1079982452015015435</id><published>2010-09-24T09:08:00.000-07:00</published><updated>2010-09-24T09:09:05.260-07:00</updated><title type='text'>SQL Server: iterations vs. set operations with XML</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I previous &lt;/span&gt;&lt;a href="http://alexzakharov.blogspot.com/2010/09/anjlabfxsqlserver.html"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;post&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; I published some common information about &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AnjLab.FX.SQLServer&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, set of useful tools for SQL development. Now I would highlight one small research I did during implementation of some functions.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I always consider SQL programming language as set operations as opposed to procedural and object oriented languages.  Yes, it includes procedural structures, which allows you to create complex algorithms, but core, nature of SQL approach are set operations – &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;union, join, except, intersect&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, etc. If something can be done with set operation I prefer this way. In the most cases handling all scope at once is more effective than processing row by row, sometimes, much more effective.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SQL Server 2005/2008 provides ability to use XML data type, store, read and write XML data, transform it to / from relational structures. However, are set operations for XML data as effective as for relational structures? For comparing I do not want to use simple trite abstract examples. Let’s look at inverse tasks I met in practice in several projects – converting rowset column values to string with delimiters and convert string with delimiters to one-column rowset.  &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Let’s consider first task and use as input rowset of 10K records. For creating it I use &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AnjLab.FX.SQLServer&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; function &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;getEmptyRowset&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; which returns one-column rowset of given number of records.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Iterations:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;max&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; @Delimiter &lt;span style="color:blue"&gt;nchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;1&lt;span style="color:gray"&gt;),&lt;/span&gt; @i &lt;span style="color:blue"&gt;int&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Table &lt;span style="color:blue"&gt;table &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;[Value] &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;10&lt;span style="color:gray"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;insert&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:blue"&gt;into&lt;/span&gt; @Table&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;&lt;span style="color:blue"&gt;select&lt;/span&gt; &lt;span style="color:fuchsia"&gt;ltrim&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;str&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;RecordID&lt;span style="color:gray"&gt;))&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:blue"&gt;from&lt;/span&gt; fx&lt;span style="color:gray"&gt;.&lt;/span&gt;GetEmptyRowSet&lt;span style="color:gray"&gt;(&lt;/span&gt;10000&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;&lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:fuchsia"&gt;space&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;0&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:gray"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Delimiter &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:red"&gt;N','&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; A &lt;span style="color:blue"&gt;cursor&lt;/span&gt; &lt;span style="color:blue"&gt;for&lt;/span&gt; &lt;span style="color:blue"&gt;select&lt;/span&gt; [Value] &lt;span style="color:blue"&gt;from&lt;/span&gt; @Table&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Value &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;10&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:gray; mso-no-proof:yes"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;open&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; A&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;fetch&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:blue"&gt;next&lt;/span&gt; &lt;span style="color: blue"&gt;from&lt;/span&gt; A &lt;span style="color:blue"&gt;into&lt;/span&gt; @Value&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;while&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:fuchsia"&gt;@@fetch_status&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; 0&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; color: rgb(0, 0, 255); "&gt;begin&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;span style="mso-tab-count:1"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;set&lt;/span&gt; @String &lt;span style="color:gray"&gt;=&lt;/span&gt; @String &lt;span style="color:gray"&gt;+&lt;/span&gt; @Delimiter &lt;span style="color:gray"&gt;+&lt;/span&gt; @Value&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; "&gt;&lt;span style="color:blue"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;/span&gt;&lt;/span&gt;fetch&lt;/span&gt; &lt;span style="color:blue"&gt;next&lt;/span&gt; &lt;span style="color:blue"&gt;from&lt;/span&gt; A &lt;span style="color:blue"&gt;into&lt;/span&gt; @Value&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;end&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;close&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; A&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;deallocate&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family: &amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt; A&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family: &amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family: &amp;quot;Courier New&amp;quot;;color:blue;mso-no-proof:yes"&gt;select&lt;/span&gt;&lt;span style="font-size: 10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt; @String&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Set operation:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;max&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; @Delimiter &lt;span style="color:blue"&gt;nchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;1&lt;span style="color:gray"&gt;),&lt;/span&gt; @i &lt;span style="color:blue"&gt;int&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Table &lt;span style="color:blue"&gt;table &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;[Value] &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;10&lt;span style="color:gray"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:gray; mso-no-proof:yes"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;insert&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:blue"&gt;into&lt;/span&gt; @Table&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;&lt;span style="color:blue"&gt;select&lt;/span&gt; &lt;span style="color:fuchsia"&gt;ltrim&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;str&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;RecordID&lt;span style="color:gray"&gt;))&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:blue"&gt;from&lt;/span&gt; fx&lt;span style="color:gray"&gt;.&lt;/span&gt;GetEmptyRowSet&lt;span style="color:gray"&gt;(&lt;/span&gt;10000&lt;span style="color:gray"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;&lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:fuchsia"&gt;space&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;0&lt;span style="color:gray"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Delimiter &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:red"&gt;N','&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:red; mso-no-proof:yes"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="color:gray"&gt;=&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:gray"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; "&gt;&lt;span style="color:blue"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;/span&gt;&lt;/span&gt;select&lt;/span&gt; [Value] &lt;span style="color:gray"&gt;+&lt;/span&gt; @Delimiter &lt;span style="color:blue"&gt;as&lt;/span&gt; &lt;span style="color:red"&gt;'data()'&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;span style="color:blue"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;/span&gt;&lt;/span&gt;from &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;select&lt;/span&gt; [Value] &lt;span style="color:blue"&gt;from&lt;/span&gt; @Table&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;as&lt;/span&gt; A&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;span style="color:blue"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;/span&gt;&lt;/span&gt;for&lt;/span&gt; &lt;span style="color:blue"&gt;xml&lt;/span&gt; &lt;span style="color:blue"&gt;path&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;''&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;select&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Here is funny trick – we convert relational data to XML with empty structure (&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;xml path(‘’)&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;), which is actually just a string. Profiling (I recommend to use open source &lt;/span&gt;&lt;a href="http://anjlab.com/en/projects/opensource/sqlprofiler" target="_blank"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AnjLab SQL Profiler&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;) shows duration 1400 ms in first case vs. 350 ms for second.  Set operation with XML is 4 times faster than iterations.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Next, focus on inverse task, and use string of the same 10K values. I omitted code for creating such long string in examples below and use just &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;set @String = N'1,2,3,4'&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; to simplify them.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Variant one - Iterations:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;max&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; @Delimiter &lt;span style="color:blue"&gt;nchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;1&lt;span style="color:gray"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Table &lt;span style="color:blue"&gt;table &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;[Value] &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;max&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String&lt;span style="mso-spacerun:yes"&gt;    &lt;/span&gt;&lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:red"&gt;N'1,2,3,4'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Delimiter &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:red"&gt;N','&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;while&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:fuchsia"&gt;charindex&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;@Delimiter&lt;span style="color:gray"&gt;,&lt;/span&gt;@String&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;&gt;&lt;/span&gt; 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; color: rgb(0, 0, 255); "&gt;begin&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;span style="color:blue"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;/span&gt;&lt;/span&gt;insert&lt;/span&gt; &lt;span style="color:blue"&gt;into&lt;/span&gt; @Table&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; "&gt;&lt;span style="color:blue"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;/span&gt;&lt;/span&gt;values&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;substring&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;@String&lt;span style="color:gray"&gt;,&lt;/span&gt;1&lt;span style="color:gray"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia"&gt;charindex&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;@Delimiter&lt;span style="color:gray"&gt;,&lt;/span&gt;@String&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;span style="color:gray"&gt;-&lt;/span&gt;1&lt;span style="color:gray"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; "&gt;&lt;span style="color:gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;span style="color:blue"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;/span&gt;&lt;/span&gt;set&lt;/span&gt; @String &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:fuchsia"&gt;substring&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt;@String&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;span style="color:fuchsia"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;charindex&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;@Delimiter&lt;span style="color:gray"&gt;,&lt;/span&gt;@String&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; 1&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof: yes"&gt;&lt;span style="color:fuchsia"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"&gt;	&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;len&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;@String&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;-&lt;/span&gt; &lt;span style="color:fuchsia"&gt;charindex&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;@Delimiter&lt;span style="color:gray"&gt;,&lt;/span&gt;@String&lt;span style="color:gray"&gt;))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;end&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;insert&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:blue"&gt;into&lt;/span&gt; @Table &lt;span style="color:blue"&gt;values&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;@String&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family: &amp;quot;Courier New&amp;quot;;color:blue;mso-no-proof:yes"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:gray"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family: &amp;quot;Courier New&amp;quot;;color:blue;mso-no-proof:yes"&gt;select&lt;/span&gt;&lt;span style="font-size: 10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt; [Value] &lt;span style="color:blue"&gt;from&lt;/span&gt; @Table&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Variant two – set operation with direct reading from XML:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;max&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; @Delimiter &lt;span style="color:blue"&gt;nchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;1&lt;span style="color:gray"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;&lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:red"&gt;N'1,2,3,4'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Delimeter &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:red"&gt;N','&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:gray; mso-no-proof:yes"&gt;;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:blue;mso-no-proof:yes"&gt;with&lt;/span&gt;&lt;span style="font-size:10.0pt; font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt; Data&lt;span style="color:gray"&gt;(&lt;/span&gt;Test&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;select&lt;/span&gt; Test &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:fuchsia"&gt;cast&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;text-indent:36.0pt;background:#EAF1DD; mso-background-themecolor:accent3;mso-background-themetint:51;mso-layout-grid-align: none;text-autospace:none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:red;mso-no-proof:yes"&gt;N'&lt;1&gt;'&lt;/span&gt;&lt;span style="font-size:10.0pt; font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;text-indent:36.0pt;background:#EAF1DD; mso-background-themecolor:accent3;mso-background-themetint:51;mso-layout-grid-align: none;text-autospace:none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:fuchsia;mso-no-proof:yes"&gt;replace&lt;/span&gt;&lt;span style="font-size:10.0pt; font-family:&amp;quot;Courier New&amp;quot;;color:gray;mso-no-proof:yes"&gt;(&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt;@String&lt;span style="color:gray"&gt;,&lt;/span&gt; @Delimiter&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;N'&lt;1&gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;text-indent:36.0pt;background:#EAF1DD; mso-background-themecolor:accent3;mso-background-themetint:51;mso-layout-grid-align: none;text-autospace:none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:red;mso-no-proof:yes"&gt;'&lt;/1&gt;'&lt;/span&gt;&lt;span style="font-size:10.0pt; font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt; &lt;span style="color:blue"&gt;as&lt;/span&gt; &lt;span style="color:blue"&gt;xml&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;text-indent:36.0pt;background:#EAF1DD; mso-background-themecolor:accent3;mso-background-themetint:51;mso-layout-grid-align: none;text-autospace:none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:gray;mso-no-proof:yes"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;select&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; Nodes&lt;span style="color:gray"&gt;.&lt;/span&gt;Node&lt;span style="color:gray"&gt;.&lt;/span&gt;value&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;N'.'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;N'nvarchar(255)'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;as&lt;/span&gt; [Value]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;from&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; Data&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:gray; mso-no-proof:yes"&gt;cross&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:gray"&gt;apply&lt;/span&gt; Test&lt;span style="color:gray"&gt;.&lt;/span&gt;nodes&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;N'//a'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; Nodes&lt;span style="color:gray"&gt;(&lt;/span&gt;Node&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;What we have done here:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Convert string value to XML by replacing delimiters with XML tag &lt;1&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Convert scalar string variable to rowset using select. Note, instead of scalar variable we can use table and handle multiply strings.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Define rowset as CTE (common table expression) Data. This step is actually, redundant, it just simplifies the code.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Using &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;cross apply&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; select node &lt;1&gt; values from XML&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;        &lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Variant three – set operation with &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;openxml&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;declare&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="color:blue"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;max&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; @Delimiter &lt;span style="color:blue"&gt;nchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;1&lt;span style="color:gray"&gt;),&lt;/span&gt; @docHandle &lt;span style="color:blue"&gt;int&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt;&lt;span style="color:gray"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt;@XML &lt;span style="color:blue"&gt;xml&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @Delimeter &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:red"&gt;N','&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @String &lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;&lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:red"&gt;N'1,2,3,4'&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;set&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; @XML&lt;span style="mso-spacerun:yes"&gt;      &lt;/span&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;&lt;span style="color:gray"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;text-indent:36.0pt;background:#EAF1DD; mso-background-themecolor:accent3;mso-background-themetint:51;mso-layout-grid-align: none;text-autospace:none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:fuchsia;mso-no-proof:yes"&gt;cast&lt;/span&gt;&lt;span style="font-size:10.0pt; font-family:&amp;quot;Courier New&amp;quot;;color:gray;mso-no-proof:yes"&gt;(&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:red;mso-no-proof:yes"&gt;N'&lt;root&gt;&lt;1&gt;'&lt;/root&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;text-indent:36.0pt;background:#EAF1DD; mso-background-themecolor:accent3;mso-background-themetint:51;mso-layout-grid-align: none;text-autospace:none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:fuchsia;mso-no-proof:yes"&gt;replace&lt;/span&gt;&lt;span style="font-size:10.0pt; font-family:&amp;quot;Courier New&amp;quot;;color:gray;mso-no-proof:yes"&gt;(&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt;@String&lt;span style="color:gray"&gt;,&lt;/span&gt; @Delimiter&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;N'&lt;1&gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;text-indent:36.0pt;background:#EAF1DD; mso-background-themecolor:accent3;mso-background-themetint:51;mso-layout-grid-align: none;text-autospace:none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:red;mso-no-proof:yes"&gt;N'&lt;/1&gt;'&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;mso-no-proof:yes"&gt; &lt;span style="color:blue"&gt;as&lt;/span&gt; &lt;span style="color:blue"&gt;xml&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;exec&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:maroon"&gt;sp_xml_preparedocument&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;@docHandle &lt;span style="color:blue"&gt;output&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; @XML&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;select&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; [Value] &lt;span style="color:gray"&gt;=&lt;/span&gt; [text] &lt;span style="color:blue"&gt;from&lt;/span&gt; &lt;span style="color:blue"&gt;openxml&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;@docHandle&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;N'/root/1'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;where&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; [text] &lt;span style="color:gray"&gt;is&lt;/span&gt; &lt;span style="color:gray"&gt;not&lt;/span&gt; &lt;span style="color:gray"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-top:0cm;margin-right:0cm;margin-bottom:0cm; margin-left:36.0pt;margin-bottom:.0001pt;background:#EAF1DD;mso-background-themecolor: accent3;mso-background-themetint:51;mso-layout-grid-align:none;text-autospace: none"&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue; mso-no-proof:yes"&gt;exec&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Courier New&amp;quot;; mso-no-proof:yes"&gt; &lt;span style="color:maroon"&gt;sp_xml_removedocument&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;@docHandle &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Here we use system procedure call to prepare XML for &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;openxml&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; function. Unfortunately, this makes this variant not applicable to use inside functions.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Let’s compare results: first variant 1600 ms, third – 50 seconds (!), second is endless, I have stopped waiting after 30 minutes (!!).  Reading XML with set operation is incredible slower than iterations.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Conclusion is banal: XML is not native structure for SQL Server, reading data from XML is slow, sometimes, very slow operation.  XML cannot be considered as replacement for relational structures, it is good only for storing small portions of loosely structured data, like settings. However, writing to XML is fast operation and can be used in such tricks like in first task.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;PS.&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; The best approaches were used for implementation FX functions &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;getRowsetAsString&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;getStringAsRowset&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;PPS.&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; For sure, second task can be done with regular expressions, but there is no native support for regexp in SQL Server.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-1079982452015015435?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/1079982452015015435/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=1079982452015015435' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/1079982452015015435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/1079982452015015435'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2010/09/sql-server-iterations-vs-set-operations_2994.html' title='SQL Server: iterations vs. set operations with XML'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-4773075474447865397</id><published>2010-09-21T08:24:00.001-07:00</published><updated>2010-09-21T08:24:58.631-07:00</updated><title type='text'>AnjLab.FX.SQLServer</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;&lt;strong&gt;AnjLab.FX&lt;/strong&gt; is .NET framework which includes many various useful tools for NET developers.  This is open source project, hosted on &lt;a target='_blank' href='http://github.com/anjlab/fx'&gt;GitHub&lt;/a&gt;. We, &lt;a target='_blank' href='http://anjlab.com'&gt;AnjLab&lt;/a&gt; team, use FX library in the most of our  NET based projects and  each new project supplements the library with new functions. You can use it without any restrictions. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;AnjLab.FX.SQLServer&lt;/strong&gt; is an independent part of the project, it can be used separately. It is set of tables, T-SQL based procedures, functions and scripts for Microsoft SQL Server 2005/2008. FX objects can be installed on any existing database on SQL Server, the code includes command line setup routine. In result, in given database will be created separate scheme FX where all objects will be located. No other objects or data will be affected.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Below is a list and short descriptions of the most interesting tools from my point of view:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DDL tools&lt;/strong&gt;. Note, some FX functions duplicates standard tools, but do the same things in different style and with many options.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Stored procedure &lt;span style='text-decoration:underline'&gt;&lt;em&gt;ScriptObject&lt;/em&gt;&lt;/span&gt; – returns DDL script for creating given programmability object (stored procedure, view, function, trigger)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stored procedure &lt;span style='text-decoration:underline'&gt;&lt;em&gt;ScriptTable&lt;/em&gt;&lt;/span&gt; – returns DDL script for creating given table, including keys, constraints and indexes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stored procedure &lt;span style='text-decoration:underline'&gt;&lt;em&gt;ScriptEncryptedObject&lt;/em&gt;&lt;/span&gt; – returns DDL script for creating given encrypted programmability object (stored procedure, view, function, trigger). The procedure works in DAC (dedicated admin access) mode.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stored procedure &lt;span style='text-decoration:underline'&gt;&lt;em&gt;ScriptDiagram&lt;/em&gt;&lt;/span&gt; – returns script for creating given diagram&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stored procedure &lt;span style='text-decoration:underline'&gt;&lt;em&gt;ScriptData&lt;/em&gt;&lt;/span&gt; – scripts all data of given table as set of INSERTS. The procedure has many options.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stored procedure &lt;span style='text-decoration:underline'&gt;&lt;em&gt;SearchObjectByText&lt;/em&gt;&lt;/span&gt; - searches SQL Server programmability objects (stored procedures, functions, triggers,     views) by substring in object's body.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Script &lt;span style='text-decoration:underline'&gt;&lt;em&gt;Indexing foreign key fields&lt;/em&gt;&lt;/span&gt; - creates non-clustered indexes for all fields which are used in foreign keys, if they are not indexed.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Date and time&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Function &lt;span style='text-decoration:underline'&gt;&lt;em&gt;CheckLeapYear&lt;/em&gt;&lt;/span&gt; - returns true if year of given date is leap and false in other case.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Function &lt;span style='text-decoration:underline'&gt;&lt;em&gt;ReduceDate&lt;/em&gt;&lt;/span&gt; - for given datetime returns start or end of current hour, day, month, etc,  in other words, truncates datetime.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Function &lt;span style='text-decoration:underline'&gt;&lt;em&gt;GetPeriods&lt;/em&gt;&lt;/span&gt; - returns set of date and time periods (hours, days, months, etc) between given start and end dates.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Table valued tools&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Function &lt;span style='text-decoration:underline'&gt;&lt;em&gt;GetEmptyRowSet&lt;/em&gt;&lt;/span&gt; - returns rowset with defined number of record.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Function &lt;span style='text-decoration:underline'&gt;&lt;em&gt;GetStringAsRowSet&lt;/em&gt;&lt;/span&gt; - returns rowset from string with delimiters&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Other&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Function &lt;span style='text-decoration:underline'&gt;&lt;em&gt;CalculateYield&lt;/em&gt;&lt;/span&gt; - returns yield (in %%), based on time period (taking into account leap years) and revenue.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Function &lt;span style='text-decoration:underline'&gt;&lt;em&gt;ConvertVarbinaryToVarcharHex&lt;/em&gt;&lt;/span&gt; - returns hexadecimal representation of binary data, using chars [0-0a-f].&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Function &lt;span style='text-decoration:underline'&gt;&lt;em&gt;Div&lt;/em&gt;&lt;/span&gt; – just divides one number by another, but handles dividing by zero and converts numbers to float&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Tables&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='text-decoration:underline'&gt;&lt;em&gt;Countries&lt;/em&gt;&lt;/span&gt; - world countries dictionary (in Russian and English) according to ISO 3166 and Russian ОКСМ standards&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='text-decoration:underline'&gt;&lt;em&gt;Currencies&lt;/em&gt;&lt;/span&gt; - world currencies dictionary according to Russian ОКВ standard (Russian language only)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='text-decoration:underline'&gt;&lt;em&gt;MeasurementUnits&lt;/em&gt;&lt;/span&gt; - Russian classification of units of measurement according to Russian ОКЕИ standard (Russian language only)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='text-decoration:underline'&gt;&lt;em&gt;BusinessLegalForms&lt;/em&gt;&lt;/span&gt; - Russian Classification of Organizational and Legal Forms according to Russian ОКПФ standard (Russian language only)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='text-decoration:underline'&gt;&lt;em&gt;IdentityCardTypes&lt;/em&gt;&lt;/span&gt; - Russian personal ID types dictionary (Russian language only)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style='background: #eeece1'&gt;Note, some tools are based on code created by other authors, but all copyrights and information are in place.  All scripts have XML style headers with common information.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-4773075474447865397?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/4773075474447865397/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=4773075474447865397' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/4773075474447865397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/4773075474447865397'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2010/09/anjlabfxsqlserver.html' title='AnjLab.FX.SQLServer'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-3425611214907091995</id><published>2010-02-12T16:51:00.001-08:00</published><updated>2010-02-12T16:51:55.057-08:00</updated><title type='text'>10 лет оффшора</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Не сказать, что я как-то специально что-то считал. И уж тем более, не было желания подводить какие-то итоги и строить планы по поводу некоей круглой даты. Но совершенно случайно сегодня всплыла мысль – а ведь где-то в эти дни исполняется 10 лет, как я занимаюсь разработкой в оффшоре. А точнее, работаю ПМ-щиком в оффшорных командах.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2000-й год. Интернет – Анекдот.ру, РБК, Альтависта, аська, что еще тогда было? Работаю в администрации города. Уже далеко не студент – главный специалист, какие-то переспективы, костюм с галстуком. Проекты довольно интересные, информационный департамент не так давно зародился, все развивается. Может быть странно, но я очень хорошо отношусь ко всем предыдущим местам работы. Эмоции, конечно, разные бывали, но в сухом остатке всегда позитив. Всегда уходил с «багажом» в голове, который давал возможность сделать следующий шаг. Но… зарплата в 70 долларов, да и ту задерживают. Денег тотально не хватает. Когда уходил, не раз слышал – зачем уходить от стабильной зарплаты непонятно куда и зачем. До сих пор остались коллеги, с которыми работал тогда – до сих пор примерно на тех же должностях, делают те же задачи, живут теми же проблемами - время остановилось. Для меня же сменилось несколько эпох.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Итак, обшарпанная комнатка, где собираемся несколько раз в неделю. С бору по сосенке набранная команда, странный заказчик-американец, странные проекты. Так начиналось мое «оффшорничество». Это я сейчас с иронией об этом говорю, а тогда был драйв, небо в алмазах, ожидание переспектив, работа ночами до утра. Ничего мы толком не знали и не умели, но искренне считали себя лучшими и страстно стремились к успеху. Мне повезло, я попал в компанию, где были очень адекватные руководители, у которых многому научился. В то время сколько нибудь организованной ИТ индустрии во Владимире просто не было, мы же занимались разработкой софта на экспорт, да и контакты первые у нас были, каких ни до, ни после не было – один профессор Гарварда, другой миллионер. Увы, ухватили только конец того счастливого времени первой интернет – волны, через несколько месяцев лопнул пузырь доткомов, и пришлось спускаться с неба на землю. А первая поездка в Штаты – это же шок. Это сейчас съездить в Париж на неделю в порядке вещей, тогда было другое время. Жили беднее и проще. Даже магазинов самообслуживания во Владимире не было ни одного. А там – совсем другая жизнь.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;7 лет проработал на одном месте, пережил вместе с компанией взлеты и падения, надежды и разочарования. Ушел, потому что перерос свои рамки в ней, потому что снова, как и в 2000м что-то стало двигаться в голове, потому что пришло время. Ушел в свой бизнес, почти на пустое место по сути. Снова говорили о рискованности ухода от стабильного заработка и снова не прогадал, ни с заработком, ни с ощущением осмысленности жизни.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;10 лет это срок. Больше всего изменился интернет. Если изначально это было не более чем средство ограниченной коммуникации и место для поиска информации, то сейчас он органично заполняет все, ты буквально живашь в нем. Сменилось несколько поколений технологий программирования. Но за десять лет ни написал ни строчки кода приложений, только консервативные реляционные базы данных. И правильно, наверное, все равно мне за ними не успеть, лучше заниматься тем, что лучше получается и приносит удовлетворение. А моим коньком оказалась организация и управление рабочей группой. С профессиональной точки зрения 10 лет можно разделить на два, примерно равных периода. Сначала я верил в процесс, в то, что стоит правильно все организовать, и успех придет автоматически. Во второй «фазе» пришло понимание, сто процесс нельзя ставить во главу угла, он должен  быть адекватным обстановке и не более того, должен гибко именяться под различные ситуации. Процесс не должен заслонять людей.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Так получилось, что 10 лет работал только на американцев. Европа для меня так и осталась terra incognita, западнее Варшавы никогда не был. И менталитет европейцев остается для меня загадкой. Зато узнал США. Был там раз 12 или 13 – Бостон, Нью-Йорк, Чикаго, Сан-Франциско. Красивые, интересные, черт возьми, места. Не могу сказать, полюбил эту страну или восторгался ей. Но проникся, мне она стала как-то близка. Великая страна, чтобы ни говорили. 10 лет назад по английски знал только отдельные слова, сейчас могу, хоть со скрипом, но общаться. Работа на американцев и возможность увидеть все своими глазами, дали уверенность в себе, начисто избавили от комплекса провинциальности, от ощущения, что вот ты здесь изобреташь свой велосипед, а где-то идет настоящая жизнь.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Проекты… их было много, на любой вкус. В первых работах на «заокеанских миллионеров и профессоров» был внешний шик, но не было понимания кому, зачем и почему это нужно. Получаешь особый драйв от чисто практических проектов. От осознания того, что за десятки тысяч километров человек, которого ты знаешь, будет видеть вот этот самый интерфейс, и может вспомнит и тебя. Надеюсь, хорошим словом. Принципы работы с заказчиками, кстати, изменились мало. Люди, в отличие от технологий, почти не меняются.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Денег много не заработал.  Да и теперешний офис принципиально мало отличается от того, что был 10 лет назад. Но ни разу не пожалел о сделанном выборе, получил колоссальное удовольствие, занимаясь тем, что у меня неплохо получается. А сейчас, работая в команде &lt;a href='http://anjlab.com'&gt;AnjLab&lt;/a&gt; получаю кайф еще и от ощущения свободы, от того,ты сам в ответе за все, все зависит от тебя.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Вот как то так!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-3425611214907091995?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/3425611214907091995/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=3425611214907091995' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/3425611214907091995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/3425611214907091995'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2010/02/10.html' title='10 лет оффшора'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-6173279297774644599</id><published>2009-10-29T11:00:00.001-07:00</published><updated>2009-10-29T11:00:59.466-07:00</updated><title type='text'>Мысль о кризисе</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Смотришь новости и возникает легкое дежавю – растущие цены на нефть, растущий рубль – где то это уже было. Все вернулось обратно? – вряд ли. На днях занимался обновлением информации на нашем &lt;a href='http://anjlab.com'&gt;сайте&lt;/a&gt; – много новых &lt;a href='http://anjlab.com/ru/projects'&gt;проектов&lt;/a&gt;, новых заказчиков и &lt;a href='http://anjlab.com/ru/partners'&gt;партнеров&lt;/a&gt; – и возникла мысль, а ведь, по сути,  это итоги прожитого кризисного года. Человек больше всего боится неизвестности,  самое непростое время для нас было в начале, когда приостановилось несколько проектов и совсем неясно было что ожидать. А потом, ничего, нащупали почву под ногами и пошли вперед. В ноябре перехали в новый офис, в декабре запустили &lt;a href='http://planet33.ru'&gt;Планету&lt;/a&gt;, наш первый серьезный венчурный проект. За год не потеряли связей со старыми партнерами, начали отношения с тремя новыми (два в США и один в России), счет проектам пошел на десятки. В то время, как масса компаний вокруг «рубят косты» и стараются выжить, мы как-то незаметно расширились численно, увеличили обороты, осваиваем разные «смежные» виды деятельности, работаем над собственными идеями. В чем причина такого относительного успеха – удача, стечение обстоятельств? Наверное, да, но полагаю, дело не только в этом. За год я насчитал пять совершенно разных проектов, которые объединяет одно – они достались нам в наследство от других разработчиков, заказчик решил сменить коней на переправе. Причины совершенно разные – некоторым нашим предшественникам нужно оторвать руки и настучать ими по голове за те убогие, неработающие, дефективные по своей архитектуре решения, которые они понаделали. Но были и случаи, когда решения были неплохие, исполнитель проффессионален, но оказалась ни к черту организационная составляющая – контакт и взаимопонимание  между исполнителем и заказчиком оказались напрочь утраченными, они просто говорили на разных языках и не понимали друг друга. И все эти пять проектов удалось вывести из тупика.  В этом, наверное, один из секретов – в адекватности,  способности к нешаблонным решениям,  эффективности. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;И мы будем стараться сохранить и укрепить свою «марку». На наше счастье, наш рост был постепенным, без резких колебаний, нам удалось избежать связанных с этим проблем. И в дальнейшем,  надеюсь, будем двигаться в том же направлении – качество важнее количества. Наш бизнес сродни ремеслу. Есть большие компании-фабрики которые с разной степенью успешности применяют промышленные, обезличенные методы разработки, конвейер. К нам же приходят люди, которым нужен продукт на заказ, по мерке. Попытайся мы применить  «промышленные» методы получится дорогое барахло. Только нестандартный подход и уважение к тому что ты делаешь дадут результат.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Цель этого поста не самовосхваление. Все случается так, как должно случится. Кризисы неизбежны по самой природе экономики и они ясно показывают все слабые стороны. Кризисы обостряют конкуренцию и дают дорогу более дерзким, эффективным. Тем, кто оказался в нужное время в нужном месте. Разные компании переживают кризис совершенно по разному – Microsoft падает, Google крепко стоит на ногах, Apple неудержимо растет.  Надеюсь, мы в правильной компании.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-6173279297774644599?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/6173279297774644599/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=6173279297774644599' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/6173279297774644599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/6173279297774644599'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2009/10/blog-post.html' title='Мысль о кризисе'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-236847023763298396</id><published>2009-07-16T10:32:00.000-07:00</published><updated>2009-07-16T11:06:13.872-07:00</updated><title type='text'>20 лет компании ИнрэкоЛАН</title><content type='html'>Поздравляю наших коллег из владимирской компании &lt;a href="http://inrecolan.ru"&gt;ИнрэкоЛАН&lt;/a&gt; с 20-летием фирмы. 20 лет это огромный срок, особенно в непредсказуемой российской действительности. Столько может "прожить" только нестандартная компания, которая гибко лавирует в океане бизнеса, оставаясь всегда на "гребне волны". 10 лет назад, после кризиса 98-года произошел один такой поворот и core business компании стала разработка ПО на заказ. Это были времена, когда искали в Интернете Альтавистой, а коннектились по диалапу...  Мне посчастливилось работать в первой команде разработчиков и я помню удивительный кураж, ощущение единства, осознание того, что мы лучшие, что мы делаем то, что никто не делал. Потом компания росла и матерела, было много интересного, но я с особой теплотой вспоминаю первые года работы в ИнрэкоЛАН. Хотя понимаю, что мы почти ничего тогда толком не знали и не умели, тыкались почти вслепую, набивая шишки. Но каков был настрой! Сейчас моя работа в нашей команде &lt;a href="http://anjlab.com"&gt;AnjLab&lt;/a&gt; во во многом напоминает тот "ранний" период, но на другом профессиональном и организационном уровне, с высоты накопленного опыта. И это мне нравится.&lt;br /&gt;&lt;br /&gt;Ребятам из ИнрэкоЛАН желаю оставиться открытыми ко всему новому, не зашоренными, ищущими. Интересных вам проектов и хороших заказчиков.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-236847023763298396?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/236847023763298396/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=236847023763298396' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/236847023763298396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/236847023763298396'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2009/07/20.html' title='20 лет компании ИнрэкоЛАН'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-505513347518202234</id><published>2009-07-03T08:05:00.000-07:00</published><updated>2009-07-03T09:01:05.911-07:00</updated><title type='text'>10000 visitors</title><content type='html'>&lt;table border="0"&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top"&gt;&lt;br /&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="ширина" height="высота" id="Planet33Object" align="center"&gt;&lt;br /&gt;&lt;param name="movie" value="http://anjlab.com/misc/planet3.swf" /&gt;&lt;br /&gt;&lt;param name="quality" value="high" /&gt;&lt;br /&gt;&lt;param name="bgcolor" value="white" /&gt;&lt;br /&gt;&lt;embed src="http://anjlab.com/misc/planet3.swf" quality="high" name="Planet33SWF" width="240" height="400" align="center" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;По данным Google Analytics, совокупная месячная посещаемость наших сайтов (&lt;a href="http://anjlab.com"&gt;AnjLab&lt;/a&gt;, &lt;a href="http://planet33.ru"&gt;Planet33&lt;/a&gt;, &lt;a href="http://sqlprofiler.googlepages.com/"&gt;SQL Profiler&lt;/a&gt;, &lt;a href="http://outlooktrac.googlepages.com/"&gt;SyncIT&lt;/a&gt;) превысила 10000 посещений. Это примерно на 25% выше среднестатистических значений.&lt;br /&gt;Примерно 90% посещений приходится на Планету и SQL Profiler. На посещаемость этих сайтов оказали влияние рекламная компания Планеты в социальной сети &lt;a href="http://odnoklassiniki.ru"&gt;Одноклассники&lt;/a&gt;, - эксперимент, который дал неплохие результаты, и выход новой версии SQL Profiler, содержащей множество багфиксов.&lt;br/&gt;&lt;br /&gt;Десять тысяч - уже довольно значительная цифра, и посещаемость дает свои результаты. Обращаются владельцы владимирских заведений с вопросами о размещении материалов, приходят программисты с вопросами и исправлениями по SQL Profiler, ну а самое лестный респонс пришел через контактную форму на AnjLab.com. Позволю себе процитировать:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;Друзья, совершенно случайно наткнулся на сайт вашей команды. Я искренне впечатлен и восхищен как вашими проектами и достижениями, так и чувством вкуса и стилем оформления этого сайта. Восхищен не столько потребительски (вроде "смотри - прикольно") , сколько будучи вдохновленным ощущением некоего психического родства - опять же - как в оформлении сайта (я бы сделал именно так), так и в ваших проектах, которые очень точно соответствуют моим собственным интересам. Посчитал бы за честь работать с вами в команде.&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;Честное слово, спасибо, хочется жить и работать!&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-505513347518202234?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/505513347518202234/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=505513347518202234' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/505513347518202234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/505513347518202234'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2009/07/10000-visitors.html' title='10000 visitors'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-7884401216627624160</id><published>2009-04-10T03:03:00.000-07:00</published><updated>2009-04-10T04:22:42.291-07:00</updated><title type='text'>AnjLab - 2 года!</title><content type='html'>Команде &lt;a href="http://anjlab.com"&gt;AnjLab &lt;/a&gt; исполняется два года. Много всего произошло за эти два года, много хороших проектов, новых технологий, интересных встреч. На главное, за чтобы я поднял первый тост, главное осталось без изменений. Мы по прежнему крепкая команда единомышленников, партнеров, людей, для которых AnjLab это не работа, а стиль и часть жизни. Этим мы отличаемся от множества компаний, которые просто разрабатывают программное обеспечение, это позволяет нам достойно переживать и радости и разочарования, этот стиль привлекает к нам многих заказчиков и партнеров. К слову сказать, за два года мы ни разу не занимались целенаправленным поиском заказов, так получается, что они находят нас. Собственно, мы всегда опасались превратиться из команды в "компанию", утратить "самоидентификацию" и микроклимат, столкнуться с многочисленными организационными и психологическими трудностями роста. Но в прошедшем году мы расширились, и я рад , что расщирение не "испортило" команду, новые люди, перед которыми я снимаю свою вязанную шапочку, нашли свое место и сделали нас сильнее.&lt;br /&gt;&lt;br /&gt;Из значительных событий прошедшего года, я бы отметил запуск проекта "&lt;a href="http://planet33.ru"&gt;Планета 33&lt;/a&gt;", веб-ресурса, посвяшенному нашему родному городу Владимир. В проект было вложено много сил и это наш первый "венчурный" проект, доведенный до стадии запуска. Запустившись, проект не умер, а продолжает развиваться. Мы пока сами не представляем во что это выльется, но нам интересно заниматься Планетой, интересно видеть ее развитие. Все же, реализация собственной идеи радикально отличается от работы на заказ. Проект остается для нас полностью некоммерческим, "для души", но мы с осторожным оптимизмом смотрим в будущее, даже в в этот непростой период.&lt;br /&gt;&lt;br /&gt;Планета разрабатывалась и запускалась в самый разгар кризиса. К сожалению, естественной жертвой кризиса, стал другой собственный проект "Шкипер", ориентированный на фондовый рынок. Вообще, осенью прошлого года было смутное чувство, партнеры и заказчики не то чтобы исчезли или свернули деятельность, а как-то затихли. И само-собой получилось, что мы в значительной степени, переориентировались на "экспорт мозгов". Двухмесячный "десант" в Калифорнию в начале года дал нам новые интересные проекты, хорощих знакомых и нового партнера в США. Сейчас, по весне, что-то оживилось в России и мы смотрим в будущее с оптимизмом, если в мире остануться компьютеры, то нужны будут программы к ним и мы без работы не останемся.&lt;br /&gt;&lt;br /&gt;А еще мы переехали в новый офис в самом центре города. Здесь странное сочетание - тихо, уютно, удобно, мы любим это место. А еще... да много что было. Еще сегодня праздник. Ура!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-7884401216627624160?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/7884401216627624160/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=7884401216627624160' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/7884401216627624160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/7884401216627624160'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2009/04/anjlab-2.html' title='AnjLab - 2 года!'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-7037454555221471241</id><published>2009-02-27T22:19:00.000-08:00</published><updated>2009-02-28T00:06:09.901-08:00</updated><title type='text'>Команда снова вместе!</title><content type='html'>"Десант" &lt;a href="http://anjlab.com"&gt;AnjLab&lt;/a&gt; вернулся из Сан-Франциско и, наконец-то, команда снова вместе, чему мы все очень рады! Командировка в США завершилась успешно. Во первых, удалось "спасти" тонущий программный проект, стабилизировать его, вернуть в "рабочую колею". Во-вторых, и это гораздо более важно, как это уже не раз было, наш заказчик, калифорнийская компания &lt;a href="http://www.technoir.net"&gt;TechNoir&lt;/a&gt;, превратилась в нашего нового партнера, с которым, надеюсь, мы сделаем еще немало проектов. И в третьих, параллельно мы провели еще несколько встреч с потенциальными заказчиками, намечаются новые интересные проекты на платформе Linux + Ruby.&lt;br /&gt;&lt;br /&gt;Интересное наблюдение. США - отнюдь не тихая спокойная гавань, укрытая от шторма мирового кризиса. Там тоже очень все не благополучно, невооруженным взглядом видно множество закрывающихся торговых точек и других бизнесов, пустуюшие офисные здания, множество домов на продажу. Но при этом, компании и инвесторы продолжают вкладывать в IT. Компании считают IT составляющую бизнеса настолько важной, что сокращают эту статью расходов не в первую очередь, как у нас, а очень и очень осторожно. Мы встречались с людьми из Gap Online (интернет-магазины известных торговых сетей Gap, Banana Republic, Old Navy), по их словам, очень много бизнесов сейчас перемешается из оффлайна в сеть. Вместо закрытого магазина обязательно остается его веб-версия, вместо дорогой газетно-журнальной рекламы бизнесы все больше используют интернет рекламу, покупатели стали экономить, вместо хождений по распродажам охотнее покупают в Интернет. Все веб-студии Сан-Франциско просто завалены работой. И сравните, буквально на днях мы встречались с коллегами, развивающими один из владимирских порталов, по их словам, спрос на размещение рекламы с начала кризиса упал в 4 раза! И такие "стенания" сейчас слышны повсюду. Многие предприниматели по-прежнему считают IT вообще, и интернет частности, чем-то вроде игрушки, очень непонятной и необязательной статьей расходов. А самое главное, практически никто не рассматривает интернет как серьезный механизм расширения бизнеса. И в случае ухудшения экономической ситуации, все эти "игрушки" попадают под сокращение в первую очередь, иногда просто "на всякий случай", в качестве превентивной меры. Увы, очень печально видеть настолько разную реакцию на происходящее, очевидную "незрелость" как инфраструктуры, так и бизнеса в России в целом. Что ж, придется больше ориентироваться на более стабильных западных заказчиков и ждать улучшения ситуации. &lt;br /&gt;&lt;br /&gt;Ну а Сан-Франциско... Сан-Франциско очень интересный город. И к "городу в стиле диско" он имеет такое же отношение как Владимир к "Владимирскому централу". Город блюза, город хиппи. До свидания, Калифорния, from Russia with love.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KJTSwqF0teE/SajwByAr9SI/AAAAAAAAAN4/M9en5B2YuqA/s1600-h/DSC00012.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_KJTSwqF0teE/SajwByAr9SI/AAAAAAAAAN4/M9en5B2YuqA/s320/DSC00012.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307756074251318562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KJTSwqF0teE/SajwBlT4YOI/AAAAAAAAANw/2Na-48TN3ZE/s1600-h/IMG_0190.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_KJTSwqF0teE/SajwBlT4YOI/AAAAAAAAANw/2Na-48TN3ZE/s320/IMG_0190.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307756070842163426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_KJTSwqF0teE/SajwBL8tziI/AAAAAAAAANo/CudGBVlphS0/s1600-h/IMG_0314.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_KJTSwqF0teE/SajwBL8tziI/AAAAAAAAANo/CudGBVlphS0/s320/IMG_0314.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307756064034115106" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-7037454555221471241?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/7037454555221471241/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=7037454555221471241' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/7037454555221471241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/7037454555221471241'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2009/02/blog-post.html' title='Команда снова вместе!'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_KJTSwqF0teE/SajwByAr9SI/AAAAAAAAAN4/M9en5B2YuqA/s72-c/DSC00012.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-6525680676103930986</id><published>2009-02-03T18:10:00.000-08:00</published><updated>2009-02-03T18:27:08.966-08:00</updated><title type='text'>Gmail Offline</title><content type='html'>Наконец-то! Свершилось то, чего ждали все пользователи Gmail - Google добавил поддержку Gears к своей почте и теперь можно иметь копию почтового ящика на компе и пользоваться ей, если нет интернета. Оригинальное &lt;a href="http://gmailblog.blogspot.com/2009/01/new-in-labs-offline-gmail.html"&gt;сообщение в блоге разработчиков&lt;/a&gt;. Проверили - действительно работает, в оффлайне работаешь в браузере с почтой как в онлайне. Даже письма можно писать в Outbox. Несколько моментов:&lt;br /&gt;- Как обычно,работает только в английской версии с включенной Labs&lt;br /&gt;- При первой синхронизации закачивает весь твой ящик, у меня это 600 метров, заняло несколько часов. Причем есть странность - на основе размера твоего ящика выставляется лимит на синхранизацию в прошлое. Почему то у меня лимит оказался 2 года в прошлое, у товарища, с почти таким же размеров ящика всего 6 месяцев.&lt;br /&gt;- Настроек пока никаких нет. Нельзя выбрать тэги для синхронизации. По умолчанию он первые три лейбла считает trusted и синхронизирует все, trash и spam не синхронизирует, остальное синхронизирует с ограничением по времени.&lt;br /&gt;- Все еще сильно бета (версия 0.1), при синхронизации пару раз отвалился, в оффлайновой моде один раз не запустился.&lt;br /&gt;Несмотря на все недостатки, это действительно то, что нужно. Про Outlook можно больше не вспоминать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-6525680676103930986?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/6525680676103930986/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=6525680676103930986' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/6525680676103930986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/6525680676103930986'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2009/02/gmail-offline.html' title='Gmail Offline'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-8822697100126998582</id><published>2009-01-31T08:21:00.000-08:00</published><updated>2009-01-31T09:10:34.450-08:00</updated><title type='text'>AnjLab в Сан-Франциско</title><content type='html'>Бывает же такое - скорая программисткая помощь! У нашего знакомого и партнера из Сан-Франциско возникли серьезные проблемы с одним из проектов. Как это бывает - неумолимые сроки, недовольный заказчик, ничего не работает... Он принял правильное решение, обратился к нам за "скорой помощью". Сразу после Нового года "реанимационная команда" &lt;a href="http://anjlab.com"&gt;AnjLab &lt;/a&gt;выехала на место, в штат Калифорния, США. Сейчас уже понятно - "пациент" жить будет, ближайший майлстоун, который заказчик проекта ожмдает в начале апреля, пройдем, вероятно, в конце февраля. &lt;br /&gt;&lt;br /&gt;Сан-Франциско - очень интересное место - океан, залив, горы. Сочи. Необычная архитектура, необычный народ - хиппи, геи. Итальянский район, китайский район, много русских. Странно ощущение - по всем признакам вроде мегаполис - даунтаун, метро, театры, фестивали, а в реальности город средней руки - 10 на 10 километров, 700 тысяч населения. Получается город уютный, пешком можно обойти, но в тоже время, столичный, без налета провинциальности. Самый популярный вопрос человеку в отъезде - как там погода у вас? Отвечая всем - погода здесь хорошая - днем +12..15, иногда до 20. Дождей почти нет, о снеге здесь не слыхивали, сухо, когда ветер с моря становится неомфортно, зябко.&lt;br /&gt;&lt;br /&gt;Русские знакомые пригласили нас в гости в Силиконовую Долину. Офис Apple, офис Yahoo!, офис Google, университет Стэнфорда. Громкие имена и ничем ни примечательные здания. Пообщались с местным разработчиками. У них примерно так же как у нас - те же технологии, методы ведения проектов и проблемы. Ничего нового, более того, чем компания больше, тем она консервативней, с трудом меняет технолонии, продукты. Использовать VSS для хранения кода в 2009 году - это нонсенс. Мы ощущаем себя вполне комфортно, никаких комплексов провинциальности. Технологически мы лучше любой средней компании из Долины. Разница в масштабах, у них компания с штатом разработчиков 50 человек считается маленькой, стартапом. И этот стартап здесь в долине реально может рассчитывать на серьезные инвестиции. Наш IT бизнес просто муравейник, если сравнивать с американским.&lt;br /&gt;&lt;br /&gt;Прошел уже почти месяц командировки, впереди еще один. Продолжение следует.&lt;br /&gt;&lt;table border="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KJTSwqF0teE/SYSEiqmYc3I/AAAAAAAAAJs/CJaZo4yPfzc/s1600-h/IMG_1031.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_KJTSwqF0teE/SYSEiqmYc3I/AAAAAAAAAJs/CJaZo4yPfzc/s320/IMG_1031.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5297504792780239730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_KJTSwqF0teE/SYSEiVAAFfI/AAAAAAAAAJk/9C6EvQOeSMs/s1600-h/IMG_0801.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_KJTSwqF0teE/SYSEiVAAFfI/AAAAAAAAAJk/9C6EvQOeSMs/s320/IMG_0801.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5297504786982114802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KJTSwqF0teE/SYSEiP2emuI/AAAAAAAAAJc/yrszhPpK_dA/s1600-h/IMG_0800.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_KJTSwqF0teE/SYSEiP2emuI/AAAAAAAAAJc/yrszhPpK_dA/s320/IMG_0800.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5297504785599994594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_KJTSwqF0teE/SYSEhyIMMOI/AAAAAAAAAJU/4uEZUCMFyEM/s1600-h/IMG_0785.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_KJTSwqF0teE/SYSEhyIMMOI/AAAAAAAAAJU/4uEZUCMFyEM/s320/IMG_0785.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5297504777621221602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_KJTSwqF0teE/SYSEheWHrpI/AAAAAAAAAJM/BwxPNDM6oUE/s1600-h/IMG_1281.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_KJTSwqF0teE/SYSEheWHrpI/AAAAAAAAAJM/BwxPNDM6oUE/s320/IMG_1281.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5297504772310937234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-8822697100126998582?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/8822697100126998582/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=8822697100126998582' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/8822697100126998582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/8822697100126998582'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2009/01/anjlab.html' title='AnjLab в Сан-Франциско'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_KJTSwqF0teE/SYSEiqmYc3I/AAAAAAAAAJs/CJaZo4yPfzc/s72-c/IMG_1031.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-2938002281848255490</id><published>2009-01-05T05:49:00.001-08:00</published><updated>2009-01-05T05:54:33.473-08:00</updated><title type='text'>Happy New Year!</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;AnjLab Team поздравляет всех с наступившим Новым Годом!&lt;br /&gt;&lt;/p&gt;&lt;p/&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://anjlab.com/misc/Logos/AnjLab-Fire.jpg" target="new" align="center"&gt;&lt;img src="http://anjlab.com/misc/Logos/AnjLab-Fire-small.jpg"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-2938002281848255490?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/2938002281848255490/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=2938002281848255490' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/2938002281848255490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/2938002281848255490'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2009/01/happy-new-year.html' title='Happy New Year!'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-4400165504483636932</id><published>2008-12-09T04:20:00.001-08:00</published><updated>2008-12-09T04:39:17.751-08:00</updated><title type='text'>Планета Владимир</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Все разработчики программного обеспечения немного космополиты, и мы, команда &lt;a target='_blank' href='http://anjlab.com'&gt;AnjLab&lt;/a&gt; не исключение. Средства разработки, терминология, методы работы и возникающие проблемы мало различаются в любой стране мира. Интернет стирает границы и позволяет вести совместную работу с партнерами из других стран. Тем не менее, мы остаемся жителями своего города – Владимира, и любим его. Наш небольшой вклад в то, чтобы город стал лучше это новый собственный проект &lt;a target='_blank' href='http://planet33.ru'&gt;Планета33&lt;/a&gt;. Трудно одним словом охарактеризовать этот ресурс. К какой-то мере это «ресторанный гид», но там есть информация о кинотеатрах и магазинах. Плюс к этому проект имеет черты «социальной сети», мы надеемся, что пользователи не только будут получать с Планеты полезную информацию, но и уточнять ее, оставляя комментарии, оценки, предложения. Иначе говоря, Планета это своеобразный ответ на вопрос – что интересного в нашем городе для его жителей, куда можно пойти, где и как поесть, что посмотреть.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Безусловно, Планета, не первый проект такого рода во Владимире. Но новый ресурс кардинально отличается от множества довольно унылых однотипных ресурсов. Во-первых, объемом информации – на сайте представлена не просто адрес и фотография каждого объекта, а исчерпывающие данные – полное актуальное меню ресторанов с ценами, масса фотографий, «панорамные» съемки интерьеров (способ создания таких «панорам» во многом наше собственное know-how), текущее расписание кинотеатров, местоположение объектов на карте и многое другое. Во-вторых, представленная на Планете информация, подготовлена с разрешения и при участии уважаемых владельцев заведений,  для которых все услуги по размещению информации на сайте &lt;a target='_blank' href='http://planet33.ru/owners'&gt;бесплатны&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a target='_blank' href='http://planet33.ru'&gt;Планета33&lt;/a&gt; это полностью наш собственный проект, созданный от идеи до запуска своими руками и на свои средства. Нам очень интересно работать над проектом, обсуждать и воплощать различные идеи, придумывать «технологические фишки» (а их на сайте немало), знакомиться и работать с интересными людьми. Надеюсь, что результат окажется полезен жителям нашего города и будет вызывать только положительные эмоции. Планета только «родилась», есть много идей и предложений по развитию проекта, мы сами пока еще не можем сказать, в какую сторону будет развиваться проект. Мы будем очень рады видеть вас на Планете и услышать ваше мнение и пожелания, предложения о сотрудничестве и идеи. &lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-4400165504483636932?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/4400165504483636932/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=4400165504483636932' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/4400165504483636932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/4400165504483636932'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/12/blog-post.html' title='Планета Владимир'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-2415635381777494867</id><published>2008-09-16T08:49:00.001-07:00</published><updated>2008-09-16T08:49:39.393-07:00</updated><title type='text'>AnjLab.Harvester</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;На сайте &lt;a target='_blank' href='http://anjlab.com/'&gt;AnjLab&lt;/a&gt; появилась информация  о проекте &lt;a target='_blank' href='http://anjlab.com/ru/projects/harvester'&gt;Harvester&lt;/a&gt;, которым мы занимаемся последние несколько месяцев. Информация краткая, поскольку проект коммерческий, разработанная система дает нашему заказчику реальное конкурентное преимущество, и мы не вправе раскрывать деталей разработки. Тем не менее, кое-что рассказать можно. Безусловно, проект стал для нас прорывным и инновационным.  Многое было впервые.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Во-первых, это наш первый по настоящему серьезный коммерческий проект на платформе Linux + Ruby on Rails. До этого были разработки «для себя», морально - технологически мы были готовы, и вот, новый подход пошел. Использование Ruby оказалось вполне оправданным с точки зрения скорости, эффективности и качества разработки. А сейчас, после нескольких месяцев работы системы, можно сказать, что выбранная платформа вполне адекватна с точки зрения производительности и надежности. К слову сказать, что в процессе работы мы перенесли development environment на MacOS X, еще один интересный опыт для нас и отдельная история.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Во-вторых,  это первый проект, использующий по-настоящему распределенную инфраструктуру. Система состоит из десятков агентов, которые выполняют сотни задач и все это на множестве машин. И все это хозяйство управляется централизовано. А в процессе разработки такие интересные вещи, как, например, автоматическая реконфигурация системы с целью балансировки. По-иному организована база данных. С MySQL мы уже работали и знали «вкусности» вроде использования различных «движков», но в Harvester  текущий размер базы около миллиарда записей, и это требует особых подходов:  кластеры, репликация, балансировка нагрузки с использованием MySQL Proxy.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;В-третьих, впервые мы столкнулись с технологией computing cloud. Мысль о том, что можно арендовать, к примеру, винт, причем не настоящий, а виртуальный, и платить за количество операций Read\Write поначалу была очень непривычной. И вот, система работает не на конкретном «железном» сервере, а на целом наборе виртуальных серверов, где-то в недрах Amazon &lt;a href='http://www.amazon.com/gp/browse.html?node=201590011'&gt;Elastic Coumputing Cloud&lt;/a&gt;, причем эти сервера создаются и уничтожаются по мере необходимости.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Мы рады, что получаем деньги за этот проект, получаем удовольствие от того, что делаем интересную вещь, которая приносит кому-то реальную пользу. Но не менее важен опыт и знания, которые мы приобрели в этом проекте, и будем использовать в будущем.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-2415635381777494867?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/2415635381777494867/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=2415635381777494867' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/2415635381777494867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/2415635381777494867'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/09/anjlabharvester.html' title='AnjLab.Harvester'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-3195575512172550612</id><published>2008-06-18T07:22:00.001-07:00</published><updated>2008-06-18T07:22:58.535-07:00</updated><title type='text'>AnjLab.com on English!</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;'Beta' English version of &lt;a target='_blank' href='http://anjlab.com'&gt;AnjLab.com&lt;/a&gt; is online now. Internationalization is made with &lt;a href='http://drupal.org/project/i18n'&gt;i18n&lt;/a&gt; module for Drupal 5.x, which has been not so clear and easy as it would be… Structure of English part is the same as for Russian; the difference is only translated texts. Some 'special' pages like Blog, which contain mixed content, are shared between both languages.  Do not beat me for grammar and style mistakes, my English is not fluent, will fix and lick it bit by bit. All mistake reports and suggestions are appreciated! So, now waiting for huge amount of visitors from English-speaking Internet 8-)&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-3195575512172550612?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/3195575512172550612/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=3195575512172550612' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/3195575512172550612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/3195575512172550612'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/06/anjlabcom-on-english.html' title='AnjLab.com on English!'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-5473857176387702701</id><published>2008-05-28T04:15:00.001-07:00</published><updated>2010-02-11T07:48:43.631-08:00</updated><title type='text'>Хождение за инвестициями: от конкурса до контракта</title><content type='html'>&lt;img alt="" src="http://anjlab.com/misc/Skipper-certificate-small.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Как обещал, продолжаю рассказ о наших приключениях в попытках получить инвестиционное финансирование под проект. Итак, ура,  в марте мы выиграли конкурс на получение инвестиций от &lt;a target="_blank" href="http://fasie.ru/"&gt;государственного фонда&lt;/a&gt;, скооперировавшегося с компанией Microsoft, под проект &lt;a target="_blank" href="http://anjlab.com/ru/projects/skipper"&gt;Шкипер&lt;/a&gt;. Дальнейшее можно описать одной фразой – скоро сказка сказывается, но не скоро дело делается. Наверное, счастливы те, кто имеет дела с бизнес - ангелами и прочими частными инвесторами.  Убедили в перспективности идеи, ударили по рукам, подмахнули бумаги и вперед. С государственными организациями, к коим относится и наш фонд-благодетель, сложнее.  Все происходит небыстро, непросто, соблюдение различных бюрократических требований  явно важнее сути затеи.  Происходящее для меня ассоциировалось с прохождением quest игры. Что пройти уровень надо собрать артефакты, правильным образом их употребить, и пройти дальше.&lt;/p&gt;&lt;p&gt;Среди «артефактов» числятся, например, регистрация программы в Роспатенте (до сих пор не понятно, как можно регистрировать программу, которую еще надо сделать), включение в реестр разрешенных видов деятельности предприятия ведение научных разработок, для чего необходимо изменить устав компании и зарегистрировать его в налоговой инспекции.&lt;/p&gt;&lt;p&gt;За каждым из таких «артефактов» стоит отдельная госорганизация со своими правилами и отдельный мини-квест. В ходе прохождения этой игры я пришел к неожиданному выводу – не надо спешить, нервничать, «подпрыгивать» в общем, ускорить что-то в бюрократической процедуре маловероятно, но, если направление движения верное, то все будет хорошо, главное в нужные моменты проходить «майлстоуны». Так и получилось в итоге, «уровень» завершился ожидаемо, подписанием годового госконтракта. Флегматичная девушка, оформлявшая документы, на вопрос «И что дальше?» спокойно ответила «Дальше – домой. Первый платеж будет в июле». Уровень пройден, но внимательно почитав контракт, я понял, что впереди еще много интересного.&lt;p&gt;Однако, все совсем не плохо. Вся эта бюрократическая возня составила только небольшую часть общей активности. Одним из последствий победы в мартовском конкурсе было приглашение бесплатно участвовать в многодневном семинаре «Start in Garage». Ездил туда Коля Жебрун и тусовка получилась весьма интересная. Хотя бы в смысле налаживания связей с «людьми в теме». Главное, что мы вынесли из этого мероприятия – понимание того, что мы в «мейнстриме», мы не хуже, а во многом сильно лучше других стартапов, претендующих на подобные инвестиции. У нас есть неплохо продуманная концепция, понимание того, что надо делать, некоторые наработки. У нас много предпосылок для успеха.&lt;/p&gt;&lt;p&gt;Главное же, мы продолжали работать над созданием системы. То, что получается, нам даже самим нравится. Полагаю, к моменту собственно началу финансирования мы сотворим нечто, что можно будет где-то применить, то, что мы называем «альфа» или «базовой» версией. Дальше будет год, чтобы довести продукт до коммерческой, продаваемой версии. Время есть, желание есть, даже некоторые деньги будут, все должно получиться!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-5473857176387702701?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/5473857176387702701/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=5473857176387702701' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/5473857176387702701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/5473857176387702701'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/05/blog-post.html' title='Хождение за инвестициями: от конкурса до контракта'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-1099137027971984734</id><published>2008-05-02T01:12:00.000-07:00</published><updated>2008-05-02T01:18:28.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AnjLab'/><title type='text'>RSS на anjlab.com</title><content type='html'>На сайте &lt;a href="http://anjlab.com"&gt;Anjlab &lt;/a&gt; заработали RSS подписки на блог и ленту новостей. Спасибо Роману Батаеву за проявленную настойчивость, которая сподвигла меня разобраться в проблеме.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-1099137027971984734?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/1099137027971984734/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=1099137027971984734' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/1099137027971984734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/1099137027971984734'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/05/rss-anjlabcom.html' title='RSS на anjlab.com'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-1394567509459979261</id><published>2008-04-11T04:18:00.001-07:00</published><updated>2008-04-11T04:18:16.504-07:00</updated><title type='text'>День Первого Коммита</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Сегодня нашей команде &lt;a href='http://anjlab.com'&gt;Anjlab&lt;/a&gt; исполняется год. Точнее, идея работать совместно появилась чуть раньше, а ровно год назад мы приступили к ее практической реализации, то есть, был сделан первый коммит в наш первый проект – &lt;a href='http://anjlab.com/projects/flightmonitor'&gt;FlightMonitor&lt;/a&gt;.  Проект вышел на диво успешный и крайне интересный, он дал нам веру в себя и, некоторое время спустя, мы решились оторваться от твердого берега и пуститься в самостоятельное плавание. Конечно, год это не срок по большому счету, но все же это некая точка, когда нужно обернуться и посмотреть назад. Во первых, мы не утонули, сработались, обрели свой стиль. Появились более-менее постоянные заказы и заказчики, появились свои идеи, которые стараемся продвигать. Во вторых, мы по честному работаем хорошо, мне не стыдно ни за один их проектов, которыми мы занимались. И если когда-нибудь мы будем работать иначе, это станет началом конца. В третьих этот год дал нам массу разнообразного опыта и знаний. Что в минусе. Денег много не заработали, это ладно. Хуже то, что мы медленно развиваемся качественно, не можем перейти на более высокий левел, кредо маленькой команды, которая делает маленькие проекты, начинает напрягать. Возможно, проект &lt;a href='http://anjlab.com/projects/skipper'&gt;Шкипер &lt;/a&gt; будет нашей лестницей наверх, поэтому уделяем ему много внимания, возможно «выстрелит» что-то другое. Будем работать.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Сегодня же «сокращенный рабочий день» и пиво. Ура товарищи!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-1394567509459979261?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/1394567509459979261/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=1394567509459979261' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/1394567509459979261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/1394567509459979261'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/04/blog-post.html' title='День Первого Коммита'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-823953956212700923</id><published>2008-03-30T00:05:00.001-07:00</published><updated>2008-03-30T00:05:09.337-07:00</updated><title type='text'>Проекту Indaba Merchant 5 лет!</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Поздравляю коллег из фирмы «&lt;a href='http://inreco.ru'&gt;Инрэколан&lt;/a&gt;» с юбилеем проекта &lt;a href='http://inrecolan.com/experience/solutions/'&gt;Indaba Merchant&lt;/a&gt;. В 2003 году несколько американских студентов создали стартап по торговле подержанными книгами через Интернет, и нашли разработчиков из России, которые взялись написать софт, реализующий идею.  5 лет это просто огромный срок для IT проектов. Американский стартап превратился в немаленькую фирму, которая входит в десятку крупнейших оптовых продавцов книг на Amazon. Что же касается программной системы, то сейчас это Enterprise Level System с просто колоссальным набором возможностей. За 5 лет через проект прошли десятки людей, сменялись менеджеры и поколения разработчиков, одно время шутили, что каждый уважающий себя .NET разработчик в нашем городе должен поучаствовать в проекте Indaba. Где только не встретишь бывших «индабовцев», в столице трудится с десяток, есть «представители» в Англии, США… Я отдал проекту больше 2х лет и получил громадный опыт, который сделал возможным появление команды &lt;a href='http://anjlab.com'&gt;AnjLab&lt;/a&gt; как самостоятельного проекта. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;По служебной необходимости бывал у заказчиков «на производстве» и до сих пор под впечатлением от размаха дела и организации работ. У нас часто к IT, то есть ко всяким компьютерам-программам, относятся как к чему то дополнительному, вторичному, необходимому разве что для бухгалтеров. Соответственно, разработчики этих дополнительных средств находятся где-то на периферии сознания руководителей, и иногда комплексуют от собственной несильнонужности. Indaba тот случай, когда программная система выступает в роли основного производства, главного инструмента работы, вокруг которого крутится вся жизнь фирмы, работа десятков человек. Своими глазами видеть, что тобою сделанная программа реально, без дураков, приносит пользу людям, используется по настоящему, позволяет зарабатывать деньги – это незабываемое ощущение. Даже как-то самого себя начинаешь больше уважать. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Сейчас над проектом работает молодая команда разработчиков, у них все получается, и я желаю им всяческих удач на этом пути, интересных задач и решений, технологических прорывов и хорошего кода. 5 лет – все еще только начинается! &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-823953956212700923?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/823953956212700923/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=823953956212700923' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/823953956212700923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/823953956212700923'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/03/indaba-merchant-5.html' title='Проекту Indaba Merchant 5 лет!'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-8001600387951080955</id><published>2008-03-10T05:35:00.001-07:00</published><updated>2008-03-10T05:35:16.757-07:00</updated><title type='text'>О работе</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Я сейчас банальные вещи буду говорить, но так случилось, что я сам стал задумываться над ними лишь недавно. В последнее время, слушая в машине приторно-бессмысленную болтовню ведущих популярных радиостанций, я стал отмечать фразы, касающиеся отношения к работе. Смысл их в том, что ведущий подбадривает аудиторию: «ну ничего, еще пару часов и работе конец» или «сегодня пятница, потерпите немного, а вечером веселиться». Треп этот ориентирован на самую широкую аудиторию, значит, эта аудитория хочет это слышать и действительно относится к работе, как к некоей неприятной обязанности,  которой, ради денег, приходится отдавать время. Я этого отношения не разделяю, для меня работа – естественная и неотъемлемая часть жизни, она приносит мне не только средства для существования, но и удовольствие.  Мне никогда не нравились люди, которые работают «с 8 по 17» и в 16.50 выключив компьютер, начисто выкидывают их головы все, чем занимались. До следующего утра.  Уже 8 лет, с тех пор, как я ушел с госслужбы, мой рабочий день не имеет четких границ, что меня очень устраивает.  Я не могу разделить, где кончается работа и начинается «частная жизнь» ни по делам, которыми я занимаюсь, ни по времени.   Я понимаю, можно сказать, что у меня специфическая ситуация, freelance, интернет, стирающий четкие грани.  Но речь идет об отношении к тому, чем занимаешься. Я не настолько хорошо знаю английский, чтобы полностью понимать треп американских ведущих, но абсолютно уверен, что призыв «кончай работать» там не звучит. Протестантская культура, на которой основан «американский образ жизни» возводит работу с разряд главных добродетелей, работать не зазорно, а вот не работать стыдно. Только тот человек достоин уважения кто очень много работал и стал обеспеченным. На эту благодатную почву лег феномен «яппи», пришедший из японской корпоративной культуры, где работа и успех  - основной смысл жизни. А если взглянуть в другую сторону на трудолюбивых китайцев, корейцев.…  Есть, конечно, аборигены разных тропических островов, которые работать откровенно не любят, ну так ведь и довольствуются они малым. У нас же странная система ценностей, в которой на первом месте стоят деньги, успех. А уж каким образом он достигнут, не важно, если для этого не пришлось работать, так даже лучше. Конечно, и у нас есть много трудолюбивых людей, взять хотя бы армию приезжих, которые сейчас «делают» Москву, выживают, добиваются успеха. Но все это, увы,  на фоне «барственных» коренных жителей (не могу представить себе такого разделения в том же Нью-Йорке). Это в столице, куда стекаются лучшие люди, в регионах все много хуже.  Недавно читал в новостях, что рост зарплаты в России чуть ли не 2 раза опережает производительность труда и президент дал поручение все это пофиксить к какому-то там году. Очевидно, что производительность труда это автоматизация, организация работы и пр. Но если человек просто не хочет работать, ничто не повысит производительность его труда.  Давайте работать, чтобы добиваться успеха, и своего личного, и, не побоюсь патетических ноток, страны в целом.  Начнем с малого. В ней &lt;a href='http://anjlab.com'&gt;команде&lt;/a&gt; никогда не будет человека, которому неинтересно то, чем он занимается и который не хочет работать. Это я гарантирую.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-8001600387951080955?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/8001600387951080955/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=8001600387951080955' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/8001600387951080955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/8001600387951080955'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/03/blog-post_10.html' title='О работе'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-1390195514183798517</id><published>2008-03-06T12:26:00.001-08:00</published><updated>2008-03-06T12:26:42.275-08:00</updated><title type='text'>Хождение за инвестициями</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;&lt;a href='http://anjlab.com'&gt;Наша команда&lt;/a&gt;, в том числе, ведет венчурные разработки. Естественно, слово «венчурный» сразу ассоциируется с инвестициями. И естественно, мы об это думали, начиная с первой написанной строчки кода, и даже раньше. Читали материалы о стартапах, статьи на IdeaBlog, рассуждения людей «в теме». Теоретически все довольно просто – у вас есть идея, у «бизнес-ангелов» есть деньги на развитие идеи. Требуется убедительно преподнести свою идею инвестору, доказать серьезность и себя, и business opportunity.  Для «преподнесения» идеи есть много образцов бизнес-планов, рекомендаций, советов и т.д. Но без опыта сложно обернуть идею убедительным описанием, продумать сильные и слабые стороны, подсчитать, хотя бы примерно, экономические аспекты. Причем таким образом, чтобы это «зацепило» незнакомого человека. К тому же, оставались некоторые опасения относительно отношений с инвестором – деньги даются не из личной симпатии, какую роль инвестор будет играть при реализации и продвижении проекта, что будет, если блин окажется комом?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;И вот, первый опыт свершился.  Заход был с самой неожиданной стороны – мы попробовали получить инвестиции от государства (в лице &lt;a href='http://fasie.ru/'&gt;Фонда&lt;/a&gt; содействия малым предприятиям в научно-технической сфере) и примкнувшей к нему компании Microsoft.  Все вместе это называется Программа &lt;a href='http://www.microsoft.com/rus/partner/isv/BusinessStart/default.mspx'&gt;Майкрософт-Бизнес-Старт&lt;/a&gt;. Фонд принимает заявки, организует их отбор и, в конце - концов, выделяет финансирование, контролирует его использование. Microsoft же оказывает техническую, маркетинговую и другую помощь. Прелесть работы с фондом в том, что инвестиции безвозвратные, и ни на какую долю в предприятии государство не претендует. Итак, посмотрели заявки, которые представлялись в прошлые годы, и, наивными провинциалами себя на их фоне не ощутили. Для заявки был выбран проект &lt;a href='http://www.anjlab.com/projects/skipper'&gt;AnjLab Skipper&lt;/a&gt;, как наиболее проработанный со всех точек зрения. Забегая вперед, скажу, что даже проект, в котором, нам казалось, все ясно, описать внятно и полно, ответить на все поставленные вопросы, правильно позиционировать, оказалось довольно непросто. Следует отдать должное системе приема заявок через Интернет &lt;a href='http://fasie-online.ru/'&gt;http://fasie-online.ru/&lt;/a&gt; . Делали ее люди с головой, не просто формально реализуя набор требований, а решая «сверхзадачу» - сделать так, чтобы не сильно подкованный человек мог составить грамотную заявку. Держа в руках распечатку на 18 страницах, чувствуешь, как идея уплотнилась, потяжелела, приобрела реальные черты, пусть пока и размытые.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;На этом этапе, все еще казалось некой игрой. Нет личного общения, нет ощущения «настоящести». Но вот пришло первое персонально адресованное письмо – о том, что заявка принята. Затем сообщили, что заявка прошла формальный технический контроль, прошла экспертизу и набрала баллов достаточно для защиты перед жюри. Потом приглашение на заседание жюри. Вот тут вся затея превратилась из «десятого дела» во что-то, о чем переживаешь, на что надеешься. Поездка в Москву к 9 утра – ночь, шоссе, пробки, опаздываем, бег по метро… Интересная вещь открылась, когда пришли на место, в весьма солидное офисное здание на Новом Арбате – это оказался офис самой Microsoft. То есть, компания принимала живейшее участие во всем конкурсе, по сути, контролировала процесс. Это несколько меняло дело, надо было презентовать проект не безымянным государственным экспертам, а людям из Microsoft, со всеми следующими отсюда нюансами.  Не буду особо рассказывать о собеседовании. Мы сделали, все, что могли на своем уровне, не стушевались, рассказали о чем хотели, с презентациями, примерами и экскурсами в сторону.  Не ощутили себя лишними на фоне других заявителей, тех, кто задавал вопросы, на фоне этого офиса с секретарями, кухнями и видом за Арбат. Я бы даже сказал, что чувствовали себя на одном уровне со всеми окружающими, и даже чуть лучше других заявителей, уставших с ночной дороги из неблизких городов.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Очень правильно то, что результат после таких встреч не объявляют сразу, даже если он уже известен. За 2 недели дальнейшего ожидания все постепенно встает на свои места, затея занимает если не десятое, то пятое место в мыслях, а возможный результат как-то бледнеет.  Я решил опубликовать эту короткую историю независимо от результатов конкурса, потому что этот опыт для нас ценен сам по себе. Чтобы попытаться быть объективным я написал предыдущую часть поста до того, как мы узнали результат.  И вот, сегодня, 6 марта, трепеща, читаем список победителей – ЕСТЬ! Сработало! Шкиперу быть и еще как быть. Сейчас будет еще много организационных дел, а потом будет очень много работы, но главное, идея почти превратилась в нечто осязаемое и долго еще будет частью нашей жизни. Не менее важно то, что мы «запрыгнули» на ступеньку выше – мы не просто команда, пусть даже хороших, разработчиков, оказывается, мы можем еще и продавать себя. Все это надо осмыслить, посмотреть, как будет дальше (обязательно напишу в блоге), пока же, мораль такова – не комплексуйте, не бойтесь неудач и все получится, если сам веришь в успех.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-1390195514183798517?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/1390195514183798517/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=1390195514183798517' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/1390195514183798517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/1390195514183798517'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/03/blog-post.html' title='Хождение за инвестициями'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-7077870287658465510</id><published>2008-02-21T22:34:00.000-08:00</published><updated>2008-02-21T22:52:31.680-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AnjLab'/><title type='text'>AnjLab</title><content type='html'>&lt;p&gt;Свершилось, наконец-то мы нашли время и силы, с сделали сайт нашей команды - &lt;a href="http://anjlab.com" target="_new"&gt;AnjLab.com&lt;/a&gt;. Все тексты - моих рук дело, если где-то заметите пропущенные ляпы - пишите, буду премного благодарен. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Нам результат нравиться, хотя он и не сильно похож на интернет-визитки небольших компаний, но и не было цели сделать его похожим. Не было цели сделать сайт, предназначенный только для потенциальных заказчиков (а то видел я один такой - сначала немного о том, какие они хорошие, а ниже, прямо на первой странице, расценки на разные виды разработок). А что же было:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Желание самовыразиться. Создать контент, который бы нравился нам самим, который можно было бы показывать всем друзьям-знакомым со словами "вот мы".&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Желание для самих себя подвести некоторые итоги - что мы, где мы, зачем.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Желание поиграться с CMS Drupal, на которой работает сайт, пригодится в будущем. Кстати, Drupal оказался действительно мощной штукой, рекомендую.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Вот такой бэкграунд и такой сайт. Объявили внутри себя конкурс на лучгий логотип. Так что, то что сейчас на сайте, вероятно, не окончательная версия.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-7077870287658465510?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/7077870287658465510/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=7077870287658465510' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/7077870287658465510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/7077870287658465510'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/02/anjlab.html' title='AnjLab'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-2143433196145714364</id><published>2008-02-07T07:39:00.001-08:00</published><updated>2008-02-07T07:39:42.862-08:00</updated><title type='text'></title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Классная американская поговорка: &lt;strong&gt;«Доллар тому, кто придумал, десять тому, кто сделал, сто тому, кто продал»&lt;/strong&gt;. Отражает суть вещей…&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-2143433196145714364?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/2143433196145714364/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=2143433196145714364' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/2143433196145714364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/2143433196145714364'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/02/blog-post_07.html' title=''/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-5894762104538595846</id><published>2008-02-06T09:30:00.000-08:00</published><updated>2008-02-06T09:38:48.299-08:00</updated><title type='text'>Установка\обновление базы из командной строки</title><content type='html'>Если исзодники базы хранятся как набор скриптов (schema, procedures, functions, etc), то процедура инсталляции заключается в последовательном их запуске. Можно это сделать из командного файла, используя утилиты командной строки (osql для SQL Server). Файл будет выглядеть примерно так:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@echo off&lt;br /&gt;set OSQLPASSWORD=yourpassword&lt;br /&gt;set server=.\sqlexpress&lt;br /&gt;set user=sa&lt;br /&gt;svn up&lt;br /&gt;for /f "tokens=*" %%a in ('dir /b triggers\*.sql') do osql -S %server% -U %user% -i triggers\%%a &lt;br /&gt;for /f "tokens=*" %%a in ('dir /b procedures\*.sql') do osql -S %server% -U %user% -i procedures\%%a &lt;br /&gt;for /f "tokens=*" %%a in ('dir /b functions\*.sql') do osql -S %server% -U %user% -i functions\%%a &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Здесь предполагается что объекты разных типов находятся в разных каталогах. svn up берет последнюю версию из репозитория Subversion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-5894762104538595846?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/5894762104538595846/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=5894762104538595846' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/5894762104538595846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/5894762104538595846'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/02/blog-post.html' title='Установка\обновление базы из командной строки'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8913242779059219542.post-5994976996773478949</id><published>2008-02-06T09:25:00.000-08:00</published><updated>2008-02-06T09:29:09.436-08:00</updated><title type='text'>Создание индексов на поля, используемые в foreign keys в SQL Server</title><content type='html'>Рекомендуется индексировать поля, которые используется для построения отношений между таблицами (foreign keys). Однако, вручную следить за актуальностью набора индексов довольно муторно, ниже скрипт (для SQL Server 2005), который проверяет наличие индексов на все поля, задействованные в foreign keys и досоздает отсутствующие.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;DECLARE ForeignKeys CURSOR FOR&lt;br /&gt; select fk.name as fkname, so.name as tabname, c.name as colname&lt;br /&gt; from sys.foreign_keys fk &lt;br /&gt; inner join sys.objects so on so.object_id = fk.parent_object_id&lt;br /&gt; inner join sys.foreign_key_columns fkc on fkc.constraint_object_id = fk.object_id&lt;br /&gt; inner join sys.columns c on c.object_id = fkc.parent_object_id and c.column_id = fkc.parent_column_id&lt;br /&gt;&lt;br /&gt;DECLARE @fkname nvarchar(255), @tabname nvarchar(255), @colname nvarchar(255), @sql nvarchar(max)&lt;br /&gt;&lt;br /&gt;OPEN ForeignKeys&lt;br /&gt;FETCH NEXT FROM ForeignKeys INTO @fkname, @tabname, @colname&lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN&lt;br /&gt; IF not exists (select * from sys.indexes where name = N'IX_' + @tabname + N'_' + @colname)&lt;br /&gt; BEGIN&lt;br /&gt;  BEGIN TRY&lt;br /&gt;   SET @sql = N'CREATE NONCLUSTERED INDEX IX_'+ @tabname + N'_' + @colname + N' ON ' + @tabname + N'(' + @colname + N' ASC)'&lt;br /&gt;   EXEC sp_executesql @sql&lt;br /&gt;   print N'Index ' + N'IX_' + @tabname + N'_' + @colname + N' is successfully created'&lt;br /&gt;  END TRY&lt;br /&gt;  BEGIN CATCH&lt;br /&gt;   print N'Error while creating index: ' + N'IX_' + @tabname + N'_' + @colname&lt;br /&gt;  END CATCH&lt;br /&gt; END&lt;br /&gt; FETCH NEXT FROM ForeignKeys INTO @fkname, @tabname, @colname&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;CLOSE ForeignKeys&lt;br /&gt;DEALLOCATE ForeignKeys&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8913242779059219542-5994976996773478949?l=alexzakharov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexzakharov.blogspot.com/feeds/5994976996773478949/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8913242779059219542&amp;postID=5994976996773478949' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/5994976996773478949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8913242779059219542/posts/default/5994976996773478949'/><link rel='alternate' type='text/html' href='http://alexzakharov.blogspot.com/2008/02/foreign-keys-sql-server.html' title='Создание индексов на поля, используемые в foreign keys в SQL Server'/><author><name>Alex Zakharov</name><uri>http://www.blogger.com/profile/12385445005078128379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KJTSwqF0teE/S9QV6ujSfLI/AAAAAAAAARw/GQi9ivbmeQk/S220/az2.gif'/></author><thr:total>1</thr:total></entry></feed>
