<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Attitude Extraction Advances</title>
    <description>A simple and awesome blog theme powered by jekyll.</description>
    <link>https://nicolay-r.github.io/blog/</link>
    <atom:link href="https://nicolay-r.github.io/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>2026-03-20</pubDate>
    <lastBuildDate>Fri, 20 Mar 2026 18:04:43 +0100</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>OHIF Import Measurements</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;The most relevant question raised in OHIF issues: https://github.com/OHIF/Viewers/issues/1800
Version 3.10.2&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3f522c1b-7bd1-4423-a5c0-8995760cc9d3&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;!--more--&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Figure&lt;/strong&gt; The overall limitation of the single route per mode.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Forming Working Prototype&lt;/strong&gt;. We first extract &lt;strong&gt;trackedMeasurements&lt;/strong&gt; and use it as a reference format of data we going to deal with when importing measurments:&lt;/p&gt;
&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurements&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurementService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getMeasurements&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;details&gt;

&lt;summary&gt;
Click to expand reference format
&lt;/summary&gt;

```json
{
    &quot;uid&quot;: &quot;11570db5-d2a8-4868-a6e7-6017bc230710&quot;,
    &quot;SOPInstanceUID&quot;: &quot;1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188095&quot;,
    &quot;FrameOfReferenceUID&quot;: &quot;1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188070&quot;,
    &quot;points&quot;: [ 
        [ 55.84648437499999, 305.7054700285197, 4 ], [ 97.74101562499999, 7.416407528519642, 4 ], [ 176.22343749999993, 170.52578252851958, 4 ], [ -22.635937500000068, 142.59609502851967, 4 ]
    ],
    &quot;textBox&quot;: {
        &quot;hasMoved&quot;: false,
        &quot;worldPosition&quot;: [ 97.74101562499999, 156.56093877851964, 4 ],
        &quot;worldBoundingBox&quot;: {
            &quot;topLeft&quot;: [ 139.63554687499993, 198.4554700285196, 4 ],
            &quot;topRight&quot;: [ 308.889453125, 198.4554700285196, 4 ],
            &quot;bottomLeft&quot;: [ 139.63554687499993, 298.66718750000007, 4 ],
            &quot;bottomRight&quot;: [ 308.889453125, 298.66718750000007, 4 ]
        }
    },
    &quot;isLocked&quot;: false,
    &quot;isVisible&quot;: true,
    &quot;metadata&quot;: {
        &quot;toolName&quot;: &quot;Bidirectional&quot;,
        &quot;viewPlaneNormal&quot;: [ 0, 0, -1 ],
        &quot;viewUp&quot;: [ 0, -1, 0 ],
        &quot;FrameOfReferenceUID&quot;: &quot;1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188070&quot;,
        &quot;referencedImageId&quot;: &quot;wadors:http://127.0.0.1/OrthancNginx/dicom-web/studies/1.2.86.76547135.7.115532.20160916104421/series/1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188084/instances/1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188095/frames/1&quot;,
        &quot;cameraFocalPoint&quot;: [ 176, 176, 4 ],
        &quot;sliceIndex&quot;: 4
    },
    &quot;referenceSeriesUID&quot;: &quot;1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188084&quot;,
    &quot;referenceStudyUID&quot;: &quot;1.2.86.76547135.7.115532.20160916104421&quot;,
    &quot;referencedImageId&quot;: &quot;wadors:http://127.0.0.1/OrthancNginx/dicom-web/studies/1.2.86.76547135.7.115532.20160916104421/series/1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188084/instances/1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188095/frames/1&quot;,
    &quot;frameNumber&quot;: 1,
    &quot;toolName&quot;: &quot;Bidirectional&quot;,
    &quot;displaySetInstanceUID&quot;: &quot;1ab64ffd-230c-d0aa-6161-00fa510e31b8&quot;,
    &quot;label&quot;: &quot;&quot;,
    &quot;displayText&quot;: {
        &quot;primary&quot;: [ &quot;L: 301 mm&quot;, &quot;W: 201 mm&quot; ],
        &quot;secondary&quot;: [ &quot;S: 0 I: 4&quot; ]
    },
    &quot;data&quot;: {
        &quot;imageId:wadors:http://127.0.0.1/OrthancNginx/dicom-web/studies/1.2.86.76547135.7.115532.20160916104421/series/1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188084/instances/1.2.826.0.1.3680043.8.274.1.1.8323329.421317.1748947541.188095/frames/1&quot;: {
            &quot;length&quot;: 301.21672688578593,
            &quot;width&quot;: 200.81115125719057,
            &quot;unit&quot;: &quot;mm&quot;,
            &quot;widthUnit&quot;: &quot;mm&quot;
        }
    },
    &quot;type&quot;: &quot;value_type::shortAxisLongAxis&quot;,
    &quot;source&quot;: {
        &quot;uid&quot;: &quot;53d521c7-de53-3c20-1134-83cd2f1b77d7&quot;,
        &quot;name&quot;: &quot;Cornerstone3DTools&quot;,
        &quot;version&quot;: &quot;0.1&quot;
    },
    &quot;modifiedTimestamp&quot;: 1773825233,
    &quot;isDirty&quot;: true,
    &quot;isSelected&quot;: true
}

```

&lt;/details&gt;

