<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alula TYC</title>
    <description>The latest articles on DEV Community by Alula TYC (@altsyset).</description>
    <link>https://dev.to/altsyset</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F50572%2F968963b9-2a13-4164-adab-c2e541d1e03b.jpg</url>
      <title>DEV Community: Alula TYC</title>
      <link>https://dev.to/altsyset</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/altsyset"/>
    <language>en</language>
    <item>
      <title>Are ChatGPT and other AI technologies making learning impossible?</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Mon, 04 Sep 2023 11:37:06 +0000</pubDate>
      <link>https://dev.to/altsyset/are-chatgpt-and-other-ai-technologies-making-learning-impossible-2kcj</link>
      <guid>https://dev.to/altsyset/are-chatgpt-and-other-ai-technologies-making-learning-impossible-2kcj</guid>
      <description>&lt;h2&gt;
  
  
  It was impossible to learn engineering for my day. Now the same is true for my son.
&lt;/h2&gt;

&lt;p&gt;My dad was born in a small town called &lt;em&gt;Wota&lt;/em&gt;, in southern parts of Ethiopia. He was able to get some education all the way to high school. But after that it was a difficult ask. So he joined the military not because he was incapable of joining a university and studying engineering. But because that was only for the very few.&lt;/p&gt;

&lt;h2&gt;
  
  
  Education was inaccessible.
&lt;/h2&gt;

&lt;p&gt;My dad joined the military because Education was for the few. It was inaccessible. There were only a few universities, two to be exact, in Ethiopia at the time.&lt;/p&gt;

&lt;p&gt;Books were very rare too. He can't easily access knowledge on philosophy, religion, history, politics, etc. Neither could he teach himself how to fix and maintain cars, radio or any electronics or mechanical devices. The devices were rare and the knowledge of how they work was a mystery.&lt;/p&gt;

&lt;p&gt;Yet, my dad learned a tone from the few books he had access to. He didn't feel his head with garbage, with weird conspiracy beliefs that are constructed with broken reasoning.&lt;/p&gt;

&lt;p&gt;He was capable of listening attentively with patience, speaking clearly, articulating his ideas in written form and reading fairly complex topics. All these with two languages. Because of that he had a piece of mind and clarity enough to ponder the big questions in life.&lt;/p&gt;

&lt;p&gt;Sadly though, my dad has to go to a civil war to fight with my relatives on my moms side. That happened because of a lack of education.&lt;/p&gt;

&lt;h2&gt;
  
  
  Education became accessible, but commoditized
&lt;/h2&gt;

&lt;p&gt;Fast forward a few decades and I was in highschool. In the capital city of Ethiopia. Education is accessible. We had a decent library with fairly good books. We even had a computer lab where we shared a few computers among thousands of students.&lt;/p&gt;

&lt;p&gt;Hence, I was able to learn everything my dad did and more. I learned how computers work, at my level, and was able to use the MS DOS.&lt;/p&gt;

&lt;p&gt;It was clear progress. Plus, I joined university and studied computer science. I had a good job as a software developer and I didn't go to war like my dad did. I also have the pleasure of taking enough time to ponder the big questions in life. I have read books on them and do a lot of research on them as well. I find myself asking about the meaning of life more than the average person. And that is success for me.&lt;/p&gt;

&lt;p&gt;However, now I face a completely different challenge to my dad's generation.&lt;/p&gt;

&lt;p&gt;Instead of a few books, I get hold of hundreds, just in my own house. Instead of playing with MsDOS in a shared computer lab. I now have four computers at my house, and that is without counting all the phones, tablets and other devices.&lt;/p&gt;

&lt;p&gt;Plus, when you open windows now, it is filled with crappy information and apps that are installed without my will. There is "the news" right at the start, when you open windows 11.&lt;/p&gt;

&lt;p&gt;Don't even get me started about the internet. With countless websites, apps and information that are just full of shit. The problem is out of these apps, websites and information only the very few (3% in my assumption) are actually important. The rest is commoditized and engineered to grab my attention.&lt;/p&gt;

&lt;p&gt;Hence, I find myself in an automated mood. No thinking, no pondering. That is a clear sign of fuilere for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  My son has no hope. He has to be exceptionally smart to find quality education in a pile of crap.
&lt;/h2&gt;

&lt;p&gt;All this was done with humans. Now we are creating bots. The bots are so good at engineering attention acquisition. Hence they will multiply the speed at which this crappy commoditized information is produced. They are so good at keeping us scrolling and just that. No hope of pausing and pondering. No chance of writing, discussing, listening to each other. No hope of learning.&lt;/p&gt;

&lt;p&gt;My son would have to be exceptionally smart to survive the AI info dump and find quality content that actually makes him think and question. He has to have a guru level self control to seep through all the bad information and actually learn something useful.&lt;/p&gt;

&lt;p&gt;I'm afraid my son will just join the military and go to war just like my dad because knowledge is fast becoming unreachable. Buried in a pile of shit.&lt;/p&gt;

