<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>it.ivdimova.com</title>
	<atom:link href="https://it.ivdimova.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://it.ivdimova.com/</link>
	<description>Development, Ideas, Tools</description>
	<lastBuildDate>Fri, 13 Jun 2025 09:08:54 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.5</generator>

<image>
	<url>https://ml8k74upez5a.i.optimole.com/w:32/h:32/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/cropped-Gemini_Generated_Image_qsp43uqsp43uqsp4.jpeg</url>
	<title>it.ivdimova.com</title>
	<link>https://it.ivdimova.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">35613909</site>	<item>
		<title>Celebrating a Decade at WordCamp Europe: My New Chapter as a Global Lead</title>
		<link>https://it.ivdimova.com/celebrating-a-decade-at-wordcamp-europe-my-new-chapter-as-a-global-lead/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Thu, 12 Jun 2025 11:32:28 +0000</pubDate>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Global Lead]]></category>
		<category><![CDATA[WCEU]]></category>
		<category><![CDATA[WordCamp]]></category>
		<guid isPermaLink="false">https://it.ivdimova.com/?p=423</guid>

					<description><![CDATA[<p>Last week, I had the incredible opportunity to participate in WordCamp Europe held in Basel, Switzerland. As a first-year team lead at the organizing team, the experience was both exhilarating and enriching. Now, with great excitement, I share that I have been appointed as a Global Lead for next year&#8217;s event in Krakow, Poland, alongside...</p>
<p>The post <a href="https://it.ivdimova.com/celebrating-a-decade-at-wordcamp-europe-my-new-chapter-as-a-global-lead/">Celebrating a Decade at WordCamp Europe: My New Chapter as a Global Lead</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Last week, I had the incredible opportunity to participate in WordCamp Europe held in Basel, Switzerland. As a first-year team lead at the organizing team, the experience was both exhilarating and enriching. Now, with great excitement, I share that I have been appointed as a Global Lead for next year&#8217;s event in Krakow, Poland, alongside my esteemed colleagues Francesco and Angelos. </p>



<figure class="wp-block-image size-large"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699-scaled.jpg"><img fetchpriority="high" decoding="async" width="1024" height="768" src="https://ml8k74upez5a.i.optimole.com/w:1024/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699.jpg" alt="" class="wp-image-428" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699-scaled.jpg 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:225/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699-scaled.jpg 300w, https://ml8k74upez5a.i.optimole.com/w:768/h:576/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699-scaled.jpg 768w, https://ml8k74upez5a.i.optimole.com/w:1440/h:1080/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699-scaled.jpg 1536w, https://ml8k74upez5a.i.optimole.com/w:1440/h:1080/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699-scaled.jpg 2048w, https://ml8k74upez5a.i.optimole.com/w:624/h:468/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699-scaled.jpg 624w, https://ml8k74upez5a.i.optimole.com/w:240/h:180/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/IMG_7699-scaled.jpg 240w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Social Party at the stadium</figcaption></figure>



<h3 class="wp-block-heading">Stepping into Leadership</h3>



<p>Heading the Attendee Services team, my responsibilities were centered around answering the attendees requests during the year, managing the ticketing system, registration, child care and the distribution of swag. Organizing these essential services required lots of planning and coordination. The success of these areas was not just a testament to my efforts but a reflection of the hard work and dedication of the entire team. Huge thanks to everyone from my team who helped with all these tasks, got up early and worked all day to ensure everything went well!</p>



<figure class="wp-block-image size-large is-resized"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54571098748_063a438b53_k.jpg"><img decoding="async" width="683" height="1024" src="https://ml8k74upez5a.i.optimole.com/w:683/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54571098748_063a438b53_k.jpg" alt="" class="wp-image-426" style="width:797px;height:auto" srcset="https://ml8k74upez5a.i.optimole.com/w:683/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54571098748_063a438b53_k.jpg 683w, https://ml8k74upez5a.i.optimole.com/w:200/h:300/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54571098748_063a438b53_k.jpg 200w, https://ml8k74upez5a.i.optimole.com/w:720/h:1080/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54571098748_063a438b53_k.jpg 768w, https://ml8k74upez5a.i.optimole.com/w:720/h:1080/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54571098748_063a438b53_k.jpg 1024w, https://ml8k74upez5a.i.optimole.com/w:624/h:936/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54571098748_063a438b53_k.jpg 624w, https://ml8k74upez5a.i.optimole.com/w:719/h:1080/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54571098748_063a438b53_k.jpg 1365w" sizes="(max-width: 683px) 100vw, 683px" /></a><figcaption class="wp-element-caption">Registration<br><br>Photo credits to the WCEU Photographers team</figcaption></figure>



<h3 class="wp-block-heading">The Community</h3>



<p>One of the most fulfilling aspects of a WordCamp is the sense of community it fosters. This year, as every year, we welcomed a diverse group of attendees from across the globe—each eager to connect, learn, and share. It was a pleasure to meet so many new faces and reconnect with old friends. The energy was palpable, filled with a shared passion for WordPress and technology.</p>



<h3 class="wp-block-heading">Supporting Families</h3>



<p>One initiative close to my heart is making WordCamp a family-friendly event by providing child care services. Recognizing the challenges parent attendees might face, we ensured they could engage fully with the sessions, knowing their children were cared for and entertained. This effort not only enhanced attendee experience but also supported inclusivity within our community. As a parent I highly value this initiative and I&#8217;m proud we managed to organise it this year.</p>



<h2 class="wp-block-heading">Reflecting on the WCEU journey</h2>



<p>Since the very first WordCamp Europe in 2013, I have been actively involved in various capacities, watching it grow and evolve. Each year has added a layer of experience and deepened my commitment to this extraordinary community. As we look forward to next year, I am excited to continue contributing to an event that has been a significant part of my journey in the WordPress world, enhanced my organising skills and helped me build so many connections.</p>



<figure class="wp-block-image size-large"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54572598647_a602bb6a37_k.jpg"><img decoding="async" width="1024" height="683" src="https://ml8k74upez5a.i.optimole.com/w:1024/h:683/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54572598647_a602bb6a37_k.jpg" alt="" class="wp-image-427" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:683/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54572598647_a602bb6a37_k.jpg 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:200/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54572598647_a602bb6a37_k.jpg 300w, https://ml8k74upez5a.i.optimole.com/w:768/h:512/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54572598647_a602bb6a37_k.jpg 768w, https://ml8k74upez5a.i.optimole.com/w:1536/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54572598647_a602bb6a37_k.jpg 1536w, https://ml8k74upez5a.i.optimole.com/w:624/h:416/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54572598647_a602bb6a37_k.jpg 624w, https://ml8k74upez5a.i.optimole.com/w:1620/h:1080/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/06/54572598647_a602bb6a37_k.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption"><br>Photo credits to the WCEU Photographers team</figcaption></figure>



<p>Thank you to every participant, speaker, and volunteer who came together to make this year&#8217;s WordCamp Europe a cornerstone for learning, sharing, and community building. Here’s to continuing this wonderful journey and making next year&#8217;s WCEU in Krakow, Poland even more spectacular!</p>
<p>The post <a href="https://it.ivdimova.com/celebrating-a-decade-at-wordcamp-europe-my-new-chapter-as-a-global-lead/">Celebrating a Decade at WordCamp Europe: My New Chapter as a Global Lead</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">423</post-id>	</item>
		<item>
		<title>Transparent images</title>
		<link>https://it.ivdimova.com/transparent-images/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Fri, 24 Jan 2025 10:34:48 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[image generation]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://it.ivdimova.com/?p=407</guid>

					<description><![CDATA[<p>As we discussed last week here &#8211; Flux training on Replicate, nowadays it&#8217;s possible to generate all kind of images with AI. However there are two things image models are not yet good at &#8211; writing text on the images and generating transparent ones. On other side, in web development we often need icons or...</p>
<p>The post <a href="https://it.ivdimova.com/transparent-images/">Transparent images</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>As we discussed last week here &#8211; <a href="https://it.ivdimova.com/flux-training-on-replicate/">Flux training on Replicate</a>, nowadays it&#8217;s possible to generate all kind of images with AI. However there are two things image models are not <em>yet </em>good at &#8211; writing text on the images and generating transparent ones. On other side, in web development we often need icons or logos, which can&#8217;t be simply put on any background, so here are a few ways to remove the background from your freshly generated images. We will look into an approach to do it with python and then with php.</p>



<ol class="wp-block-list">
<li>In the prompt specify a background, on which the image will be generated &#8211; white, yellow or whatever other easy to determine color. A constant background makes it easier to be removed programatically. </li>



<li>Python approach: we can use the PIL(Pillow) library for image processing, identify the background color  and remove it, but it&#8217;s a way easier to use <strong>rembg </strong>&#8211; <a href="https://github.com/danielgatis/rembg">https://github.com/danielgatis/rembg</a>. Rembg is a tool to remove backgrounds from images and works quite well in my experience. Can be used via cli as well. Let&#8217;s see an example. </li>
</ol>



<pre class="wp-block-code"><code>pip install rembg

from rembg import remove
from PIL import Image

def remove_background(input_path, output_path):
    """
    Remove background from an image using rembg.
    
    Args:
        input_path (str): Path to the input image
        output_path (str): Path to save the output image
    """
    # Open the input image
    input_image = Image.open(input_path)
    
    # Remove the background
    output_image = remove(input_image)
    
    # Save the output image
    output_image.save(output_path)

# Example usage
if __name__ == "__main__":
    remove_background(
        input_path="input_image.png",
        output_path="output_transparent.png"
    )</code></pre>



<p>I made one of my LoRA models to generate me an icon for yoga studio on a beige background. And here is the result with rembg: </p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png"><img decoding="async" width="1024" height="1024" data-id="416" src="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png" alt="" class="wp-image-416" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:300/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png 300w, https://ml8k74upez5a.i.optimole.com/w:150/h:150/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png 150w, https://ml8k74upez5a.i.optimole.com/w:768/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png 768w, https://ml8k74upez5a.i.optimole.com/w:624/h:624/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png 624w, https://ml8k74upez5a.i.optimole.com/w:180/h:180/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png 180w, https://ml8k74upez5a.i.optimole.com/w:60/h:60/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input_image-1.png 60w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png"><img decoding="async" width="1024" height="1024" data-id="417" src="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png" alt="" class="wp-image-417" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:300/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png 300w, https://ml8k74upez5a.i.optimole.com/w:150/h:150/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png 150w, https://ml8k74upez5a.i.optimole.com/w:768/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png 768w, https://ml8k74upez5a.i.optimole.com/w:624/h:624/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png 624w, https://ml8k74upez5a.i.optimole.com/w:180/h:180/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png 180w, https://ml8k74upez5a.i.optimole.com/w:60/h:60/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output_transparent-2.png 60w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</figure>



<p>3. PHP approach &#8211; in php we can use the <strong><a href="https://www.php.net/manual/en/book.image.php">gd image library</a></strong> to draw a new transparent image and copy over it all the pixels that differ in color than the background.</p>



<pre class="wp-block-code"><code>&lt;?php

function remove_background($input_path, $output_path, $tolerance = 30) 
{
    $source = imagecreatefromjpeg($input_path);
    $width = imagesx($source);
    $height = imagesy($source);

    $new_image = imagecreatetruecolor($width, $height);
    imagealphablending($new_image, false);
    imagesavealpha($new_image, true);
    
    $transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127);
    imagefilledrectangle($new_image, 0, 0, $width, $height, $transparent);

    $corners = array(
        imagecolorsforindex($source, imagecolorat($source, 0, 0)),
        imagecolorsforindex($source, imagecolorat($source, $width-1, 0)),
        imagecolorsforindex($source, imagecolorat($source, 0, $height-1)),
        imagecolorsforindex($source, imagecolorat($source, $width-1, $height-1))
    );

    for ($x = 0; $x &lt; $width; $x++) {
        for ($y = 0; $y &lt; $height; $y++) {
            $rgb = imagecolorat($source, $x, $y);
            $colors = imagecolorsforindex($source, $rgb);
            
            $is_background = false;
            foreach ($corners as $corner) {
                if (abs($colors&#91;'red'] - $corner&#91;'red']) &lt; $tolerance &amp;&amp;
                    abs($colors&#91;'green'] - $corner&#91;'green']) &lt; $tolerance &amp;&amp;
                    abs($colors&#91;'blue'] - $corner&#91;'blue']) &lt; $tolerance) {
                    $is_background = true;
                    break;
                }
            }
            
            if (!$is_background) {
                $color = imagecolorallocatealpha(
                    $new_image,
                    $colors&#91;'red'],
                    $colors&#91;'green'],
                    $colors&#91;'blue'],
                    $colors&#91;'alpha']
                );
                imagesetpixel($new_image, $x, $y, $color);
            }
        }
    }

    imagepng($new_image, $output_path);
    imagedestroy($source);
    imagedestroy($new_image);
    
    return true;
}

remove_background('input.jpg', 'output.png', 30);</code></pre>



<p>What we do here:</p>



<ul class="wp-block-list">
<li>Create new trasperant image with imagecreatetruecolor()</li>



<li>Sample colors from all four corners of original image. Assumption: corners usually contain background color.</li>



<li>Pixel Processing: For each pixel: Compare its color to corner colors. If the color is similar (within tolerance) to any corner = background. If background = leave transparent, if not background = copy pixel to new image.</li>
</ul>



<p>Here is the result:</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png"><img decoding="async" width="1024" height="1024" data-id="413" src="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png" alt="" class="wp-image-413" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:300/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png 300w, https://ml8k74upez5a.i.optimole.com/w:150/h:150/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png 150w, https://ml8k74upez5a.i.optimole.com/w:768/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png 768w, https://ml8k74upez5a.i.optimole.com/w:624/h:624/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png 624w, https://ml8k74upez5a.i.optimole.com/w:180/h:180/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png 180w, https://ml8k74upez5a.i.optimole.com/w:60/h:60/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/input.png 60w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png"><img decoding="async" width="1024" height="1024" data-id="412" src="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png" alt="" class="wp-image-412" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:300/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png 300w, https://ml8k74upez5a.i.optimole.com/w:150/h:150/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png 150w, https://ml8k74upez5a.i.optimole.com/w:768/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png 768w, https://ml8k74upez5a.i.optimole.com/w:624/h:624/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png 624w, https://ml8k74upez5a.i.optimole.com/w:180/h:180/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png 180w, https://ml8k74upez5a.i.optimole.com/w:60/h:60/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/output-1.png 60w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</figure>



<p>Of course none of these approaches works perfectly in all cases, but we can get pretty good results, especially with some more experimenting with the background color and the code settings. Enjoy! </p>
<p>The post <a href="https://it.ivdimova.com/transparent-images/">Transparent images</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">407</post-id>	</item>
		<item>
		<title>Flux training on Replicate</title>
		<link>https://it.ivdimova.com/flux-training-on-replicate/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Mon, 13 Jan 2025 21:37:07 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Flux]]></category>
		<category><![CDATA[Replicate]]></category>
		<guid isPermaLink="false">https://it.ivdimova.com/?p=399</guid>

					<description><![CDATA[<p>That&#8217;s a photo of me. And at the same time it&#8217;s not, because this is an AI generated me. So is it me or it&#8217;s not? ? Guess the answer is yes and no. However this post is not about philosophical questions, but about how to generate all kind of images based on specific training....</p>
<p>The post <a href="https://it.ivdimova.com/flux-training-on-replicate/">Flux training on Replicate</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp"><img decoding="async" width="1024" height="1024" src="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp" alt="" class="wp-image-400" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:300/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp 300w, https://ml8k74upez5a.i.optimole.com/w:150/h:150/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp 150w, https://ml8k74upez5a.i.optimole.com/w:768/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp 768w, https://ml8k74upez5a.i.optimole.com/w:624/h:624/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp 624w, https://ml8k74upez5a.i.optimole.com/w:180/h:180/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp 180w, https://ml8k74upez5a.i.optimole.com/w:60/h:60/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-k7a9cpwjm5rme0cmbz1t8cjn1m.webp 60w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>That&#8217;s a photo of me. And at the same time it&#8217;s not, because this is an AI generated me. So is it me or it&#8217;s not? ?</p>



<p>Guess the answer is yes and no. However this post is not about philosophical questions, but about how to generate all kind of images based on specific training. The AI model used for this generation is Flux on Replicate, trained on a photos of me as a LоRA model. What are LоRA models? LoRA or Low ranking adaptation for LLMs are a lightweight way to create a specific training . They are relatively small models, that apply minor modifications to standard LLMs models in order to adapt them for specific tasks. LoRAs provide a quick and fast way to train a model on a given task, which can be generating photos for blog posts, presentations or well, yourself. </p>



<p>What I used to generate the image above is Flux by Black Forests Labs, which seems to be the most popular image generation model lately, but you can use another one like Stable Diffusion. Flux models are trained on 12 billion of parameters and are capable of generating very realistic photos. Replicate on other hand is a cloud platform, that allows you to run AI models and train these via easy and well documented way.</p>



<p>So to come back to the photo above, I&#8217;ve used 9 photos of myself and followed up the guide here &#8211; <a href="https://replicate.com/docs/get-started/fine-tune-with-flux">https://replicate.com/docs/get-started/fine-tune-with-flux</a> . While you can do the same with the API and there is a Python and Node.js example provided, I chose to use this web option <a href="https://replicate.com/ostris/flux-dev-lora-trainer/train">https://replicate.com/ostris/flux-dev-lora-trainer/train</a> . In short what you need is 10ish photos to train the model on, preferable these should be from different angles, clear and simple. I didn&#8217;t do the best job selecting these, most of my photos were with sunglasses and wearing accessories, which makes the model to produce some debatable results, but still quite good. There are several more settings that you can use &#8211; training steps, auto captioning using Llava v1.5, link to upload the new LoRA to HuggingFace, etc. The most important part here is to select an unique TOC &#8211; trigger word which you will use to trigger the LoRA model in your prompts. When ready, click <em>&#8220;Create Training&#8221;</em> and wait a few minutes. When the training finishes successfully, you can find the new LoRA under <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-color-color"><em>Dashboard -> Recently pushed models</em></mark>. When you click on the model, you will be presented of a few options to try your new LoRA &#8211; web at the Replicate playground, Python, Node.js, HTTP or Cog(a tool for containerasing AI models). We will look again at the playground option. The prompt is up to you, but you have to be careful to include the trigger word for the LoRA model. There are a few interesting setting to play with:</p>



<ul class="wp-block-list">
<li>image, to use as an image to image generation option</li>



<li> mask image</li>



<li>format</li>



<li>LoRA weight</li>



<li>Extra LoRA</li>



<li>Extra LoRA weight</li>
</ul>



<p>To me the most interesting was to play with the <strong>lora_scale</strong>, which defines how much priority you want to add to the training and the <strong>extra_lora</strong>, which allows you to get a link to another LoRA model from HuggingFace to use in addition to yours. This is a great option to use when you want to create different style of images. For example I used a sketch LoRA for this one:</p>



<figure class="wp-block-image size-full"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp"><img decoding="async" width="1024" height="1024" src="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp" alt="" class="wp-image-401" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:300/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp 300w, https://ml8k74upez5a.i.optimole.com/w:150/h:150/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp 150w, https://ml8k74upez5a.i.optimole.com/w:768/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp 768w, https://ml8k74upez5a.i.optimole.com/w:624/h:624/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp 624w, https://ml8k74upez5a.i.optimole.com/w:180/h:180/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp 180w, https://ml8k74upez5a.i.optimole.com/w:60/h:60/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-zv6hc8e0cxrmc0cmc1kvkrb0sw.webp 60w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>And a photo session one for this one: </p>



<figure class="wp-block-image size-full"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp"><img decoding="async" width="1024" height="1024" src="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp" alt="" class="wp-image-403" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:1024/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:300/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp 300w, https://ml8k74upez5a.i.optimole.com/w:150/h:150/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp 150w, https://ml8k74upez5a.i.optimole.com/w:768/h:768/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp 768w, https://ml8k74upez5a.i.optimole.com/w:624/h:624/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp 624w, https://ml8k74upez5a.i.optimole.com/w:180/h:180/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp 180w, https://ml8k74upez5a.i.optimole.com/w:60/h:60/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2025/01/replicate-prediction-t0ae7n5809rm80cmc1rsrhzj9w.webp 60w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>While definitely not all the images are good, some have weird accessories, some have scratches where the model got confused what to do, etc, most of them are fine and generated in no time. The LoRA can be deployed on Replicate and used as API calls for your AI applications, presentations content, blog posts. Have fun generating your own images in all kind of styles and landscapes! </p>
<p>The post <a href="https://it.ivdimova.com/flux-training-on-replicate/">Flux training on Replicate</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">399</post-id>	</item>
		<item>
		<title>Exploring Playwright at the Latest Porto WordPress Meetup</title>
		<link>https://it.ivdimova.com/exploring-playwright-at-the-latest-porto-wordpress-meetup/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Sun, 05 Jan 2025 13:25:51 +0000</pubDate>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Playwright]]></category>
		<guid isPermaLink="false">https://it.ivdimova.com/?p=395</guid>

					<description><![CDATA[<p>A few weeks ago, the Porto WordPress community came together for an enlightening session focused on a crucial aspect of web development: automated testing with Playwright. The event, held at a cozy local venue, drew a diverse group of WordPress enthusiasts eager to improve their testing skills and workflows. Why Playwright? For those unfamiliar, Playwright...</p>
<p>The post <a href="https://it.ivdimova.com/exploring-playwright-at-the-latest-porto-wordpress-meetup/">Exploring Playwright at the Latest Porto WordPress Meetup</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>A few weeks ago, the Porto WordPress community came together for an enlightening session focused on a crucial aspect of web development: automated testing with Playwright. The event, held at a cozy local venue, drew a diverse group of WordPress enthusiasts eager to improve their testing skills and workflows.</p>



<h4 class="wp-block-heading">Why Playwright?</h4>



<p>For those unfamiliar, Playwright is a robust browser automation library developed by Microsoft for reliable end-to-end testing. Playwright supports multiple browsers, including Chromium, Firefox, and WebKit, making it a versatile choice for developers. It&#8217;s also used for the <a href="https://make.wordpress.org/core/2023/10/16/wordpress-core-is-now-using-playwright-for-all-browser-based-tests/">browser-based tests in WordPress core</a>.</p>



<h4 class="wp-block-heading">Key Takeaways</h4>



<p>The session started with an introduction to the basics of Playwright, including setting up the environment and writing your first script. The talk demoed how to initiate browser instances, navigate through pages, and simulate user inputs like clicks and form submissions.</p>



<p>One of the highlights of the meetup was learning about Playwright’s capabilities for handling asynchronous events and its rich set of APIs for asserting conditions in a browser context. This is particularly useful for WordPress developers who need to test dynamic content and interactions driven by JavaScript.</p>



<p>As always, the interactive Q&amp;A session sparked engaging discussions on best practices and shared challenges. Experienced developers and newcomers alike exchanged tips on everything from organizing test suites to advanced scenarios.</p>



<h4 class="wp-block-heading">Looking Forward</h4>



<p>The Porto WordPress Meetup continues to be a valuable platform for local WordPress developers to share knowledge and collaborate on improving their development practices. The introduction to Playwright has equipped many attendees with new tools to enhance the quality of their projects and has sparked interest in further exploration of automated testing technologies. Excited to discover what the next topics will be in 2025!</p>



<p></p>
<p>The post <a href="https://it.ivdimova.com/exploring-playwright-at-the-latest-porto-wordpress-meetup/">Exploring Playwright at the Latest Porto WordPress Meetup</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">395</post-id>	</item>
		<item>
		<title>WordPress Day for Developers &#8211; Lisbon</title>
		<link>https://it.ivdimova.com/wordpress-day-for-developers-lisbon/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Mon, 23 Dec 2024 12:12:24 +0000</pubDate>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://it.ivdimova.com/?p=385</guid>

					<description><![CDATA[<p>This year a few new events happened in the WordPress eco system &#8211; WordPress Day for Developers in Lisbon and Core Days in Rome. While we always have had developer talks at WordCamps, in many cases the deep tech topics and workshops are avoided, in order to make the content accessible to more people. On...</p>
<p>The post <a href="https://it.ivdimova.com/wordpress-day-for-developers-lisbon/">WordPress Day for Developers &#8211; Lisbon</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>This year a few new events happened in the WordPress eco system &#8211; WordPress Day for Developers in Lisbon and Core Days in Rome. While we always have had developer talks at WordCamps, in many cases the deep tech topics and workshops are avoided, in order to make the content accessible to more people. On other hand this left the developers with the feeling they don&#8217;t get enough interesting tech talks. All that said, the two events mentioned above, were meant to fill that gap and I was lucky enough to visit the one in Lisbon! I really loved the format &#8211; smaller event, only development focused, interesting presentations and workshops. Here are my short takeways from it ( my flight was delayed, so I missed some ):</p>



<p><a href="https://events.wordpress.org/lisboa/2024/wordpress-day-developers-en/speaker/uros-tasic/">Uros Tasic</a> showed us how to code and test with <a href="https://wordpress.org/playground/">WordPress Playground </a>&#8211; very handy platform that allows you to develop, test and explore ideas within WordPress with one click. For many years setting up local installs and trying to mimicic the real server environment in order to test new releases was a common struggle for many developers. Using Playground we can setup quick installs and spend more time to actually develop and test the project.</p>



<p><a href="https://events.wordpress.org/lisboa/2024/wordpress-day-developers-en/speaker/shadi-sharaf/">Shady Sharaf</a> made a great introduction on using XDebug to investigate errors, complimented by showcases for JavaScript debugging and flamegraphs for performance tracking. While XDebug has been around for a very long time, setup and mapping is still an issue for many developers. The talk focused on showcasing how to setup the environment, explanation of the functionality and the different ways to debug issues plus remote debugging!</p>



<p><a href="https://events.wordpress.org/lisboa/2024/wordpress-day-developers-en/speaker/sarah-norris/">Sarah Norris</a> shared her tips and tricks for beginners that are interested in contributing to Gutenberg in WordPress Core. For many newbies its quite scary and confusing how to select a ticket to contribute to. There are a lot of issues, comments and workflow to read and familiarise with. Getting smaller, clear to you tickets, asking for clarification and getting to know the process and the testing approach were amongst the ideas that the talk suggested. </p>



<p>And last but not least <a href="https://events.wordpress.org/lisboa/2024/wordpress-day-developers-en/speaker/michal-czaplinski/">Micha? Czapli?ski</a> introduced us to the way to use the Interactivity API to streamline WordPress front-end development. <a href="https://developer.wordpress.org/block-editor/reference-guides/interactivity-api/">Interactivity API </a>is included in WordPress core since version 6.5 and introduces an easier and more modern approach for developers to add interactions to the front end of their blocks. Examples for interactivity blocks in the core Michal mentioned are query loop block with enhanced pagination and the image block with on click option that opens a larger view for the image. Later I realised he did a similar session at WordCamp Europe 2024, so if you are interested in tips for using Interactivity API, here it is:  <a href="https://europe.wordcamp.org/2024/session/interactivity-api-the-new-standard-way-to-build-modern-wordpress-frontends/">https://europe.wordcamp.org/2024/session/interactivity-api-the-new-standard-way-to-build-modern-wordpress-frontends/</a></p>



<p>In conclusion, there is definitely a need for more development oriented events like this, smaller and with more focus. I got a lot of useful ideas, had the opportunity to meet new people and say hi to old friends. So much for this year and to many exciting events in 2025!</p>



<p>P.S. As I mentioned exiting events next year, we just launched the <a href="https://europe.wordcamp.org/2025/tickets/">tickets</a> for WordCamp Europe 2025 in Basel, Switzerland!</p>



<figure class="wp-block-image size-full"><a href="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/12/5032F3A9-92C6-4E10-BF48-901BB8F4EEB9.jpeg"><img decoding="async" width="645" height="363" src="https://ml8k74upez5a.i.optimole.com/w:auto/h:auto/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/12/5032F3A9-92C6-4E10-BF48-901BB8F4EEB9.jpeg" alt="" class="wp-image-388" srcset="https://ml8k74upez5a.i.optimole.com/w:645/h:363/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/12/5032F3A9-92C6-4E10-BF48-901BB8F4EEB9.jpeg 645w, https://ml8k74upez5a.i.optimole.com/w:300/h:169/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/12/5032F3A9-92C6-4E10-BF48-901BB8F4EEB9.jpeg 300w, https://ml8k74upez5a.i.optimole.com/w:624/h:351/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/12/5032F3A9-92C6-4E10-BF48-901BB8F4EEB9.jpeg 624w" sizes="(max-width: 645px) 100vw, 645px" /></a></figure>



<p></p>
<p>The post <a href="https://it.ivdimova.com/wordpress-day-for-developers-lisbon/">WordPress Day for Developers &#8211; Lisbon</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">385</post-id>	</item>
		<item>
		<title>LeadDev Berlin :: impressions ();</title>
		<link>https://it.ivdimova.com/leaddev-berlin-impressions/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Wed, 20 Nov 2024 13:04:57 +0000</pubDate>
				<category><![CDATA[Events]]></category>
		<guid isPermaLink="false">http://it.ivdimova.com/?p=372</guid>

					<description><![CDATA[<p>A few weeks ago I attended LeadDev Berlin – an event for leaders in the tech industry. It&#8217;s the first similar event I&#8217;ve attended and I enjoyed the talks and the workshops. Here are a few highlights that I think are worth mentioning: Luis Martin-Santos from Cabify gave a great talk about &#8220;Estimates as probabilities&#8221;,...</p>
<p>The post <a href="https://it.ivdimova.com/leaddev-berlin-impressions/">LeadDev Berlin :: impressions ();</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>A few weeks ago I attended LeadDev Berlin – an event for leaders in the tech industry. It&#8217;s the first similar event I&#8217;ve attended and I enjoyed the talks and the workshops. Here are a few highlights that I think are worth mentioning:</p>



<p><a href="https://leaddev.com/community/luis-martin-santos">Luis Martin-Santos</a> from Cabify gave a great talk about &#8220;Estimates as probabilities&#8221;, illustrated with a nice comic story that was handed to the attendees. The idea of giving the estimate a value of how sure we are this estimate will be met, is definitely useful in many projects where the estimates are hard or impossible to make.</p>



<p>Another interesting talk was &#8220;Level up the whole party, not just the hero&#8221; by <a href="https://leaddev.com/community/denise-yu">Denise Yu</a>, where she described how by helping everyone in the team improve their skills, we move forward a way faster. She mentioned some key tools for the team and personal leveling up – a proper career matrix, employee skill survey and gap analysis, and of course a good professional development plan. She also mentioned an interesting resource for the career matrix, which many organisations struggle with – <a href="https://progression.fyi/">https://progression.fyi/</a> where you can find resources from lead companies in many sectors. There is always a room for improvement and following these steps, we can give our teams better visualisation of the next steps in their knowledge and career development.</p>



<p>My absolutely favourite talk was &#8220;Ice, confusion, and the 38,000ft crash&#8221; by <a href="https://leaddev.com/community/nickolas-means">Nickolas Means</a>. As much as I like technical talks, the ones that are related to a real life story are always more engaging and this one was definitely a great one, as horrifying the story was. In a very short summary Nickolas described how a plane crash was caused by relying too much on automation. With the AI tools taking so much attention lately, we start relying on them more and more. There is a valid concern that at some point this will lead to developers that mostly write AI prompts, but don&#8217;t understand the errors and misunderstandings that it can lead to. Have you had a case when an AI coding tool understood you completely wrong? Guess we all had. Imagine what will happen if we didn&#8217;t know what to look for and how to correct it. In conclusion it&#8217;s a great tool, but still a tool, that needs a human brain to work it out.<br></p>



<p>Except the talks, LeadDev had several interesting activities, workshops, AMA sessions and table talks. I enjoyed a lot the CircleCI workshop &#8220;Learning from failure: How to adapt your leadership style to lead effectively through uncertainty&#8221;. Initially I thought that 80 minutes is a bit too much, but it was so engaging that felt short. We did groups by 4 discussing different problems like implementing engineering manager role in teams, working with various teams at the same time and leading a change in an organisation. Definitely a great experience. </p>



<p>And last but not least, I have to mention the AMA sessions – these were really interesting! I attended the ones on topic of engineering managers, principal engineers and staff engineers and they were all engaging and fun. It was very helpful to hear how different companies approach these roles and learn more about the experience the speakers had at their career path. </p>



<p>So that&#8217;s a wrap! While this was my first LeadDev, it definitely won&#8217;t be the last and I hope to learn more about leadership progression next year! </p>



<p></p>
<p>The post <a href="https://it.ivdimova.com/leaddev-berlin-impressions/">LeadDev Berlin :: impressions ();</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">372</post-id>	</item>
		<item>
		<title>Playing with Gradio</title>
		<link>https://it.ivdimova.com/playing-with-gradio/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Sun, 17 Mar 2024 09:53:52 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Gradio]]></category>
		<category><![CDATA[HuggingFace]]></category>
		<guid isPermaLink="false">http://it.ivdimova.com/?p=359</guid>

					<description><![CDATA[<p>With the sharp growth in AI during the last few years, everyone seems to build models and apps based on LLMs. My work also has been related to playing with Python and AI in the past year. In relation to this I watch a lot of training courses and videos and try to play with...</p>
<p>The post <a href="https://it.ivdimova.com/playing-with-gradio/">Playing with Gradio</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>With the sharp growth in AI during the last few years, everyone seems to build models and apps based on LLMs. My work also has been related to playing with Python and AI in the past year. In relation to this I watch a lot of training courses and videos and try to play with some learning in my free time. My last inspiration is <a href="https://www.gradio.app/">Gradio</a> &#8211; Python library, often used as an easy way to create demos for ML. </p>



<p>Let&#8217;s go through creating a simple Gradio app and deploying to share it. </p>



<p>Gradio provides a quick way to create demos with input and output fields that could be media, audio, text, etc.</p>



<pre class="wp-block-code"><code>import gradio as gr

def greet(name, intensity):
    return "Hello, " + name + "!" * int(intensity)

demo = gr.Interface(
    fn=greet,
    inputs=["text"],
    outputs=["text"],
)

demo.launch()
</code></pre>



<p>This is a quick example of a text input and output in Gradio. Setting up</p>



<pre class="wp-block-code"><code>demo.launch(share=True)</code></pre>



<p>will generate proxy/tunnel through the Gradio servers and while the app will still run on your machine, you will get a link, available to share for 72hours.</p>



<p>Now what&#8217;s left is to build the actual functionality in the Gradio app. First we need to pick a model for this app, which is quite overwhelming with the number of available models lately. As probably the biggest area for open source models, Hugging Face is the natural place to look at. Choose the model menu and select from the criteria in the left hand panel &#8211; my choice for this example is simple &#8211; text2text generation, open source license. Then sort the results by trending or by most downloaded and check the model cards. I needed something, that I can run locally, but still gives good results, so I choose <a rel="noreferrer noopener" target="_blank" href="https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0">https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0 </a></p>



<p>After choosing the right model, click on the &lt;Use in Transformers&gt; link on the right, to see an example how to load it. Here is my very basic example for the purposes of this blog post:</p>



<pre class="wp-block-code"><code>def travel(country):
   messages = [
    {
        "role": "system",
        "content": "You are a friendly chatbot who loves to help people find the perfect vacation spot. You can answer questions about popular vacation spots in different countries.",
    },
    {"role": "user", "content": f"Where can I go on vacation from {country}?"},
	]
   prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
   outputs = pipe(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)

   output_text = outputs[0]['generated_text']
   assistant_message_start = output_text.find('&lt;|assistant|>') + len('&lt;|assistant|>')
   assistant_message = output_text[assistant_message_start:].strip()

   return assistant_message</code></pre>



<p>And now all we need to do is to load this function in the Gradio app.</p>



<pre class="wp-block-code"><code>import gradio as gr

demo = gr.Interface(
    fn=travel,
    inputs=["text"],
    outputs=["text"],
)

demo.launch()</code></pre>



<p>And here, you have a simple app, that you can ask about travel destination ideas. </p>



<figure class="wp-block-image"><img decoding="async" width="1024" height="423" src="https://ml8k74upez5a.i.optimole.com/w:1024/h:423/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/03/Screenshot-2024-03-17-at-10.43.57.png" alt="" class="wp-image-361" srcset="https://ml8k74upez5a.i.optimole.com/w:1024/h:423/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/03/Screenshot-2024-03-17-at-10.43.57.png 1024w, https://ml8k74upez5a.i.optimole.com/w:300/h:124/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/03/Screenshot-2024-03-17-at-10.43.57.png 300w, https://ml8k74upez5a.i.optimole.com/w:768/h:317/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/03/Screenshot-2024-03-17-at-10.43.57.png 768w, https://ml8k74upez5a.i.optimole.com/w:624/h:258/q:mauto/ig:avif/https://it.ivdimova.com/wp-content/uploads/2024/03/Screenshot-2024-03-17-at-10.43.57.png 624w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>If you want to get a permanent demo for sharing with the external world, Hugging Face Spaces are a great option. Just select a free space (you have to be very mindful about the model size tho as the free option is quite limited in resources), clone the repo locally, add your app files and deploy to Spaces. </p>



<p>And just like that, we have our own LLM powered app. What are you building with AI these days and what&#8217;s your favourite playground? Let me know in the comments. </p>
<p>The post <a href="https://it.ivdimova.com/playing-with-gradio/">Playing with Gradio</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">359</post-id>	</item>
		<item>
		<title>Git tricks</title>
		<link>https://it.ivdimova.com/git-tricks/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Mon, 26 Feb 2024 14:15:06 +0000</pubDate>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[git]]></category>
		<guid isPermaLink="false">http://it.ivdimova.com/?p=348</guid>

					<description><![CDATA[<p>Last week I came across a great talk about git, from Scott Chacon, one of the GitHub founders. While, as he said, that could be a boring tech talk to some, I found it really useful and he delivered it in a very entertaining way, so here is link if you wanna see it. Listing...</p>
<p>The post <a href="https://it.ivdimova.com/git-tricks/">Git tricks</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="p2">Last week I came across a great talk about git, from Scott Chacon, one of the GitHub founders. While, as he said, that could be a boring tech talk to some, I found it really useful and he delivered it in a very entertaining way, so here is<a href="https://youtu.be/aolI_Rz0ZqY?si=qiQCpNbNw0l7M_qs"> link</a> if you wanna see it.</p>



<p class="p2">Listing my few favourite take aways below:<span class="Apple-converted-space">&nbsp;</span></p>



<p class="p2"><strong>Conditional configs:</strong></p>



<pre class="wp-block-code"><code>includeIf</code></pre>



<p class="p2">adds conditional configuration for different projects</p>



<pre class="wp-block-code"><code>git blame -L</code></pre>



<p>Performs git blame on specific lines of the file, making it easier to perform checks</p>



<pre class="wp-block-code"><code>git log -L</code></pre>



<p class="p2"> Same, but with git log &#8211; shows the history of a specific the function or lines of code.</p>



<pre class="wp-block-code"><code>git blame -w</code></pre>



<p class="p2"> Performs git blame, ignoring the white space.</p>



<pre class="wp-block-code"><code>git blame -w -C -C -C</code></pre>



<p class="p2">Blame looking in all commits, ignoring the white space &#8211; useful in refactoring and moving code between files<span class="Apple-converted-space">&nbsp;</span></p>



<pre class="wp-block-code"><code>git reflog</code></pre>



<p class="p2">See the reference logs &#8211; easier way to track the merges and branches references.</p>



<pre class="wp-block-code"><code>git config —global rerere.enabled true</code></pre>



<p class="p2">Reuse Recorded Resolution &#8211;<span class="Apple-converted-space">&nbsp;</span>remembers how you fix merge conflicts and fixes automatically<span class="Apple-converted-space">&nbsp;</span></p>



<pre class="wp-block-code"><code>git maintenance start</code></pre>



<p class="p2"> Adds config for a cron job to do maintenance, speed things up on monorepos and big repositories in general, by performing hourly checks and fetch.</p>



<p class="p2"><strong>Monorepo</strong></p>



<pre class="wp-block-code"><code>git sparse-checkout</code></pre>



<p class="p2"> Gets only the needed directories from a mono repo, but makes it look like you have all of them locally.</p>



<p class="p2">These are also described in a way more detail in his new project blog &#8211; <a href="https://blog.gitbutler.com/"><span class="s1">https://blog.gitbutler.com/</span></a> , take a look and pick your favourite!<span class="Apple-converted-space">&nbsp;</span></p>
<p>The post <a href="https://it.ivdimova.com/git-tricks/">Git tricks</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">348</post-id>	</item>
		<item>
		<title>WordCamp Europe 2016</title>
		<link>https://it.ivdimova.com/wordcamp-europe-2016/</link>
					<comments>https://it.ivdimova.com/wordcamp-europe-2016/#comments</comments>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Wed, 29 Jun 2016 11:49:28 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://it.ivdimova.com/?p=330</guid>

					<description><![CDATA[<p>I just got back from WordCamp Europe 2016, which this year took place at Vienna, Austria, and wanted to share my thoughts about how it went. We had a blast organising #WCEU for all of you. Thank you for coming, for smiling, for sharing. See you in Paris!?? pic.twitter.com/RCeRCNPyUS &#8212; WordCamp Europe (@WCEurope) June 25,...</p>
<p>The post <a href="https://it.ivdimova.com/wordcamp-europe-2016/">WordCamp Europe 2016</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I just got back from <a href="https://2016.europe.wordcamp.org/"><strong>WordCamp Europe 2016</strong></a>, which this year took place at Vienna, Austria, and wanted to share my thoughts about how it went.</p>
<div class="embed-twitter">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">We had a blast organising <a href="https://twitter.com/hashtag/WCEU?src=hash&amp;ref_src=twsrc%5Etfw">#WCEU</a> for all of you. Thank you for coming, for smiling, for sharing. See you in Paris!?? <a href="https://t.co/RCeRCNPyUS">pic.twitter.com/RCeRCNPyUS</a></p>
<p>&mdash; WordCamp Europe (@WCEurope) <a href="https://twitter.com/WCEurope/status/746776570119991297?ref_src=twsrc%5Etfw">June 25, 2016</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<p>First I want to thank to all the organisers, this was the biggest and, in my opinion, the most professionally organised WordCamp I have ever been to! As a speaker I had a wonderful experience &#8211; a separate room where we could prepare for our talks, help screens to not look back the main screen for the slides, great MCs and much more. The event was huge with more than 2000 attendees, volunteers and speakers, so it will be very hard to summarise it, but I will try to just highlight what I liked the most.</p>
<p>The WordPress core lead <strong><a href="https://twitter.com/nacin">Andrew Nacin</a></strong> had an awesome talk about working with legacy projects. I personally was leading the <strong><a href="https://crowdfavorite.com/">Crowd Favorite</a></strong> Ongoing Clients Support team for a while and had lots of the issues mentioned in the talk, I really hope it will be soon on WordPress TV!</p>
<p><span class="TweetAuthor-name Identity-name customisable-highlight" title="Mike Schroder" data-scribe="element:name"><strong><a class="TweetAuthor-link Identity u-linkBlend" href="https://twitter.com/GetSource" data-scribe="element:user_link">Mike Schroder</a></strong> shared his experience about <strong><a href="https://getsource.net/2016/06/wceu-decision-making-wordpress-core-development/">how the decisions are made at WordPress core</a></strong>, so everyone who wants to contribute and get involved in the process can see how it goes.</span></p>
<p><strong><a href="http://sonjaleix.com/">Sonja Leix</a></strong> had a very inspiring talk about the impostor syndrome, which I recommend to anyone who is wondering if should apply to speak at WordCamps or any other event &#8211; you should! Post and slides here &#8211; <strong><a href="http://sonjaleix.com/blog/community/impostor-syndrome/">http://sonjaleix.com/blog/community/impostor-syndrome/</a>.</strong></p>
<p>And while on this topic I want to personally thank to <a href="https://jeremyfelt.com/"><strong>Jeremy Felt</strong> </a>, who shared with us, the speakers, this very inspiring<a href="https://www.ted.com/talks/amy_cuddy_your_body_language_shapes_who_you_are?language=en"><strong> TED talk about body language</strong></a> &#8211; it helped me a lot preparing for my own talk! He also presented on Multisite, slides <strong><a href="https://jeremyfelt.com/wceu-2016/">here</a></strong>.</p>
<p>Also our CEO<strong> <a href="https://twitter.com/karimmarucchi/">Karim Marucchi</a></strong> had a great talk sharing his experience how to deal with different cultures.</p>
<div class="embed-twitter">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">We meet Steve, a fictional client. Who is he? —Karim Marucchi <a href="https://twitter.com/karimmarucchi?ref_src=twsrc%5Etfw">@karimmarucchi</a>, <a href="https://twitter.com/crowdfavorite?ref_src=twsrc%5Etfw">@crowdfavorite</a> <a href="https://twitter.com/hashtag/WCEU?src=hash&amp;ref_src=twsrc%5Etfw">#WCEU</a> <a href="https://t.co/WbqoCQIeEd">pic.twitter.com/WbqoCQIeEd</a></p>
<p>&mdash; WordCamp Europe (@WCEurope) <a href="https://twitter.com/WCEurope/status/746722585375801344?ref_src=twsrc%5Etfw">June 25, 2016</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<p>And my personal favourite, and I believe to many others too &#8211; <strong><a href="http://helenhousandi.com/">Helen Hou-Sandi</a></strong> and her incredibly inspiring talk about parallels between music and code! As a woman in tech and a person in love with music, I admire her and loved both the piano performance and the talk, hope it will be available online soon so I can watch it again. Code really is poetry!</p>
<div class="embed-twitter">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">We bow down to you aswell for your awesome piano performance! <a href="https://twitter.com/helenhousandi?ref_src=twsrc%5Etfw">@helenhousandi</a>, <a href="https://twitter.com/10up?ref_src=twsrc%5Etfw">@10up</a> <a href="https://twitter.com/hashtag/WCEU?src=hash&amp;ref_src=twsrc%5Etfw">#WCEU</a> <a href="https://t.co/UH3IOhGW6m">pic.twitter.com/UH3IOhGW6m</a></p>
<p>&mdash; WordCamp Europe (@WCEurope) <a href="https://twitter.com/WCEurope/status/746609393186254848?ref_src=twsrc%5Etfw">June 25, 2016</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<p>Last but not least &#8211; I presented on WordPress developers tools that can help us automate our daily workflow and produce more reliable, clean and consistent code. My slides can be found <a href="http://www.slideshare.net/ivdimova/the-swiss-knife-of-a-word-press-developer"><strong>here</strong></a> and I will work on a longer blog post with all tutorials and articles that can help you learn these tools and adopt them in your development projects.</p>
<div class="embed-twitter">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">Your code editor should be light, open source and extendable. Like Atom.io from <a href="https://twitter.com/github?ref_src=twsrc%5Etfw">@github</a> / <a href="https://twitter.com/iv_wp?ref_src=twsrc%5Etfw">@iv_wp</a> <a href="https://twitter.com/hashtag/WCEU?src=hash&amp;ref_src=twsrc%5Etfw">#WCEU</a> <a href="https://t.co/8Tvp95zdKt">pic.twitter.com/8Tvp95zdKt</a></p>
<p>&mdash; WordCamp Europe (@WCEurope) <a href="https://twitter.com/WCEurope/status/746654320519745536?ref_src=twsrc%5Etfw">June 25, 2016</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<p>It was an amazing event and I was honored to be there and share my experience! Thanks again to everyone involved in the organisation! See you next year in Paris!</p>
<div class="embed-twitter">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">We’re excited to announce that WordCamp Europe 2017 will be in Paris. <a href="https://twitter.com/hashtag/wceu?src=hash&amp;ref_src=twsrc%5Etfw">#wceu</a> <a href="https://t.co/Ry7trltvaZ">pic.twitter.com/Ry7trltvaZ</a></p>
<p>&mdash; WordCamp Europe (@WCEurope) <a href="https://twitter.com/WCEurope/status/746737103602606080?ref_src=twsrc%5Etfw">June 25, 2016</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<p>&nbsp;</p>
<p>The post <a href="https://it.ivdimova.com/wordcamp-europe-2016/">WordCamp Europe 2016</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://it.ivdimova.com/wordcamp-europe-2016/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">330</post-id>	</item>
		<item>
		<title>WordCamp Sofia 2013</title>
		<link>https://it.ivdimova.com/wordcamp-sofia-2013/</link>
		
		<dc:creator><![CDATA[IvDimova]]></dc:creator>
		<pubDate>Fri, 18 Oct 2013 10:26:44 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://it.ivdimova.com/?p=270</guid>

					<description><![CDATA[<p>WordCamp Sofia 2013 will happen on 26th of October, in Sofia, Bulgaria. Here is the program, where hopefully you can find an interesting lecture for yourself. This year we will have some really amazing speakers from all around the world, they will share experience related to different topics and I strongly believe that there is...</p>
<p>The post <a href="https://it.ivdimova.com/wordcamp-sofia-2013/">WordCamp Sofia 2013</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>WordCamp Sofia 2013 will happen on 26th of October, in Sofia, Bulgaria. Here is the <a href="http://2013.sofia.wordcamp.org/schedule/">program</a>, where hopefully you can find an interesting lecture for yourself. This year we will have some really amazing <a href="http://2013.sofia.wordcamp.org/speakers/">speakers</a> from all around the world, they will share experience related to different topics and I strongly believe that there is something that everyone who is working with WordPress or using it as a blog platform can learn. I will be speaking too, my presentation will show more about some tricks that you can use working with WooCommerce. There will be two tracks &#8211; developer&#8217;s and user&#8217;s ones, to help people choose the best presentation for themself. As you can see the <a href="http://2013.sofia.wordcamp.org/bileti/">tickets</a> cost only 13$ and for that you will get amazing presentations, coffee, T-Shirt and of course after party! Also you can join us on Sunday, 27-th for the very first <a href="http://2013.sofia.wordcamp.org/2013/10/17/contributor-day-2013/">Contributor day</a> to help our beloved WordPress platform. So go and get a ticket and I hope that I will see you at WordCamp Sofia next week!</p>
<p>And if for some reason you are still not convinced how incredible amazing WordCamps are here is a video from WordCamp Europe 2013, which I had chance to visit. Watch the video and see for yourself!</p>
<p>&nbsp;</p>
<p><iframe  src="about:blank" data-opt-src="//www.youtube.com/embed/vcgrzXkzhSA" height="315" width="520" allowfullscreen="" frameborder="0"></iframe></p>
<p>The post <a href="https://it.ivdimova.com/wordcamp-sofia-2013/">WordCamp Sofia 2013</a> appeared first on <a href="https://it.ivdimova.com">it.ivdimova.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">270</post-id>	</item>
	</channel>
</rss>