&lt;p&gt;Then we use data to form the following request to measurement service (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;addRawMeasurement&lt;/code&gt;).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: We need to place this code after cornerstone is avaialble to display related content.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next crucial problem is to reshape &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;measurements&lt;/code&gt; and distribute them across &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;addRawMesurements&lt;/code&gt; input parameters.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;First, we need &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;source&lt;/code&gt; that is aligned with the one in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;measurements&lt;/code&gt; by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;guid&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;The same is for further mappings, i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sourceMappings&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;For that, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;measurementService&lt;/code&gt; provides related API:&lt;/p&gt;

    &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Cornerstone3DTools&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_VERSION&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

 &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurementService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getSource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
     &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
     &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_VERSION&lt;/span&gt;
 &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

 &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mappings&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurementService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getSourceMappings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
     &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
     &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_VERSION&lt;/span&gt;
 &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because data don’t have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cachedStats&lt;/code&gt;. Do we have to manually register. We can assign default values &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{}&lt;/code&gt;. And it works!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;However it should not be empty, as in UI you won’t see info about H/Width of the measurement.
    &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;annotation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Manually add.&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;cachedStats&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Therefore we need to put data with key equals to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;referencedImageId&lt;/code&gt; at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cachedStats&lt;/code&gt; as follows:
    &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;c1&quot;&gt;// That duplicates the metadata content but would need for cornerstone to display.&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// See later: requires added imageId.&lt;/span&gt;
  &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;wadors:http://127.0.0.1/OrthancNginx/dicom-web/studies/1.2.86.76547135.7.1323518.20210710080000/series/1.2.826.0.1.3680043.8.274.1.1.8323329.418900.1748947477.387488/instances/1.2.826.0.1.3680043.8.274.1.1.8323329.418900.1748947477.387555/frames/1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;301.21672688578593&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;200.81115125719057&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;unit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;mm&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;widthUnit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;mm&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3a0a919c-e6f8-400a-87a7-56c77ba6129b&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Register annotation UID as well&lt;/strong&gt;
    * This could be done as:
    &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;js
    const annotation = {
        // annotationUID: toolData.annotation.annotationUID,
        annotationUID: &apos;11570db5-d2a8-4868-a6e7-6017bc230710&apos;,
    }
   &lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, is &lt;strong&gt;Problem on cornerstone side with rendering Bidirectional&lt;/strong&gt; measurement.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;By exploring code, this step involves instantiation of the measurement (copy creation). I belive this process not entirely smooth and causes futher misalignments at rendering stage resulted in exceptions.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Then you get an exception:&lt;/p&gt;

        &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Error: getTargetIdImage: targetId must start with &quot;imageId:&quot; or &quot;volumeId:&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;

        &lt;p&gt;because key in cached data should start with “imageId:” …&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;For some reason, cornerstone attempt to draw it with circular tool.
Eitherway the problem for now is that no points (for some reason) is available to render this content.&lt;/p&gt;

        &lt;p&gt;When this call happens.&lt;/p&gt;
        &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;const svgDrawingHelper = getSvgDrawingHelper(element);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
        &lt;p&gt;at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;drawHandles.js&lt;/code&gt;&lt;/p&gt;
        &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;drawHandle(svgDrawingHelper, annotationUID, handleGroupUID, handle, options, i);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;

        &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;handle&lt;/code&gt; is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt;.&lt;/p&gt;

        &lt;p&gt;After further investigations I found that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;activeHandleCanvasCoords&lt;/code&gt; is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;undefined&lt;/code&gt;, which is not equals to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Tools/dist/esm/tools/annotation/BidirectionalTool.js&lt;/code&gt;)&lt;/p&gt;

        &lt;p&gt;Expects &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;activeHandleIndex&lt;/code&gt; that at least should be null (not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;undefined&lt;/code&gt;)&lt;/p&gt;

        &lt;p&gt;&lt;strong&gt;The solution&lt;/strong&gt;: cornerstone expects &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;activeHandleIndex: null&lt;/code&gt;, so we have to add so in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;handles&lt;/code&gt;.&lt;/p&gt;

        &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;annotations&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;handles&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// Important for handling with cornerstone for Bidirectional type.&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;activeHandleIndex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that’s it 🥳&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The function:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;importMeasurement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;measurementService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Cornerstone3DTools&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_VERSION&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurementService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getSource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_VERSION&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mappings&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurementService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getSourceMappings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;CORNERSTONE_3D_TOOLS_SOURCE_VERSION&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;annotationType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;metadata&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;toolName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  
  &lt;span class=&quot;c1&quot;&gt;// TODO. Add label restoration.&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;annotation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;annotationUID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;uid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;metadata&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;metadata&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;cachedStats&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;handles&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;activeHandleIndex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;points&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;measurement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;points&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;matchingMapping&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mappings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;annotationType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;annotationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;nx&quot;&gt;measurementService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addRawMeasurement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;annotationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;annotation&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;matchingMapping&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;toMeasurementSchema&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2026-03/ohif-import-measurements</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2026-03/ohif-import-measurements</guid>
        
        <category>OHIF</category>
        
        <category>DICOM</category>
        
        <category>Cornerstone</category>
        
        <category>Medical Imaging</category>
        
        <category>Measurements</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>I missed the train but got no delays: story of traveling from north to south in the UK</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2fd4a600-6015-42cd-935d-39ca6d9ec23b&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;🖼️ Unexpected traveling plan from &lt;a href=&quot;https://en.wikipedia.org/wiki/Bolton&quot;&gt;Bolton&lt;/a&gt; to London: 1-2 Initial Route ⚫, but I took 3-4 🔴&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Manchester Picadilly station&lt;/strong&gt; represents one of the larges hub that connects South-West UK county. 
Once you calling &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester&quot;&gt;Manchester&lt;/a&gt;, no matter coach or train, you instantly becoming aware of it. 
I used to callig that place for a long time, and it used to be journeys from far away: &lt;a href=&quot;https://en.wikipedia.org/wiki/Newcastle_upon_Tyne&quot;&gt;Newcastle Upon Tyne&lt;/a&gt;, and so far London (Euston train station) in this list. 
However, there is a known psychological effect that finds manipulative applications in certain industries and involves repretitive series of actions with the same outcome.&lt;br /&gt;
Something that you’re doing quite often through the same path makes you &lt;strong&gt;a biased person&lt;/strong&gt; in the particular domain area. 
This is what happened and you may find yourself the same way …&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;I remember once traveling back to the south of the UK with no delays and rush. 
The autopilot mode on traveling, accompanied with the relaed app assistances is what basically relaxes you.
Sometemies you may find it too suspicious and ended up being confused by thinking too much or by raising a wise questions.
The one question that came up to me so far, on my two-leg trip from &lt;a href=&quot;https://en.wikipedia.org/wiki/Bolton&quot;&gt;Bolton&lt;/a&gt; (Manchester suburban train) to London (Euston train station).
And the question was as follows:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;How the hell the app notifies me to take a train that goes absolutely different direction?!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was too lucky to end up into this &lt;strong&gt;right at the arrival time&lt;/strong&gt; of the expected train 🚄. 
Being confused I asked staff on how to call I should call Manchester with this train. 
That’s exacly how my journey of this post begins, accompanied by the following response:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;👧 &lt;em&gt;Well, to call that place you have to change the platform an take the next train.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Believing in confidence of the professionals helps you to cope. So I did.
Only and after a while I realise when the bias works against me: the station is intented to be called was different… 
Different city, which was &lt;a href=&quot;https://en.wikipedia.org/wiki/Blackburn&quot;&gt;Blackburn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That opens the story of how I missed the train but just not entering in it.
Accepting my failure, It was decided to came to the same officer for the related recommendations on picking another traveling route.
As it usually happens in the UK, the officer treat the overall action happened with her assistance as a problem that bothrers her too.
She was intended to help me and later on suggester another route: call &lt;a href=&quot;https://en.wikipedia.org/wiki/Preston,_Lancashire&quot;&gt;Preston&lt;/a&gt; and travel from there to London.&lt;/p&gt;