&lt;p&gt;How and when would a kid scrolling through an app pause to ask life changing questions. "What are we all doing here? What is the meaning of life? What is my purpose in life? What is life? Who am I? What am I? What do I think? Why do I think so? What is thinking? What is the meaning of all this?". These are questions that made us. That shaped humanity. These are questions that gave me clarity. These are questions that gave me meaning.&lt;/p&gt;

&lt;p&gt;Now if you google these, the algorithms give you answers based on their interpretation of who you are. They have decided who you are. How based on the information you consume. But an average kid consumes crappy information because that is what is rightly available for them.&lt;/p&gt;

&lt;p&gt;Hence, if I google "What is the meaning of life?" I get answers maybe from wikipedia, Stanford encyclopedia of philosophy, Psychologytoday, etc.&lt;/p&gt;

&lt;p&gt;If an average teenager Goggles the same question, they get goofy Youtube short videos, movies, and maybe an article from an SEO engineered website. And that is with the assumption they will go googling. I have seen kids searching for staff on Facebook. That is just scarry. &lt;/p&gt;

&lt;h2&gt;
  
  
  A service that would just curate information for kids
&lt;/h2&gt;

&lt;p&gt;This problem has led to the rise of curated content in the format of newsletters. But that is still for adults. For teenagers there is still a gap that must be filled. And that is a service, an app, that could actually filter through this bad information and give them education. &lt;br&gt;
Education has made a full circle and has become inaccessible. A service that can do that would solve a real problem.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Match Expressions in PHP8 over Switch Statement</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Fri, 05 Nov 2021 04:32:43 +0000</pubDate>
      <link>https://dev.to/altsyset/match-expressions-in-php8-over-switch-statement-361b</link>
      <guid>https://dev.to/altsyset/match-expressions-in-php8-over-switch-statement-361b</guid>
      <description>&lt;p&gt;Match expressions in PHP8 are among the many new features that encourage good standards when writing code. At first, they might seem just another short-hand syntax. However, match expressions effectively replace switch statements and make our code cleaner, readable, and less prone to errors.&lt;/p&gt;

&lt;p&gt;How?&lt;/p&gt;

&lt;p&gt;Let’s see match expressions in action. And you would be convinced to refactor your code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Match Expression Syntax
&lt;/h2&gt;

&lt;p&gt;First, let’s observe the general syntax of match expressions. Similar to associative arrays, the general syntax of match expressions has a key and value pair. Take a look.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$expression = strpos("PHP is great", "PHP");

