<?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>Cast &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/cast/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Thu, 02 May 2024 15:01:57 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Avoiding Memory Leaks with WeakRef</title>
		<link>https://blog.xojo.com/2024/05/07/avoiding-memory-leaks-with-weakref/</link>
		
		<dc:creator><![CDATA[Javier Menendez]]></dc:creator>
		<pubDate>Tue, 07 May 2024 16:11:00 +0000</pubDate>
				<category><![CDATA[Cross-Platform]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Cast]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[WeakRef]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=12861</guid>

					<description><![CDATA[Is not that common of an issue, but it happens - when searching for memory leaks, remember to check any cross-referenced objects. Cross-referenced objects are, well, just that, objects that need to reference each other. For example, when "ClassA" needs to know about "ClassB", and "ClassB" needs to know about "ClassA". Continue reading to see how this can cause memory leaks in your projects and how to use Xojo's WeakRef to fix it.]]></description>
										<content:encoded><![CDATA[
<p>This is not that common of an issue, but&nbsp;it happens &#8211; when searching for memory leaks, remember to check any cross-referenced objects. Cross-referenced objects are, well, just that, objects that need to reference each other. For example, when &#8220;ClassA&#8221; needs to know about &#8220;ClassB&#8221;, and &#8220;ClassB&#8221; needs to know about &#8220;ClassA&#8221;. Continue reading to see how this can cause memory leaks in your projects and how to use Xojo&#8217;s WeakRef to fix it.</p>



<span id="more-12861"></span>



<p>If you&#8217;re dealing with a situation in your code where two classes need to reference each other, then you could be leaking memory if you haven&#8217;t taken steps to prevent that.</p>



<p>Let&#8217;s look at this with a simple example.</p>



<ul class="wp-block-list">
<li>Create a new Xojo project and add two new classes to it, ClassA and ClassB.</li>



<li>Add a ClassBReference As ClassB property to ClassA.</li>



<li>Add a ClassAReference As ClassA property to ClassB.</li>



<li>Add a Constructor to ClassB using the following signature:</li>
</ul>



<pre id="xojo" class="wp-block-code"><code>Constructor(reference As ClassA)</code></pre>



<p>And add this line of code to the method:</p>



<pre id="xojo" class="wp-block-code"><code>Me.ClassAReference = reference</code></pre>



<p>Next, add the Destructor method to both classes and type &#8220;Break&#8221; as the only line of code for them. This will allow us to see if they leak memory or not. For example, if when debugging the example project the Debugger doesn&#8217;t reach the Break lines, that would mean that the Destructor has not been called and, thus, the objects are not released from memory. They are leaking!</p>



<ul class="wp-block-list">
<li>Now add the Opening event handler to Window1 and type these lines into it:</li>
</ul>



<pre id="xojo" class="wp-block-code"><code>CreateReferences
Break</code></pre>



<p>As you can see, it calls the CreateReferences method and then breaks into the debugger.</p>



<ul class="wp-block-list">
<li>Now add the CreateReferences method to Window1 and type these lines of code in the associated Code Editor:</li>
</ul>



<pre id="xojo" class="wp-block-code"><code>Var ca As New ClassA
Var cb As New ClassB(ca)

ca.ClassBReference = cb</code></pre>



<p>Now it&#8217;s clear what is going on here: ClassB instance is keeping a &#8220;hard&#8221; reference to ClassA (via the ca instance), and then the ca reference is keeping a &#8220;hard&#8221; reference to the classB instance cb.</p>



<p>Run the project. Is the debugger stopping in the Break lines of ClassA and ClassB Destructors? Nope. They are leaking because they are using hard cross-references with each other.</p>



<p>You can see it more clearly when accessing Global &gt; Runtime &gt; Contents in the Debugger panel. Both objects are still alive:</p>


<div class="wp-block-image is-style-default">
<figure class="aligncenter"><img fetchpriority="high" decoding="async" width="1250" height="132" src="https://blog.xojo.com/wp-content/uploads/2024/04/Screenshot-2024-04-03-at-12.14.16.png" alt="" class="wp-image-12862" srcset="https://blog.xojo.com/wp-content/uploads/2024/04/Screenshot-2024-04-03-at-12.14.16.png 1250w, https://blog.xojo.com/wp-content/uploads/2024/04/Screenshot-2024-04-03-at-12.14.16-300x32.png 300w, https://blog.xojo.com/wp-content/uploads/2024/04/Screenshot-2024-04-03-at-12.14.16-1024x108.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/04/Screenshot-2024-04-03-at-12.14.16-768x81.png 768w" sizes="(max-width: 1250px) 100vw, 1250px" /></figure>
</div>


<h3 class="wp-block-heading">WeakRef to the Rescue!</h3>



<p>But let&#8217;s say that your app design needs to keep these references. How do we solve this situation? The answer is using <a href="https://en.wikipedia.org/wiki/Weak_reference">weak references</a> instead of hard references, and the Xojo language has a class for it: <a href="https://documentation.xojo.com/api/language/weakref.html#weakref">WeakRef</a>.</p>



<p>Let&#8217;s change ClassA and ClassB properties so their type is a WeakRef. Setting their definition as:</p>



<pre id="xojo" class="wp-block-code"><code>ClassBReference As WeakRef
ClassAReference As WeakRef</code></pre>



<p>And let&#8217;s change the ClassB Constructor code so it creates a new WeakRef instance from the received object, instead of assigning it directly to the property.</p>



<pre id="xojo" class="wp-block-code"><code>ClassAReference = New WeakRef(reference)</code></pre>



<p>And let&#8217;s change the code in the CreateReferences method to:</p>



<pre id="xojo" class="wp-block-code"><code>Var ca As New ClassA<br>Var cb As New Classb(ca)<br><br>ca.ClassBReference = New WeakRef(cb)</code></pre>



<p>Run the example project again. Now you will see that the Debugger stops at the &#8220;Break&#8221; lines for each Class Destructor. Which means they are correctly released from memory. Problem solved!</p>



<h3 class="wp-block-heading">WeakRef Memory Care</h3>



<p>When using WeakRef objects through the code, keep in mind that accessing the real object they are referencing is done through the WeakRef.Value property in addition to <a href="https://documentation.xojo.com/getting_started/object-oriented_programming/advanced_oop_features.html#getting-started-object-oriented-programming-advanced-oop-features-casting">Cast</a> to the original Class.</p>



<p>To see it more clearly, add the &#8220;SayHello&#8221; method to ClassB and type this line of code into the associated code editor:</p>



<pre id="xojo" class="wp-block-code"><code>MessageBox("Hi From ClassB Instance")</code></pre>



<p>Then, select the CreateReferences method from Window1 and add the following line of code at the end:</p>



<pre id="xojo" class="wp-block-code"><code>ClassB(ca.ClassBReference.Value).SayHello</code></pre>



<p>First, we are accessing the ClassBRefence property from the ca instance; that gives us access to the WeakRef instance property, so we need to access its Value property in order to get access to the real object instance we are really interested (a ClassB instance).</p>



<p>But, because the Value property returns a generic Object, we need to Cast it to the class instance we expect (and should know) that is referenced by the Value property; in this case a &#8220;ClassB&#8221; instance. To do this, we are using the Cast expression:</p>



<pre id="xojo" class="wp-block-code"><code>ClassB(ca.ClassBReference.Value)</code></pre>



<p>Next, and because we did Cast it to ClassB, we can continue using the dot notation in order to call any of the methods / properties exposed by ClassB, in this case the &#8220;SayHello&#8221; method.</p>



<p>Run the app again and now the ClassB instance referenced by the ClassA instance is displaying the MessageBox.</p>



<p>In addition, when accessing a hard referenced object in your class properties it can be good to do a sanity check like:</p>



<pre id="xojo" class="wp-block-code"><code>If ca.ClassBReference &lt;&gt; Nil Then
  ca.ClassBReference.SayHello
End If</code></pre>



<p>But when using WeakRefs you need to do a double check. First against the WeakRef itself, because it can be a Nil object! And second, against the object referenced by the WeakRef itself. So the previous check will read now:</p>



<pre id="xojo" class="wp-block-code"><code>If ca.ClassBReference &lt;&gt; Nil And ca.ClassBReference.Value &lt;&gt; Nil then<br>  ClassB(ClassBReference.Value).SayHello<br>End If</code></pre>



<h3 class="wp-block-heading">Clearing It!</h3>



<p>All in all, cross-referencing objects among class instances is probably not the best design, but sometimes it is needed. In case your app design needs to follow such a path, take care and use weak references (with Xojo&#8217;s WeakRef class) instead of hard references.</p>



<p>Keep it in memory (or not, if it is leaking)… and happy coding with Xojo!</p>



<p><em>Javier Menendez is an engineer at Xojo and has been using Xojo since 1998. He lives in Castellón</em>, <em>Spain and hosts regular Xojo hangouts en español. Ask Javier questions on Twitter at <a href="https://twitter.com/xojoes" target="_blank" rel="noreferrer noopener">@XojoES</a> or on the <a href="https://forum.xojo.com/u/javier_menendez/summary" target="_blank" rel="noreferrer noopener">Xojo Forum</a>.</em></p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Casting, get ready and keep the Type!</title>
		<link>https://blog.xojo.com/2018/03/21/casting-get-ready-and-keep-the-type/</link>
		
		<dc:creator><![CDATA[Javier Menendez]]></dc:creator>
		<pubDate>Wed, 21 Mar 2018 09:00:31 +0000</pubDate>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Cast]]></category>
		<category><![CDATA[OOP]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=3997</guid>

					<description><![CDATA[Object Oriented Programming (OOP) puts in our hands the ability to create apps in a flexible and powerful way. Xojo embraces that philosophy in the&#8230;]]></description>
										<content:encoded><![CDATA[<p>Object Oriented Programming (<a href="http://developer.xojo.com/userguide/object-oriented-programming"><b>OOP</b></a>) puts in our hands the ability to create apps in a flexible and powerful way. Xojo embraces that philosophy in the Xojo language itself, allowing us to implement code in a flexible way for reuse, extension and maintainability that reduces the development cycles. One of these language tools is, in fact, common in other low level programming languages: <a href="http://developer.xojo.com/userguide/advanced-oop-features$casting"><b>Casting</b> or type conversion</a>. If you are interested in this (and you should be), continue reading and discover what it is, why you should be interested in it and how can you use it in your next Xojo app!<span id="more-3997"></span></p>
<p>If you are using Xojo already, or any other programming language, then I&#8217;m pretty sure you are using casting without even noticing it. For example, when you use simple types like Double or Integer, or even when assigning a String value to a Text variable. In these cases, everything happens behind the scenes. For example, these could be some type conversions you made in a regular basis:</p>
<pre>Dim n as Double = 10.20
Dim i as Integer
i = n // The 'i' variable will have the value 10, losing the decimal part as result of the implicit conversion process

Dim s as String = "Hello World!"
dim t as Text
t = s.ToText // Both variables have the same text using the "ToText" method in order to convert it to the expected type by the target variable.</pre>
<p>Both cases shows implicit conversions. This is, these are done without your intervention. However, in other scenarios we need to make these explicit, like when we need to use an object as if it was an instance created by the parent class in the hierarchy, and using it in a later step as a member of its real subclass (child class in the hierarchy), so we can continue using their methods and accesing the properties declared under that class.</p>
<p>Why would you want to do something like this? Well, there are a couple of cases that just jump into my mind:</p>
<ul>
<li>When it comes to objects created by classes that are not directly connected through the class hierarchy, but that share one or more common <a href="http://developer.xojo.com/userguide/interfaces">Class Interfaces</a>.</li>
<li>When these are objects created by several <a href="http://developer.xojo.com/userguide/oop-design-concepts$inheritance-subclassing">subclasses</a>, descending from a common parent class.</li>
</ul>
<p>For the first point, it would be the case where we need to maintain a collection of the same kind of objects, probably defined by a Class Interface type, but that in reality are created from several classes. This way, we can put all these objects in the same collection, iterating them and sending to them any of the methods defined by the Class Interface.</p>
<p>Something similar is what happens with the second scenario, where we can access to the common properties and methods offered by the parent class and, thus, shared an availables too in the instances created from their subclasses.</p>
<p>In fact, it is very probable that you are already using this second scenario in your projects as when you iterate all the controls (parent Class <b>Control</b>) put in the layout of a particular Window instance, a WebPage or an iOSView (each platform has its own parent class for controls). Here is a code example (in this case <code>me</code> refers to the <code>Window</code> instance where we put our code):</p>
<pre>For n as Integer = 0 to me.ControlCount - 1
  StrBox me.Control(n).Name
Next</pre>
<p>Showing this way the name of all the Window controls, no matter if they are TextFields, ListBox, PushButton, etc. After all, these controls classes are inherited from the <b>Control</b> class. Thus, the previous code snippet also could be written like this:</p>
<pre>Dim c as Control
For n as Integer = 0 to me.ControlCount - 1
  c = me.Control(n)
  MsgBox c.Name
Next</pre>
<p>But, what happens if we just are interested in showing the name of the controls from a specific <b>subclass</b>? For example it could be the case where we just need to show the name of the <b>TextField</b> controls used in the window layout. All the instances maintain internal information about themselves, like their Type, so we can access to that information during the execution of our apps through the <b>introspection</b> mechanisms provided by the Xojo language; but if we just need to check an instance type, then we can simply use the <a href="http://developer.xojo.com/isa"><b>IsA</b> operator</a>. This operator allows us to compare an <b>instance</b> against a <b>Class</b> or <b>Class Interface</b>, returning a <b>boolean</b> value as result of such comparison. Then, we can use this fragment to show the name of the TextField controls used in the window layout:</p>
<pre>Dim c as Control
For n as Integer = 0 to me.ControlCount - 1
  c = me.Control(n)
  If c IsA TextField Then
    MsgBox c.Name
  End If
Next</pre>
<h2>Casting in action</h2>
<p>When we work with an instance as if it was an instance from the parent class, or as a member of a Class Interface, then we call it <b>Downcasting</b>; something we could translate as <b>going down in the class hierarchy</b>. For example, this is what we have done in the previous fragments, where we use all the controls of the user interfaces as if they where instances from the <b>Control</b> class.</p>
<p>As we go deeper in the class hierarchy, we reduce the amount of properties, methods and events we can access. I mean, we are limiting ourselves in the functionality achievable by the instances. This is something we will be glad to embrace if we take into account the benefits that this practice gives us in return as flexibility and code cleanness.</p>
<p>Nevertheless, and continuing with the same example, what if we would want to retrieve all the TextField instances, not as Control instances but as their own, original, class type in order to access their defined properties or methods? How can we accomplish that?</p>
<p>Let&#8217;s say that we don&#8217;t just want to show the TextField instances name, but also change their background color, something that is not implemented under the Control class. That is, we need to use some behaviour specific to the TextField class. Here is where <b>Casting</b> comes into play: the ability to <b>cast</b> or project a class instance as the type we want it to be:</p>
<pre>Dim c as Control
dim t as TextField
For n as Integer = 0 to me.ControlCount - 1
  c = me.Control(n)
  If c IsA TextField Then
    MsgBox c.Name
    t = TextField(c) // Casting from the "Control" instance variable as a concrete subclass: "TextField"
    t.TextColor = &amp;cFF0000
  End If
Next</pre>
<p>That is, in order to use the <b>Casting</b> feature in Xojo, we need to put between parenthesis the name of the instance we want to convert, preceded by the name of the class we want the instance to be converted to.</p>
<p>Notice that when we use this OOP mechanism, we will not be backed by the usual help provided by the compiler on type checking. This means that if, for example, we cast an instance to a wrong target class for such instance has not internal information (it has not been originally created from that class, subclass or does not implement that class interface), then probably your app will not work as expected and, very probably, will fail or crash during its execution. To prevent this, you need to check for the inner class of any instance using any of the language provided mechanism in order to make sure you&#8217;re casting to the right type.</p>
<p>Finally, we could simplify the previous code like this:</p>
<pre>For n as Integer = 0 to me.ControlCount - 1
If me.Control(n) IsA TextField Then
  MsgBox me.Control(n).Name
  TextField(me.Control(n)).TextColor = &amp;cff0000
End If
Next</pre>
<p>This way will loses some readability (code intention), but results in a more compact code.</p>
<p>Throughout this example we have seen how easy it is to work with instances as if they where more generic, and <em>converting</em> them again to their original type when we need to use their specialized behaviour or access their specific status, using the Casting OOP mechanism for that.</p>
<p>You can watch this video (en español) to see this in action:</p>
<p><iframe title="Conversión de Tipos" width="500" height="375" src="https://www.youtube.com/embed/Iz0zG2KLNBo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p><em>Javier Rodri­guez has been the Xojo Spanish Evangelist since 2008, he’s also a Developer, Consultant and Trainer who has be using Xojo since 1998. He manages <a href="http://www.aprendexojo.com">AprendeXojo.com</a> and is the developer behind the GuancheMOS plug-in for Xojo Developers, Markdown Parser for Xojo, HTMLColorizer for Xojo and the Snippery app, among others</em></p>
<p>*<a href="https://www.aprendexojo.com/2018/03/conversion-de-tipos-casting/">Read this post in Spanish</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