&lt;p&gt;So I did:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3ade14c0-0ea6-4457-bb9c-4f0643cb84b8&quot; alt=&quot;photo_2024-08-09_11-55-11 (2)&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;📸 Preston train station&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The good aspect is that traveling was free of charge for me 🥳
But then you may wonder: how you can get to the South (London) with the train that has prescribed seats in tickets?
Well, in the UK they have so-called reserved train coaches. They may refer to it as “Universal” and therefore several trains may have “U’ coaches as the one below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/fd23a7f1-f332-495b-b73d-6fd31194acdf&quot; alt=&quot;photo_2024-08-09_11-55-11&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;📸 I took this “U” coach of the train, where anyone is free to take a sit wheereever they wish!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the end, it took me nearly extra 20 minutes delay with this trip to London.
And the conclusion out of it is as follows:&lt;/p&gt;

&lt;p&gt;Nonetheless the whole story and the way staff help makes me happy about service in the UK that is relatd to trains.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;No matter how effective your trip in your mind in terms of train logistics, you may still ended up being travel in opposite directions!&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2024-04/uk-trains-traveling</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2024-04/uk-trains-traveling</guid>
        
        <category>UK</category>
        
        <category>Traveling</category>
        
        <category>Trains</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>Visa Granted but Working permission Refused: 76 days of limbo or ATAS adventures</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://github.com/nicolay-r/blog/assets/14871187/40423fba-33bb-4e88-a534-1a172b7e43e9&quot; alt=&quot;decision&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Picture:&lt;/strong&gt; Observation wheel of the new spot 🎡 or such an adventure traits?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When contranct is about to over or any other circumstaces sings to its termination, 
it becomes a time of personal iterest in eligibility of your further rights to work and stay in country. 
In some cases it might be just a simple switch to another position, but in others causes to issue 
a new VISA.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;For the UK, &lt;strong&gt;&lt;a href=&quot;https://www.gov.uk/skilled-worker-visa&quot;&gt;Skilled worker&lt;/a&gt;&lt;/strong&gt; 💼 is a one of a such a common ways of being employed for foreigners.
Despite the certain benefits, the major drawback of this option is a limitation of your rights. 
All your rights and eligibility to stay in country is restricted to the particular employer.
Depending on the industry or academia as a type of your employment, you may a have a different routes of 
VISA issuing.&lt;/p&gt;

&lt;p&gt;Academia tends to a be a way more tough route due to the additional approvements, necessary for issuing VISA.
And one of them is &lt;a href=&quot;https://www.gov.uk/guidance/academic-technology-approval-scheme&quot;&gt;ATAS, or Academical Technology Approving Scheme&lt;/a&gt;.
In some particular cases, both PhD students and post-doc resarchers &lt;a href=&quot;https://www.gov.uk/guidance/find-out-if-you-require-an-atas-certificate&quot;&gt;might need to apply for this certificate&lt;/a&gt;.
Being relatively simple in submission, the overall ATAS application reviewing process may be counted as  «mini-version of the US 🇺🇸 / Canada 🇨🇦 VISA reviewing process».
It literally &lt;a href=&quot;https://www.gov.uk/guidance/academic-technology-approval-scheme&quot;&gt;prescribes you&lt;/a&gt; (see “How long application take” section) await for 6 weeks in general with &lt;strong&gt;no fast-tracking options&lt;/strong&gt;.
So that, now you aware of applying as early as it possible, with 3 … no, how about &lt;strong&gt;6 months in advance recommendation!&lt;/strong&gt; 🤯
Even more, from the form above you’re also aware of canceling any settiling plans while awaiting for the result decision.&lt;/p&gt;

&lt;p&gt;Unfoturnately and as long as the form says, being NLP researcher in AI and with nationality mentioned in list, I found that I need this ceritficate.
So far, I got 2 and a half months remaining of my eligibility to stay, and that becomes a story of almost 🔥&lt;strong&gt;76 days of limbo&lt;/strong&gt;🔥 awaitance for submitting a new Skilled worker VISA application.
And that time has become a series of lessons learned a hard way.&lt;/p&gt;

&lt;p&gt;Back more than 2 months ago I submitted ATAS by the beginning of October 2023 with further issues corections within following days of the same week.
So that quick response from ATAS department may cause you a relief of their quick interest and your application consideration. 
Even more, that was my second time application, which makes me at least more-or-less proven applicant. 
That means I knew for how long to await for the decision so I can barely arrange the plans.
To clarify, &lt;strong&gt;you’re not eligible for submitting more that 1 ATAS application&lt;/strong&gt; for academia positions in the UK at the time.&lt;/p&gt;

&lt;p&gt;After a 6 weeks of pacient awaitance, the patience has become no longer a working strategy. And that point where you may start investigate how others cope it. 
The latter become a reason I was &lt;a href=&quot;https://www.youtube.com/watch?v=JGRoneLU19E&quot;&gt;running into the following case&lt;/a&gt;, and that makes you guess you’re not the only there with long-term awaitance.
Your overall goal is to obtain &lt;strong&gt;Certificate-of-Sponsorship&lt;/strong&gt;, or CoS in short. 
The latter prescribes your starting day of the contract, and ending day (if applicable and in the case of the fixed term contract).
You may strongly recommend to start being active after 6 weeks and even after 2 months of awaitance! 
Your HR is the only rescue team from this, and you should get the most out of conversation with them.&lt;/p&gt;

&lt;p&gt;Sadly to say, I found the related team in a very improfessional way. 
Through the journey of assisting and finding a way for issuing documents &lt;strong&gt;without ATAS&lt;/strong&gt; took me the whole month!
Throgh this, you realise on how useless the calls to HR and how you should form messages to reach the team.&lt;/p&gt;

