<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3043709</id><updated>2026-03-30T04:06:21.264-07:00</updated><category term="python"/><category term="aws"/><category term="mysql tips"/><category term="usability"/><category term="pandas"/><category term="mysql"/><category term="shell script"/><category term="mysql case study"/><category term="docker"/><category term="linux tips"/><category term="machine_learning"/><category term="aws_lambda"/><category term="elastic"/><category term="boto"/><category term="unix case study"/><category term="php"/><category term="redshift"/><category term="athena"/><category term="awk"/><category term="nlp"/><category term="mongodb"/><category term="mysql FAQ"/><category term="unicode"/><category term="noSQL"/><category term="php tips"/><category term="aws_cloudformation"/><category term="redis"/><category term="drupal"/><category term="mysql 5.1"/><category term="mysql bug"/><category term="pear"/><category term="splunk"/><category term="api_gateway"/><category term="firefox"/><category term="libreoffice"/><category term="open office"/><category term="openai"/><category term="python FAQ"/><category term="sqlite"/><category term="google"/><category term="tensorflow"/><category term="InnoDB"/><category term="git"/><category term="mysql tips replication"/><category term="ubuntu"/><category term="wikipedia"/><title type='text'>Shantanu&#39;s Blog</title><subtitle type='html'>&lt;b&gt; Database Consultant &lt;/b&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1178</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3043709.post-4618914156104857131</id><published>2026-03-11T21:38:00.000-07:00</published><updated>2026-03-11T21:38:43.656-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="nlp"/><title type='text'>One Model Is All You Need. Really?</title><content type='html'>&lt;p&gt;I have been told that the &quot;tagging-parsed&quot; endpoint is merely an expansion of the &quot;tagging&quot; endpoint of Dharmamitra API, providing additional information while relying on the same underlying model. If both APIs indeed use the same model, it is unclear why their outputs differ significantly. In practice, the &quot;tagging&quot; API often returns incorrect results compared to &quot;tagging-parsed&quot;.&lt;/p&gt;&lt;p&gt;For example, in the following case, the words लहरि, वीचि, and मयाम्&amp;nbsp; returned by the &quot;tagging&quot; API appear to be incorrect:&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;curl -X POST https://dharmamitra.org/api-tagging/tagging/ \ &lt;br /&gt;-H &quot;Content-Type: application/json&quot; \&lt;br /&gt;-d &#39;{&quot;texts&quot;:[&quot;mṛdulasmitāṃśulaharījyotsnāvayasyānvitāmārohatyapavargasauṃdhavalabhīmānandavīcīmayīm&quot;], &quot;grammar_type&quot;:&quot;unsandhied-lemma-morphosyntax&quot;}&#39;&lt;/p&gt;&lt;p&gt;मृदुल स्मित अंशु लहरि ज्योत्स्ना वयस्य अन्विताम् आरोहति अपवर्ग सौंधवल भीम आनन्द वीचि मयाम्&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;However, the &quot;tagging-parsed&quot; endpoint produces a more accurate result:&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;curl -X POST https://dharmamitra.org/api-tagging/tagging-parsed/ \&lt;br /&gt;-H &quot;Content-Type: application/json&quot; \&lt;br /&gt;-d &#39;{&quot;texts&quot;:[&quot;mṛdulasmitāṃśulaharījyotsnāvayasyānvitāmārohatyapavargasauṃdhavalabhīmānandavīcīmayīm&quot;], &quot;grammar_type&quot;:&quot;western&quot;}&#39;&lt;/p&gt;&lt;p&gt;मृदुल स्मित अंशु लहरी ज्योत्स्ना वयस्य अन्विताम् आरोहति अपवर्ग सौंधवल भीम आनन्द वीची मयीम्&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;If the implication is that &quot;tagging-parsed&quot; is suitable for my use case then another issue arises: in several cases it returns no result at all. For instance:&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;curl -X POST https://dharmamitra.org/api-tagging/tagging-parsed/ \&lt;br /&gt;-H &quot;Content-Type: application/json&quot; \&lt;br /&gt;-d &#39;{&quot;texts&quot;:[&quot;mṛdulasmitāṃśulaharījyotsnā&quot;], &quot;grammar_type&quot;:&quot;western&quot;}&#39;&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;p&gt;This request returns no output.&lt;/p&gt;&lt;p&gt;The main developer is already aware of this issue:&lt;/p&gt;&lt;p&gt;https://github.com/sebastian-nehrdich/byt5-sanskrit-analyzers/issues/2&lt;/p&gt;&lt;p&gt;There are many such instances where &quot;tagging-parsed&quot; produces no result. In these situations, switching to the &quot;tagging&quot; API is not a reliable workaround, as it may return incorrect analyses. The alternative would be to fall back on the older Hellwig API, but that too is not entirely accurate. For example, it returns:&lt;/p&gt;&lt;p&gt;मृदुल स्मित अंशुल हरीज्योत्स्ना&lt;/p&gt;&lt;p&gt;which is semantically incorrect. The correct segmentation should be:&lt;/p&gt;&lt;p&gt;मृदुल स्मित अंशु लहरी ज्योत्स्ना&lt;/p&gt;&lt;p&gt;Interestingly, the older data-driven website &quot;Sansadhani&quot; provides the correct result in this case. This means that I currently need to rely on three different models to obtain reasonably reliable results. This situation seems difficult to reconcile with the claim &quot;One Model Is All You Need: ByT5-Sanskrit&quot;!&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/4618914156104857131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/4618914156104857131?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/4618914156104857131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/4618914156104857131'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2026/03/one-model-is-all-you-need-really.html' title='One Model Is All You Need. Really?'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-1079716385950844277</id><published>2025-11-14T21:59:00.000-08:00</published><updated>2025-11-14T21:59:49.960-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="nlp"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>wordcloud using different scripts</title><content type='html'>&lt;p&gt;# Download multi-lingual font GoNotoSouthAsia.ttf&lt;br /&gt;# https://github.com/satbyy/go-noto-universal/releases/&lt;/p&gt;&lt;p&gt;from wordcloud import WordCloud&lt;br /&gt;import matplotlib.pyplot as plt&lt;/p&gt;&lt;p&gt;text = &quot;&quot;&quot;&lt;br /&gt;গমভন গমভন গমভন ગમભન ગમભન ગમભન&lt;br /&gt;गमभन गमभन गमभन गमभन ಗமಭನ ಗமಭನ ಗமಭನ&lt;br /&gt;ଗମଭନ&amp;nbsp; &amp;nbsp;ਗਮਭਨ ਗਮਭਨ&amp;nbsp; గమభన గమభన கமபன கமபன&amp;nbsp; கமபன &lt;br /&gt;&quot;&quot;&quot;&lt;/p&gt;&lt;p&gt;wc = WordCloud(font_path=&quot;/home/GoNotoSouthAsia.ttf&quot;,&lt;br /&gt;width=800, height=400, background_color=&quot;white&quot;&lt;br /&gt;).generate(text)&lt;/p&gt;&lt;p&gt;plt.imshow(wc, interpolation=&quot;bilinear&quot;)&lt;br /&gt;plt.axis(&quot;off&quot;)&lt;br /&gt;plt.show()&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/1079716385950844277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/1079716385950844277?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/1079716385950844277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/1079716385950844277'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/11/wordcloud-using-different-scripts.html' title='wordcloud using different scripts'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-1650504138951491474</id><published>2025-11-01T01:43:00.000-07:00</published><updated>2025-11-01T01:43:43.251-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="aws_lambda"/><category scheme="http://www.blogger.com/atom/ns#" term="nlp"/><title type='text'>fastText Layer on AWS Lambda</title><content type='html'>&lt;p&gt;Facebook research team’s fastText library provides useful methods for text classification. The pre-trained model for language identification is at par with other services offered by Google or AWS. For texts over 100 characters, the detected language is accurate (and low cast) You can integrate the model in AWS lambda function for easy installation.&lt;/p&gt;&lt;p&gt;https://guvenergokce.com/fasttext-layer-on-aws-lambda&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/1650504138951491474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/1650504138951491474?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/1650504138951491474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/1650504138951491474'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/11/fasttext-layer-on-aws-lambda.html' title='fastText Layer on AWS Lambda'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-550888225336057907</id><published>2025-11-01T01:29:00.000-07:00</published><updated>2025-11-01T01:30:23.860-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="aws_lambda"/><title type='text'>Lambda function URL to get the table count</title><content type='html'>&lt;p&gt;&amp;nbsp;I have a dynamoDB table called &quot;sanskritOne&quot; where the users upload words. I need a report of the count of total words collected. I have created a lambda function and I access the function URL to get the exact count.&lt;/p&gt;&lt;p&gt;import json, boto3&lt;br /&gt;def lambda_handler(event, context):&lt;br /&gt;&amp;nbsp; &amp;nbsp; dynamodb_resource = boto3.resource(&#39;dynamodb&#39;, region_name=&#39;us-east-1&#39;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; table = dynamodb_resource.Table(&#39;sanskritOne&#39;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; total = 0&lt;br /&gt;&amp;nbsp; &amp;nbsp; response = table.scan()&lt;br /&gt;&amp;nbsp; &amp;nbsp; total += len(response[&#39;Items&#39;])&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; while &#39;LastEvaluatedKey&#39; in response:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response = table.scan(ExclusiveStartKey=response[&#39;LastEvaluatedKey&#39;])&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; total += len(response[&#39;Items&#39;])&lt;br /&gt;&amp;nbsp; &amp;nbsp; print(f&quot;Real-time item count: {total}&quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; return {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;statusCode&#39;: 200,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;body&#39;: json.dumps(total)&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/550888225336057907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/550888225336057907?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/550888225336057907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/550888225336057907'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/11/lambda-function-url-to-get-table-count.html' title='Lambda function URL to get the table count'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-8035074159220614892</id><published>2025-08-01T23:12:00.000-07:00</published><updated>2025-08-03T01:31:57.808-07:00</updated><title type='text'>Sanskrit Parsing with Google Colab</title><content type='html'>&lt;p&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;1) Goto google colab and create a new notebook.&lt;/span&gt;&lt;/p&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;https://colab.research.google.com/#create=true&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;2) Copy these 5 lines in a cell and run them using Shift + Enter&lt;/span&gt;&lt;div&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;!pip install sanskrit_parser&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;from sanskrit_parser import Parser&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;parser = Parser(output_encoding=&#39;devanagari&#39;)&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;div style=&quot;color: #222222; font-family: Georgia, serif; font-size: small;&quot;&gt;import logging&lt;/div&gt;&lt;div style=&quot;color: #222222; font-family: Georgia, serif; font-size: small;&quot;&gt;logging.getLogger(&#39;sanskrit_parser&#39;).setLevel(logging.WARNING)&lt;/div&gt;&lt;div style=&quot;color: #222222; font-family: Georgia, serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;3) Copy paste these 4 lines in the next cell and run it.&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;text = &#39;तस्मात्समस्त&#39;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;splits = parser.split(text, limit=10)&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;for split in splits:&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; print(f&#39;{split}&#39;)&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;You get the output like this...&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;[&#39;तस्मात्&#39;, &#39;समस्त&#39;]&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;[&#39;तस्मात्&#39;, &#39;सम्&#39;, &#39;अस्त&#39;]&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/8035074159220614892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/8035074159220614892?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/8035074159220614892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/8035074159220614892'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/08/sanskrit-parsing-with-google-colab.html' title='Sanskrit Parsing with Google Colab'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-2209978159985136297</id><published>2025-07-01T01:03:00.000-07:00</published><updated>2025-07-01T01:03:44.646-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'> disable dynamoDB table</title><content type='html'>&lt;p&gt;I have DynamoDB table called &quot;autocorrect&quot; and I need to stop all traffic to/ from this table. I can use resouce-based policy like this...&lt;/p&gt;{&lt;br /&gt;&amp;nbsp; &quot;Version&quot;: &quot;2012-10-17&quot;,&lt;br /&gt;&amp;nbsp; &quot;Id&quot;: &quot;PolicyId&quot;,&lt;br /&gt;&amp;nbsp; &quot;Statement&quot;: [&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Sid&quot;: &quot;AccessDisabledTemporary&quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Effect&quot;: &quot;Deny&quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Principal&quot;: &quot;*&quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Action&quot;: &quot;dynamodb:*&quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Resource&quot;: &quot;arn:aws:dynamodb:us-east-1:XXXX85053566:table/autocorrect&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; ]&lt;br /&gt;}&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/2209978159985136297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/2209978159985136297?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/2209978159985136297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/2209978159985136297'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/07/disable-dynamodb-table.html' title=' disable dynamoDB table'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-3728270296008060778</id><published>2025-06-04T00:26:00.000-07:00</published><updated>2025-06-04T00:45:41.959-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libreoffice"/><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'>Public Appeal to LibreOffice Source Code Contributors</title><content type='html'>&lt;p&gt;LibreOffice is among the finest software applications I have ever used, and I deeply appreciate all the contributions that have made it so feature-rich and reliable. However, I have a humble request: please ensure that every contribution is thoroughly tested before it is merged into the codebase.&lt;/p&gt;&lt;p&gt;If anyone is still reading, I would like to share more information for your consideration.&lt;/p&gt;&lt;p&gt;I would like to see an improvement in the testing process for LibreOffice. When a change is made to the source code, it should ideally undergo review and testing by at least two independent testers, followed by approval from a senior developer.&lt;/p&gt;&lt;p&gt;1) Even seemingly minor or trivial changes in the source code can have significant and potentially disruptive effects on the user experience. For example, a shortcut key combination — Ctrl + Shift + C — was assigned to the &quot;Track Changes&quot; function:&lt;/p&gt;&lt;p&gt;https://gerrit.libreoffice.org/c/core/+/65041&lt;/p&gt;&lt;p&gt;This raised concerns: Who approved this change? Who tested and validated it before it was committed?&lt;/p&gt;&lt;p&gt;Many users, including myself, were confused as to why the &quot;Track Changes&quot; feature was suddenly being triggered unexpectedly. The impact of this change was discussed in the following bug reports:&lt;/p&gt;&lt;p&gt;https://bugs.documentfoundation.org/show_bug.cgi?id=130847&lt;/p&gt;&lt;p&gt;https://bugs.documentfoundation.org/show_bug.cgi?id=134151&lt;/p&gt;&lt;p&gt;2) Another example is the addition of the Alt + 5 shortcut key to activate the Sidebar pane:&lt;/p&gt;&lt;p&gt;https://bugs.documentfoundation.org/show_bug.cgi?id=158112&lt;/p&gt;&lt;p&gt;3) PDF files are now exported to the most recently used directory, rather than the directory of the active document. This change in LibreOffice&#39;s behavior was unexpected and caused inconvenience.&lt;/p&gt;&lt;p&gt;https://bugs.documentfoundation.org/show_bug.cgi?id=165917&lt;/p&gt;&lt;p&gt;4) Additionally, the removal of the &quot;Add to Dictionary&quot; option from the context menu caused inconvenience to many users:&lt;/p&gt;&lt;p&gt;https://bugs.documentfoundation.org/show_bug.cgi?id=166689&lt;/p&gt;&lt;p&gt;Although this particular issue was quickly resolved within five days, it still raises a critical question: Who is responsible for testing and verifying such changes before they are merged? If the &quot;Add to Dictionary&quot; option is not available on right click, proof reading would have become impossible.&lt;/p&gt;&lt;p&gt;To ensure quality and minimize unintended consequences, I recommend establishing a more robust review and testing protocol for code changes.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/3728270296008060778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/3728270296008060778?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/3728270296008060778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/3728270296008060778'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/06/public-appeal-to-libreoffice-source.html' title='Public Appeal to LibreOffice Source Code Contributors'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-7613250942641393169</id><published>2025-06-02T22:31:00.000-07:00</published><updated>2025-06-02T22:31:12.021-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'>Manage AWS resources using command line</title><content type='html'>&lt;p&gt;1) add access key and secret key of a read-only user&lt;/p&gt;&lt;p&gt;aws configure&lt;/p&gt;&lt;p&gt;2) I need to install amazon Q using the instructions found on this page...&lt;/p&gt;&lt;p&gt;https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing-ssh-setup-autocomplete.html&lt;/p&gt;&lt;p&gt;3) I can now start the q service using the command...&lt;/p&gt;&lt;p&gt;./q/bin/q&lt;/p&gt;&lt;p&gt;Use natural language instructions like &quot;list all dynamoDB tables&quot; or &quot;list all S3 buckets&quot;&lt;/p&gt;&lt;p&gt;4) For advance users, I can create MCP server and save database credentials like username and password so that Q can query database and return results.&lt;/p&gt;&lt;p&gt;https://awslabs.github.io/mcp/servers/dynamodb-mcp-server/&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/7613250942641393169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/7613250942641393169?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/7613250942641393169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/7613250942641393169'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/06/manage-aws-resources-using-command-line.html' title='Manage AWS resources using command line'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-6051737613803108260</id><published>2025-04-28T22:11:00.000-07:00</published><updated>2025-04-28T22:11:11.375-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws_lambda"/><title type='text'>Adding a word to dynamoDB table</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;If I need to add a word to dynamoDB table, I use the lambda function.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;The function URL looks like this...&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;https://z2zsnbwispdo5gh2z544bkblbe0amxfb.lambda-url.us-east-1.on.aws/?धर्माद&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;And the code is as follows:&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;import boto3&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;import urllib.parse&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;def lambda_handler(event, context):&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; request_body = event[&#39;rawQueryString&#39;]&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; print (request_body)&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; dynamodb = boto3.resource(&#39;dynamodb&#39;)&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; table = dynamodb.Table(&#39;sanskrit&#39;)&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; key = { &#39;pk&#39;: urllib.parse.unquote(request_body)}&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; table.put_item( Item=key )&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; return {&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;statusCode&#39;: 200,&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;body&#39;: &#39;success&#39;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;It saves the word &quot;धर्माद&quot; to the dynamoDB table &quot;sanskrit&quot;.&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/6051737613803108260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/6051737613803108260?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6051737613803108260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6051737613803108260'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/04/adding-word-to-dynamodb-table.html' title='Adding a word to dynamoDB table'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-6525407511026624163</id><published>2025-02-19T02:19:00.000-08:00</published><updated>2025-02-19T02:19:29.994-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="libreoffice"/><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'>Apply libreoffice styles using a Macro and create PDF</title><content type='html'>&lt;p&gt;I have this dockerfile that is working as expected. I use it to convert a txt file to pdf after formatting it using a style created by macro.&lt;br /&gt;_____&lt;br /&gt;&lt;br /&gt;FROM ubuntu:latest&lt;br /&gt;&lt;br /&gt;# Install LibreOffice and scripting dependencies&lt;br /&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get install -y libreoffice libreoffice-script-provider-python libreoffice-script-provider-bsh libreoffice-script-provider-js&lt;br /&gt;&lt;br /&gt;# Install required dependencies&lt;br /&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget unzip fonts-dejavu&lt;br /&gt;&lt;br /&gt;# Download and install Shobhika font&lt;br /&gt;RUN mkdir -p /usr/share/fonts/truetype/shobhika &amp;amp;&amp;amp; wget -O /tmp/Shobhika.zip https://github.com/Sandhi-IITBombay/Shobhika/releases/download/v1.05/Shobhika-1.05.zip &amp;amp;&amp;amp; unzip /tmp/Shobhika.zip -d /tmp/shobhika &amp;amp;&amp;amp; mv /tmp/shobhika/Shobhika-1.05/*.otf /usr/share/fonts/truetype/shobhika/ &lt;br /&gt;&lt;br /&gt;# Create necessary directories with proper permissions&lt;br /&gt;RUN mkdir -p /app/.config/libreoffice/4/user/basic/Standard&lt;br /&gt;RUN chmod -R 777 /app/.config&lt;br /&gt;&lt;br /&gt;# Set LibreOffice user profile path&lt;br /&gt;ENV UserInstallation=file:///app/.config/libreoffice/4/user&lt;br /&gt;&lt;br /&gt;WORKDIR /app&lt;br /&gt;COPY StyleLibrary.oxt /app/&lt;br /&gt;COPY marathi_spell_check.oxt /app/&lt;br /&gt;COPY myfile.txt /app/&lt;br /&gt;&lt;br /&gt;RUN unopkg add /app/StyleLibrary.oxt --shared&lt;br /&gt;RUN unopkg add /app/marathi_spell_check.oxt --shared&lt;br /&gt;&lt;br /&gt;# Run the LibreOffice macro&lt;br /&gt;CMD soffice --headless --invisible --norestore &quot;macro:///StyleLibrary.Module1.myStyleMacro2(\&quot;/app/myfile.txt\&quot;)&quot;&lt;br /&gt;_____&lt;br /&gt;&lt;br /&gt;# create an image:&lt;br /&gt;docker build -t shantanuo/mylibre .&lt;br /&gt;&lt;br /&gt;# Run the container:&lt;br /&gt;docker run -v .:/app/ --rm shantanuo/mylibre&lt;br /&gt;&lt;br /&gt;As you can see I have applied the styles from StyleLibrary to myfile and then created a pdf document successfully.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/6525407511026624163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/6525407511026624163?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6525407511026624163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6525407511026624163'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/02/apply-libreoffice-styles-using-macro.html' title='Apply libreoffice styles using a Macro and create PDF'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-4592872278986270934</id><published>2025-01-14T22:03:00.000-08:00</published><updated>2025-01-14T22:04:29.180-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="machine_learning"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>RAG made easy using LLama</title><content type='html'>&lt;p&gt;# use virtual environment to install python and packages&lt;/p&gt;&lt;p&gt;uv init ai-app2&lt;/p&gt;&lt;p&gt;cd ai-app2&lt;/p&gt;&lt;p&gt;pip install llama-index&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# download training data&lt;/p&gt;&lt;p&gt;mkdir data&lt;/p&gt;&lt;p&gt;cd data&lt;/p&gt;&lt;p&gt;wget https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt&lt;/p&gt;&lt;p&gt;cd ..&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# start python prompt&lt;/p&gt;&lt;p&gt;python&lt;/p&gt;&lt;p&gt;import os&lt;/p&gt;&lt;p&gt;os.environ[&quot;OPENAI_API_KEY&quot;] = &quot;YOUR_OPENAI_API_KEY&quot;&lt;/p&gt;&lt;p&gt;from llama_index.core import VectorStoreIndex, SimpleDirectoryReader&lt;/p&gt;&lt;p&gt;documents = SimpleDirectoryReader(&quot;data&quot;).load_data()&lt;/p&gt;&lt;p&gt;index = VectorStoreIndex.from_documents(documents)&lt;/p&gt;&lt;p&gt;query_engine = index.as_query_engine()&lt;/p&gt;&lt;p&gt;response = query_engine.query(&quot;What the author do growing up?&quot;)&lt;/p&gt;&lt;p&gt;print(response)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/4592872278986270934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/4592872278986270934?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/4592872278986270934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/4592872278986270934'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2025/01/rag-made-easy-using-llama.html' title='RAG made easy using LLama'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-4287761283559980385</id><published>2024-12-03T20:30:00.009-08:00</published><updated>2024-12-11T01:08:56.934-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'> Avoid uploading a file to S3 again</title><content type='html'>&lt;p&gt;Let&#39;s assume I uploaded a file to S3:&lt;/p&gt;&lt;p&gt;aws s3 cp dictionaries.xcu s3://cf-templates-us-east-1/&lt;/p&gt;&lt;p&gt;I need to update that file only if it does not already exist. In that case I use --if-none-match parameter as shown below:&lt;/p&gt;&lt;p&gt;aws s3api put-object --bucket cf-templates-us-east-1 --key dictionaries.xcu --body dictionaries.xcu --if-none-match &quot;*&quot;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;Returns &quot;An error occurred (PreconditionFailed)&quot;&lt;/p&gt;&lt;p&gt;This will help me while trying to upload a large file again.&lt;/p&gt;&lt;p&gt;_____&lt;/p&gt;&lt;p&gt;Following features are available for S3 Express One Zone:&lt;/p&gt;&lt;p&gt;1) In directory buckets, clients can perform conditional delete checks on an object’s last modified time, size, and Etag using the x-amz-if-match-last-modified-time, x-amz-if-match-size, and HTTP if-match headers.&amp;nbsp;&lt;/p&gt;&lt;p&gt;2) Append data to a file:&lt;/p&gt;&lt;p&gt;aws s3api put-object --bucket cf-templates-us-east-1 --key dictionaries.xcu --body dictionaries.xcu --write-offset-bytes file001.bin&lt;/p&gt;&lt;p&gt;Or use python:&lt;/p&gt;&lt;p&gt;s3.put_object(Bucket=&#39;amzn-s3-demo-bucket--use2-az2--x-s3&#39;, Key=&#39;2024-11-05-sdk-test&#39;, Body=b&#39;123456789&#39;, WriteOffsetBytes=9)&lt;/p&gt;&lt;p&gt;It can not replace your database or Messaging Queues because only a few thousand updates are possible for each object.&lt;/p&gt;&lt;p&gt;3) You can configure S3 Lifecycle rules for S3 Express One Zone to expire objects on your behalf. For example, you can create an S3 Lifecycle rule that expires all objects smaller than 512 KB after 3 days and another rule that expires all objects in a prefix after 10 days.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/4287761283559980385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/4287761283559980385?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/4287761283559980385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/4287761283559980385'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/12/avoid-uploading-file-to-s3-again.html' title=' Avoid uploading a file to S3 again'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-6650434985642779242</id><published>2024-11-17T20:27:00.004-08:00</published><updated>2024-11-17T20:27:32.829-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="nlp"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Language prediction</title><content type='html'>&lt;p&gt;FastText library by facebook has the language detection feature.&lt;/p&gt;&lt;br /&gt;import fasttext&lt;br /&gt;model = fasttext.load_model(&quot;/tmp/lid.176.ftz&quot;)&lt;br /&gt;model.predict(&quot; विकिपीडिया पर&quot;, k=2)&lt;br /&gt;&lt;br /&gt;The above code returns Hindi &quot;hi&quot; correctly. Google also has it&#39;s own library called langdetect. The following code returns Marathi &quot;mr&quot; correctly.&lt;br /&gt;&lt;br /&gt;from langdetect import detect&lt;br /&gt;detect(&quot;आत्मा आणि&quot;)&lt;br /&gt;&lt;br /&gt;The polyglot library has supported this and other language tools since a very long time.&lt;br /&gt;&lt;br /&gt;https://github.com/saffsd/polyglot</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/6650434985642779242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/6650434985642779242?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6650434985642779242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6650434985642779242'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/11/language-prediction.html' title='Language prediction'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-6066910650163356934</id><published>2024-10-28T04:06:00.002-07:00</published><updated>2024-10-28T04:06:15.044-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="awk"/><title type='text'>awk Case Study - 14</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;1) Download stardict files:&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;git clone https://github.com/freedict/fd-dictionaries.git&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;2) Download python package to read stardict files:&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;git clone https://github.com/ilius/pyglossary.git&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;cd pyglossary/&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;cp /home/ubuntu/fd-dictionaries/eng-hin/eng-hin.tei .&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;python3 main.py&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;# convert eng-hin.tei file to out.txt&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Select the first 3 columns:&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Change multiple HTML tags to a single pipe | delimiter&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;and display the first 3 columns&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;awk &#39;{&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; gsub(/&amp;lt;[^&amp;gt;]*&amp;gt;/, &quot;|&quot;);&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; gsub(/\|+/, &quot;|&quot;);&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; match($0, /([^|]*\|){3}/);&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; first_three = substr($0, RSTART, RLENGTH); &amp;nbsp;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; print first_three&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;}&#39; out.txt &amp;gt; test.csv&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/6066910650163356934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/6066910650163356934?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6066910650163356934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6066910650163356934'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/10/awk-case-study-14.html' title='awk Case Study - 14'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-5507721796859641236</id><published>2024-10-04T04:28:00.000-07:00</published><updated>2024-10-04T04:28:23.418-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="awk"/><category scheme="http://www.blogger.com/atom/ns#" term="nlp"/><title type='text'>awk Case Study - 13</title><content type='html'>&lt;p&gt;I have 2 text files. corpus file is the collection of words and exclude file has all the suffixes. I need to extract the stemmed words after removing all suffixes.&lt;/p&gt;==&amp;gt; exclude.txt &amp;lt;==&lt;br /&gt;works&lt;br /&gt;ed&lt;br /&gt;s&lt;br /&gt;ing&lt;br /&gt;ings&lt;br /&gt;&lt;br /&gt;==&amp;gt; corpus.txt &amp;lt;==&lt;br /&gt;worked&lt;br /&gt;working&lt;br /&gt;works&lt;br /&gt;tested&lt;br /&gt;tests&lt;br /&gt;find&lt;br /&gt;found&lt;br /&gt;workings&lt;br /&gt;&lt;br /&gt;awk -f tst.awk exclude.txt corpus.txt | sort&lt;br /&gt;&lt;br /&gt;unmatched find&lt;br /&gt;unmatched found&lt;br /&gt;matched working/s&lt;br /&gt;matched work/ed,ing,s,ings&lt;br /&gt;matched test/ed,s&lt;br /&gt;&lt;br /&gt;And the awk script will look something like this...&lt;br /&gt;&lt;br /&gt;$ cat tst.awk&lt;br /&gt;{ lineLgth = length($0) }&lt;br /&gt;NR == FNR {&lt;br /&gt;&amp;nbsp; &amp;nbsp; suffixes[$0]&lt;br /&gt;&amp;nbsp; &amp;nbsp; sfxLgths[lineLgth]&lt;br /&gt;&amp;nbsp; &amp;nbsp; next&lt;br /&gt;}&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; base = &quot;&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; for ( sfxLgth in sfxLgths ) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; baseLgth = lineLgth - sfxLgth&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( baseLgth &amp;gt; 0 ) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sfx = substr($0,baseLgth+1)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( sfx in suffixes ) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; base = substr($0,1,baseLgth)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bases2sfxs[base] = bases2sfxs[base] &quot;,&quot; sfx&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; if ( base == &quot;&quot; ) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;unmatched&quot;, $0&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;END {&lt;br /&gt;&amp;nbsp; &amp;nbsp; for ( base in bases2sfxs ) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sub(/,/,&quot;/&quot;,bases2sfxs[base])&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;matched&quot;, base bases2sfxs[base]&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/5507721796859641236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/5507721796859641236?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/5507721796859641236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/5507721796859641236'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/10/awk-case-study-13.html' title='awk Case Study - 13'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-6476843885709107269</id><published>2024-09-28T22:16:00.000-07:00</published><updated>2024-09-28T22:16:42.423-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="firefox"/><category scheme="http://www.blogger.com/atom/ns#" term="libreoffice"/><category scheme="http://www.blogger.com/atom/ns#" term="linux tips"/><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'>Firefox and Libreoffice in your browser</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Kasm VNC is a modern open source VNC server.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Quickly connect to your Linux server&#39;s desktop from any web browser.&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;No client software install required.&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;1) Firefox using VNC&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;docker run -d \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;--name=firefox \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;-e PUID=1000 \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;-e PGID=1000 \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;-e TZ=Etc/UTC \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;-p 3000:3000 \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;-p 3001:3001 \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;-v /path/to/config2:/config \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;--shm-size=&quot;1gb&quot; \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;--restart unless-stopped \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;lscr.io/linuxserver/firefox:latest&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;2) Libreoffice using VNC&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;docker run -d \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; --name=libreoffice \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; --security-opt seccomp=unconfined `#optional` \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; -e PUID=1000 \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; -e PGID=1000 \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; -e TZ=Etc/UTC \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; -p 3000:3000 \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; -p 3001:3001 \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; -v /path/to/config:/config \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; --restart unless-stopped \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; lscr.io/linuxserver/libreoffice:latest&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/6476843885709107269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/6476843885709107269?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6476843885709107269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6476843885709107269'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/09/firefox-and-libreoffice-in-your-browser.html' title='Firefox and Libreoffice in your browser'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-4562711624597263363</id><published>2024-09-24T22:41:00.000-07:00</published><updated>2024-09-27T02:55:44.524-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="libreoffice"/><title type='text'> export to pdf using linux command</title><content type='html'>&lt;p&gt;You can generate a &quot;pdf&quot; file from Libreoffice writer &quot;odt&quot; file.&lt;/p&gt;File - Export as PDF option is available only if you are using GUI&lt;br /&gt;Here is how to convert to pdf using command line.&lt;br /&gt;&lt;br /&gt;# vi Dockerfile&lt;br /&gt;FROM ubuntu:latest&lt;br /&gt;&lt;br /&gt;RUN apt-get update &amp;amp;&amp;amp; \&lt;br /&gt;&amp;nbsp; &amp;nbsp; apt-get install -y libreoffice&lt;br /&gt;&lt;br /&gt;WORKDIR /workspace&lt;br /&gt;&lt;br /&gt;ENTRYPOINT [&quot;libreoffice&quot;, &quot;--headless&quot;, &quot;--convert-to&quot;, &quot;pdf&quot;]&lt;br /&gt;&lt;br /&gt;# docker build -t shantanuo/libreoffice-converter .&lt;br /&gt;&lt;br /&gt;run the docker command to convert a file to pdf&lt;br /&gt;# docker run --rm -v .:/workspace shantanuo/libreoffice-converter /workspace/pm_in_paris.odt --outdir /workspace&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;_____&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Use this dockerfile if you need to apply a template before creating a PDF file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;FROM ubuntu:latest&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get install -y libreoffice python3 python3-venv&lt;/div&gt;&lt;div&gt;RUN python3 -m venv /workspace/venv&lt;/div&gt;&lt;div&gt;RUN /workspace/venv/bin/pip install --upgrade pip&lt;/div&gt;&lt;div&gt;RUN /workspace/venv/bin/pip install unotools&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;COPY * /workspace/&lt;/div&gt;&lt;div&gt;WORKDIR /workspace&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# Start LibreOffice in headless mode in the background and run the Python script after it is started&lt;/div&gt;&lt;div&gt;ENTRYPOINT soffice --headless --accept=&quot;pipe,name=libreoffice;urp;StarOffice.ComponentContext&quot; &amp;amp; \&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; sleep 5 &amp;amp;&amp;amp; \&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; python3 /workspace/updated3.py /workspace/ra.txt /workspace/prajakta.ott&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I can create an image and it converts the text file to PDF correctly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;docker build -t shantanuo/libreoffice-converter .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The raw text file and template is available in current directory. The generated PDF is also available in the same place after running this command:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;docker run -v .:/workspace/ --rm&amp;nbsp; shantanuo/libreoffice-converter&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The python code to apply the template and create pdf is available here...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;https://gist.github.com/shantanuo/f635bbdb764d1fafa8587203d7f8823a&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/4562711624597263363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/4562711624597263363?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/4562711624597263363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/4562711624597263363'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/09/export-to-pdf-using-linux-command.html' title=' export to pdf using linux command'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-2252042906457080637</id><published>2024-09-08T20:48:00.000-07:00</published><updated>2024-09-08T20:49:56.315-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="awk"/><title type='text'>awk Case Study - 12</title><content type='html'>&lt;p&gt;Select the first column from the csv file and remove &quot;www&quot;. In sql the command ill look something like this...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;select replace(column1, &#39;www&#39;, &#39;&#39;) from tbl&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;# cat logs.csv&lt;/i&gt;&lt;br /&gt;Origin,Status,Title,ContentType,IP,Country,City,PhoneCode&lt;br /&gt;https://gnu.org,OK,The GNU Operating System and the Free Software Movement,text/html,209.51.188.116,United States,Boston,+1&lt;br /&gt;https://0t1.me,OK,ZeroToOne - Home,text/html,104.21.84.218,Canada,Toronto,+1&lt;br /&gt;&lt;br /&gt;&lt;i&gt;# cat myak.txt&lt;br /&gt;&lt;/i&gt;#!/usr/bin/awk -f&lt;br /&gt;BEGIN {&lt;br /&gt;&amp;nbsp; FS = &quot;,&quot;&lt;br /&gt;&amp;nbsp; OFS = &quot;&quot;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function normalize_origin(origin) {&lt;br /&gt;&amp;nbsp; sub(/www./, &quot;&quot;, origin) # remove www from the origin.&lt;br /&gt;&amp;nbsp; return origin&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; # Ignore the header line.&lt;br /&gt;&amp;nbsp; if(NR == 1) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; next&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; origin = normalize_origin($1)&lt;br /&gt;&amp;nbsp; print origin&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;i&gt;# awk -f myak.txt &amp;lt; logs.csv&lt;/i&gt;&lt;br /&gt;https://gnu.org&lt;br /&gt;https://0t1.me&lt;/p&gt;&lt;p&gt;https://0t1.me/blog/2024/09/01/practical-awk/&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/2252042906457080637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/2252042906457080637?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/2252042906457080637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/2252042906457080637'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/09/awk-case-study-11.html' title='awk Case Study - 12'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-7029869547464914579</id><published>2024-08-27T20:47:00.000-07:00</published><updated>2024-08-27T20:47:26.827-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="nlp"/><title type='text'> Sanskrit-English translation corpus </title><content type='html'>&lt;p&gt;Itihāsa is a Sanskrit-English translation corpus containing 93,000 Sanskrit shlokas and their English translations extracted from M. N. Dutt&#39;s seminal works on The Rāmāyana and The Mahābhārata.&amp;nbsp;&lt;/p&gt;&lt;p&gt;https://github.com/rahular/itihasa&lt;/p&gt;&lt;p&gt;Itihāsa can be used directly from Huggingface Datasets:&lt;/p&gt;&lt;p&gt;from datasets import load_dataset&lt;br /&gt;dataset = load_dataset(&quot;rahular/itihasa&quot;)&lt;br /&gt;dataset[&#39;train&#39;][0]&lt;/p&gt;&lt;p&gt;{&#39;translation&#39;: {&#39;en&#39;: &#39;The ascetic Vālmīki asked Nārada, the best of sages and foremost of those conversant with words, ever engaged in austerities and Vedic studies.&#39;,&amp;nbsp; &#39;sn&#39;: &#39;ॐ तपः स्वाध्यायनिरतं तपस्वी वाग्विदां वरम्। नारदं परिपप्रच्छ वाल्मीकिर्मुनिपुङ्गवम्॥&#39;}}&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/7029869547464914579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/7029869547464914579?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/7029869547464914579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/7029869547464914579'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/08/sanskrit-english-translation-corpus.html' title=' Sanskrit-English translation corpus '/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-7026040151501008395</id><published>2024-08-24T23:13:00.000-07:00</published><updated>2024-08-30T22:00:39.318-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'> Using playwright on ARM processor</title><content type='html'>&lt;p&gt;You can use playwright on ARM processor using these steps:&lt;/p&gt;1) Use docker to start a container:&lt;br /&gt;docker run -it --rm --ipc=host mcr.microsoft.com/playwright:v1.46.1-jammy /bin/bash&lt;br /&gt;&lt;br /&gt;2) Once inside the container, type these commands:&lt;br /&gt;&lt;br /&gt;apt-get install python3-pip&lt;br /&gt;pip install playwright&lt;br /&gt;playwright install&lt;br /&gt;&lt;br /&gt;3) Create or copy a test file:&lt;br /&gt;vi app/app.py&lt;br /&gt;&lt;br /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;from playwright.sync_api import sync_playwright&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;def handler(event, context):&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; with sync_playwright() as p:&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; browser = p.chromium.launch(args=[&quot;--disable-gpu&quot;, &quot;--single-process&quot;, &quot;--headless=new&quot;], headless=True)&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; page = browser.new_page()&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; page.goto(&quot;https://stackoverflow.com/questions/9780717/bash-pip-command-not-found&quot;)&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(page.title())&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;background-color: white; color: #222222; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; browser.close()&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br /&gt;4) Run the file:&lt;br /&gt;python3 app/app.py&lt;br /&gt;&lt;br /&gt;If you get the title of the page, i.e. &quot;python - bash: pip: command not found - Stack Overflow&quot; as output then everything is working ok.&lt;div&gt;_____&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is another example:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;import asyncio&lt;/div&gt;&lt;div&gt;from playwright.async_api import async_playwright&amp;nbsp; # 1.44.0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;async def main():&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; term = &quot;\&quot;टंकलेखन\&quot;&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; url = f&quot;https://www.google.com/search?q={term}&quot;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; async with async_playwright() as pw:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; browser = await pw.chromium.launch(args=[&quot;--disable-gpu&quot;, &quot;--single-process&quot;, &quot;--headless=new&quot;], headless=True)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; page = await browser.new_page()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; await page.goto(url, wait_until=&quot;domcontentloaded&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Find the element with ID &quot;result-stats&quot; and get its text&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result_stats = await page.locator(&#39;#result-stats&#39;).text_content()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if result_stats:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(&quot;Result stats:&quot;, result_stats)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(&quot;Element &#39;result-stats&#39; not found.&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; await browser.close()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;if __name__ == &quot;__main__&quot;:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; asyncio.run(main())&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/7026040151501008395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/7026040151501008395?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/7026040151501008395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/7026040151501008395'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/08/using-playwright-on-arm-processor.html' title=' Using playwright on ARM processor'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-3585357019820137754</id><published>2024-06-27T01:17:00.000-07:00</published><updated>2024-06-27T01:17:05.749-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="aws_lambda"/><title type='text'> Disable dynamoDB table access</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;I can disable all access to a dynamoDB table using resource based policy. Here is an example:&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;{&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &quot;Version&quot;: &quot;2012-10-17&quot;,&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &quot;Statement&quot;: [&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Effect&quot;: &quot;Deny&quot;,&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Principal&quot;: {&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;AWS&quot;: &quot;*&quot;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Action&quot;: &quot;dynamodb:*&quot;,&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Resource&quot;: &quot;arn:aws:dynamodb:us-east-1:XXX885053566:table/sandhiDupe&quot;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&amp;nbsp; ]&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;}&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;There are many other advantages of managing access at resource level.&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/3585357019820137754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/3585357019820137754?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/3585357019820137754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/3585357019820137754'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/06/disable-dynamodb-table-access.html' title=' Disable dynamoDB table access'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-8213590735396641999</id><published>2024-06-06T02:16:00.000-07:00</published><updated>2024-06-06T02:16:26.603-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="awk"/><title type='text'>awk Case Study - 11</title><content type='html'>&lt;p&gt;Let&#39;s assume there are 2 tables and you need to compare them on first column. SQL query looks something like this...&lt;br /&gt;&lt;br /&gt;select a.id, a.long, a.lat, b.location from tbl_a as a inner join tbl_b as b on a.id = b.id&lt;br /&gt;&lt;br /&gt;If you have .csv files instead of tables, use awk&lt;br /&gt;&lt;br /&gt;a_vt&lt;br /&gt;9998.69,-80.87,-8.7987987988,279.13,-8.7987987988&lt;br /&gt;9998.34,-81.05,-8.43843843844,278.95,-8.43843843844&lt;br /&gt;9999.77,-83.03,-7.71771771772,276.97,-7.71771771772&lt;br /&gt;9999.48,-83.57,-7.23723723724,276.43,-7.23723723724&lt;br /&gt;9999.08,-83.99,-7.2972972973,276.01,-7.2972972973&lt;br /&gt;9998.75,-81.71,-6.996996997,278.29,-6.996996997&lt;br /&gt;9998.75,-81.65,-6.996996997,278.35,-6.996996997&lt;br /&gt;9997.89,-83.99,-6.21621621622,276.01,-6.21621621622&lt;br /&gt;9997.77,-77.27,-16.1261261261,282.73,-16.1261261261&lt;br /&gt;9997.54,-82.43,-4.29429429429,277.57,-4.29429429429&lt;br /&gt;&lt;br /&gt;b_vm&lt;br /&gt;9998.69,110.0TN,110.0TN,-75.6551,-14.9496,284.345,-14.9496&lt;br /&gt;9998.34,100.0TN,100.0TN,-75.62949999999998,-14.9573,284.37,-14.9573&lt;br /&gt;22850,39.78686TN,39.78686TN,-75.6259,-14.9867,284.374,-14.9867&lt;br /&gt;22901.9,9.90099TN,9.90099TN,-75.649,-14.9636,284.351,-14.9636&lt;br /&gt;27742.2,160.0TN,160.0TN,-75.5999,-14.9922,284.4,-14.9922&lt;br /&gt;22901.9,110.0TN,110.0TN,-75.6648,-14.9526,284.335,-14.9526&lt;br /&gt;27742.2,90.0TN,90.0TN,-75.60129999999998,-14.9973,284.399,-14.9973&lt;br /&gt;27685.3,90.0TN,90.0TN,-75.6024,-14.9626,284.398,-14.9626&lt;br /&gt;27742.2,80.0TN,80.0TN,-75.6014,-15.0006,284.399,-15.0006&lt;br /&gt;22901.9,80.0TN,80.0TN,-75.6597,-14.9626,284.34,-14.9626&lt;br /&gt;&lt;br /&gt;$ awk &#39;NR==FNR { a[$1]; next }( ($1 in a) ) { print }&#39; FS=&quot;,&quot; b_vm a_vt &lt;br /&gt;9998.69,-80.87,-8.7987987988,279.13,-8.7987987988&lt;br /&gt;9998.34,-81.05,-8.43843843844,278.95,-8.43843843844&lt;br /&gt;&lt;br /&gt;Expected Output:&lt;br /&gt;&lt;br /&gt;9998.69,-80.87,-8.7987987988,279.13,-8.7987987988,**110.0TN**&lt;br /&gt;9998.34,-81.05,-8.43843843844,278.95,-8.43843843844,**100.0TN**&lt;br /&gt;&lt;br /&gt;i.e. second column from b_vm should be included in the output.&lt;br /&gt;_____&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Ans:&lt;br /&gt;&lt;br /&gt;awk -F, &#39;NR==FNR { a[$1] = $2; next } $1 in a {print $0 &quot;,&quot; a[$1]}&#39; b_vm a_vt&lt;br /&gt;&lt;br /&gt;9998.69,-80.87,-8.7987987988,279.13,-8.7987987988,110.0TN&lt;br /&gt;9998.34,-81.05,-8.43843843844,278.95,-8.43843843844,100.0TN&lt;br /&gt;&lt;br /&gt;Here a[$1] = $2 stores $2 in array a by the index $1. &lt;br /&gt;In the 2nd pass print a[$1] to print stored value.&lt;br /&gt;&lt;br /&gt;https://stackoverflow.com/questions/78551072/adding-column-after-comparing-two-files&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/8213590735396641999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/8213590735396641999?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/8213590735396641999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/8213590735396641999'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/06/awk-case-study-11.html' title='awk Case Study - 11'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-6248682546169356594</id><published>2024-05-18T00:05:00.000-07:00</published><updated>2024-05-18T00:05:35.909-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'> Make Ubuntu great again!</title><content type='html'>&lt;p&gt;when you click above or below the slider on a scrollbar, instead of scrolling up or down by a &quot;page&quot;, like they have done for many years, instead you now jump to wherever you click.&lt;/p&gt;&lt;p&gt;If you need to change, edit (or create) the file:&lt;/p&gt;&lt;p&gt;~/.config/gtk-3.0/settings.ini&lt;/p&gt;&lt;p&gt;And add the following:&lt;/p&gt;&lt;p&gt;[Settings]&lt;br /&gt;gtk-primary-button-warps-slider = false&lt;/p&gt;&lt;p&gt;do not forget to restart.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/6248682546169356594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/6248682546169356594?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6248682546169356594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/6248682546169356594'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/05/make-ubuntu-great-again.html' title=' Make Ubuntu great again!'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-9070537795112324080</id><published>2024-05-05T01:09:00.000-07:00</published><updated>2024-05-05T01:09:39.110-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pandas"/><category scheme="http://www.blogger.com/atom/ns#" term="shell script"/><title type='text'>Pandas as command prompt</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;You can use pandas at command prompt like this...&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;curl -s https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.zip | \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;gunzip | \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;python3 -c &#39;import sys, pandas as pd&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;pd.read_csv(sys.stdin).melt(&quot;Date&quot;).to_csv(sys.stdout, index=False)&#39;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;curl -s https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.zip | \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;gunzip | \&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;python3 -c &#39;import sys, pandas as pd&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;pd.read_csv(sys.stdin).iloc[:, :-1].melt(&quot;Date&quot;)\&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;.to_csv(sys.stdout, index=False)&#39;&lt;/span&gt;&lt;br style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;&quot; /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/9070537795112324080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/9070537795112324080?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/9070537795112324080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/9070537795112324080'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/05/pandas-as-command-prompt.html' title='Pandas as command prompt'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3043709.post-8588115399234286121</id><published>2024-05-01T22:28:00.000-07:00</published><updated>2024-05-12T21:21:42.800-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="usability"/><title type='text'> Remote Desktop to Ubuntu Server</title><content type='html'>&lt;p&gt;Ubuntu Desktop requires downloading about 500 MB of packages and an additional 2 GB of disk space. If that&#39;s too much, you can install a more lightweight desktop environment called Xfce. It&#39;s just 45 MB of packages that use an extra 175 MB of space. Install it like this:&lt;/p&gt;&lt;p&gt;sudo apt-get install -y tightvncserver xrdp&amp;nbsp;ubuntu-desktop m17n-db ibus-m17n&lt;/p&gt;&lt;p&gt;_____&lt;/p&gt;&lt;p&gt;1) You may need to change the ubuntu password if using ec2 instance.&lt;/p&gt;&lt;p&gt;echo &#39;ubuntu:india&#39; | sudo chpasswd&amp;nbsp;&lt;/p&gt;&lt;p&gt;2) The second step is to change PasswordAuthentication to &quot;yes&quot; in the file /etc/ssh/sshd_config&lt;/p&gt;&lt;p&gt;3) avoid security error&lt;/p&gt;&lt;p&gt;sudo adduser xrdp ssl-cert&lt;/p&gt;&lt;p&gt;4) disable screen lock and suspend&lt;/p&gt;&lt;p&gt;gsettings set org.gnome.desktop.session idle-delay 0&lt;/p&gt;&lt;p&gt;systemctl mask suspend.target&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oksoft.blogspot.com/feeds/8588115399234286121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3043709/8588115399234286121?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/8588115399234286121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3043709/posts/default/8588115399234286121'/><link rel='alternate' type='text/html' href='http://oksoft.blogspot.com/2024/05/remote-desktop-to-ubuntu-server.html' title=' Remote Desktop to Ubuntu Server'/><author><name>shantanu</name><uri>http://www.blogger.com/profile/04386423685935921709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>