$resultOfExp = match($expression) {
    0 =&amp;gt; "Sentence starts with PHP",
    9 =&amp;gt; "Sentence ends with PHP",
   'default' =&amp;gt; "Sentence doesn't start or end with PHP"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So &lt;code&gt;match&lt;/code&gt; is a method that accepts an expression that computes to different values. Note that, $expression could be anything, a function call or comparison operator. In our example above, we have made a simple function call to &lt;code&gt;strpos&lt;/code&gt; which returns the index of the second string in the first string.&lt;/p&gt;

&lt;p&gt;Hence, if it computes to 0 then our variable $resultOfExp will get "Sentence starts with PHP". Or if it computes to 9 then our variable gets the “Sentence ends with PHP” string value. Finally, if the result of the expression is neither 0 nor 9, our variable will be assigned a value of “sentence doesn’t start or end with PHP”.&lt;br&gt;
You might be wondering that this is just like a switch statement or an if-else statement. And you are right. It is just a cleaner and less error-prone switch statement. &lt;br&gt;
Now let’s see the same code in a switch statement.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;switch($expression) {
   case 0:
     $resultOfExp = "Sentence starts with PHP";
     break;
   case 9:
     $resultOfExp = "Sentence ends with PHP";
     break;
   default:
     $resultOfExp = "Sentence doesn't start or end with PHP"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, our switch statement is much more verbose with multiple variable assignments to &lt;code&gt;$resultOfExp&lt;/code&gt;. As a result, we are prone to errors and our code could easily end up unreadable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Difference between switch and match expressions in PHP8
&lt;/h2&gt;

&lt;p&gt;Besides these advantages match expressions have the following advantages over a switch statement.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Switch Statement&lt;/th&gt;
&lt;th&gt;Match Expressions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Loose type comparison. For example ($a == $b)&lt;/td&gt;
&lt;td&gt;Strict type comparison. For example ($a === $b)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Doesn’t return a value. Hence we have to assign the result over and over again.&lt;/td&gt;
&lt;td&gt;The result of the expression is returned. Therefore we assign to our variable only once.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Each case has multiple commands or multiple lines of code.&lt;/td&gt;
&lt;td&gt;Only one expression per case.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finally, a switch statement requires an unnecessary and verbose break statement.&lt;/td&gt;
&lt;td&gt;Whereas, match expressions do not need any additional verbose statement.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To sum up, match expressions are just like switch statements which are clearly intended to make our code less error-prone and readable. And I hope this article convinced you to consider using match expressions over switch statements in the future.&lt;/p&gt;

</description>
      <category>php</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>PHP preg_match to validate US and Ethiopian Phone Numbers</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Wed, 20 Oct 2021 03:50:03 +0000</pubDate>
      <link>https://dev.to/altsyset/php-pregmatch-to-validate-us-and-ethiopian-phone-numbers-3m59</link>
      <guid>https://dev.to/altsyset/php-pregmatch-to-validate-us-and-ethiopian-phone-numbers-3m59</guid>
      <description>&lt;p&gt;HTML5 forms support different input types. And one of them is the number type. You can use it to force users to put in only numbers.&lt;/p&gt;

&lt;p&gt;The problem is when you want to let your users format the phone number. For example, by letting them put dash character. In those cases, we can use the character classes and range limiters we saw above to validated formatted US and Ethiopian phone numbers like this:-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$phoneNumber = "0911-223344";
preg_match('/[0-9]{4}-[0-9]{6}/', $phoneNumber);//Simple regex to validate ethiopian phone number
preg_match("/[0-9]{3}-[0-9]{3}-[0-9]{4}/", $phoneNumber); // Simple regex to validate US phone number
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I can simplify this pattern by replacing the character class [0-9] with a simple \d. Which simply indicates any digits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validating Ethiopian phone number with a country code
&lt;/h3&gt;

&lt;p&gt;But, what if users put dash in between numbers. Or if they start by +251, which is the country code.&lt;/p&gt;

&lt;p&gt;To accomplish this task, we need to introduce ourselves to sub patterns.&lt;/p&gt;

&lt;p&gt;Sub patterns enable us to group and validate a small group of our main pattern. For instance, we can group the start of our phone number to be +251 or any country code. Therefore, in our particular case we need the start to be either +251 or 09. Which, to my knowledge are the common phone number patterns Ethiopia.&lt;/p&gt;

&lt;p&gt;Now, my pattern would start with ^+251, which means start with +251. But to match the plus sign (+) I need to escape it because + has it’s own meaning in regex. Escaping special characters is possible using the backward slash ().&lt;/p&gt;

&lt;p&gt;Hence my start will be ^+251. Which will validate if phone numbers actuall start with +251. However, they might start with 09 too. To include that we will have to introduce ourselves to the alternate character, which is the pipe (|).&lt;/p&gt;

&lt;p&gt;Using the pipe, the start of my phone number will be ^((+251|0)\d{3}). This will force my patterns to start with either +251 or 0 followed by a digit of size 3.&lt;/p&gt;

&lt;p&gt;After the initial +251 or 0 followed by 3 digit numbers, we usually have a dash followed by 6 digit number. So I can do (^(+251|0)\d{3})-?\d{6}.&lt;/p&gt;

&lt;p&gt;Note: the ? right after the dash is to indicate optional characters. That means to mean, it can appear either 0 or 1 times.&lt;/p&gt;

&lt;p&gt;Finally our Ethiopian phone number validation regex looks like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$phoneNumber = "+251911-223344";
preg_match('/((^(\+251|0)\d{3})-?\d{6})/');//Simple regex to validate ethiopian phone number
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>php</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Step by Step guide to validate user name with PHP preg_match</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Wed, 20 Oct 2021 03:44:25 +0000</pubDate>
      <link>https://dev.to/altsyset/php-pregmatch-to-validate-user-name-ethiopian-phone-number-4cj</link>
      <guid>https://dev.to/altsyset/php-pregmatch-to-validate-user-name-ethiopian-phone-number-4cj</guid>
      <description>&lt;p&gt;PHP preg_match examples that can be used for real-life projects are hard to come by. Here I try to elaborate regex in PHP by using actual codes I have used to validate user name, email, phone number, etc. However, as usual, I suggest checking the basics of Regex from the official PHP website. Also, we should use basic PHP string comparison functions like strpos for some of these tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP preg_match example to validate user name
&lt;/h2&gt;

&lt;p&gt;A typical username might have the following requirements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It must start with a letter.&lt;/li&gt;
&lt;li&gt;It should have reasonable size. For example greater than 4 and not less than 25.&lt;/li&gt;
&lt;li&gt;It can only contain letters, numbers, and the underscore character.&lt;/li&gt;
&lt;li&gt;And it can not end with an underscore.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Considering the above requirement, let’s start to write a preg_match pattern that will validate a username. First, we will take a very easy approach and try to make our pattern better as we gain more knowledge of the regexes.&lt;/p&gt;

&lt;p&gt;The first requirement is to make our pattern start with letters. To accomplish that, we can use the caret character (^). Which has a special meaning in Regex.&lt;/p&gt;

&lt;p&gt;When we use the caret character at the start of a regex pattern, we are telling PHP to match only strings that start with that letter. Hence, a pattern like the below will match strings starting with PHP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   $input = "PHP is great";
   preg_match('/^PHP/', $input);//Will return true

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similarly, we can use the dollar character ($) to enforce endings in a regex pattern. That means,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   $input = "PHP is great";
   preg_match('/^PHP$/', $input);//Will return false.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clearly, the above code returns false because the input string ends with ‘great’ not PHP. To make it work we can replace that string with ‘great’.&lt;/p&gt;

&lt;p&gt;This is great and all. But it still lacks in answering the first requirements. Because we can’t list all the alphabets and tell PHP to enforce that.&lt;/p&gt;

&lt;p&gt;What can we do?&lt;/p&gt;

&lt;h3&gt;
  
  
  Character classes to specify range
&lt;/h3&gt;

&lt;p&gt;Instead of listing the alphabets, Regex gives us character class ranges. Ranges are awesome when we want to specify the whole alphabet. Both lowercase and uppercase. Or to check every number. For example:-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$input = "abc";
preg_match('/^[a-zA-Z]$/', $input);//Will return true.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above code snippet is a great elaboration of ranges. It checks if the input is made up of letters. Either small or capital letters. Similarly, we can apply the range, [0-9] to validate our input for numbers in it.&lt;/p&gt;

&lt;p&gt;Awesome. Now we are getting there. We are clearly checking if our user input starts and ends with letters.&lt;/p&gt;

&lt;p&gt;The next requirement is the size of the username. To check for the size we use the format, {n} in regex. Where n is the number allowed.&lt;/p&gt;

&lt;p&gt;Furthermore, we can specify the minimum and maximum value in a brace like this {n, m}.&lt;/p&gt;

&lt;p&gt;So, we are ready to handle the second requirement.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   $input = "abc2020";
   preg_match('/^[a-zA-Z]{4, 25}$/', $input);//Will return true.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alright, so we are at the third requirement. And it states that our userName can only contain letters, numbers, and underscore. I think at this point we are capable of doing this without introducing any new concept. We can use ranges like this, [0-9a-zA-Z_].&lt;/p&gt;

&lt;p&gt;Finally, forbidding underscore at the end. For now, we will stick with a range syntax and we have our final regex with preg_match function like this:-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   function validateUserName($userName) {
     if(preg_match('/^[a-zA-Z][0-9a-zA-Z_]{2,23}[0-9a-zA-Z]$/',             $userName)) {
       return true;
     }
     return false;
   }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Recap of username regex
&lt;/h3&gt;

&lt;p&gt;Let’s recap. Our regex has three groups.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;^[a-zA-z] Can only start with letters. Either small or capital letter.&lt;/li&gt;
&lt;li&gt;[0-9a-zA-Z_]{2,23} Allowed length between 2 and 23. Why? Because of two characters to start with and to end I subtracted them from the start and end of the requirement.&lt;/li&gt;
&lt;li&gt;[0-9a-zA-Z]$ Can only end with a number and a letter.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Making our username regex shorter and better.
&lt;/h3&gt;

&lt;p&gt;Right now, our regex works just fine. But it could be better and shorter.&lt;/p&gt;

&lt;p&gt;First, we will remove all the ranges for capital letters. That is if we have [a-z] we don’t need to add A-Z. Because we can use the &lt;code&gt;i&lt;/code&gt; flag. Which in regex means, `make my pattern case-insensitive.&lt;/p&gt;

&lt;p&gt;Next, we can use \w character class instead of [0-9a-bA-Z.&lt;/p&gt;

&lt;p&gt;Finally, for our third group we can use the caret again (^). This time we will use it to mean, not. So my last group would be [^_].&lt;/p&gt;

&lt;p&gt;Here is our improved and final regex to validate username as per our requirement.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
   function validateUserName($userName) {&lt;br&gt;
     if(preg_match('/^[a-z]\w{2,23}[^_]$/i', $userName)) {&lt;br&gt;
       return true;&lt;br&gt;
     }&lt;br&gt;
     return false;&lt;br&gt;
   }&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br&gt;
As you can imagine, there are so many ways to accomplish what we did here. So I encourage you to try to come up with your own ways of validating username.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP preg_match to validate US and Ethiopian Phone Numbers
&lt;/h2&gt;

&lt;p&gt;HTML5 forms support different input types. And one of them is the number type. You can use it to force users to put in only numbers.&lt;/p&gt;

&lt;p&gt;The problem is when you want to let your users format the phone number. For example, by letting them put dash character. In those cases, we can use the character classes and range limiters we saw above to validated formatted US and Ethiopian phone numbers like this:-&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
$phoneNumber = "0911-223344";&lt;br&gt;
preg_match('/[0-9]{4}-[0-9]{6}/', $phoneNumber);//Simple regex to validate ethiopian phone number&lt;br&gt;
preg_match("/[0-9]{3}-[0-9]{3}-[0-9]{4}/", $phoneNumber); // Simple regex to validate US phone number&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br&gt;
I can simplify this pattern by replacing the character class [0-9] with a simple \d. Which simply indicates any digits.&lt;/p&gt;

&lt;p&gt;Next, we will validate phone number of your local variety. For me, I am from Addis Ababa, Ethiopia. So I will try and &lt;a href="https://dev.to/altsyset/php-pregmatch-to-validate-us-and-ethiopian-phone-numbers-3m59"&gt;validate a US and Ethiopian phone number&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>beginners</category>
      <category>programming</category>
      <category>ux</category>
    </item>
    <item>
      <title>Most common PHP string manipulation questions</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Tue, 12 Oct 2021 04:59:20 +0000</pubDate>
      <link>https://dev.to/altsyset/most-common-php-string-manipulation-questions-fl8</link>
      <guid>https://dev.to/altsyset/most-common-php-string-manipulation-questions-fl8</guid>
      <description>&lt;p&gt;These are the most common PHP string manipulation questions that I had come around when I was getting started with PHP. Most of these easy concepts still confuse students. But let’s take few minutes and take them one by one.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I combine two strings together?
&lt;/h2&gt;

&lt;p&gt;The first common PHP string manipulation question is “How do I combine two strings?”. Yes, it is very common.&lt;/p&gt;

&lt;p&gt;The reason is confusion between PHP concatenation operators and other languages’. For instance, in JavaScript concatenation is done using the plus sign (+). So, if you experience this confusion, don’t fret.&lt;/p&gt;

&lt;p&gt;Obviously, for a person with basic knowledge and experience, the answer is simple. We use the dot sign (.) operator for concatenation in PHP. Here is a simple snippet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$var1 = "Learn";
$var2 = "PHP";
$message = $var1 . ' '.$var2;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But, I am sure we can also think of a couple of more ways to answer this common PHP string manipulation question. For instance, we can use string interpolation with curly braces to combine the two string variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$var1 = "Learn";
$var2 = "PHP";
$message = "{$var1} {$var2}";

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Normally, we don’t need curly braces when interpolating strings. But, we need them in this scenario. Since we are performing interpolation and concatenation. Beware that this works with double quotations string only.&lt;/p&gt;

&lt;p&gt;Finally, we can also use printf and echo to combine strings and print them.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check if a string contains another word in PHP?
&lt;/h2&gt;

&lt;p&gt;Next, checking if a string contains another string seems a very important utility that PHP didn’t provide until recently (The release of version 8). Yet, until now there were a number of ways of answer this common PHP string manipulation question and we will see them all.&lt;/p&gt;

&lt;p&gt;Okay, let’s see how we will answer this question one by one. Firstly, the simple &amp;amp; go-to solution is to use strpos() function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using strpos() funciton
&lt;/h3&gt;

&lt;p&gt;This method works fine as long as we use identity o This method works fine as long as we use the identity operator instead of equality operators. Because the function, strpos(), returns 0 when the second string is located as the first character or string. And, PHP will cast 0 as FALSE during comparison operators.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$var1 = "Programming with PHP is Awesome.";
$var2 = "PHP";
if(strpos($var1, $var2) !== FALSE) {
   echo "There is $var2 in $var1";
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using substr_count() PHP function
&lt;/h3&gt;

&lt;p&gt;We can use the substr_count() PHP string function to count the number of occurrences of one string in another string. That means we can check if the number of occurrences is greater than 0 and then be able to answer our PHP string manipulation question. Here is an example:-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$var1 = "Programming with PHP is Awesome.";
$var2 = "PHP";
if(substr_count($var1, $var2) &amp;gt; 0) {
   echo "There is $var2 in $var1";
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using strstr() function
&lt;/h3&gt;

&lt;p&gt;Similar to the strpos() function and substr_count, PHP has strstr() string utility function. And this function simply returns the first occurrence of a string in another string. Hence, our job is almost made very easy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$var1 = "Programming with PHP is Awesome.";
$var2 = "PHP";
if(strstr($var1, $var2) !== FALSE) {
   echo "There is $var2 in $var1";
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using regular expression
&lt;/h3&gt;

&lt;p&gt;In addition to all the above methods, we can also use the ubiquitous regex function called preg_match to see if a string contains another string. In fact, we can always use RegEx to answer the most common PHP string manipulation questions. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$var1 = "Programming with PHP is Awesome.";
$var2 = "PHP";
if(preg_match('/.$var2./', $var1) !== FALSE) {
   echo "There is $var2 in $var1";
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using str_contains() PHP 8 function
&lt;/h3&gt;

&lt;p&gt;Finally, PHP 8 gives us the most direct approach. To check if one string contains another. We can use str_contains PHP 8 function, which does exactly what it says. That is, it checks if a string contains another string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$var1 = "Programming with PHP is Awesome.";
$var2 = "PHP";
if(str_contains($var1, $str2) &amp;gt; 0) {
   echo "There is $var2 in $var1";
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>beginners</category>
      <category>programming</category>
      <category>php</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>A detailed look into PHP type casting</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Tue, 05 Oct 2021 04:03:37 +0000</pubDate>
      <link>https://dev.to/altsyset/a-detailed-look-into-php-type-casting-4m6d</link>
      <guid>https://dev.to/altsyset/a-detailed-look-into-php-type-casting-4m6d</guid>
      <description>&lt;p&gt;PHP implicit casting is very common. But before we see what it mean, let's see why it happens. &lt;/p&gt;

&lt;p&gt;PHP is supper-friendly. Also, it is a loosely typed language. This means PHP allows us to declare a variable and simply use it, the &lt;a href="https://www.businesstyc.com/a-look-into-php-data-types/"&gt;data type&lt;/a&gt; will be automatically determined. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; PHP determines the data type of variables automatically. We just declare a variable and assign it a value. PHP determines the type from the value. &lt;/p&gt;

&lt;p&gt;Furthermore, PHP continuously and automatically converts types from one to another when necessary. This is called &lt;em&gt;&lt;strong&gt;implicit casting&lt;/strong&gt;&lt;/em&gt; or &lt;strong&gt;Type Juggling&lt;/strong&gt;. Why is PHP juggling types? Because it is always trying to make sense of our code. &lt;/p&gt;

&lt;p&gt;For instance, if an operation results in a number that is larger than the range for an integer, PHP implicitly casts it into a floating-point number. But, there are a number of scenarios where PHP automatic type juggling is not as clear. Here are a few scenarios and examples:- &lt;/p&gt;

&lt;h2&gt;
  
  
  PHP Implicit Casting During Arithmetic Operations
&lt;/h2&gt;

&lt;p&gt;Take a look at this simple code. Most programming languages might complain, but PHP tries its best. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $x = 3 + "10% discount"; 
  echo $x;// We will get 13, a number. With some notice about format of our number. 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is true as long as the first operand is a number and the second operand is a string starting with a number. It can be followed by any character. PHP casts the second operand into a number. &lt;/p&gt;

&lt;p&gt;Similarly, the following snippet will also result in 13. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   $x = 3 + "10 items"; 
   echo $x; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Yet, this rule turns upside down when we have a string starting with characters followed by a number as a second operand. In this situation, PHP implicitly casts the second operand into a &lt;em&gt;null&lt;/em&gt;. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    $x = 3 + "Items = 10"; 
    echo $x; // We get 3\. 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Also, A warning of non-numeric value is displayed. Hence, PHP interpretation of a string during arithmetic operations with a number is one of the following:- &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; 1\. Operation with another number. As long as the string starts with a number. 
 2\. Operation with _null_. As long as, the string starts with a character. 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In any of the above cases, if the number is a floating-point, PHP casts the other operand and the result as a floating-point number. That is:- &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $x = 3 + "2.3$";//Will result in 5.3 We don't have to worry about truncating a number value when we divide integers. 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Unlike other languages, PHP casts the division value into floating-point numbers and preserves the value. &lt;br&gt;
       $x = 2/3; //Results in a floating point in 0.66666667 &lt;/p&gt;

&lt;p&gt;Again, PHP is implicitly converting the type into a floating point number. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## PHP Implicit Casting During Comparison Operators 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Similar to arithmetic operations, PHP performs some castings during comparison operations. For instance:- &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; $a = '2'; $b = 2; if ($a == $b) { 
      echo "They are equals. Because $a is cast into number"; 
  } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As you can see, PHP implicitly casting is at full play during the equality comparison. As a result, the operator treats $a as an integer to compare with $b. Even if the two operands are strings with just a number in them, The operation casts and compares them as numbers. &lt;/p&gt;

&lt;p&gt;However, if one of them is a string that is not entirely numeric the operation will compare them lexicographically. &lt;/p&gt;

&lt;p&gt;Note: there is a comparison operator that also checks for type. That operator is called &lt;strong&gt;identity operator (===)&lt;/strong&gt; and it should be used to avoid implicit casting. &lt;/p&gt;

&lt;h2&gt;
  
  
  Type Juggling during Concatenation
&lt;/h2&gt;

&lt;p&gt;The concatenation operator &lt;strong&gt;( . )&lt;/strong&gt; appends the right and left operands together and returns a new string. If either or all of the operands of the concatenation operator are non-string, PHP will implicitly cast them into one. For instance:- $n = 3; $message = "There are".$n."items";//$n is implicitly cast from integer into string. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Finally, just remember this. PHP tries to make sense of our code. In the process, it converts one type into another. We call this type juggling or implicit casting. &lt;/p&gt;

&lt;p&gt;Type juggling can be a major source of confusion. It can be avoided by following the above simple rules. We can also take full control of typecasting by manually converting one type into another. This type of casting is called &lt;strong&gt;explicit typecasting.&lt;/strong&gt; The official &lt;a href="https://www.php.net/manual/en/language.types.type-juggling.php"&gt;PHP documentation goes into detail regarding explicit typecasting&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;This blog is part of a relearn PHP series where I am blogging every week on one basic PHP topic. Let me know if you like it.&lt;/p&gt;

</description>
      <category>php</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why can't I finish a course I start.</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Mon, 10 May 2021 11:46:49 +0000</pubDate>
      <link>https://dev.to/altsyset/why-can-t-i-finish-a-course-i-start-13i2</link>
      <guid>https://dev.to/altsyset/why-can-t-i-finish-a-course-i-start-13i2</guid>
      <description>&lt;h2&gt;
  
  
  Give me more digital junk
&lt;/h2&gt;

&lt;p&gt;I have started much more courses on Edx, Coursera, YouTube, Udemy, etc than I have finished. In fact, I forget that I was taking a particular course until I get notifications on my email. Sometimes, I just download a number of free eBooks and PDFs. I subscribe to countless newsletters that I could not read. I want more and more. I consume a lot and I still feel like I have to consume even more. Why? Maybe FOMO. &lt;/p&gt;

&lt;p&gt;So I wonder what is wrong with me? Why can't I finish a course I start? I could just say that I am not concentrated or disciplined enough. But what are the odds of me becoming focused when living with AI built to make me want more insatiably? &lt;/p&gt;

&lt;p&gt;I would say very low.&lt;/p&gt;

&lt;p&gt;What choice do I have but to be scattered when every account I follow on Twitter is trying to sell me stuff and make me believe that I lack something unless I consume their digital junk. Every corner of the internet, I am being followed and sold. Google relentlessly follows me around and encourages me to move my hosting to the new shiny provider that is paying them well. YouTube algorithm pushes content that thrives on my insecurities. How can I become focused in this world? &lt;/p&gt;

&lt;p&gt;And Instagram and Facebook world is completely different hell.&lt;/p&gt;

&lt;h2&gt;
  
  
  You can't be focused when you live with AI.
&lt;/h2&gt;

&lt;p&gt;The internet, apps, and all our digital experience are made to manipulate us into believing that we need more. To make us believe that we lack something. So it is time to adjust our life to be aware of our new frienemy. The AI that surrounds us.&lt;/p&gt;

&lt;p&gt;The algorithms these platforms are written can benefit us but only if we know-how. Right now the algorithm knows much more about us than us about it. And the algorithm works for the corporations that own it. The algorithm is not made to help you focus on your reading but to nudge you to click on the next article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Living with an Algorithm
&lt;/h2&gt;

&lt;p&gt;In short, the algorithm thrives in making you believe that you lack something and that you need something. Every day it is getting smarter in making you believe this cardinal truth about yourself. And the worst part is it is true. We lack something. There is always a void in me and in most humans. That is the driving force that makes us try things. But if we believe it too much we become like a monkey who wants to try everything. That is where our capability to control ourselves comes in. Right now I have lost that capability.&lt;/p&gt;

&lt;p&gt;So to live with AI, I have to teach myself these five truths every day.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Less is more.
&lt;/h3&gt;

&lt;p&gt;Focusing on one project is better than ten projects. Completing one course is better than subscribing to ten at once. Solving one problem is better than learning about a bunch of them at once.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Creation is better than consumption.
&lt;/h3&gt;

&lt;p&gt;Writing one line of code, blog, etc is better than following a YouTubers who make an awesome app, website, game. Every day, spend more time creating than consuming.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Gradual change.
&lt;/h3&gt;

&lt;p&gt;Trusting in the process and gradual change. My desire to change and become better may not be answered immediately. It might take time, which I am willing to be patient.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Easy is not always better.
&lt;/h3&gt;

&lt;p&gt;The new easy configurable JS library is not necessarily better than the old reliable one.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Change comes from within.
&lt;/h3&gt;

&lt;p&gt;The next online instructor or JS library might be way better. But at the end of the day, no change is possible without me. Change comes from within. &lt;/p&gt;

&lt;p&gt;These will be my five truths to live with AI. Hope whoever reads this article would consider them too. &lt;/p&gt;

</description>
      <category>habits</category>
    </item>
    <item>
      <title>Make Your Angular SPA Accessible</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Tue, 24 Nov 2020 14:01:47 +0000</pubDate>
      <link>https://dev.to/altsyset/make-your-angular-spa-accessible-16h</link>
      <guid>https://dev.to/altsyset/make-your-angular-spa-accessible-16h</guid>
      <description>&lt;h2&gt;
  
  
  Implementing the "Skip to Main Content" (Bypass Block) link on Angular project
&lt;/h2&gt;

&lt;p&gt;One of the most important links you can build on your project to help visually impaired users is to implement the "Skip to Main Content" link.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the "Skip to Main Content" link
&lt;/h2&gt;

&lt;p&gt;If you are a regular keyboard user you definitely used and love this link. Here is a screenshot of what I am talking about in action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fujabi9eo8w9z324cs2ar.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fujabi9eo8w9z324cs2ar.PNG" alt="The Skip To Main Content link in action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To see this screen for yourself, type your search key, and press enter. Then press the tab key. You will see the 'Skip to Main Content' link.&lt;/p&gt;

&lt;p&gt;The main purpose of this link is to help keyboard users and visually impaired users to jump to the main content instead of tabbing over all the links on top of it. In this scenario, users won't have to deal with the search box, the icons around it, all the links below it("All", "Image", "News", etc.). Instead, the keyboard will jump to the first link of the search result.&lt;/p&gt;

&lt;p&gt;This is a very valuable usability asset you can implement in your angular project as follows. Please read the &lt;a href="https://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms-skip.html" rel="noopener noreferrer"&gt;WCAG standards&lt;/a&gt; on this topic for more.&lt;/p&gt;

&lt;p&gt;You can take a number of approaches to implement this feature. Here I will show one of these approaches you can use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step One, Enable Anchore Scrolling.
&lt;/h2&gt;

&lt;p&gt;First enable anchor tags in your angular project by just adding this block on your app-routing.module.ts&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

RouterModule.forRoot(routes, {
    anchorScrolling: 'enabled',
  })



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Step Two, the link.
&lt;/h2&gt;

&lt;p&gt;Implement a simple link on top of your components. In most cases, it will be on the &lt;code&gt;app.component.html&lt;/code&gt; file. It will be something like this.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;a class="nav-link" [routerLink]="[currentUrl]" [fragment]="'main'" &amp;gt;Skip to Main Content &amp;lt;/a&amp;gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We will discuss the &lt;code&gt;[routerLink]&lt;/code&gt; part of this simple anchor link later. But the &lt;code&gt;[fragment]&lt;/code&gt; is just the &lt;code&gt;'#main'&lt;/code&gt; part of the url that will be appended to it, considering we will have a &lt;code&gt;div&lt;/code&gt; or &lt;code&gt;section&lt;/code&gt; with an &lt;code&gt;id&lt;/code&gt; of &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step three, subscribe to the router event.
&lt;/h2&gt;

&lt;p&gt;Every time the user clicks and navigates to different pages and components, the URL changes. Our task will be to listen to these changes by subscribing to this event. That way we can always know the current URL and add it as the &lt;code&gt;[routerLink]&lt;/code&gt; value in the link that you see above. You can do this in the constructor of your app component.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

currentUrl: any = ''
constructor(router: Router) {
    router.events.subscribe((e) =&amp;gt; {
      if (e instanceof NavigationEnd) {
        if (e.url != '') {
          this.currentUrl = e.url;
        } else {
          this.currentUrl ='';
        }
      }
    });
  }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Note: You have to import Router and NavigationEnd from &lt;code&gt;@angular/router&lt;/code&gt; on top of this class as follows.&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;import { Router, NavigationEnd, NavigationStart } from "@angular/router";&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Finally, step four, the main section.&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;Finally, make sure you have a &lt;code&gt;section&lt;/code&gt; of a &lt;code&gt;div&lt;/code&gt; with an id of &lt;code&gt;main&lt;/code&gt; so that when the user clicks the link and redirected to the same url with &lt;code&gt;#main&lt;/code&gt;, our app jumps to it.&lt;/p&gt;

</description>
      <category>angular</category>
      <category>a11y</category>
      <category>spa</category>
      <category>keyboard</category>
    </item>
    <item>
      <title>Can someone ELI5 the difference UI and UX</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Wed, 12 Jun 2019 12:35:46 +0000</pubDate>
      <link>https://dev.to/altsyset/can-someone-eli5-the-difference-ui-and-ux-am3</link>
      <guid>https://dev.to/altsyset/can-someone-eli5-the-difference-ui-and-ux-am3</guid>
      <description>&lt;p&gt;I thought I knew the difference between UI and UX. That is why I planned and started writing a blog about it. But then I started researching it, and I ended up confused.&lt;br&gt;
For me, UI is the platform and UI designer is focused on it. UX, on the other hand, is about the user. And UX designer focuses on the user and his/her experience. &lt;br&gt;
But when I look up what a UX designer does it involves wireframing and prototyping, that doesn't add up to me. I believe UI designer should do that.&lt;br&gt;
Am I missing something here? Can you guys help?&lt;/p&gt;

</description>
      <category>help</category>
    </item>
    <item>
      <title>How do I get international customers?</title>
      <dc:creator>Alula TYC</dc:creator>
      <pubDate>Fri, 31 May 2019 16:12:53 +0000</pubDate>
      <link>https://dev.to/altsyset/how-do-i-get-international-customers-57gm</link>
      <guid>https://dev.to/altsyset/how-do-i-get-international-customers-57gm</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;I run a &lt;a href="https://www.businesstyc.com"&gt;web design agency in Addis Ababa, Ethiopia&lt;/a&gt;. I am curious about opportunities outside Ethiopia, I have landed some works before through word of mouth. But I want to find a regular channel. What are some ways I can do this? Thanks.&lt;/p&gt;

&lt;p&gt;P.S: I am redesigning my website with CSS Grid so there might not be much there. I am saying this because I know some of you would suggest a lack of portfolio etc on the site. Thanks again.&lt;/p&gt;

</description>
      <category>help</category>
    </item>
  </channel>
</rss>