&lt;p&gt;So that end of the story that was sorted just in &lt;strong&gt;7 days of my remaining eligiblity to stay in the UK&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;HR team found a way on how to issue Certificate of sponsorship without ATAS certificate. 🎊 (credits to the following &lt;a href=&quot;https://www.youtube.com/watch?v=JGRoneLU19E&quot;&gt;video&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;I’ve submitted my VISA application as &lt;a href=&quot;https://www.gov.uk/skilled-worker-visa/switch-to-this-visa&quot;&gt;switch-to&lt;/a&gt; &lt;em&gt;Skilled Worker VISA&lt;/em&gt; under &lt;a href=&quot;https://assets.publishing.service.gov.uk/media/5a803333e5274a2e8ab4ec46/BRP_OA_information_leaflet_-_July_2016.pdf&quot;&gt;the fast-tracking &lt;/a&gt;service within the UK&lt;/li&gt;
  &lt;li&gt;Got the confirmation from the Home Office, followed by issuing and delivering a new &lt;a href=&quot;https://assets.publishing.service.gov.uk/media/5a803333e5274a2e8ab4ec46/BRP_OA_information_leaflet_-_July_2016.pdf&quot;&gt;Biometric Residene Permit (BRP)&lt;/a&gt; within just &lt;strong&gt;5 working days&lt;/strong&gt; 🏎️&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Credits to the &lt;a href=&quot;https://www.gov.uk/faster-decision-visa-settlement&quot;&gt;VISA fast tracked option&lt;/a&gt; 🎊&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Breathe out, right❓ Yes, and how was that afterwards:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;I got a letter with the &lt;strong&gt;REJECTED&lt;/strong&gt; decision from the ATAS department.&lt;/li&gt;
  &lt;li&gt;Reaching out UK Visas and Immigration service (UKVI) 🤙 I’ve been informed to &lt;a href=&quot;https://portal.oisc.gov.uk/s/adviser-finder&quot;&gt;search for the local legal to contact the Legal Center for Immigration Enquiries&lt;/a&gt;
after a call to UKVI (basically they share only information from GOV.UK)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I called 🤙 and booked an appointment at the local &lt;a href=&quot;https://newcastlelegalcentre.co.uk/&quot;&gt;Legal Center&lt;/a&gt; which is at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;14 West Rd, Newcastle upon Tyne NE4 9HB&lt;/code&gt;,
the next day and been informed to bring all the necessary documents for case explanation.&lt;/p&gt;

&lt;p&gt;During my apporintment, the advisor at legal center has navigate me straightaway to the 
&lt;a href=&quot;https://www.gov.uk/government/publications/workers-and-temporary-workers-guidance-for-sponsors-part-2-sponsor-a-worker&quot;&gt;Sponsor guidance part-2 at GOV.UK&lt;/a&gt;, 
and provide the following and general comments to this case:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Legal advisor&lt;/strong&gt;: If the home office accepts and grants with rights to be in UK under certain conditions, covered by “employment allowed” section
then the overall process of issuing an ATAS certificate is no longer applicable.
The latter means that it may have status “Refused” which &lt;strong&gt;could be treated as “Not Applicable”&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In other words, if your employer accepts the conditions that are later on confirmed by the Home Office,
then it is no longer your responsibility as well as eligibility to have a wrong right to work in the UK.&lt;/p&gt;

&lt;p&gt;The decision of the Home Office is final, so anything that prevents it is likely no longer applicable.
For any further circumstances on that, the employer’s organization is taking responsibility.&lt;/p&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2023-12/visa-granted-work-permission-refused</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2023-12/visa-granted-work-permission-refused</guid>
        
        <category>Visa</category>
        
        <category>UK</category>
        
        <category>ATAS</category>
        
        <category>Visa-application</category>
        
        <category>Academic Approval Scheme</category>
        
        <category>Skilled Worker</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>What&apos;s new in AREkit-ss Sources Sampler 0.24.0 Release</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://github.com/nicolay-r/blog/assets/14871187/1e9a4372-6d26-4655-87ae-b82446a8cd3d&quot; alt=&quot;arekit-ss-24-0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sampling of the contexts with mentioned sentiment relations in it has become even simple to use rather it was before!&lt;/p&gt;

&lt;p&gt;So far we work hard on the following features that make the application of this process as well as the application of the obtained results even more handy.
Here is the upcoming &lt;a href=&quot;https://github.com/nicolay-r/arekit-ss/issues/53&quot;&gt;features and changes&lt;/a&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AREkit-ss&lt;/code&gt; 0.24.0:&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;✔️: Support of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sqlite3&lt;/code&gt; for storing the results&lt;/p&gt;

&lt;p&gt;✔️: Refactored backend of the translator, enhanced translation with masked spans in texts&lt;/p&gt;

&lt;p&gt;✔️: &lt;a href=&quot;https://github.com/nicolay-r/arekit-ss/issues/62&quot;&gt;&lt;strong&gt;Dynamic import&lt;/strong&gt;&lt;/a&gt; and sources registration, which is basically means errors in one source won’t affect the overall behavior of the application.&lt;/p&gt;

&lt;p&gt;✔️: Support for the following collections: &lt;a href=&quot;https://academic.oup.com/bioinformatics/article/39/4/btad161/7099619&quot;&gt;NEREL&lt;/a&gt; and &lt;a href=&quot;https://aclanthology.org/2021.ranlp-1.100/&quot;&gt;BioNEREL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✔️: Other bug fixes aimed on better adaption of the result texts for LLM, optional entities masking flexibilities&lt;/p&gt;

&lt;p&gt;🌟 AREkit “double-s”: &lt;a href=&quot;https://github.com/nicolay-r/arekit-ss&quot;&gt;https://github.com/nicolay-r/arekit-ss&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌟 AREkit core: &lt;a href=&quot;https://github.com/nicolay-r/AREkit&quot;&gt;https://github.com/nicolay-r/AREkit&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2023-10/arekit-ss-0-24-0</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2023-10/arekit-ss-0-24-0</guid>
        
        <category>AREkit</category>
        
        <category>arekit-ss</category>
        
        <category>relations</category>
        
        <category>NEREL</category>
        
        <category>dataset</category>
        
        <category>analysis</category>
        
        <category>reasoning</category>
        
        <category>sampling</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>The Recent Advances in LLM Alignment With Manually Annotated Relations in Mass-Media News</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nicolay-r/blog/master/img/2023-10-01-llm-alignment-logo.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let me share a quick summary and update on misalignment between LLM reasoning and manually annotated relations in mass media-news.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Almost a month ago we discovery the recent advanced in LLM reasoning. All the discussed and analyzed materials were formed into presentation with following slides (in Russian):&lt;/p&gt;

&lt;p&gt;✨ 📰 Slides: https://nicolay-r.github.io/website/data/report_llm2023-nerel.pdf&lt;/p&gt;

&lt;p&gt;Here is the three keypoint you might take out of it:&lt;/p&gt;

&lt;p&gt;💚 1. &lt;strong&gt;High level of agreement.&lt;/strong&gt; Reasoning within context for time-based relations. They are very grammar dependent, which it becomes the may reason model has a huge alignment rate. (Credits to transformer architecture and self-attention)&lt;/p&gt;

&lt;p&gt;💛 2. &lt;strong&gt;Medum level of agreement.&lt;/strong&gt; Locations and position related types of relations. LLM models may end up with non-definitive meaning of relation types. The exceptional cases are: relations that involve well-known politicians and countries.&lt;/p&gt;

&lt;p&gt;❤️ 3. &lt;strong&gt;Low level of agreement&lt;/strong&gt; were mainly caused by (i) terminology misalignment and (ii) sharper reasoning from LLM. This is a case where context is expected to be enriched and/or the meaning of relation type is better described.&lt;/p&gt;

&lt;p&gt;For everything mentioned above, we eleminate such cases as: (i) issues with translation, (ii) network hallucination. If the first was mostly a technical trait of implementation, the hallucination is one thing that still remains poorly covered.&lt;/p&gt;

&lt;p&gt;And thanks for AREkit double-s (AREkit-ss) which makes these studies available to replicate and spread on other languages. Feel free to check out or share them below to sample data with the one line! 🔥&lt;/p&gt;

&lt;p&gt;💻 &lt;a href=&quot;https://github.com/nicolay-r/arekit-ss/issues/52&quot;&gt;https://github.com/nicolay-r/arekit-ss/issues/52&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading, interest and support! 🙏&lt;/p&gt;

&lt;p&gt;🌟 AREkit “double-s”: &lt;a href=&quot;https://github.com/nicolay-r/arekit-ss&quot;&gt;https://github.com/nicolay-r/arekit-ss&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌟 AREkit core: &lt;a href=&quot;https://github.com/nicolay-r/AREkit&quot;&gt;https://github.com/nicolay-r/AREkit&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2023-10/llm-alignment</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2023-10/llm-alignment</guid>
        
        <category>AREkit</category>
        
        <category>arekit-ss</category>
        
        <category>ChatGPT-3.5</category>
        
        <category>GPT</category>
        
        <category>LLM</category>
        
        <category>ChatGPT</category>
        
        <category>relations</category>
        
        <category>NEREL</category>
        
        <category>dataset</category>
        
        <category>analysis</category>
        
        <category>reasoning</category>
        
        <category>sampling</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>How well ChatGPT-3.5 is Aligned With Manually Annotated Relations in Mass-Media News</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://github.com/nicolay-r/blog/assets/14871187/2f59ff36-481e-450e-8c59-c7c4f3efd822&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;The recent LLM capabilities of understanding text relations are insane 🔥 
Especially when it is well and nicely visualized!&lt;/p&gt;

&lt;p&gt;I’ve tried to checkout how ChatGPT-3.5 is aligned with the manually annotated data, and that is what makes me think different about prompts!&lt;/p&gt;

&lt;p&gt;This Wednesday, will be delighted to share the results of the largest known collection of annotated news 📰 in Russian with more than 40 relation types: NEREL 
(&lt;a href=&quot;https://aclanthology.org/2021.ranlp-1.100/&quot;&gt;https://aclanthology.org/2021.ranlp-1.100/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Feel free to join the event for more details 🙌&lt;/p&gt;

&lt;p&gt;🗺 &lt;strong&gt;Talk:&lt;/strong&gt; &lt;a href=&quot;https://www.dropbox.com/scl/fi/xpfxlvxbpswjsxejk69qp/llm-nerel-report.m4v?rlkey=ilng4i53oreh2i27fj6427s7y&amp;amp;dl=0&quot;&gt;https://www.dropbox.com/scl/fi/xpfxlvxbpswjsxejk69qp/llm-nerel-report.m4v?rlkey=ilng4i53oreh2i27fj6427s7y&amp;amp;dl=0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⏰ &lt;strong&gt;When:&lt;/strong&gt; 28 August, 19:00 (GMT+3, Moscow)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Presentation Language:&lt;/strong&gt; Russian 🇷🇺&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Powered by:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌟 Project: &lt;a href=&quot;https://github.com/nicolay-r/arekit-ss&quot;&gt;https://github.com/nicolay-r/arekit-ss&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌟 Library: &lt;a href=&quot;https://github.com/nicolay-r/AREkit&quot;&gt;https://github.com/nicolay-r/AREkit&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2023-08/llm-alignment-talk</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2023-08/llm-alignment-talk</guid>
        
        <category>AREkit</category>
        
        <category>arekit-ss</category>
        
        <category>ChatGPT-3.5</category>
        
        <category>GPT</category>
        
        <category>LLM</category>
        
        <category>ChatGPT</category>
        
        <category>relations</category>
        
        <category>NEREL</category>
        
        <category>dataset</category>
        
        <category>analysis</category>
        
        <category>reasoning</category>
        
        <category>sampling</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>AREkit and What&apos;s new in Release 0.22.1</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/14871187/188810264-d7ea509b-6d6b-4cd4-bebd-cf1f15f9d4a9.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We are happy to announce the &lt;a href=&quot;https://github.com/nicolay-r/AREkit&quot;&gt;AREkit version 21.1&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this post we cover the most imporant changes were done since the prior release.
The complete and large list of the updates could be found on the 
&lt;a href=&quot;https://github.com/nicolay-r/AREkit/releases/tag/v0.22.1-rc&quot;&gt;release page&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;In short we first provide greater support of the BRAT-based annotation in order
to adopt it in your own collections in order to use them for attitudes
annotation and document sampling for training your machine learning.
We proceed to develop a toolset and treat it as a preprocessor for 
&lt;a href=&quot;https://github.com/thunlp/OpenNRE&quot;&gt;OpenNRE framework&lt;/a&gt;. 
OpenNRE allows you to quickly develop a model adopted for the relation extraction specific problem, 
by being based on the JSON-like prepared data in terms of training/fine-tunning/evaluation stages. 
For now, AREkit allows us to do the preprocessing work with 
&lt;a href=&quot;https://github.com/nicolay-r/AREkit/blob/0.22.1-rc/arekit/common/data/input/writers/opennre_json.py&quot;&gt;thespecific writer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Alongside with the AREkit, we also update the &lt;a href=&quot;https://github.com/nicolay-r/ARElight&quot;&gt;ARElight-21.1&lt;/a&gt;. 
The latter allows you to perform the quick stabilization of the
input text from your console.
In terms of the list of the complete changes,
please follow the &lt;a href=&quot;https://github.com/nicolay-r/ARElight/releases/tag/0.22.1-p1&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/14871187/188832503-1bb27da4-97cf-48d7-ae52-026e75c38721.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And finally we have a &lt;a href=&quot;https://github.com/nicolay-r/AREkit/tree/master/tests/tutorials&quot;&gt;nice tutorials journey&lt;/a&gt;! (see image below)
This is a list of examples over
the sequence of the three major points of the application. We collect all the
tutorials and separate them &lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-08/arekit-sources-sampling-pipeline&quot;&gt;onto the three stage&lt;/a&gt;, 
related to:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;embedding the &lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-08/arekit-collection-bind&quot;&gt;custom collection&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;declaration of the pipelines for
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-08/arekit-text-parsing-pipeline&quot;&gt;&lt;strong&gt;text processing&lt;/strong&gt;&lt;/a&gt;;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-08/arekit-text-opinion-annotation-pipeline&quot;&gt;&lt;strong&gt;attitudes annotation&lt;/strong&gt;&lt;/a&gt;;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;contexts with text opinions &lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-09/arekit-sampling-bert&quot;&gt;serialization&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nicolay-r/blog/master/img/arekit-sources-sampling-pipeline.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And all of the mentioned above does not cover all the features added so far.
The complete and large list of the updates you can find on the release page in
greater &lt;a href=&quot;https://github.com/nicolay-r/AREkit/releases/tag/v0.22.1-rc&quot;&gt;details&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thank you for reading!&lt;/p&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2022-10/arekit-release-0-22-1</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2022-10/arekit-release-0-22-1</guid>
        
        <category>AREkit</category>
        
        <category>Release</category>
        
        <category>AREkit-0.22.1</category>
        
        <category>Pipelines</category>
        
        <category>BRAT</category>
        
        <category>OpenNRE</category>
        
        <category>Tutorials</category>
        
        <category>SeqIO</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>Setup JAX framework with GPU support</title>
        <description>&lt;p&gt;Calculation of the derivatives plays a significant role in neural networks tuning. 
The computational effectivenes is very crusial considering a large models and ability to train them.
Besides the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CPU&lt;/code&gt; and one of the most common option for calculations, recent advances finds a significant application of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GPU&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TPUs&lt;/code&gt;
mostly because of a potentially greater performance vs. the central processing unit.
Obvioulsy, such features won’t be available without a special software support, required for networks compilation
towards the targeted processing unit.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JAX&lt;/code&gt;, rougly speaking, is a library, proposed and maintained by Google which combines 
&lt;a href=&quot;https://github.com/hips/autograd&quot;&gt;autograd&lt;/a&gt;
and &lt;a href=&quot;https://www.tensorflow.org/xla&quot;&gt;XLA&lt;/a&gt; 
compiler in order to bring neural networks  onto the computational devices in a most efficient way.
However, speaking about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GPU&lt;/code&gt; and more nn oriented devices as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TPU&lt;/code&gt;, it is pretty important to perform a 
proper library setup in order to make them available to use.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JAX&lt;/code&gt; is widely used for transformers, where &lt;a href=&quot;https://github.com/google-research/t5x&quot;&gt;T5&lt;/a&gt; founds its implementation, 
including other variations formed into another &lt;a href=&quot;https://github.com/google/flaxformer&quot;&gt;flaxformer&lt;/a&gt; project.&lt;/p&gt;

&lt;p&gt;In this post we address on the issue you may encountered with once decided to apply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Jax&lt;/code&gt; library for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GPU&lt;/code&gt; calculations.
It is required to make library frienly and familiar with such toolkits: NVidia CUDA compiler (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ncdu&lt;/code&gt;), CUDA DNN (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cudnn&lt;/code&gt;).
Most of the steps were taken from the &lt;a href=&quot;https://www.youtube.com/watch?v=auksaSl8jlM&quot;&gt;JAX installation with Nvidia CUDA and cudNN support&lt;/a&gt; 
video by &lt;a href=&quot;https://twitter.com/prodramp&quot;&gt;Avkash Chauhan&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;The problem that you may enconter first is that you got installed the ordinary version of the related library dubbed as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jaxlib&lt;/code&gt;.
For example and in case of training T5 model, you may see the following logs:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;xla_bridge.py:356] Unable to initialize backend &lt;span class=&quot;s1&quot;&gt;&apos;tpu_driver&apos;&lt;/span&gt;: NOT_FOUND: Unable to find driver &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;registry given worker:
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;xla_bridge.py:356] Unable to initialize backend &lt;span class=&quot;s1&quot;&gt;&apos;cuda&apos;&lt;/span&gt;: module &lt;span class=&quot;s1&quot;&gt;&apos;jaxlib.xla_extension&apos;&lt;/span&gt; has no attirbute &lt;span class=&quot;s1&quot;&gt;&apos;GpuAllocatorConfig&apos;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;xla_bridge.py:356] Unable to initialize backend &lt;span class=&quot;s1&quot;&gt;&apos;rocm&apos;&lt;/span&gt;: module &lt;span class=&quot;s1&quot;&gt;&apos;jaxlib.xla_extension&apos;&lt;/span&gt; has no attirbute &lt;span class=&quot;s1&quot;&gt;&apos;GpuAllocatorConfig&apos;&lt;/span&gt;
...
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;xla_bdridge.py:363] No GPU/TPU found, falling back to CPU. &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Set &lt;span class=&quot;nv&quot;&gt;TF_CPP_MIN_LOG_LEVEL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0 and rerun &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;more info.&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;At first, let’s say we have installed:&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;jax&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;0.3.21
&lt;span class=&quot;nv&quot;&gt;jaxlib&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;0.3.15
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Here is list of actions required to be performed in order to make it familiar with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GPU&lt;/code&gt; devices:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Uninstall &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jax&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jaxlib&lt;/code&gt; in order to perform its clean installation later:
    &lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pip uninstall jax jaxlib
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cudnn&lt;/code&gt; version checkout:
    &lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; /usr/include/x86_64-linux-gnu/cudnn_v&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.h | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;CUDNN
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Clean install from &lt;a href=&quot;https://storage.googleapis.com/jax-releases/jax_cuda_releases.html&quot;&gt;list of laxlib-cudnn-cuda&lt;/a&gt;.
At this point is pretty important to checkout the version of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cuda&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cudnn&lt;/code&gt; pre-installed and to be used by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jaxlib&lt;/code&gt;;
According to the list of the available &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pip&lt;/code&gt; packages we were down for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jaxlib==0.3.15+cuda11.cudnn82&lt;/code&gt; and therefore 
perform the installation as follows:
    &lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pip &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--upgrade&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;jax&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;0.3.15 &lt;span class=&quot;nv&quot;&gt;jaxlib&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;0.3.15+cuda11.cudnn82 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; https://storage.googleapis.com/jax-releases/cuda11/jaxlib-0.3.15+cuda11.cudnn82-cp39-none-manylinux2014_x86_64.whl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;check out:
    &lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; import jax
