<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tomás Vírseda</title>
    <description>The latest articles on DEV Community by Tomás Vírseda (@t00m).</description>
    <link>https://dev.to/t00m</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F143450%2F0b9efedf-0d7a-4cff-8f0c-10d1729c1a3d.png</url>
      <title>DEV Community: Tomás Vírseda</title>
      <link>https://dev.to/t00m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/t00m"/>
    <language>en</language>
    <item>
      <title>Selenium 4 / Python</title>
      <dc:creator>Tomás Vírseda</dc:creator>
      <pubDate>Wed, 27 May 2020 22:07:52 +0000</pubDate>
      <link>https://dev.to/t00m/testing-selenium-4-0-0a5-pre-release-with-python-42h7</link>
      <guid>https://dev.to/t00m/testing-selenium-4-0-0a5-pre-release-with-python-42h7</guid>
      <description>&lt;p&gt;Hi there,&lt;/p&gt;

&lt;p&gt;Yesterday, after more than one year without working in one of my pet projects, I cloned the repository in a new Ubuntu desktop 20.04&lt;/p&gt;

&lt;p&gt;Most of the GUI code worked out, but it wasn't the case for the Selenium bits. So I decided to take a closer look, and then, I realized that Selenium python bindings had been updated from the stable version 3.141.0 to the new pre-release 4.0.0a5&lt;/p&gt;

&lt;p&gt;After many tries, I was only getting these messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nb"&gt;DeprecationWarning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;executable_path&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;been&lt;/span&gt; &lt;span class="n"&gt;deprecated&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;please&lt;/span&gt; &lt;span class="k"&gt;pass&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;Service&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;

&lt;span class="nb"&gt;DeprecationWarning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;firefox_profile&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;been&lt;/span&gt; &lt;span class="n"&gt;deprecated&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;please&lt;/span&gt; &lt;span class="k"&gt;pass&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;Service&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;So, I took a look to the &lt;a href="https://github.com/SeleniumHQ/selenium/tree/master/py/selenium/webdriver/firefox"&gt;source code&lt;/a&gt; and, finally, I was able to solve the issue:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env python3
# -*- coding: utf-8 -*-
&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;selenium&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;webdriver&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;selenium.webdriver.firefox.service&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Service&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;selenium.webdriver.firefox.options&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Options&lt;/span&gt;

&lt;span class="c1"&gt;# Options
&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;## Option for using a custom Firefox profile
&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'/home/t00m/.basico/opt/webdrivers/basico.default'&lt;/span&gt;

&lt;span class="c1"&gt;## Enable headless
&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headless&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="c1"&gt;# Specify custom geckodriver path
&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/home/t00m/.basico/opt/webdrivers/geckodriver'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Test
&lt;/span&gt;&lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;webdriver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Firefox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'https://dev.to'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Bonus track&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My application needs to load a page via &lt;em&gt;SSO&lt;/em&gt;. In the past, I used a timeout. Now, I keep the timeout but I've added the following code to skip it if it loads the page faster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Extra imports
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;selenium.common.exceptions&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TimeoutException&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;selenium.webdriver.support.ui&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;WebDriverWait&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;selenium.webdriver.support&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;expected_conditions&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;EC&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;selenium.webdriver.common.by&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;By&lt;/span&gt;

&lt;span class="c1"&gt;# Test
&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;webdriver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Firefox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'https://dev.to'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;element_present&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;presence_of_element_located&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;By&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'snack-zone'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;WebDriverWait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;until&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;element_present&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;TimeoutException&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Timed out waiting for page to load"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Page loaded"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Take care. Stay safe.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>selenium</category>
      <category>firefox</category>
      <category>webdriver</category>
    </item>
    <item>
      <title>KB4IT</title>
      <dc:creator>Tomás Vírseda</dc:creator>
      <pubDate>Wed, 13 Nov 2019 22:02:25 +0000</pubDate>
      <link>https://dev.to/t00m/kb4it-435m</link>
      <guid>https://dev.to/t00m/kb4it-435m</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;KB4IT is a static website generator based on Asciidoctor sources mainly for technical documentation purposes.&lt;/p&gt;

&lt;p&gt;KB4IT stands for Knowledge Base for IT. &lt;/p&gt;

&lt;p&gt;Taking advantage of the &lt;em&gt;user-defined attributes&lt;/em&gt; feature in Asciidoctor, KB4IT can parse Asciidoctor sources, extract all metadata available and create something similar to a wiki. In this way, all information provided by the user can be easily related.&lt;/p&gt;

