tag:blogger.com,1999:blog-14770051426839297872024-03-05T12:49:18.036+05:30Voila!Possible solutions of Impossible problem. Out-of-the-box Ideas. Amazing notes. Unbelievable facts. Simple & easy to follow tips and procedures.Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.comBlogger199125tag:blogger.com,1999:blog-1477005142683929787.post-18443735436979846872024-02-28T16:47:00.000+05:302024-02-28T16:47:05.215+05:30Hosting a Static Website on AWS S3 with Custom Domain and HTTPS<h2 class="code-line" data-line-start=0 data-line-end=1 ><a id="Introduction_0"></a>Introduction</h2>
<p class="has-line-data" data-line-start="2" data-line-end="3">In this article, I will guide you through the process of hosting a static website on Amazon Web Services (AWS) S3 bucket, mapping it to a custom domain, and enabling HTTPS. I recently went through this process and found it to be a bit complex, so I wanted to share my experience to help others.</p>
<h2 class="code-line" data-line-start=4 data-line-end=5 ><a id="Prerequisites_4"></a>Prerequisites</h2>
<ul>
<li class="has-line-data" data-line-start="6" data-line-end="7">An AWS account</li>
<li class="has-line-data" data-line-start="7" data-line-end="8">A static website built and ready for deployment</li>
<li class="has-line-data" data-line-start="8" data-line-end="10">A registered domain name with a third-party registrar (e.g., GoDaddy)</li>
</ul>
<h2 class="code-line" data-line-start=10 data-line-end=11 ><a id="Step_1_Create_an_S3_Bucket_and_Upload_Static_Website_10"></a>Step 1: Create an S3 Bucket and Upload Static Website</h2>
<ol>
<li class="has-line-data" data-line-start="12" data-line-end="13">Sign in to the AWS Management Console and navigate to the Amazon S3 service.</li>
<li class="has-line-data" data-line-start="13" data-line-end="14">Click “Create bucket” and provide a unique DNS-compliant name for your bucket.</li>
<li class="has-line-data" data-line-start="14" data-line-end="15">Choose a region for your bucket and click “Create”.</li>
<li class="has-line-data" data-line-start="15" data-line-end="17">Upload your static website files to the bucket and make the bucket public.</li>
</ol>
<h2 class="code-line" data-line-start=17 data-line-end=18 ><a id="Step_2_Enable_Static_Website_Hosting_and_Set_Index_Document_17"></a>Step 2: Enable Static Website Hosting and Set Index Document</h2>
<ol>
<li class="has-line-data" data-line-start="19" data-line-end="20">Go to the Properties tab of your bucket.</li>
<li class="has-line-data" data-line-start="20" data-line-end="21">Scroll down to the “Static website hosting” box and click “Edit”.</li>
<li class="has-line-data" data-line-start="21" data-line-end="22">Select “Enable” and enter “index.html” as the Index Document.</li>
<li class="has-line-data" data-line-start="22" data-line-end="24">Click “Save changes”.</li>
</ol>
<h2 class="code-line" data-line-start=24 data-line-end=25 ><a id="Step_3_Register_a_Domain_Name_with_Route_53_24"></a>Step 3: Register a Domain Name with Route 53</h2>
<ol>
<li class="has-line-data" data-line-start="26" data-line-end="27">Navigate to the Route 53 service in the AWS Management Console.</li>
<li class="has-line-data" data-line-start="27" data-line-end="28">Click “Domain Registration” and then “Register Domain”.</li>
<li class="has-line-data" data-line-start="28" data-line-end="30">Enter your desired domain name and follow the prompts to complete the registration process.</li>
</ol>
<h2 class="code-line" data-line-start=30 data-line-end=31 ><a id="Step_4_Create_A_Records_in_Route_53_30"></a>Step 4: Create A Records in Route 53</h2>
<ol>
<li class="has-line-data" data-line-start="32" data-line-end="33">In the Route 53 dashboard, click “Hosted zones” and then click on your domain name.</li>
<li class="has-line-data" data-line-start="33" data-line-end="34">Click “Create Record Set”.</li>
<li class="has-line-data" data-line-start="34" data-line-end="35">In the Name field, leave it empty for the root domain (e.g., <a href="http://example.com">example.com</a>) or enter “www” for the www subdomain.</li>
<li class="has-line-data" data-line-start="35" data-line-end="36">Select “A - IPv4 address” for the Record Type.</li>
<li class="has-line-data" data-line-start="36" data-line-end="37">In the Value field, enter the IP address of your S3 bucket (you can find this in the S3 bucket properties).</li>
<li class="has-line-data" data-line-start="37" data-line-end="39">Click “Create” to create the A record.</li>
</ol>
<h2 class="code-line" data-line-start=39 data-line-end=40 ><a id="Step_5_Update_Nameservers_in_Your_Domain_Registrar_39"></a>Step 5: Update Nameservers in Your Domain Registrar</h2>
<ol>
<li class="has-line-data" data-line-start="41" data-line-end="42">Go to your domain registrar’s website and navigate to the DNS settings for your domain.</li>
<li class="has-line-data" data-line-start="42" data-line-end="44">Update the nameservers with the ones provided by Route 53.</li>
</ol>
<h2 class="code-line" data-line-start=44 data-line-end=45 ><a id="Step_6_Request_an_SSL_Certificate_from_AWS_Certificate_Manager_44"></a>Step 6: Request an SSL Certificate from AWS Certificate Manager</h2>
<ol>
<li class="has-line-data" data-line-start="46" data-line-end="47">Navigate to the AWS Certificate Manager service in the AWS Management Console.</li>
<li class="has-line-data" data-line-start="47" data-line-end="49">Click “Request a certificate” and follow the prompts to request a certificate for your domain name.</li>
</ol>
<h2 class="code-line" data-line-start=49 data-line-end=50 ><a id="Step_7_Create_a_CloudFront_Distribution_49"></a>Step 7: Create a CloudFront Distribution</h2>
<ol>
<li class="has-line-data" data-line-start="51" data-line-end="52">Navigate to the CloudFront service in the AWS Management Console.</li>
<li class="has-line-data" data-line-start="52" data-line-end="53">Click “Create Distribution” and follow the prompts to create a distribution for your S3 bucket.</li>
<li class="has-line-data" data-line-start="53" data-line-end="54">When prompted, select the SSL certificate you created in Step 6.</li>
<li class="has-line-data" data-line-start="54" data-line-end="55">In the “Alternate Domain Names (CNAMEs)” field, enter your domain name.</li>
<li class="has-line-data" data-line-start="55" data-line-end="56">In the “Default Cache Behavior Settings”, set “Viewer Protocol Policy” to “Redirect HTTP to HTTPS”.</li>
<li class="has-line-data" data-line-start="56" data-line-end="58">Click “Create Distribution”.</li>
</ol>
<h2 class="code-line" data-line-start=58 data-line-end=59 ><a id="Step_8_Update_Route_53_to_Use_CloudFront_Distribution_58"></a>Step 8: Update Route 53 to Use CloudFront Distribution</h2>
<ol>
<li class="has-line-data" data-line-start="60" data-line-end="61">Go back to the Route 53 service and navigate to the Hosted Zone for your domain.</li>
<li class="has-line-data" data-line-start="61" data-line-end="62">Create two new A records, one for the root domain (e.g., <a href="http://example.com">example.com</a>) and one for the www subdomain.</li>
<li class="has-line-data" data-line-start="62" data-line-end="63">Select “Alias” and choose the CloudFront distribution you created in Step 7.</li>
<li class="has-line-data" data-line-start="63" data-line-end="65">Click “Create” to create the A records.</li>
</ol>
<h2 class="code-line" data-line-start=65 data-line-end=66 ><a id="Step_9_Test_Your_Website_65"></a>Step 9: Test Your Website</h2>
<ol>
<li class="has-line-data" data-line-start="67" data-line-end="68">Open a web browser and go to your website using the domain name you registered.</li>
<li class="has-line-data" data-line-start="68" data-line-end="70">Verify that your website loads correctly and that the URL shows HTTPS.</li>
</ol>
<h2 class="code-line" data-line-start=70 data-line-end=71 ><a id="Conclusion_70"></a>Conclusion</h2>
<p class="has-line-data" data-line-start="72" data-line-end="73">By following these steps, you can host your static website on AWS S3 bucket, map it to a custom domain, and enable HTTPS. This setup provides a scalable and cost-effective way to host your website with the added benefits of security and reliability.</p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-51706709816644092532024-02-28T11:42:00.005+05:302024-02-28T16:43:08.746+05:30Story of Hosting a Static Website on AWS<p>I recently went through this process of <strong>hosting a static website on Amazon Web Services (AWS) S3 bucket</strong>, mapping it to a custom domain, and enabling HTTPS and found it to be a bit complex, so I wanted to share my experience to help others.</p>
<div dir="ltr">
<p>Since, I wanted to share my website with the world but I needed a place to host it. So, I turned to <strong>AWS S3</strong>, a storage service that could handle the job.</p>
<p><strong>First, I created a bucket</strong> (like a digital container) on S3 and uploaded my website files. Initially, I made the bucket public for easy access, but this meant I had to type the entire file name (e.g., <samp>index.html</samp>) every time I visited. This wasn't ideal.</p>
<p><strong>To avoid the long URL</strong>, I enabled <strong>static website hosting</strong> on the S3 bucket. This allowed me to access my website without specifying the filename. However, the provided URL was long and difficult to remember.</p>
<p><strong>Needing a better address</strong>, I registered a domain name (e.g., <a href="#">abc.com</a>) from a third-party like GoDaddy. But how could I connect my domain to the S3 bucket?</p>
<p><strong>Enter Route 53</strong>, AWS's custom DNS service. I created <strong>A records</strong> in Route 53, one for <a href="#">abc.com</a> and another for <a href="#">www.abc.com</a>. This pointed my domain to the S3 bucket, but I still had an issue because the website was accessible only via HTTP.</p>
<p><strong>Security is crucial</strong>, so I wanted to switch from HTTP to the secure HTTPS protocol. However, S3 buckets can't directly use HTTPS certificates.</p>
<p>The solution came in two parts:</p>
<ol>
<li>
<p><strong>AWS Certificate Manager (ACM)</strong>: I used ACM to register an <strong>SSL certificate</strong> for my domain. However, this certificate couldn't be directly used by the S3 bucket.</p>
</li>
<li>
<p><strong>AWS CloudFront</strong>: This service delivers content securely. I created a CloudFront distribution with my domain name and linked it to the ACM certificate (created in the US Virginia region for compatibility and due to regional limitations). CloudFront even provided a shorter URL, but it still wasn't ideal.</p>
</li>
</ol>
<p><strong>Finally, I removed the A records</strong> that directly pointed to the S3 bucket (as we wouldn't need HTTP access anymore). CloudFront created new A records for my domain in Route 53, allowing access through both <a href="#">abc.com</a> and <a href="#">www.abc.com</a>. I also deleted the unnecessary <a href="#">www.abc.com</a> bucket since CloudFront could handle both URLs.</p>
<p><strong>With CloudFront redirecting HTTP requests to HTTPS</strong>, I achieved a secure and user-friendly way to access my website. This journey through the AWS cloud may seem complex, but it empowers anyone to host their website with ease and security.</p>
</div>
Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-49990515261315329832024-02-03T00:10:00.000+05:302024-02-03T00:10:59.109+05:30Best CSS for textual HTML docs<p>Here, I have listed few of the best CSS themes which can be used for displaying textual HTML documents, e.g., privacy, terms & condition pages etc.</p><p>You can just add the selected CSS theme's link tag in the head of the HTML code.</p><p>That's it!</p><p><br /></p><h2 style="text-align: left;">Latex</h2><p>PDF document like</p>
<pre style="text-align: left;"><code class="lang-css"> <span class="hljs-tag"><<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://latex.now.sh/style.css"</span>></span>
</code></pre>
<h2 style="text-align: left;">Awsm</h2><p>Looks great</p>
<pre style="text-align: left;"><code class="lang-css"> <span class="hljs-tag"><<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://igoradamenko.com/awsm.css/v1/css/awsm.min.css"</span>></span>
</code></pre>
<h2 style="text-align: left;">New</h2>
<pre style="text-align: left;"><code class="lang-css"> <<span class="hljs-keyword">link</span> rel=<span class="hljs-string">"stylesheet"</span> href=<span class="hljs-string">"https://fonts.xz.style/serve/inter.css"</span>>
<<span class="hljs-keyword">link</span> rel=<span class="hljs-string">"stylesheet"</span> href=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/@exampledev/new.css@1.1.2/new.min.css"</span>>
</code></pre>
<h2 style="text-align: left;">Tacit</h2>
<pre style="text-align: left;"><code class="lang-css"> <<span class="hljs-keyword">link</span> rel=<span class="hljs-string">"stylesheet"</span> href=<span class="hljs-string">"https://cdn.jsdelivr.net/gh/yegor256/tacit@gh-pages/tacit-css-1.7.1.min.css"</span>/>
</code></pre>
<h2 style="text-align: left;">Chota</h2><p>Looks standard</p>
<pre style="text-align: left;"><code class="lang-css"> <<span class="hljs-keyword">link</span> rel=<span class="hljs-string">"stylesheet"</span> href=<span class="hljs-string">"https://unpkg.com/chota@latest"</span>>
</code></pre>
<h2 style="text-align: left;">Classless</h2>
<pre style="text-align: left;"><code class="lang-css"> <span class="hljs-tag"><<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://classless.de/classless-tiny.css"</span>></span>
</code></pre>
<h2 style="text-align: left;">Mini</h2>
<pre style="text-align: left;"><code class="lang-css"> <span class="hljs-tag"><<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://cdnjs.cloudflare.com/ajax/libs/mini.css/3.0.1/mini-default.min.css"</span>></span>
</code></pre>
<h2 style="text-align: left;">Pico </h2><p>Extra spacious though</p>
<pre style="text-align: left;"><code class="lang-css"> <<span class="hljs-keyword">link</span> rel=<span class="hljs-string">"stylesheet"</span> href=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.min.css"</span>>
</code></pre>
<h2 style="text-align: left;">Lit</h2><p>Beautify document using font-family</p>
<pre><code class="lang-css"> <<span class="hljs-keyword">link</span> href=<span class="hljs-string">"https://fonts.googleapis.com/css?family=Nunito:300,400,700"</span> rel=<span class="hljs-string">"stylesheet"</span>>
<<span class="hljs-keyword">link</span> rel=<span class="hljs-string">"stylesheet"</span> href=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/@ajusa/lit@latest/dist/lit.css"</span> />
</code></pre>
Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-2354173421310206132024-01-18T19:51:00.007+05:302024-01-18T20:04:01.780+05:30How to design a solution for storage monitoring system?<p>Recently I have been asked to design a solution for monitoring system that can monitor different aspects of the system including time-series data, configuration data, alerts data, hardware failures, and SNMP traps. The system needs to be scalable, highly available and fault tolerant. </p><p>Since the system involves a storage box that requires monitoring of various statistics and components, so I'd chosen to store the time series data in a TDengine which is a highly scalable time series database and is a good choice for high cardinality data because it uses a partitioned storage model and columnar encoding to efficiently store and query large volume of data with a wide range of unique values. It can also handle data-ingestion, storage and retrieval efficiently in a number of ways.</p><p>To handle configuration data, I'd chosen to use Puppet as a configuration management tool that allows the admin to configure all the major tools and components of other systems. Puppet can automate the delivery and operation of applications and infrastructure whereas the configuration data is stored in PostgreSQL database which is a relational database management system that supports SQL queries and it is highly reliable, scalable, performant, free and open source. The updates and retrieval of configuration data efficiently can be handled using cache, batch updates, asynchronous updates and indexes. The data consistency and integrity in the configuration data can be ensured by transactions, foreign keys, validation and backups.</p><p>To collect and monitor statistic I have used storage box, management tool to collect statistics on the VD and pool level; then used a disk performance monitoring tool to collect statistics on the VD level; thereafter used an agent less monitoring tool to collect statistics on storage boxes that are not accessible through other methods. I further, processed the statistics to calculate through latency IOPS for each VD and pool; then calculated aggregated data per storage box by summing the values of the metrics for all the VDs and VDs in the storage box. Finally stored the statistics in our database. </p><p>Now, I have to decide how frequently will I collect the statistics and how to process and store them? Since the frequency of collection will depend on the specific needs of the organisation, like if the organisation is experiencing performance problems, they may want to collect the statistics more frequently otherwise collecting the statistics less frequently would work. So I chose to collect it more frequently based on organisational requirement.</p><p>After that, I need to monitor the hardware components of the storage box including fan temperature sensors, PSU, PDU, etc. So I'd chosen the SNMP to collect the data from the storage box's hardware components. But if SNMP is not available then used IPMI to collect the same data. In case if they storage box is running Windows, I used WMI to collect the data from those boxes.</p><p>To detect failures and report them in the user interface of the monitoring system, I set threshold for each hardware component. If the data from those components exceeds a threshold, an alert gets generated. I also used predictive analytics to identify potential failures before they occur. For example, while monitoring the temperature sensors, if the temperature is trending upwards, an alert generated. Apart from this on a regular basis, a human operator, also review the data from those storage box's hardware components to identify any potential problems.</p><p>To raise call home tickets for critical hardware component failures. I configured the storage box to send SNMP traps to the monitoring system when a critical hardware component failure occurs; then monitoring system further sends email alerts and webhooks to a call home system. Further on, I have used Grafana Alerting system to alert all stakeholders via email SMS or phone calls. And those stakeholders can also view the metrics and statistics on Grafana Kiosk dashboard.</p><p>The snmptrapd daemon was installed on storage boxes to send SNMP traps to a Telegraf server to collect that further stores the traps in the TDengine time series database. Then Grafana was used to visualise and analyse metrics from TDengine that stored SNMP traps data received from Telegraf.</p><p>Now to design the database schema to optimise the read queries for yearly data, I used star schema, which is a relational database schema that is well suited for analytical workload.</p><p>Now I need to optimise the read queries to minimise query execution time and improve performance. Although TDengine uses cache-first policy, but to reduce the load on the database, I had also used Materialize over TDengine via plug-in to create materialised views of the preprocessed data to further optimise query performance and freshness of queries that involved complex aggregations or joins.</p><p>Finally, to monitor the health and performance of all the components of this monitoring system, I had used Kafka, Prometheus and Grafana. Kafka collected the health and performance data and feed it to Prometheus to store the data. Prometheus can be accessed by Grafana and Grafana kiosks to display the data on a dashboard for IT support team. </p><p>Thus, to summarise the whole system, I had created four subsystems, those are storage box, monitoring system, configuration, management, system, health and performance monitoring system, alert and notification management system. </p><p>Storage box monitoring system is the core system that collected various types of data from the storage box, such as throughput, latency, IOPS at the vd, vd & pool level, aggregated data. This data is sent to a Telegraf cluster, which is a plugin-driven server agent that can collect and send metrics from different sources. The Telegraf cluster feeds the data into a TDengine cloud database, which is a high-performance time-series database designed for IoT applications. The TDengine cloud database can be accessed by Grafana cloud and Grafana kiosks, which are web-based platforms that display the data on interactive dashboards. Grafana cloud is a hosted version of Grafana that can be accessed from anywhere, while Grafana kiosks are dedicated devices that show the dashboards in full-screen mode. To reduce the load on the TDengine cloud database, Materialize is used as a caching layer between TDengine cloud and Grafana cloud. Materialize is a streaming SQL materialized view engine that can handle high-throughput and low-latency queries.</p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-71661773650985711912023-08-14T20:23:00.001+05:302023-08-14T20:23:27.640+05:30QoT: A Powerful Command-Line Tool for Querying Data from CSV Files<p class="has-line-data" data-line-start="0" data-line-end="1">Are you looking for a way to query and manipulate data in CSV files without using complex software or coding skills? If so, you might be interested in QoT, a powerful command-line tool that allows you to query data from tables or sheets with ease.</p>
<p class="has-line-data" data-line-start="2" data-line-end="3"><strong>QoT</strong> stands for <strong>Query over Table</strong>, and it is a tool that lets you filter, sort, and display data from CSV files using simple and intuitive commands. You can use QoT to quickly extract insights from large datasets, perform data analysis, or integrate QoT into your workflow.</p>
<p class="has-line-data" data-line-start="4" data-line-end="5">With QoT, you can:</p>
<ul>
<li class="has-line-data" data-line-start="6" data-line-end="7">Select the columns you want to display using the <code>--select</code> option</li>
<li class="has-line-data" data-line-start="7" data-line-end="8">Specify the file name of the table or sheet using the <code>--from</code> option</li>
<li class="has-line-data" data-line-start="8" data-line-end="9">Apply a condition to filter the query result using the <code>--where</code> option</li>
<li class="has-line-data" data-line-start="9" data-line-end="10">Limit the number of rows in the query result using the <code>--limit</code> option</li>
<li class="has-line-data" data-line-start="10" data-line-end="11">Sort the query result by a certain column using the <code>--orderby</code> option and choose either <code>--asc</code> or <code>--desc</code> to order the result in ascending or descending order</li>
<li class="has-line-data" data-line-start="11" data-line-end="13">Print the query result in any of these supported formats: <code>CSV</code>, <code>TSV</code>, <code>PSV</code>, <code>HTML</code> table, <code>JSON</code>, <code>YAML</code>, <code>ASCII</code> grid table, <code>Markdown</code> table, or borderless table (default) using the corresponding options</li>
</ul>
<p class="has-line-data" data-line-start="13" data-line-end="14">QoT is designed to be easy to use and provides a wide range of options for customizing your queries. Whether you’re a data analyst looking to quickly extract insights from large datasets or a developer looking to integrate QoT into your workflow, QoT has something to offer.</p>
<p class="has-line-data" data-line-start="15" data-line-end="16">To install QoT, simply download the latest release from the <a href="https://github.com/isurfer21/qot/releases">releases page</a> and setup locally as per the given instructions. To use QoT, you can run the qot command followed by the desired options. For more details on how to use QoT, please check out the <a href="https://github.com/isurfer21/qot#qot">guide</a> and the <a href="https://github.com/isurfer21/qot#faq">FAQ</a> sections on this page.</p>
<p class="has-line-data" data-line-start="17" data-line-end="18">QoT is a free and open source tool licensed under the MIT License. If you’d like to contribute to the development of QoT, please check out our <a href="https://github.com/isurfer21/qot/blob/master/CONTRIBUTING.md">contributing guidelines</a>.</p>
<p class="has-line-data" data-line-start="19" data-line-end="20">QoT is a tool that can help you query and manipulate data in CSV files with ease. Try it out today and see for yourself how QoT can make your data analysis faster and simpler.</p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-47721315640835837792023-07-30T14:41:00.004+05:302023-07-30T14:44:36.525+05:30The ultimate tool for finding and replacing patterns in files<p>Are you looking for a simple and powerful tool that can help you find and replace patterns in files? If so, you might want to check out <strong>FindReplace</strong>, a command line tool that allows you to search and replace text or data structures in any file using JSON, YAML, <a href="https://akzcool.blogspot.com/2023/05/introducing-cson-serialization-data.html">CSON</a>, or plain text formats.</p>
<p><strong>FindReplace</strong> is a Rust-based tool that is easy to install and use. You can download it from <a href="https://crates.io/crates/findreplace">crates.io</a> or <a href="https://github.com/isurfer21/FindReplace.git">GitHub</a>, or build it from source using Cargo. Once installed, you can use it by running the command findreplace followed by the pattern, the substitute, and the file path. For example, if you want to replace all occurrences of “foo” with “bar” in a file named file.txt, you can run the command:</p>
<pre><code>findreplace 'foo' 'bar' file.txt
</code></pre>
<p>FindReplace also supports using JSON, YAML, or CSON files as substitutes. This means you can use these formats to define complex data structures that can be used to replace multiple patterns at once. For example, if you have a file named file.txt that contains the text “hello world”, and you want to replace “hello” with “hi” and “world” with “earth”, you can create a JSON file named <code>substitute.json</code> that contains the following:</p>
<pre><code>{ "hello": "hi", "world": "earth" }
</code></pre>
<p>Then, you can run the command:</p>
<pre><code>findreplace 'hello world' substitute.json file.txt
</code></pre>
<p>FindReplace will parse the JSON file and replace the patterns accordingly. You can also use YAML or CSON files as substitutes, or even write them inline using Compact Symbol syntax. For example, you can run the command:</p>
<pre><code>findreplace 'hello world' 'hello:hi;world:earth' file.txt
</code></pre>
<p>FindReplace has many applications and use cases. You can use it to:</p>
<ul>
<li>Rename variables or functions in your code</li>
<li>Update configuration files or data files with new values</li>
<li>Replace placeholders or templates with actual data</li>
<li>Fix typos or errors in your documents</li>
<li>Change formatting or style of your text</li>
<li>And much more!</li>
</ul>
<p>FindReplace is a versatile and handy tool that can save you time and effort when working with files. It is fast, reliable, and easy to use. If you want to learn more about FindReplace, visit its <a href="https://github.com/isurfer21/FindReplace.git">GitHub</a> page or read its documentation on <a href="https://crates.io/crates/findreplace">crates.io</a>. You can also contact its developer for any feedback or suggestions.</p>
<p>FindReplace is the ultimate tool for finding and replacing patterns in files. Try it today and see for yourself!</p>
Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-2746469893548062442023-07-30T14:17:00.003+05:302023-07-30T14:20:55.117+05:30The smart way to clone GitHub sub-directories!<p>Do you want to clone a sub-directory of a GitHub repository without downloading the whole repo? Do you want to save time and bandwidth by cloning only the part of the repo that you need? If yes, then you need <code>clone-github-subdir</code>, a handy command-line tool that lets you do just that!</p>
<p><code>clone-github-subdir</code> is a simple and fast way to clone any sub-directory of a GitHub repo to your local machine. It is useful for many scenarios, such as:</p>
<ul>
<li>You want to try out a sample project or a tutorial from a large repo, but you don’t want to clone the entire repo.</li>
<li>You want to reuse some code or files from a sub-directory of another repo, but you don’t want to fork or clone the whole repo.</li>
<li>You want to contribute to a sub-directory of an open-source repo, but you don’t want to clone the whole repo and deal with unnecessary files.</li>
</ul>
<p>With <code>clone-github-subdir</code>, you can clone any sub-directory of a GitHub repo with just one command. You can also choose to clone only the current sub-directory, not its parent directory, for more convenience.</p>
<p><code>clone-github-subdir</code> is easy to install and use. You can install it from <a href="http://crates.io/">crates.io</a> using cargo, or you can build it from source using git. To use it, you just need to provide the GitHub sub-directory URL as an argument, and optionally use the <code>--curdir</code> or <code>-c</code> option to clone only the current sub-directory.</p>
<p>For example, if you want to clone the <code>nodejs/hello</code> sub-directory of the <code>second-state/wasm-learning</code> repo, you can run:</p>
<pre><code>cgs https://github.com/second-state/wasm-learning/tree/master/nodejs/hello
</code></pre>
<p>Or if you want to clone only the hello sub-directory, you can run:</p>
<pre><code>cgs -c https://github.com/second-state/wasm-learning/tree/master/nodejs/hello
</code></pre>
<p><code>clone-github-subdir</code> is a powerful and handy tool for anyone who works with GitHub repos. It saves you time and bandwidth by cloning only what you need. It is also open-source and licensed under the MIT license, so you can use it freely and modify it as you wish.</p>
<p>If you want to learn more about <code>clone-github-subdir</code>, check out its <a href="https://github.com/isurfer21/clone-github-subdir">Github</a> page.</p>
<p>You can install <a href="https://crates.io/crates/clone-github-subdir">clone-github-subdir</a> from <a href="https://crates.io/">crates.io</a>, i.e., Rust Package Registry, if you already have rust cargo installed.</p>
Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-36979108445451849502023-07-28T21:12:00.004+05:302023-07-28T21:12:45.760+05:30How to setup WASI SDK on Linux?<p>Setting up the <a href="https://github.com/WebAssembly/wasi-sdk">WASI SDK</a> is the simplest on Linux like Ubuntu. You just need to run few lines of commands. That's it!</p>
<p>Open the Linux terminal and go to a directory where you can download the payload. Usually, I prefer downloading the stuffs in <code>/home</code> directory but it's up to you.</p>
<p>Run these commands to download and install the <a href="https://github.com/WebAssembly/wasi-sdk">WASI SDK</a></p><pre><code>curl -O -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk_20.0_amd64.deb
sudo dpkg -i wasi-sdk_20.0_amd64.deb
export PATH=/opt/wasi-sdk/bin:$PATH
export CC=/opt/wasi-sdk/bin/clang
export CXX=/opt/wasi-sdk/bin/clang++
</code></pre>
<p>Now you are ready to use WASI SDK which you can check by this command, <code>clang -v</code>. If it prints the version info then all is well.</p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-42817595253111231112023-07-28T13:27:00.005+05:302023-07-28T13:27:45.862+05:30Git Flow based branch naming conventionGit flow is a branching model for Git that helps large teams collaborate on projects. <br /><br />There are several best practices for naming Git branches. One of them is to begin with unique IDs like JIRA ID followed by JIRA title in the branch names. You can use hyphen as separators and avoid using numbers only. <br /><br />You can also use Git flow's naming conventions, which are based on the type of branch you're creating. For example, feature branches should be named `feature/branch-name`, release branches should be named `release/version-number`, hotfix branches should be named `hotfix/branch-name`, and bugfix branches should be named `bugfix/branch-name`.<br /><br />So our branch names syntax could be like <br /><br /><code><work-type>/<jira-id>-<jira-title></code><br /><br />for e.g.,<br /><ul style="text-align: left;"><li>feature/AIQ-12345-summary-title-of-enhancement-task</li><li>hotfix/AIQ-12345-summary-title-of-hotfix-task</li><li>bugfix/AIQ-12345-summary-title-of-bugfix-task</li><li>release/AIQ-12345-summary-title-of-release-task</li></ul>If you make the branches from jira website then this could be automatically taken care of and you just need to select work-type from the drop down while creating new branch via bitbucket.<p></p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-89703061857150851772023-06-07T07:53:00.003+05:302023-08-22T14:00:30.544+05:30How to Craft Perfect Prompts for ChatGPT?<div class="separator"><br /></div>ChatGPT is an artificial intelligence system that can generate text responses based on user inputs. It can be used for various purposes, such as chatting, writing, learning, and more. However, to get the most out of ChatGPT, users need to know how to craft perfect prompts that will elicit useful and relevant answers from the system.<br /><br />A prompt is a text input that tells ChatGPT what kind of response you want from it. A good prompt should be clear, specific, and informative. It should also state your intent or goal, and direct the output format if needed. In this essay, I will share seven best practices for effective prompt engineering, and then I will give you a formula and some examples of perfect prompts.<div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_J05AQQuOa2Ldc6_OtulooSk0ldXe1Mx8NCcVanbFxX9cEd5xK0h4lnik267RFYG4UDqBg7PMxwkTmoqscS4NPmePqwI6FEWjHzVoZdnnQXHlr5W1vcX9FJBKR4QLpOZtUe48ftHLc0cvP3Fs8wvKiI7UhWttYHz5lMUKnLQJsVL8shfRM9YjShYp6kil/s862/how-to-craft-perfect-prompts-for-chatgpt.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="646" data-original-width="862" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_J05AQQuOa2Ldc6_OtulooSk0ldXe1Mx8NCcVanbFxX9cEd5xK0h4lnik267RFYG4UDqBg7PMxwkTmoqscS4NPmePqwI6FEWjHzVoZdnnQXHlr5W1vcX9FJBKR4QLpOZtUe48ftHLc0cvP3Fs8wvKiI7UhWttYHz5lMUKnLQJsVL8shfRM9YjShYp6kil/s16000/how-to-craft-perfect-prompts-for-chatgpt.jpg" /></a><br /><h2 style="text-align: left;">Best Practices</h2><h3 style="text-align: left;">1. Be specific</h3><div>If you ask a vague question, you may get a vague answer. The more details you provide, the better ChatGPT can give you what you’re looking for. For example, instead of asking "tell me about all dog breeds that exist,” ask “What are the different breeds of small dogs suitable for apartment living?” This way, ChatGPT can narrow down its search and generate more relevant information.<br /><br /><h3 style="text-align: left;">2. State your intent</h3><div>If there’s a specific purpose for your question, state it in the prompt. For example, instead of asking “explain quantum physics” you could say “I’m helping my fifth-grade son with his science homework. Could you explain quantum physics in a simple way?” This way, ChatGPT can adjust its tone and level of complexity to suit your audience and goal.<br /><br /><h3 style="text-align: left;">3. Use correct spelling and grammar</h3><div>While ChatGPT can often interpret and correct spelling and grammar mistakes, providing clear and correct prompts helps ensure you get the best response. ChatGPT may also use your spelling and grammar as cues for the style and quality of the output. For example, if you write “how r u?” ChatGPT may respond with “im good thx” or something similar.<br /><br /><h3 style="text-align: left;">4. Direct the output format</h3><div>If you want the answer in a specific format, state it in your question. For example, you could ask “Could you list the steps to bake a chocolate cake?” or “Could you explain the process of baking a chocolate cake in a paragraph?” This way, ChatGPT can structure its response accordingly and avoid confusion or ambiguity.<br /><br /><h3 style="text-align: left;">5. Ask follow-up questions</h3><div>If the response wasn’t what you expected or if you need more information, feel free to ask follow-up questions to clarify. ChatGPT can remember the context of the previous prompts and responses and use them to generate more coherent and consistent answers. For example, if you ask, “What are the benefits of meditation?” and ChatGPT responds with “Meditation can help reduce stress, improve focus, and enhance well-being.” You could then ask, “How long should I meditate each day?” or “What are some good meditation techniques?”<br /><br /><h3 style="text-align: left;">6. Experiment with different phrasings</h3><div>If you’re not getting the response you want, try asking the question in a different way. ChatGPT might understand one phrasing better than another, or generate different answers based on different wordings. For example, if you ask, “What is the meaning of life?” ChatGPT may respond with “That is a very deep and philosophical question that has no definitive answer.” But if you ask, “What gives life meaning?” ChatGPT may respond with “Life is what you make of it. You can find meaning in your relationships, your passions, your goals, and your values.”<br /><br /><h3 style="text-align: left;">7. Prompt for fact-checking</h3><div>If you’re looking for reliable information, you can ask ChatGPT to provide sources or to fact-check information. For example, “Can you fact-check this statement: The tallest mountain in the world is Mount Everest?” ChatGPT may respond with “This statement is true according to most measurements, but some people argue that other mountains are taller based on different criteria. For example, Mauna Kea in Hawaii is taller than Mount Everest if measured from its base on the ocean floor.” ChatGPT may also provide links or references to support its claims.<br /><br /></div><h2 style="text-align: left;">Formula</h2><div>Now that you know the seven best practices for effective prompt engineering, let me give you a formula for crafting perfect prompts for ChatGPT.<br /><br /><b>[Context] + [Specific Information] + [Intent/Goal] + [Response Format] = Perfect Prompt</b><br /><br />The context is the background or situation that sets up your question. The specific information is the details or parameters that narrow down your question. The intent or goal is the purpose or objective that motivates your question. The response format is the structure or style that you want ChatGPT to use in its answer.<br /><br />Here are two examples of perfect prompts using this formula.<br /><br /><b><i>Context:</i></b> “I’m a beginner cook” <div><b><i>Specific Information:</i></b> “trying to make Italian cuisine” </div><div><b><i>Intent/Goal:</i></b> “Can you provide a simple and easy to follow recipe.” </div><div><b><i>Response Format:</i></b> “Write it as a step-by-step list?” </div><div><b><i>Perfect Prompt:</i></b> “I’m a beginner cook trying to make Italian cuisine. Can you provide a simple and easy to follow recipe for spaghetti carbonara? Write it as a step-by-step list.”<br /><br /><b><i>Context:</i></b> “I’m a software developer” </div><div><b><i>Specific Information:</i></b> “working on a Python project” </div><div><b><i>Intent/Goal:</i></b> “Can you explain how to implement exception handling in Python?” </div><div><b><i>Response Format:</i></b> Write it in a simple paragraph or list. </div><div><b><i>Perfect Prompt:</i></b> "I’m a software developer working on a Python project. Can you explain how to implement exception handling in Python? Write it in a simple paragraph or list.<br /><br /><h2 style="text-align: left;">Conclusion</h2>In conclusion, crafting perfect prompts for ChatGPT can help you get more useful and relevant answers from the system. By following the seven best practices and using the formula I shared, you can improve your prompt engineering skills and get the most out of ChatGPT.</div></div></div></div></div></div></div></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br />Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-2481433927634670172023-05-14T19:01:00.003+05:302023-05-14T19:54:23.963+05:30How to Choose the Right Battery for Your Watch<p>If you have a Swatch wristwatch that needs a battery replacement, you might be wondering what kind of battery to use. There are different types of batteries for different watches, and using the wrong one could affect the performance or lifespan of your watch.</p>
<p>One way to find out the correct battery for your watch is to look at the old battery that you removed from the watch. It should have a number on it, such as SR 936 SW or SR 927 SW. This number indicates the size and type of the battery.</p>
<div data-cke-filler-webkit="start" data-cke-temp="1" style="border: 0px; height: 0px; left: -9999px; margin: 0px; opacity: 0; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 0px;"> </div><p><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiGRseLU3qVOIITv2npvC6sUyQNc2n-nT_7t84RSTLuWnf9pxON7o1keGOn_Soi0RLxuBBXuGA6zyZuJZPcMKGrFPAT-Y1MXbIigeUNCgab792g0xgcfLAoWzYRg4IaYUd9X2h_GGa24srAckS2ZcVr_XQ-Ca7937_c9D_AWc9KUpOOw5kQx6QaAzpg2Q" style="clear: left; display: inline; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img alt="SR936SW vs SR927SW" data-original-height="111" data-original-width="930" src="https://blogger.googleusercontent.com/img/a/AVvXsEiGRseLU3qVOIITv2npvC6sUyQNc2n-nT_7t84RSTLuWnf9pxON7o1keGOn_Soi0RLxuBBXuGA6zyZuJZPcMKGrFPAT-Y1MXbIigeUNCgab792g0xgcfLAoWzYRg4IaYUd9X2h_GGa24srAckS2ZcVr_XQ-Ca7937_c9D_AWc9KUpOOw5kQx6QaAzpg2Q=s16000" title="SR936SW vs SR927SW" /></a></p><p>The first two digits of the number represent the diameter of the battery in millimetres. For example, SR 9xx batteries have a diameter of 9.5 mm. The last two digits represent the height of the battery in tenths of a millimetre. For example, SR xx36 batteries have a height of 3.6 mm.</p>
<p>The letter S stands for silver oxide, which is the material used in most watch batteries. The letter R stands for round shape. The letter W stands for high drain, which means the battery can handle more power consumption from the watch. Whereas SW stands for low drain, which means the battery can handle low power consumption from the watch.</p>
<p>So, what is the difference between SR 936 SW and SR 927 SW batteries? The main difference is the height: SR 936 SW is 0.9 mm taller than SR 927 SW. This means that SR 936 SW might not fit in some watches that are designed for SR 927 SW. However, some watches have a spring inside the battery case that can adjust to different heights, so SR 927 SW might still work in some watches that are designed for SR 936 SW.</p>
<p>Another difference is the capacity: SR 936 SW has a capacity of 71 mAh (milliampere hours), while SR 927 SW has a capacity of 57 or 60 mAh. This means that SR 936 SW can last longer than SR 927 SW before it needs to be replaced.</p>
<p>Therefore, if you want to replace your watch battery, you should check the old battery number and look for a new battery with the same number. If you cannot find the exact match, you can try a battery with a similar number, but make sure it fits in your watch and has enough capacity for your watch’s power consumption.</p>
<p>I hope this article helps you choose the right battery for your watch. 😊</p>
<p> </p>
<h4>References</h4>
<ul>
<li><a href="https://biz.maxell.com/en/primary_batteries/CrossReference_16e.pdf">CrossReference_16e.pdf (maxell.com)</a></li>
<li><a href="http://www.themeter.net/pila2_e.htm">comparison table of batteries and button cell (themeter.net)</a></li>
<li><a href="https://solution.murata.com/en-global/products/microbatteries_watch/asset/home/files/CrossReference_en.pdf">CrossReference_en.pdf (murata.com)</a></li>
<li><a href="https://www.sii.co.jp/en/me/battery/products/silver-oxide/cross-reference/">Silver Oxide Battery Cross Reference Chart | Seiko Instruments Inc. Micro Energy Division (sii.co.jp)</a></li>
</ul>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-83312703117414385732023-05-12T21:48:00.000+05:302023-05-12T21:48:58.072+05:30Introducing CSON serialization & data representation format<p>CSON (Concise Object Notation) is a data serialization format that is designed to be more concise than JSON (JavaScript Object Notation). CSON is a variation of JSON, which means that it shares some similarities with JSON but also has its own unique features and syntax.</p>
<p>One of the main differences between CSON and JSON is that CSON allows for the use of multiple separator characters between key-value pairs in an object or elements in an array. In JSON, only a comma can be used as a separator. In CSON, however, a semicolon, comma, pipe, tilde or forward slash can be used as a separator. However, it’s important to note that once a separator character has been chosen, it must be used consistently throughout the data.</p>
<p>Here’s a simple grammar that can be used for valide CSON serialization format: </p>
<div>
<pre><code>cson = object | array
object = '{' pair (separator pair)* '}'
pair = key ':' value
key = string
value = string | number | object | array
array = '[' element (separator element)* ']'
element = value
string = [a-zA-Z0-9_]+
number = [0-9]+
separator = ',' | ';' | '|' | '~' | '/'
</code></pre>
</div>
<p>This grammar defines the basic structure of a CSON object or array. It specifies that an object is a collection of key-value pairs enclosed in curly brackets, and an array is a collection of elements enclosed in square brackets. The key in a key-value pair must be a string, and the value can be a string, number, object or array. The elements in an array can also be any of these types.</p>
<p>Here’s the simple grammar that allows semicolon, comma, pipe, tilde or forward slash as separators:</p>
<p>In this grammar, the <code>separator</code> rule has been added to allow any of the specified characters to be used as separators between pairs in an object or elements in an array.</p>
<p>Here’s an example of a simple object in JSON format:</p>
<div>
<pre><code>{
"name": "John Smith",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Springfield",
"state": "IL"
}
}</code></pre>
</div>
<p>The same object can be represented in CSON format using a different separator character:</p>
<div>
<pre><code>name:John Smith;age:30;address:{street:123 Main St;city:Springfield;state:IL}</code></pre>
</div>
<p>In this example, semicolons are used as separators between the key-value pairs in both the top-level object and the nested <code>address</code> object.</p>
<p>Another difference between CSON and JSON is that CSON allows for the omission of double quotes around keys and string values. This can make the data more concise. In the example above, the keys and string values are not enclosed in double quotes.</p>
<p>CSON’s focus is mainly on making the data as compact and concise as possible. This makes it fast to deliver and easy to convert into other data formats. As such, CSON does not support newlines or indentation for formatting.</p>
<p>In CSON, certain characters are reserved and must be escaped with a backslash if they appear within double quotes to prevent them from being interpreted as CSON syntax. These reserved characters include:</p>
<ul>
<li>The separator characters: semicolon (;), comma (,), pipe (|), tilde (~) and forward slash (/)</li>
<li>The colon (:), which is used to separate keys from values in an object</li>
<li>The curly brackets ({ and }), which are used to enclose objects</li>
<li>The square brackets ([ and ]), which are used to enclose arrays</li>
</ul>
<p>Overall, CSON provides a more concise way to represent structured data than JSON. It allows for multiple separator characters and the omission of double quotes around keys and string values. These features make CSON a powerful tool for representing data in a compact and efficient way. </p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-5141691155743084912023-04-10T13:05:00.007+05:302023-04-10T13:05:45.310+05:30Introducing the Base99 conversion system<h3>Understanding the base conversion</h3><p>Base conversion is the process of converting a number from one base (or radix) to another. A base is the number of digits or symbols used to represent numbers in a particular system. For example, the decimal system (base 10) uses 10 digits (0-9), while the binary system (base 2) uses only 2 digits (0 and 1).</p><p>To convert a number from one base to another, you can first convert it to decimal (base 10) and then convert that decimal number into the desired base. There are also direct conversion methods between some bases, such as binary, octal, and hexadecimal.</p><h3 style="text-align: left;">Introducing the base99 conversion system</h3><p>A base99 conversion system would use 99 distinct symbols to represent numbers. For example, you could use the digits 0-9 and the letters A-Z (lowercase and uppercase) to represent the first 62 symbols. You would then need to choose an additional 37 symbols to represent the remaining values.</p><p>As base99 conversion system would require 99 unique characters to represent each digit, however, there are only 62 alphanumeric characters (26 uppercase letters, 26 lowercase letters, and 10 digits) available. So, to create a base99 system, you would need to use additional characters or symbols to represent the remaining digits.</p><pre><code>0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-=[]{}|;:,.<>/?`~</code></pre><p>To convert a number from decimal to base99, you would repeatedly divide the decimal number by 99 and keep track of the remainders. The remainders would represent the digits of the base99 number in reverse order.</p><p>To convert a number from base99 to decimal, you would multiply each digit of the base99 number by 99 raised to the power of its position (starting from the rightmost digit with position 0) and sum the results.</p>
<h3>Try now!</h3>
<script async src="//jsfiddle.net/isurfer21/uLg4wsop/85/embed/result/"></script>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-31392772327747725962023-02-18T16:06:00.006+05:302023-08-22T14:02:49.010+05:30Algorithm to translate Sanskrit to Hindi language text<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Xv20EMued4axSdSzzcJeYqptxyEXMnVhFDxOPiGOb2al8LgCfbMLxjRL83NWKdJ1Wx321SLzwLPQ7JN-nE6tUVlfSx2NbhDsQvTkwgT2qz3-ZufWDyatJhuEncM1eON257giJuOJ7rzdVuTuFSWvDx38yUy1BfjVgrftj1fQgGHdkOeU6QYSLeICzXFX/s862/algorithm-to-translate-sanskrit-to.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="646" data-original-width="862" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Xv20EMued4axSdSzzcJeYqptxyEXMnVhFDxOPiGOb2al8LgCfbMLxjRL83NWKdJ1Wx321SLzwLPQ7JN-nE6tUVlfSx2NbhDsQvTkwgT2qz3-ZufWDyatJhuEncM1eON257giJuOJ7rzdVuTuFSWvDx38yUy1BfjVgrftj1fQgGHdkOeU6QYSLeICzXFX/s16000/algorithm-to-translate-sanskrit-to.jpg" /></a></div><br /><p><br /><br /> Translating Sanskrit language text into Hindi language text involves several steps and can be done using a combination of rule-based and statistical approaches. Here is a simplified algorithm that outlines the basic steps involved:<br /><br /></p><h4 style="text-align: left;">Step 1: Preprocessing </h4><p>The Sanskrit text needs to be preprocessed to remove any diacritics, accents, or other special characters that are not present in Hindi. The text should also be converted to the Devanagari script, which is used to write both Sanskrit and Hindi.<br /><br /></p><h4 style="text-align: left;">Step 2: Tokenization </h4><p>The preprocessed text should be split into individual words, or tokens, using a tokenizer that can handle Sanskrit words.<br /><br /></p><h4 style="text-align: left;">Step 3: Morphological analysis </h4><p>Each token should be analyzed morphologically to determine its root form and any inflections, tense, gender, number, etc. This can be done using a morphological analyzer that can handle Sanskrit morphology.<br /><br /></p><h4 style="text-align: left;">Step 4: Mapping to Hindi vocabulary </h4><p>Each Sanskrit word needs to be mapped to its corresponding Hindi word or phrase. This can be done using a dictionary or lookup table that contains mappings between Sanskrit and Hindi words.<br /><br /></p><h4 style="text-align: left;">Step 5: Syntactic analysis </h4><p>The Hindi text needs to be generated by arranging the words in the correct order and inflecting them for tense, case, gender, and number. This can be done using a rule-based approach that takes into account the syntactic structure of the sentence.<br /><br /></p><h4 style="text-align: left;">Step 6: Post-processing </h4><p>The generated Hindi text may need to be post-processed to adjust for any grammatical errors or inconsistencies that may have arisen during the conversion process.<br /><br />Overall, converting Sanskrit text into Hindi text is a complex task that requires a combination of linguistic knowledge, computational tools, and machine learning algorithms. While the above algorithm provides a basic outline of the steps involved, the actual process of conversion may vary depending on the specific requirements and constraints of the application.</p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-54816582148454076042021-05-02T18:40:00.004+05:302021-05-02T18:40:43.176+05:30How to select Zendesk ticket status?<p>Suppose you are employed by the <i>CompanyX</i> but working on <i>CompanyY</i>'s support project using Zendesk.</p><p><span style="background-color: white;"><span style="font-family: inherit;">So below table would help you to get an idea regarding the logic behind setting the Zendesk ticket status.</span></span></p><div class="canvasRteResponsiveTable" style="-webkit-font-smoothing: antialiased; background-color: white; clear: both; color: #323130; line-height: 1.4em; margin: 0px 0px 8px; overflow-wrap: break-word; overflow-x: auto;"><div class="tableWrapper" style="-webkit-font-smoothing: antialiased; line-height: 1.4em; margin: 0px; overflow-wrap: break-word;"><table cellpadding="1" cellspacing="0" class="bandedRowTableStyleTheme" style="border-collapse: collapse; border-color: rgb(50, 49, 48) !important; border-style: solid; border-width: 1px !important; margin-bottom: 10px; width: 539px;" width=""><tbody><tr style="background-color: #8764b8; border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important;"><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; color: white; font-weight: 700; margin: 0px; padding: 8px 16px 8px 8px; width: 188px;"><b><span style="font-family: inherit;">Ticket status should be</span></b></td><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; color: white; font-weight: 700; margin: 0px; padding: 8px 16px 8px 8px; width: 299px;"><b><span style="font-family: inherit;">When response/action required from</span></b></td></tr><tr style="background-color: #e9e2f4; border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important;"><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; margin: 0px; padding: 8px 16px 8px 8px; width: 188px;"><span style="font-family: inherit;">Open</span></td><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; margin: 0px; padding: 8px 16px 8px 8px; width: 299px;"><span style="font-family: inherit;">Agents of </span><i>CompanyY</i><span style="font-family: inherit;"> support team</span></td></tr><tr style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important;"><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; margin: 0px; padding: 8px 16px 8px 8px; width: 188px;"><span style="font-family: inherit;">Pending</span></td><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; margin: 0px; padding: 8px 16px 8px 8px; width: 299px;"><span style="font-family: inherit;">Requester or customer</span></td></tr><tr style="background-color: #e9e2f4; border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important;"><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; margin: 0px; padding: 8px 16px 8px 8px; width: 188px;"><span style="font-family: inherit;">On Hold</span></td><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; margin: 0px; padding: 8px 16px 8px 8px; width: 299px;"><i>CompanyY</i><span style="font-family: inherit;"> engineering team</span></td></tr><tr style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important;"><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; margin: 0px; padding: 8px 16px 8px 8px; width: 188px;"><span style="font-family: inherit;">Solved</span></td><td style="border-collapse: collapse; border-color: rgb(135, 100, 184) !important; border-style: solid; border-width: 1px !important; margin: 0px; padding: 8px 16px 8px 8px; width: 299px;"><span style="font-family: inherit;">No one</span></td></tr></tbody></table></div></div><p style="-webkit-font-smoothing: antialiased; background-color: white; line-height: 1.4em; margin: 0px 0px 8px; overflow-wrap: break-word;"><span style="font-family: inherit;">You can set any of the above status while submitting a response or after updating the details in the ticket.</span></p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-53916457483750617332021-05-02T18:31:00.006+05:302021-05-02T18:36:34.383+05:30How to overcome proxy on command line?Introducing <a href="https://github.com/isurfer21/Proxima" target="_blank">Proxima</a>, by which you can set proxy for that particular session of command-line window.<br /><br /><div>It authenticates command line program running over corporate proxy.</div><div><br /></div><div>So this program can be used to set proxy over command-line that usually required on company's networks.</div><div><br /></div><div>Although the session gets expired once you close the command-line window. </div><div><br /></div><div>As it is compatible to Windows 10, so follow these steps to setup/install.</div><div><br /></div><div><p></p><h3 style="text-align: left;">Installation</h3><p></p><ol><li>Unzip the <em><a href="https://github.com/isurfer21/Proxima/archive/refs/tags/v1.0.0.zip">Proxima.zip</a></em> zipped file</li><li>Copy the <em>proxima.bat</em> file</li><li>Paste it inside <em>C:\Windows\System32</em> path</li></ol><div style="text-align: left;"><br /></div><h3 style="text-align: left;">Execution</h3><p>Here is the sample output for <em>proxima help</em> command</p><pre><code>C:\Users\kumarab>proxima help
Proxima ver 1.0
Copyright 2018 Abhishek Kumar. Licensed under GNU GPL v3.
Usage:
proxima [username] [password]
Example:
proxima kumarab abc123
proxima kumarab abc_123
Note:
Avoid using @ or : in your password
Using _ would be most suitable for password
Done!</code></pre><div><br /></div></div>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-54271196465481082142021-05-02T18:15:00.000+05:302021-05-02T18:15:02.713+05:30Recording screen with VLC player on windows<p>If you are curious as to how you can start recording your screen using VLC here are the steps involved in finding the record option for your favorite shows.</p><p>1. Open up VLC media player and use the view tab to select the advanced controls that you will need to start the capture. Go down to the media tab and then click on the open capture device option. You can also press control + C with the media tab open to do this quickly for recording. This will open up the media dialog box.</p><p align="center"><img alt="record-screen-with-vlc-1 " height="315" src="https://images.wondershare.com/filmora/article-images/record-screen-with-vlc-1.png" width="560" /></p><p>2. From the <b>media </b>dialog box you can click the <b>capture device</b> to choose whether or not you would like to pick out capture from a webcam or from your desktop. Set the <b>desktop</b> as your desired capture mode and then you can simply pick out the ideal capture rate for your desktop device.</p><p align="center"><img alt="record-screen-with-vlc-3 " height="315" src="https://images.wondershare.com/filmora/article-images/record-screen-with-vlc-3.png" width="560" /></p><p>3. VLC will not automatically record audio or voice. Dou can add voices in the show more options menu however. Be sure when selecting your capture device that you also make an effort to choose the correct frame rate for your project. A standard frame rate could be 25-30 frames per second and the standard frame rate for capture is <b>10 frames</b> per second on many screen captures. Up the frame rate if you would like smoother video but remember that this can take more processing power with recording.</p><p align="center"><img alt="record-screen-with-vlc-4 " height="315" src="https://images.wondershare.com/filmora/article-images/record-screen-with-vlc-4.png" width="560" /></p><p>4. When taking the show more options button you can add audio to play simultaneously along with the recording in the extra media tab. This is an ideal way to create a voiceover for a presentation with pre-recorded audio or to put your video to music.</p><p align="center"><img alt="record-screen-with-vlc-5 " height="315" src="https://images.wondershare.com/filmora/article-images/record-screen-with-vlc-5.png" width="560" /></p><p>5. Click on the <b>convert</b> dialog box and created a new profile.</p><p align="center"><img alt="record-screen-with-vlc-6 " height="315" src="https://images.wondershare.com/filmora/article-images/record-screen-with-vlc-6.png" width="560" /></p><p>6. This profile will help you to take your video codec options, encoding and the save file location for all of your screen recordings.</p><p align="center"><img alt="record-screen-with-vlc-8 " height="315" src="https://images.wondershare.com/filmora/article-images/record-screen-with-vlc-8.png" width="560" /></p><p>7. After setting up these options click<b> save</b> and then click on the <b>start</b> button which will appear at the bottom.</p><p align="center"><img alt="record-screen-with-vlc-11 " height="315" src="https://images.wondershare.com/filmora/article-images/record-screen-with-vlc-11.png" width="560" /></p><p>8. When you click the <b>save</b> button VLC will begin recording. You can also use the record and pause button to pause recording as well as the stop button to fully save your video and keep it in the save position you created earlier.</p><p align="center"><img alt="record-screen-with-vlc-13 " height="315" src="https://images.wondershare.com/filmora/article-images/record-screen-with-vlc-13.png" width="560" /></p><div><br /></div><div>Reference: <a href="https://filmora.wondershare.com/screen-recorder/record-screen-with-vlc-on-windows.html?gclid=Cj0KCQiAjszhBRDgARIsAH8Kgve2hB7sV7M3zWnRK1NpLfq6GXC2YZmSSuyS9ycvmt9Dm858X_E4EskaAk_UEALw_wcB" target="_blank">How to Record Screen with VLC on Windows 7/8/10</a></div><div><br /></div>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-51000873171344193212021-05-02T17:53:00.005+05:302021-05-02T17:54:24.436+05:30Transferring files via Suxm - micro web-server<p>
<strong><a href="https://isurfer21.github.io/Suxm/">Suxm</a></strong> is a micro web-server meant to serve locally and is
very fast web-server that will make use of full capacity of your system. </p><p>It is very useful in coding & development because you don't have to install any other static server apart from this; specially if you are working on any client-side app.</p><p><br /></p>
<h3 id="download">Download portable app</h3>
<ul style="text-align: left;">
<li>
<span style="font-weight: normal;"><a href="https://app.box.com/s/zoeet80oebvzrth4wh38iibdulegvlrb">Suxm_linux_x86-64.tar.bz2</a></span>
</li>
<li>
<span style="font-weight: normal;"><a href="https://app.box.com/s/aznzq3g4hu26ayw9u0vhay1kmus52yvb">Suxm_macos_x86-64.tgz</a></span>
</li>
<li>
<span style="font-weight: normal;"><a href="https://app.box.com/s/e5mf5ujome2ilis25s3hxqs6e0t2rmac">Suxm_windows_x86-64.zip</a></span>
</li>
</ul><div><br /></div>
<h3 style="text-align: left;">Install on Windows</h3>
<ol>
<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Suxm%20-%20micro%20web-server.aspx#install-on-windows"></a>
<li>
Download <a href="https://app.box.com/s/e5mf5ujome2ilis25s3hxqs6e0t2rmac">Suxm_windows_x86-64.zip</a>
</li>
<li>Unzip it</li>
<li>Double click on <em>setup.bat</em> file</li>
<li>
Open command-prompt app & run <em>suxm</em> command to check
if it is installed successfully
</li>
</ol><div><br /></div>
<h3 id="install-on-macos">
Install on macOS<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Suxm%20-%20micro%20web-server.aspx#install-on-macos" target="_self"></a>
</h3>
<ol>
<li>
Download <a href="https://app.box.com/s/aznzq3g4hu26ayw9u0vhay1kmus52yvb">Suxm_macos_x86-64.tgz</a>
</li>
<li>Unzip it</li>
<li>Open <em>Terminal</em> app</li>
<li>Go to the unzipped <em>Suxm_macos_x86-64</em> folder</li>
<li>Run command, <em>sh setup.sh</em></li>
<li>
Open another tab & run <em>suxm</em> command to check if it is
installed successfully</li></ol><div><p><br /></p><h3>Transfer file from <i>MachineA</i> to <i>MachineB</i></h3><p>Also, if you want to share some file from one system to another but all other ways of transfer are blocked that usually happens on corporate network; then you may try this app. </p><div style="text-align: left;"><span style="font-weight: normal;">Just follow these steps:</span></div><p></p><ol><li>Download and install <i>suxm</i> at <i>MachineA</i></li><li>Now run ipconfig command on terminal to determine <i>MachineA</i> IP address</li><li>Run the <i>suxm</i> at the required folder on <i>MachineA</i> IP address and port 80; which could never be blocked by any network.</li><li>Now note down the URL, it is serving at.</li><li>Then access the same URL via <i>MachineB </i>browser.</li><li>It would list down direct links of all the files of that <i>MachineA</i>'s shared folder on <i>MachineB </i>browser.</li><li>Now you may download the required file from those links.</li></ol><p></p></div>
Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-37101625718326371442021-05-02T16:58:00.003+05:302021-05-02T17:19:56.031+05:30Git Branching Models<style>
table {
width: 100%;
background-color: ;
border-collapse: collapse;
border-width: 1px;
border-color: gainsboro;
border-style: solid;
color: #000000;
}
table td, table th {
border-width: 1px;
border-color: gainsboro;
border-style: solid;
padding: 5px;
}
table thead {
background-color: gainsboro;
}
table td:nth-child(2) {
width: 100px;
}
</style>
<p>In Git repository you can use branching models to define a branch
workflow for repositories. When you map your workflow to repository branches
with a branching model, admins can guide developers to name branches
consistently by configuring which branch types to make available. There are a
number of branch types available, and several branch types have default branch
naming prefixes (described below). You can also specify your own naming
convention for each branch type. A consistent naming convention makes it
easier to identify branches by type.
</p>
<h2 id="branch-types">
Branch types<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Git-Branching-Models.aspx#branch-types" target="_self"></a>
</h2>
<p>
Bitbucket Server comes with several types of branches that are frequently used
in software development. This section explains what each branch type is for,
and has the typical naming convention for the prefix for each branch type. The
prefix can be changed for each branch type.
</p>
<div>
<table>
<tbody>
<tr>
<td>
<h4 id="development-branch">
Development branch<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Git-Branching-Models.aspx#development-branch" target="_self"></a>
</h4>
<p>
Usually the integration branch for feature work and is often the
default branch or a named branch. For pull request workflows, the
branch where new feature branches are targeted.
</p>
</td>
<td>
<p><strong>develop</strong></p>
</td>
</tr>
<tr>
<td>
<h4 id="production-branch">
Production branch<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Git-Branching-Models.aspx#production-branch" target="_self"></a>
</h4>
<p>
Used for deploying a release. Branches from, and merges back into,
the development branch. In a Gitflow-based workflow it is used to
prepare for a new production release.
</p>
</td>
<td><strong>master</strong></td>
</tr>
<tr>
<td>
<h4 id="feature-branch">
Feature branch<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Git-Branching-Models.aspx#feature-branch" target="_self"></a>
</h4>
<p>
Used for specific feature work or improvements. Generally branch
from, and merge back into, the development branch using pull
requests.
</p>
</td>
<td><strong>feature/</strong></td>
</tr>
<tr>
<td>
<h4 id="release-branch">
Release branch<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Git-Branching-Models.aspx#release-branch" target="_self"></a>
</h4>
<p>
Used for release task and long-term maintenance versions. They
branch from, and merge back into, the development branch. Merging
into an older release branch can be configured to automatically
merge to newer release branches, as well as the development branch.
</p>
</td>
<td><strong>release/</strong></td>
</tr>
<tr>
<td>
<h4 id="bugfix-branch">
Bugfix branch<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Git-Branching-Models.aspx#bugfix-branch" target="_self"></a>
</h4>
<p>Typically used to fix Release branches.</p>
</td>
<td><strong>bugfix/</strong></td>
</tr>
<tr>
<td>
<h4 id="hotfix-branch">
Hotfix branch<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Git-Branching-Models.aspx#hotfix-branch" target="_self"></a>
</h4>
<p>
Used to quickly fix a Production branch without interrupting changes
in the development branch. In a Gitflow-based workflow, changes are
usually merged into the production and development branches.
</p>
</td>
<td><strong>hotfix/</strong></td>
</tr>
</tbody>
</table>
</div>
<div style="text-align: left;"><br /></div><h2 id="good-to-know">
Good to know:<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Git-Branching-Models.aspx#good-to-know" target="_self"></a>
</h2>
<ul>
<li>
New repositories will have the branching model enabled by default, and use
the default branch prefixes.
</li>
<li>
Enabled branch types can't have empty prefixes, have a 30 character limit,
and can't overlap (for example PROD and PRODUCT would overlap).
</li>
</ul>
Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-85109806024926902092021-05-02T16:41:00.004+05:302021-05-02T16:41:30.395+05:30Quick troubleshooting steps for any web-portal<div>Most of the time, we face some issue while loading a web portal.</div><div><br /></div><div>So here are few general purpose quick troubleshooting steps for any web-portal, which you may try</div><ol style="text-align: left;"><li>Check console errors via Web Inspector</li><li>Make a note of cookies stored for the webpage.</li><li>Try clearing browser cache,</li><li>Try relaunching the web page on new window.</li></ol>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-59553582976286387112021-05-02T16:35:00.000+05:302021-05-02T16:35:03.342+05:30Templates for JIRA<p>Fill required details in place of <> in the template</p><div><div id="ed0ce90d-9049-488b-83f5-6a63263ad900"><h2 id="filing-jira">Filing JIRA<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Templates%20for%20JIRA.aspx#filing-jira" target="_self"></a></h2><p>Use the below template while filing JIRA:</p><p><strong>Lab info</strong></p><p><strong>Lab:</strong></p><p><Server name> e.g., NA productions</p><p><strong>Loads:</strong></p><p><Server load> eg., CPaaS 2.1.4</p><p><Browser with version> e.g., Chrome Version 72.0.3626.121(64-bit)</p><p><strong>Timestamp:</strong></p><p><Date and time in EST> e.g., March 17, 2019 8:10-8:25 PM EDT</p><p><strong>Setup:</strong></p><p>e.g.,</p><p>URL: https://project.company.com/</p><p>Account: test@ask-mail.com</p><p>Password: Test@123</p><p><strong>Steps:</strong></p><p><Mention all the steps in number bullet points></p><p><strong>Actual Result:</strong></p><p><></p><p><strong>Expected result:</strong></p><p><></p><p><strong>Reproducible:</strong></p><p><Yes/No with comment> e.g., Yes, but with trial accounts only</p><p><strong>End User Impact:</strong></p><p><Adequately <em>assess</em> the <em>impact</em> of this issue on end-user> e.g., It would heavily impact the performance of call under specified scenario</p><p><strong>Frequency:</strong></p><p><occurance rate> say., 100%</p><p><strong>Fault Isolation:</strong></p><p><If you know which module the fault is> otherwise say., None</p><p><br /></p></div></div><div><div id="21c47a7e-79f7-4e1f-a63e-f0850b419760"><h2 id="validating-jiras">Validating JIRAs<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Templates%20for%20JIRA.aspx#validating-jiras" target="_self"></a></h2><p><strong>Steps to verify:</strong></p><p>Login to server <Staging URL/Production URL> with account <email id/password></p><p><<i>1. ...</i></p><p><i>... n.</i>></p><p>Narrate the clear steps to verify the JIRA</p><p><strong>Expected results:</strong></p><p><> write clear notes on what should be the expected results aligning with Jira requirement. If you are not sure of the req, bring it to the discussion on JIRA itself.</p><p><strong>Actual results:</strong></p><p><> say., works as expected, if not mention the actual result observed.</p><p><strong>Date/Time of test:</strong></p><p><> Eg., March 26, 2019 10:30 AM EST.</p><p><strong>Conclusion:</strong></p><p><PASS/ FAIL></p><p>Next,</p><p>Move the JIRA to “ <strong>TESTING DONE </strong>” status if the test is a pass, Assign Jira to <i>Project Admin</i>.</p><p>If the test fails, keep the JIRA in ‘TESTING’ state and assign to <i>Project Admin</i> clarifying the requirement, Jeff may want to correct steps or take further action in redoing development changes. Repeat testing if required.</p></div></div>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-92042021488973597342021-05-02T16:26:00.000+05:302021-05-02T16:26:22.633+05:30Summary of Zendesk legends and terminologies<p> </p><h2 id="total-solved-tickets">Total solved tickets<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Summary-of-zendesk-legends-and-terminologies.aspx#total-solved-tickets" target="_self"></a></h2><p>Solved status indicates the agent has submitted a solution. So total number of tickets marked as Solved refers to total solved tickets within certain duration.</p><h3 id="solving-a-ticket-and-understanding-how-it-is-closed">Solving a ticket and understanding how it is closed<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Summary-of-zendesk-legends-and-terminologies.aspx#solving-a-ticket-and-understanding-how-it-is-closed" target="_self"></a></h3><p>Once you've resolved a requester's support issue, you change the ticket status to Solved, using the Submit button as described above. This should mean that you're done with the ticket and that the requester is satisfied with the resolution you provided. However, a requester can reopen the ticket after it has been set to Solved just by responding back and adding a new comment. For example, perhaps the requester disagrees that their support issue was resolved or that something new occurred that invalidates the fix.</p><p>After you set a ticket to Solved, the next status change is to Closed. However, you can't manually change a ticket to Closed; it is set to that status via a predefined business rule called an automation. An administrator creates automations and determines just how long tickets remain in the solved state before they are closed. If an administrator deactivates the automations that close tickets, the tickets will be closed automatically 28 days after they're solved. If you would like to manually change ticket to Closed, you can create a trigger as a workaround.</p><p>After a ticket's status has changed to Closed, the requester can no longer reopen it. They can, however, create a follow-up request that references the original, now closed, ticket. Agents can also create a follow-up for a closed ticket.</p><h2 id="first-reply-time-(frt)">First reply time (FRT)<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Summary-of-zendesk-legends-and-terminologies.aspx#first-reply-time-(frt)" target="_self"></a></h2><p>A metric that counts the number of minutes between the time a ticket is created, and the timestamp of the first public agent comment on that ticket.</p><h3 id="how-first-reply-time-is-calculated">How first reply time is calculated?<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Summary-of-zendesk-legends-and-terminologies.aspx#how-first-reply-time-is-calculated" target="_self"></a></h3><p>The Zendesk first reply time metric measures the time between ticket creation and the first public agent comment after that.</p><p>After the first public reply, Support stores the first reply time in calendar hours and calculates and stores the first reply time in business hours.</p><p>First reply time works the same regardless of the channel from which the ticket originates. For example:</p><ul><li><p>A customer email creates a ticket. Timing starts when the ticket is created and ends at the first public agent comment.</p></li><li><p>An agent creates a ticket. Timing starts when the ticket is created and ends at the agent's next public comment.</p></li><li><p>An agent takes a phone call that creates a ticket and solves the ticket with no new comment. The customer later re-opens the ticket, and the agent then responds with a public comment. First reply time ends when that comment is posted.</p></li></ul><h2 id="full-resolution-time">Full resolution time<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Summary-of-zendesk-legends-and-terminologies.aspx#full-resolution-time" target="_self"></a></h2><p>It is defined as the time between <em>ticket creation time</em> and <em>the time of the final (or most recent) change of status</em> to solved.</p><h3 id="scenario-1">Scenario #1<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Summary-of-zendesk-legends-and-terminologies.aspx#scenario-1" target="_self"></a></h3><p>If a ticket is solved once and then goes to Closed, the "Full Resolution" and "1st Resolution" times will be the same.</p><h3 id="scenario-2">Scenario #2<a href="https://hclo365.sharepoint.com/sites/ribbonteam/SitePages/Summary-of-zendesk-legends-and-terminologies.aspx#scenario-2" target="_self"></a></h3><p>If a ticket is solved, then reopened, and then solved again, the "1st Resolution" metric would show the time until it was solved initially, while "Full Resolution" would display the time until it was solved the 2nd time.</p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-81878763645846508792021-05-02T16:24:00.001+05:302021-05-02T16:24:09.216+05:30Free online Text to Speech converter<p> I tried few free online tools and found this site <a href="http://www.fromtexttospeech.com/">http://www.fromtexttospeech.com/ </a>for free text to speech conversion because it's generated audios looks quite close to actual voice.</p><p>So I tried "Thank you for calling A T and T. How may I help you?" as sample text, and got this <a href="http://www.fromtexttospeech.com/output/0773338001554343217/46391900.mp3">audio file </a>generated with <strong>Alice</strong> voice.</p><p>Another <a href="http://www.fromtexttospeech.com/output/0083281001554343516/46392005.mp3">audio file </a>with <strong>Daisy</strong> voice seems similar to Google's voice.</p><p>So I think we can use this tool to generate customised audio messages. Now we need to focus what messages we need to put.</p><p>Note: Try the text in phonetic form to make sure correct pronunciation.</p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-49228393184464207202021-05-02T16:23:00.002+05:302021-05-02T16:23:14.772+05:30Explained Zendesk Ticket Types<p>There are four values for type: Question, Incident, Problem, and Task. While the field can be blank initially (and through any number of updates), once you change the field to a specified type, you can't change it to blank again. Setting the type helps you to categorize your tickets, which you can then use in your workflow. For example, you can create views of tickets by their type.</p><p><strong>Question</strong> is used to indicate that the requester's issue is a question rather than a problem that needs to be solved.</p><p><strong>Incident</strong> is used for occurrences of a problem that affect more than one person. For example, if the wireless network in an office stops working, the problem will probably generate several support requests. Instead of handling each ticket separately, create one ticket describing the problem and set the type to Problem. Next, link the incident tickets to the problem ticket. When you solve the problem ticket, all of the linked incident tickets are solved too.</p><p><strong>Problem</strong> is used to indicate that the requester is having an issue with your product or service that needs to be resolved.</p><p><strong>Task</strong> is used when you want to assign the ticket as a task to a specific agent. When you select Task, you also set the Task Due Date which is 12pm in the account local timezone on the due date.</p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0tag:blogger.com,1999:blog-1477005142683929787.post-62689700740414035132021-05-02T16:21:00.005+05:302021-05-02T16:21:58.068+05:30Explained Zendesk Ticket Status<p>There are six values for status: New, Open, Pending, On-hold, Solved, Closed. A ticket's status can be set and updated either manually by an agent or automatically via your business rules. A ticket's status cannot be changed to Closed manually however; that is handled automatically via your business rules.</p><p><strong>New</strong> means that the request was received but that it has not been opened and has not been assigned to an agent. The New status can indicate that the support team is evaluating it to determine who should be assigned to resolve it. After changing the status from New to another status, you can't change the status back to New.</p><p><strong>Open</strong> means that the request has been assigned to an agent who is working to resolve it. Once a ticket status changes to Open, it can never return to New. If your tickets are being created in the Open status instead of New, see <a href="https://support.zendesk.com/hc/en-us/articles/225763187">Why is my New ticket being created in Open status? </a>in our Support Tech notes.</p><p><strong>Pending</strong> means that the assigned agent has a follow-up question for the requester. The agent may need more information about the support issue. Requests that are set to Pending typically remain that way until the requester responds and provides the information the agent needs to continue resolving the request.</p><p><strong>On-hold</strong> means that the support request is awaiting a resolution from a third party—someone who is not a member of your support staff and does not have an agent account. This status is optional and must be added (see <a href="https://support.zendesk.com/entries/22340998">Adding the On-hold ticket status to your Zendesk </a>in the Administrator Guide)</p><p><strong>Solved</strong> means that the agent has resolved the support issue. Solved tickets are closed, typically, a number of days after they have been set to Solved (the exact number of days depends on how an Administrator set this up). Until a ticket is closed, the requester can reopen the ticket. For example, the requester may not agree with the agent that the support issue is resolved and reply back to the ticket solved email notification.</p><p><strong>Closed</strong> means that the ticket is complete and can't be reopened. Requesters however can create follow-up requests for closed requests. </p>Abhishek Kumarhttp://www.blogger.com/profile/15147046055906934530noreply@blogger.com0