&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; jax.devices&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;GpuDevice&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0, &lt;span class=&quot;nv&quot;&gt;process_index&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, ... GpuDevice&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3, &lt;span class=&quot;nv&quot;&gt;process_index&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0&lt;span class=&quot;o&quot;&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;reference&quot;&gt;Reference&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=auksaSl8jlM&quot;&gt;JAX installation with Nvidia CUDA and cudNN support&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/prodramp&quot;&gt;Avkash Chauhan&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2022-10/setup-gpu-availablity-for-jaxlib</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2022-10/setup-gpu-availablity-for-jaxlib</guid>
        
        <category>JAX</category>
        
        <category>T5x</category>
        
        <category>jaxlib</category>
        
        <category>jax</category>
        
        <category>google</category>
        
        <category>cudnn</category>
        
        <category>nvcc</category>
        
        <category>cuda</category>
        
        <category>gpu</category>
        
        <category>autograd</category>
        
        <category>xla</category>
        
        <category>flaxformer</category>
        
        <category>google-research</category>
        
        <category>nvidia</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>AREkit Tutorial: Sample Mass-Media Text Opinions for BERT</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nicolay-r/blog/master/img/arekit-collection-sampling-bert.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial we provide a list of steps required to prepare samples with text opinions for BERT language model.&lt;/p&gt;