&lt;p&gt;Please, note that the application is &lt;strong&gt;still under development&lt;/strong&gt;. However, I use it in my day to day for my own documentation repository.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'd be very grateful if you could test it and tell me your opinion.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Before continue reading the details, you might take a look to a &lt;a href="https://t00m.github.io/KB4IT/demo/"&gt;demo&lt;/a&gt; to have an idea of what is this project all about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Motivations
&lt;/h2&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The main aim is to provide an easy way to write technical documentation.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Don’t care about the formatting and focus on the contents.&lt;/li&gt;
&lt;li&gt;To allow teams to manage their knowledge database easily.&lt;/li&gt;
&lt;li&gt;Do not depend on third software products like word processors or complex web applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Easy to write technical documentation&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documents must be in Asciidoctor format which is easy to learn. &lt;/p&gt;

&lt;p&gt;For each document published, there is its corresponding Asciidoctor source. So you can use it as a template to write another document without spending too much time.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Easy to find documentation&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each document has properties which can be browsed. These &lt;em&gt;property pages&lt;/em&gt; use filters. &lt;/p&gt;

&lt;p&gt;Moreover, there is a search entry to filter results by writing some of the letters of the title.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Easy to publish documentation&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All documents you write are compiled/converted to HTML files.&lt;/p&gt;

&lt;p&gt;Just put them in any folder and point your browser to:&lt;/p&gt;

&lt;p&gt;/target/path/index.html&lt;br&gt;
c:\target\path\index.html&lt;/p&gt;

&lt;p&gt;However, you can upload/copy them to your own web server.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Easy to backup/restore documentation&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just backup your sources directory and restore them in another PC or server. Use the KB4IT application to compile them again.&lt;/p&gt;

&lt;p&gt;Of course, you can backup the target directory with all the html files and resources and it will work anywhere. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Serverless&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no need for a web server. Of course, you can use one if you please.&lt;/p&gt;

&lt;p&gt;KB4IT was designed to work in mixed environments where people use shared folders (Eg.: Windows shares or directories mounted by NFS).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Smart compiling&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only those documents added or modified are compiled. It reduces drastically the amount of time and CPU needed to generate the website.&lt;/p&gt;

&lt;p&gt;To achieve this, KB4IT uses a cache. If the cache is deleted or missing, the whole repository is compiled again.&lt;/p&gt;

&lt;p&gt;To speed up the compilation, KB4IT uses threading. By default, it launches 30 threads in parallel. So, please, be aware of this feature, as it will eat all CPU available until the compilation finishes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No online editor.&lt;/li&gt;
&lt;li&gt;There is no dynamic search (search is based on static filters generated each time a page is compiled).&lt;/li&gt;
&lt;li&gt;KB4IT doesn't work on Windows due a limitation with the length of parameters passed (sad but true)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Dependencies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://python.org"&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://asciidoctor.org/"&gt;Asciidoctor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getuikit.com/"&gt;UIKit&lt;/a&gt; (bundled with KB4IT)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;The code is licensed under the terms of the  &lt;strong&gt;GPL v3&lt;/strong&gt; so you're free to grab, extend, improve and fork the code as you want.&lt;/p&gt;
&lt;h2&gt;
  
  
  Download
&lt;/h2&gt;

&lt;p&gt;You can donwload the source code in GitHub:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/t00m"&gt;
        t00m
      &lt;/a&gt; / &lt;a href="https://github.com/t00m/KB4IT"&gt;
        KB4IT
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      KB4IT is a static website generator based on Asciidoctor sources mainly for technical documentation purposes.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="adoc"&gt;&lt;div&gt;
&lt;h2 id="user-content-about-kb4it"&gt;
About KB4IT&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id="user-content-introduction"&gt;
Introduction&lt;/h3&gt;
&lt;div&gt;
&lt;p&gt;&lt;em&gt;KB4IT&lt;/em&gt; is a static website generator based on Asciidoctor sources
mainly for technical documentation purposes.&lt;/p&gt;
&lt;/div&gt;

&lt;div&gt;
&lt;p&gt;You can see some demos here: &lt;a href="https://github.com/t00m/kb4it-adocs"&gt;https://github.com/t00m/kb4it-adocs&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;

&lt;div&gt;
&lt;h3 id="user-content-motivations"&gt;
Motivations&lt;/h3&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The main aim is to provide an easy way to write my technical
documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don’t care about the formatting and focus on the contents.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To allow teams to manage their knowledge database easily.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do not depend on third software products like word processors or
complex web applications.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;


&lt;/div&gt;

&lt;div&gt;
&lt;h3 id="user-content-features"&gt;
Features&lt;/h3&gt;
&lt;div&gt;
&lt;h4 id="user-content-pros"&gt;
Pros&lt;/h4&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Writing documentation: Documents must be in Asciidoctor format which
is easy to learn.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finding documents: Once a document is converted to html, properties
can be browsed. Moreover, property pages have filters and a search entry
to filter by title.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Publishing your repository: all necessary files are inside a
directory. Browse it or copy it to your web server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Serverless: There is no need for a web server. Of course, you can use
one if you…&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/t00m/KB4IT"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>asciidoctor</category>
      <category>writing</category>
      <category>python</category>
      <category>uikit</category>
    </item>
  </channel>
</rss>