&lt;!--more--&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/nicolay-r/AREkit/blob/c66ea454051adfd09d37ed8a6aed143b5e2ab186/tests/tutorials/test_tutorial_pipeline_sampling_bert.py#L71&quot;&gt;Complete tutorial code implementation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This post represents an updated version of the prior one
&lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-05/process-mass-media-relations-with-arekit&quot;&gt;“Process Mass-Media relations for Language Models with AREkit”&lt;/a&gt;
; in the prior one we describe sampling process from scratch and under older API version &lt;em&gt;AREkit-0.22.0&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;sampler-initialization&quot;&gt;Sampler Initialization&lt;/h2&gt;

&lt;p&gt;First, it is necessary to declare labels expected to adopted in further samples preparation process.
In this post we focused on sentiment-related data sampling and therefore considering the following 
set of labels: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Positive&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Negative&lt;/code&gt; and additionally &lt;em&gt;neutral&lt;/em&gt;, type of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NoLabel&lt;/code&gt; which AREkit provides by default.&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Positive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pass&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Negative&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next step, we declare label scaler.
&lt;em&gt;Scaler&lt;/em&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BaseLabelScaler&lt;/code&gt; class) allows us to provide conversion from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Label&lt;/code&gt; type to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uint&lt;/code&gt; values and vice versa.
We declare Sentiment scaller as follows:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SentimentLabelScaler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BaseLabelScaler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__init__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;int_to_label&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OrderedDict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NoLabel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Positive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Negative&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)])&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;uint_to_label&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OrderedDict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NoLabel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Positive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Negative&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)])&lt;/span&gt;
        &lt;span class=&quot;nb&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SentimentLabelScaler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__init__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;int_to_label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;uint_to_label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In terms of the input aspects of the &lt;strong&gt;BERT&lt;/strong&gt; model, 
we deal with a sequence (optionally) separated by a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[SEP]&lt;/code&gt; token onto couple parts, such as:
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TextA&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TextB&lt;/code&gt;.
For the classificational task, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TextB&lt;/code&gt; might be treated as a prompt with the auxilary information 
which might be considered in a result class decission.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;For the sentiment analysis and relation extraction domain you may examine more approaches in 
&lt;a href=&quot;https://github.com/nicolay-r/awesome-sentiment-attitude-extraction&quot;&gt;Awesome Sentiment Attitude Extraction Repository&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At present, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;text_b&lt;/code&gt; template is expected to contain a placeholders for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subject&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;context&lt;/code&gt;,
where &lt;em&gt;context&lt;/em&gt; corresponds to a text part between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subject&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object&lt;/code&gt;.
For texts in Russian, we assign the following &lt;strong&gt;NLI-styled&lt;/strong&gt; (Natural Language Inference) prompt:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;NOTE: you may left &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;text_b_tempalete&lt;/code&gt; as &lt;strong&gt;None&lt;/strong&gt; once you don’t want to consider a separated sequence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;text_b_template&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;{subject} к {object} в контексте : &amp;lt;&amp;lt; {context} &amp;gt;&amp;gt;&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, we focused on text provider.
First, there is a need to setup terms mapper.
Terms mappers allows us to customize the way on how terms will be displayed in samples.
AREkit provides &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BertDefaultStringTextTermsMapper&lt;/code&gt;, in which you may among all 
of the different term types customize mentioned named entities.&lt;/p&gt;

&lt;p&gt;In terms of the latter we have a separated post 
&lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-09/arekit-entity-formatters-examples&quot;&gt;AREkit Tutorial: Entity Values Formatting Examples&lt;/a&gt;.
From that tutorial, here we adopt &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CustomEntitiesFormatter&lt;/code&gt; and assign &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#S&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#O&lt;/code&gt; masks towards the
text opinion participants, i.e. subject and object respectively.&lt;/p&gt;

&lt;p&gt;Depending on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;text_b_template&lt;/code&gt; we may declare a single text provider (i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TextA&lt;/code&gt; only)
or pair-based one:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;terms_mapper&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BertDefaultStringTextTermsMapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;entity_formatter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CustomEntitiesFormatter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;subject_fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#S&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;object_fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#O&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;text_provider&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BaseSingleTextProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;terms_mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; \
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text_b_template&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; \
        &lt;span class=&quot;n&quot;&gt;PairTextProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text_b_template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;terms_mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally we may compose sample rows provider:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;sample_rows_provider&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BaseSampleRowProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;label_provider&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MultipleLabelProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SentimentLabelScaler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()),&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;text_provider&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text_provider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Initialize information related to the samples format and output directory/path.
As for format, there is a need to declare a type inherited from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BaseWriter&lt;/code&gt;.
By default, AREkit provides &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TsvWriter&lt;/code&gt; – is a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CSV&lt;/code&gt;-style formatter.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Side note:&lt;/strong&gt; Tilte prefix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tsv&lt;/code&gt; comes from the format proposed by google-BERT.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;writer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TsvWriter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;write_header&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;samples_io&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SamplesIO&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;out/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;writer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;target_extension&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;.tsv.gz&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;pipeline_item&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BertExperimentInputSerializerPipelineItem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;sample_rows_provider&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sample_rows_provider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;samples_io&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;samples_io&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;save_labels_func&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;lambda&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;balance_func&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;lambda&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DataType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Train&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;running-sampler&quot;&gt;Running Sampler&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/nicolay-r/AREkit/blob/c66ea454051adfd09d37ed8a6aed143b5e2ab186/tests/tutorials/test_tutorial_pipeline_sampling_bert.py#L71&quot;&gt;Complete tutorial code implementation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Please refer to the following posts in order to initialize your text opinion annotation pipeline (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;annot_pipeline&lt;/code&gt;)
and setup Data Folding (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;data_folding&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-08/arekit-text-opinion-annotation-pipeline&quot;&gt;Craft your text-opinion annotation pipeline!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nicolay-r.github.io/blog/articles/2022-09/arekit-sampling&quot;&gt;Data Folding Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or just follow the &lt;a href=&quot;https://github.com/nicolay-r/AREkit/blob/c66ea454051adfd09d37ed8a6aed143b5e2ab186/tests/tutorials/test_tutorial_pipeline_sampling_bert.py#L71&quot;&gt;complete tutorial implemenation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, we can compose pipeline by wrapping a predefined &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pipeline_item&lt;/code&gt; and then run it!
This could be accomplished as follows:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;pipeline&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BasePipeline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;pipeline_item&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;pipeline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;input_data&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
             &lt;span class=&quot;n&quot;&gt;params_dict&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                 &lt;span class=&quot;s&quot;&gt;&quot;data_folding&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data_folding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                 &lt;span class=&quot;s&quot;&gt;&quot;data_type_pipelines&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;annot_pipeline&lt;/span&gt; 
             &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally our result is a content of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;out&lt;/code&gt; directory.
The contents depend on Data Folding format.
For example, in case of the &lt;em&gt;fixed&lt;/em&gt; folding onto &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Train&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Test&lt;/code&gt; data types,
it is expected to see the following set of contents:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./out/
    sample_train.tsv.gz
    sample_test.tsv.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2022-09/arekit-sampling-bert</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2022-09/arekit-sampling-bert</guid>
        
        <category>AREkit</category>
        
        <category>Samples</category>
        
        <category>Neural Networks</category>
        
        <category>BERT</category>
        
        
        <category>POST</category>
        
      </item>
    
      <item>
        <title>AREkit Tutorial: Entity Values Formatting Examples</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/nicolay-r/blog/master/img/arekit-entities.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This short post illustrates implementation of the base entity formatter.
Entity formatter is requred for formatting values of mentioned named entities, masking them.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;AREkit proposes an internal type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OpinionEntityType&lt;/code&gt;, which describes all the possible 
types that opinion participants (subject/object) might be.
This enumeration type includes the following types:&lt;/p&gt;
&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;OpinionEntityType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Enum&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Subject&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;SynonymSubject&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;SynonymObject&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Other&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Implementation of the base class of the &lt;strong&gt;entities formatting&lt;/strong&gt; illustrated in a snippet below:&lt;/p&gt;
&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;StringEntitiesFormatter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;to_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;original_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;raise&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;NotImplementedError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Inherited versions of the base class illustrated below:&lt;/p&gt;
&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;CustomEntitiesFormatter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StringEntitiesFormatter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__init__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;subject_fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;[subject]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;object_fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;[object]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__subj_fmt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;subject_fmt&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__obj_fmt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;object_fmt&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;to_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;original_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;assert&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;isinstance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;original_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OpinionEntityType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Other&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;original_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Value&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OpinionEntityType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;or&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;entity_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OpinionEntityType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SynonymObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__obj_fmt&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OpinionEntityType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Subject&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;or&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;entity_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OpinionEntityType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SynonymSubject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__subj_fmt&lt;/span&gt; 
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;List of the other entity formatters provided out-of-the-box is as follows:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nicolay-r/AREkit/blob/c66ea454051adfd09d37ed8a6aed143b5e2ab186/arekit/contrib/utils/entities/formatters/str_rus_cased_fmt.py#L9&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RussianEntitiesCasedFormatter&lt;/code&gt;&lt;/a&gt; – 
supports russian cases for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subject&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;субъект&lt;/code&gt;) and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;объект&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; It was decided not to mention other adapters since they are related to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CustomEntitiesFormatter&lt;/code&gt; 
described above.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>2026-03-20</pubDate>
        <link>https://nicolay-r.github.io/blog/articles/2022-09/arekit-entity-formatters-examples</link>
        <guid isPermaLink="true">https://nicolay-r.github.io/blog/articles/2022-09/arekit-entity-formatters-examples</guid>
        
        <category>AREkit</category>
        
        <category>Entity</category>
        
        <category>Masking</category>
        
        <category>Examples</category>
        
        
        <category>POST</category>
        
      </item>
    
  </channel>
</rss>
