<?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: Emad Mokhtar</title>
    <description>The latest articles on DEV Community by Emad Mokhtar (@emadmokhtar).</description>
    <link>https://dev.to/emadmokhtar</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%2F40291%2F969edb10-62b7-444b-a8db-f2e68f3c630d.jpg</url>
      <title>DEV Community: Emad Mokhtar</title>
      <link>https://dev.to/emadmokhtar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/emadmokhtar"/>
    <language>en</language>
    <item>
      <title>Buddy Fit: The Ultimate AI Weightlifting Companion Powered by Dr. Mike Israetel and Jeff Nippard</title>
      <dc:creator>Emad Mokhtar</dc:creator>
      <pubDate>Sun, 10 Nov 2024 12:50:14 +0000</pubDate>
      <link>https://dev.to/emadmokhtar/buddy-fit-the-ultimate-weightlifting-companion-powered-by-dr-mike-israetel-and-jeff-nippard-1boe</link>
      <guid>https://dev.to/emadmokhtar/buddy-fit-the-ultimate-weightlifting-companion-powered-by-dr-mike-israetel-and-jeff-nippard-1boe</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pgai"&gt;Open Source AI Challenge with pgai and Ollama &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Are you tired of guessing what to do in the gym? Do you want to maximize your weightlifting results? Look no further than Buddy Fit, the ultimate weightlifting companion powered by the expertise of &lt;a href="https://www.youtube.com/@RenaissancePeriodization" rel="noopener noreferrer"&gt;Dr. Mike Israetel&lt;/a&gt; and &lt;a href="https://www.youtube.com/@JeffNippard" rel="noopener noreferrer"&gt;Jeff Nippard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/@RenaissancePeriodization" rel="noopener noreferrer"&gt;Dr. Mike Israetel&lt;/a&gt; and &lt;a href="https://www.youtube.com/@JeffNippard" rel="noopener noreferrer"&gt;Jeff Nippard&lt;/a&gt; are two of the most respected voices in the weightlifting community, with millions of followers on YouTube. Their advice has helped countless weightlifters achieve success and reach their goals.&lt;/p&gt;

&lt;p&gt;But how do you know what to do in the gym? That's where Buddy Fit comes in. My project uses the expertise of &lt;a href="https://www.youtube.com/@RenaissancePeriodization" rel="noopener noreferrer"&gt;Dr. Mike Israetel&lt;/a&gt; and &lt;a href="https://www.youtube.com/@JeffNippard" rel="noopener noreferrer"&gt;Jeff Nippard&lt;/a&gt; to provide personalized weightlifting advice. Whether you're a beginner or an advanced lifter, Buddy Fit has got you covered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Web API: Get access to data and science-based advice for weightlifters&lt;/li&gt;
&lt;li&gt;Chatbot: Engage with users and get personalized advice and guidance&lt;/li&gt;
&lt;li&gt;CLI: Interact with the bot and access features from the command line&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Improved weightlifting results&lt;/li&gt;
&lt;li&gt;Personalized advice and guidance&lt;/li&gt;
&lt;li&gt;Access to data and science-based advice&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  &lt;a href="http://18.197.16.120" rel="noopener noreferrer"&gt;Chatbot&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2a8l2q1if4m8ycc667m3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2a8l2q1if4m8ycc667m3.png" alt="Asking Buddy Fit chatbot " width="800" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuykt7nvbixdqzy2jjols.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuykt7nvbixdqzy2jjols.png" alt="Asking Buddy Fit chatbot " width="800" height="789"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  CLI
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Example 1
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;buddyfit &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"I want to maximize my muscle gain and going to the gym 4 times per week. Can you build a plan for me? I don't want to spend long time in the gym"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sure! Here's a sample 4-day upper and lower body split that focuses on maximizing muscle gain while keeping your gym sessions efficient. Each workout should take about 45-60 minutes.

Day 1: Upper Body (Focus on Chest &amp;amp; Shoulders)

Bench Press: 3 sets of 8-10 reps
Incline Dumbbell Press: 3 sets of 8-10 reps
Overhead Dumbbell Press: 3 sets of 8-10 reps
Dumbbell Lateral Raises: 3 sets of 12-15 reps
Tricep Dips: 3 sets of 8-10 reps
Day 2: Lower Body (Focus on Quads &amp;amp; Hamstrings)

Squats: 3 sets of 8-10 reps
Romanian Deadlifts: 3 sets of 8-10 reps
Leg Press: 3 sets of 8-10 reps
Lunges: 3 sets of 10 reps per leg
Calf Raises: 3 sets of 12-15 reps
Day 3: Upper Body (Focus on Back &amp;amp; Arms)

Pull-Ups or Lat Pulldowns: 3 sets of 8-10 reps
Bent Over Rows: 3 sets of 8-10 reps
Face Pulls: 3 sets of 12-15 reps
Barbell Bicep Curls: 3 sets of 10-12 reps
Skull Crushers: 3 sets of 10-12 reps
Day 4: Lower Body (Focus on Glutes &amp;amp; Hamstrings)

Deadlifts: 3 sets of 8-10 reps
Glute Bridges: 3 sets of 10-12 reps
Leg Curls: 3 sets of 10-12 reps
Step-Ups: 3 sets of 10 reps per leg
Seated Calf Raises: 3 sets of 12-15 reps
Notes:

• Always warm up before starting your workouts. • Aim to increase weights gradually while maintaining proper form. • Incorporate rest intervals of 60-90 seconds between sets. • Consider deloading every 4-6 weeks as needed to prevent fatigue. • Adjust exercises based on your comfort and experience level.

This plan should help you build muscle efficiently without lengthy gym sessions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Example 2
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;buddyfit &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"can you make a plan to target a bigger biceps?"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;To target bigger biceps, you can follow this workout plan that emphasizes exercises to develop both heads of the biceps and enhance their peak. Here's a suggested weekly plan:

Biceps Workout Plan:

Day 1: Focus on Elbow Flexion and Supination

Barbell Curl - 4 sets of 8-12 reps
Focus on keeping your elbows close to your body.
Hammer Curl - 3 sets of 10-12 reps
This targets the brachialis and adds size to your biceps.
Concentration Curl - 3 sets of 10-12 reps
Ensure proper form to maximize peak contraction at the top.
Day 2: Supination Emphasis

Incline Dumbbell Curl - 4 sets of 8-10 reps
Lying back helps emphasize the length of the biceps.
Reverse Curl - 3 sets of 10-12 reps
This targets the forearms and biceps, promoting overall arm growth.
Zottman Curl - 3 sets of 10-12 reps
Performs both supination and pronation to hit different muscle fibers.
Day 3: Complete Arm Day (including biceps)

Close-Grip Bench Press - 4 sets of 8-10 reps
While primarily a triceps exercise, it also engages the biceps.
Cable Curl - 3 sets of 10-15 reps
Provides constant tension throughout the movement.
Fat Gripz or Grip Training - 3 sets of 10-12 reps
Improves grip strength, which helps in all lifting.
Day 4: Recovery &amp;amp; Stretching

Focus on active recovery through light cardio and stretching, especially for the arms.
Tips for Progress:

Aim to progressively overload the muscles by increasing weight or reps over time.
Ensure you're using proper form to effectively target the biceps and avoid injury.
Don't neglect proper nutrition, including enough protein to support muscle growth.
Rest and recovery are crucial; allow at least 48 hours before targeting the same muscle group again.
By maintaining this plan and focusing on targeted exercises, you should see an increase in bicep size and peak over time.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tools Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Language: Golang and Vue.js&lt;/li&gt;
&lt;li&gt;Database: TimescaleDB Cloud&lt;/li&gt;
&lt;li&gt;AI: OpenAI's &lt;code&gt;text-embedding-3-small&lt;/code&gt; and &lt;code&gt;gpt-4o-mini&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;TimescaleDB Extensions: &lt;code&gt;pgai&lt;/code&gt; and &lt;code&gt;pgai Vectorizer&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Using TimescaleDB Cloud with its AI features made it easier to build Buddy Fit, an API bot that uses the expertise of Dr. Mike Israetel and Jeff Nippard to provide personalized weightlifting advice. The vectorization of existing data in TimescaleDB Cloud was a breeze, thanks to the ease of installation and use of the extension that automates this process. Additionally, Golang concurrency helped streamline data preparation, making it possible to preprocess and prepare data before ingesting it into TimescaleDB Cloud.&lt;/p&gt;

&lt;p&gt;The combination of TimescaleDB Cloud's AI features and vectorization capabilities, along with Golang concurrency, greatly simplified the development process and enabled us to focus on creating a high-quality API bot that provides valuable insights and advice to weightlifters.&lt;/p&gt;

&lt;p&gt;As a seasoned backend expert, I've had the opportunity to focus on the server-side architecture and implementation of our web application. While I'm confident in our frontend capabilities, I believe there are still many exciting opportunities for growth and improvement on the backend side. For those interested in exploring further, please look at my open-source repository on &lt;a href="https://github.com/EmadMokhtar/BuddyFit" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, where you can find more information about the project's technical details and architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prize categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Vectorizer Vibe.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;Please note that Dr. Mike Israetel and Jeff Nippard are not directly involved in the development or operation of Buddy Fit. While their advice and expertise have been incorporated into the project, they do not endorse or guarantee the accuracy or effectiveness of the advice provided by Buddy Fit.&lt;/p&gt;

&lt;p&gt;It's also important to note that weightlifting and nutrition are complex topics that require individualization and personalized attention. The advice provided by Buddy Fit should not be considered as 100% accurate or reliable, and users should consult a qualified healthcare professional or certified personal trainer before making any changes to their training or nutrition plan.&lt;/p&gt;

&lt;p&gt;Users should also be aware that the advice provided by Buddy Fit is based on data and science, but it's not a substitute for professional advice or guidance. It's always best to consult a qualified expert before making any decisions that may impact your health or well-being.&lt;/p&gt;

&lt;p&gt;By using Buddy Fit, you acknowledge that you understand and accept these limitations, and you agree to use the advice provided by Buddy Fit at your own risk.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>pgaichallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
    <item>
      <title>I tried Nodejs and I like it</title>
      <dc:creator>Emad Mokhtar</dc:creator>
      <pubDate>Mon, 28 Jan 2019 16:22:15 +0000</pubDate>
      <link>https://dev.to/emadmokhtar/i-tried-nodejs-and-i-like-it-4a1o</link>
      <guid>https://dev.to/emadmokhtar/i-tried-nodejs-and-i-like-it-4a1o</guid>
      <description>&lt;p&gt;I had a chance to try Node.js framework last month; I decided to build REST APIs using &lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt; and &lt;a href="https://expressjs.com/"&gt;express.js&lt;/a&gt;. Regularly I'm using JavaScript in my daily work besides using &lt;a href="https://www.djangoproject.com/"&gt;Django&lt;/a&gt; to build Web Applications, but many times I need to develop a front-end feature, This when I need to use JavaScript. I'm always using JavaScript to write front-end logic, but I never wrote back-end logic using it. I took the challenge to develop a simple REST APIs using &lt;a href="https://expressjs.com/"&gt;express.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development environment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To start developing, I need to get my machine ready, so I installed &lt;a href="https://nodejs.org/en/"&gt;node.js&lt;/a&gt; via Homebrew (I'm a macOS user), it is quite easy, and node.js installation comes with &lt;a href="https://www.npmjs.com/"&gt;npm&lt;/a&gt; "npm is a package manager for node.js it is like &lt;a href="https://pypi.org/"&gt;pypi&lt;/a&gt; or pip for Python". I used &lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt; as a text editor. Now I'm ready to go 💪🏻.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I've learned?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While building the REST APIs, I've learned many things, mainly that I'm experiencing the new development stack. Let's see the parts I've learned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt; is a back-end engine; it is using Google Chrome V8 JavaScript engine to run JavaScript code on your machine instead of a browser. Node is not a language it is an engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Express.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://expressjs.com/"&gt;Express.js&lt;/a&gt; is a web framework that uses Node.js; it is a minimalist web framework "micro-framework" that receives requests and replies with responses, micro-framework means it doesn't have ORM, template engine, etc. You can feel it is like &lt;a href="http://flask.pocoo.org/"&gt;Python Flask Framework&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ORM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I tried to build my models using &lt;a href="http://docs.sequelizejs.com/"&gt;sequelize JS&lt;/a&gt; as I'm more familiar with PostgreSQL DB engine, but it turns to be so tricky to implement my feature using RDBMS system. I switched ORM to &lt;a href="https://mongoosejs.com/"&gt;Mongoose JS&lt;/a&gt;, and my database engine to &lt;a href="https://www.mongodb.com/"&gt;MongoDB&lt;/a&gt;. I was wrong from the beginning, but after switching to &lt;a href="https://www.mongodb.com/"&gt;MongoDB&lt;/a&gt;, it is much easier to implement the feature, as it is a preferred database engine in Node.js community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asynchronous Programming 🤔&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Getting used to the nature of &lt;a href="https://developers.google.com/web/fundamentals/primers/promises"&gt;JavaScript asynchronous "Promises"&lt;/a&gt; was a big challenge for me, I'm used to synchronous programming; thus it was a big paradigm shift 🤯. On a daily basis, I'm using &lt;a href="https://www.djangoproject.com/"&gt;Django&lt;/a&gt;, and it is not asynchronous by default &lt;a href="https://www.aeracode.org/2018/06/04/django-async-roadmap/"&gt;"there is a roadmap for Django to be Async"&lt;/a&gt;. &lt;a href="https://docs.python.org/3.5/library/asyncio.html"&gt;Python has asynchronous programming since version 3.5&lt;/a&gt;, but frameworks need to adapt it to become asynchronous as well, like &lt;a href="https://github.com/ross/requests-futures"&gt;requests-future&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts 🧐&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I enjoyed using Node.js; the community is excellent, there is nothing you can't find a package for on NPM, it is such an active community, but what I don't like in the community is the quality of tutorials, most of the tutorials targeting starters or naive nodejs developers, yes we need tutorials for starters and naive nodejs developers, but what about the advanced tutorials.&lt;/p&gt;

&lt;p&gt;The async programming challenge was an eye-opener for me; I need to dig deep in this way of programming especially in Python. I'm lucky that there is a video course on &lt;a href="https://training.talkpython.fm/courses/explore_async_python/async-in-python-with-threading-and-multiprocessing"&gt;Talk Python training about asynchronous in Python&lt;/a&gt;, and I think I will watch it.&lt;/p&gt;

</description>
      <category>python</category>
      <category>node</category>
    </item>
    <item>
      <title>Difference between `==` and `is` in Python, and when to use each of them</title>
      <dc:creator>Emad Mokhtar</dc:creator>
      <pubDate>Mon, 28 Jan 2019 16:14:49 +0000</pubDate>
      <link>https://dev.to/emadmokhtar/difference-between--and-is-in-python-and-when-to-use-each-of-them-357h</link>
      <guid>https://dev.to/emadmokhtar/difference-between--and-is-in-python-and-when-to-use-each-of-them-357h</guid>
      <description>&lt;p&gt;In Python there are many &lt;a href="https://realpython.com/python-operators-expressions/#comparison-operators"&gt;comparison operators&lt;/a&gt;; you always use them to check something in your code and let your code take decision according to the comparison&lt;/p&gt;

&lt;p&gt;In this article, I want to go deep with two operators &lt;code&gt;==&lt;/code&gt; to check equality, and &lt;code&gt;is&lt;/code&gt; to check identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The &lt;code&gt;==&lt;/code&gt; operator
&lt;/h2&gt;

&lt;p&gt;The equality comparison operator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we are checking whether the value of int &lt;strong&gt;1&lt;/strong&gt; is an equal value of int &lt;strong&gt;1&lt;/strong&gt;, in other words, we are checking the values equality here.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="c1"&gt;# Wooot
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we are checking if the values of 2 objects are equal. They are not equal. Classes in Python 🐍 have &lt;a href="https://wiki.python.org/moin/DunderAlias"&gt;dunder methods&lt;/a&gt; to implement special logic of magic.&lt;/p&gt;


&lt;p&gt;&lt;a href="https://giphy.com/gifs/shia-labeouf-12NUbkX6p4xOO4"&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example,  &lt;code&gt;__init__()&lt;/code&gt; is dunder method to initiate a new object or the class constructor. For our example above, there is a dunder method used to check the equality which is  &lt;code&gt;__eq__()&lt;/code&gt; , if we implement it correctly, the expression in the code about should work.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__eq__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;another_number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;another_number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;another_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;another_number&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="bp"&gt;True&lt;/span&gt; 
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All right, now our class has a correct equality logic. The equality logic is implemented in &lt;code&gt;__eq__&lt;/code&gt; method. It is also implemented in Python built-in types like Integers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pprint&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pprint&lt;/span&gt;

&lt;span class="c1"&gt;# 1 is object of int class
&lt;/span&gt;&lt;span class="nf"&gt;pprint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getmembers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;pprint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getmembers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The &lt;code&gt;is&lt;/code&gt; operator
&lt;/h2&gt;

&lt;p&gt;The identity check operator&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;none_obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;none_obj&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;number_one&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;number_one&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Python, every object created will store a reference to it, like in the above code &lt;strong&gt;none_obj&lt;/strong&gt; which is storing a reference to &lt;strong&gt;None&lt;/strong&gt; , and &lt;strong&gt;number_one&lt;/strong&gt; object is storing a reference to &lt;strong&gt;1&lt;/strong&gt;. Let’s examine how this is done by Python.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;none_obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;none_obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;4304631824&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;4304631824&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number_one&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;4304948352&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;4304948352&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you create a new variable that stores an object or value, this variable name stores a reference to it, so if you create another variable to store the same object, Python stores a pointer to this object instead of creating a new one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4520963656&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4520963656&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Technically speaking, when you check the identity, Python checks &lt;code&gt;id(a) == id(b)&lt;/code&gt;, which means:&lt;br&gt;
Do objects &lt;strong&gt;a&lt;/strong&gt; and &lt;strong&gt;b&lt;/strong&gt; refer to the same object? So the answer will be &lt;strong&gt;True&lt;/strong&gt; if they refer to the same object.&lt;/p&gt;

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

&lt;p&gt;If you need to check the value equality, use the &lt;code&gt;==&lt;/code&gt; operator and if you need to check whether 2 objects are the same, use &lt;code&gt;is&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Happy Pythoning  😉&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>Advice to Junior Developers</title>
      <dc:creator>Emad Mokhtar</dc:creator>
      <pubDate>Wed, 11 Apr 2018 14:08:29 +0000</pubDate>
      <link>https://dev.to/emadmokhtar/advice-to-junior-developers-4hhk</link>
      <guid>https://dev.to/emadmokhtar/advice-to-junior-developers-4hhk</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Femadmokhtar.com%2Fimages%2Foziel-gomez-555955-unsplash.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Femadmokhtar.com%2Fimages%2Foziel-gomez-555955-unsplash.jpg" alt="journey" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One day I answered &lt;a href="https://www.quora.com/What-is-the-best-advice-you-can-give-to-a-junior-programmer/answer/Emad-Mokhtar" rel="noopener noreferrer"&gt;What is the best advice you can give to a junior programmer?&lt;/a&gt; question on Quora.com. I was shocked that my answer got many upvotes, so I thought to share my answer to this question on my blog.&lt;/p&gt;

&lt;p&gt;First, let me acknowledge you that my answers are just my experience, what I missed during my career as software developer, and I wished someone told me this advice.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Be humble be foolish be patient, you have a long journey of learning, so keep learning.&lt;/strong&gt; Technologies are changing so fast, so fast that you can't master everything, but you need to read about everything in software development, read blogs, news, etc. Invest your learning time in what you'll be master in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don’t be afraid to fail.&lt;/strong&gt; Making mistakes is a part of the learning, so please don’t be afraid to make mistakes, but learn from them. Even great software developers got fired, made mistakes, and they feel down, but what makes them great that they get up and learn from mistakes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/" rel="noopener noreferrer"&gt;Read about The Ten Commandments of Egoless Programming &lt;/a&gt;&lt;/strong&gt; You will need these commandments during your journey, They helped me in &lt;a href="http://www.emadmokhtar.com/being-a-team-member.html" rel="noopener noreferrer"&gt;my first job with a team&lt;/a&gt; and they are so nice that I want to print them as a poster and hang it on my home office.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Read other developers code.&lt;/strong&gt; Github is your friends, so pick some projects and start to read their codes, when I tried to contribute to Django project for the first time, I was not understanding anything from the code, and you'll feel the same first time, don't worry ask someone (Check the next point) and learn to read someone else code. One day during my tech interview the interviewee told me that what you are missing it reading Python code, please go read Python source code, dig deep into it, and learn.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ask, ask, ask, ask, and ask.&lt;/strong&gt; Yes, like I said in point number 1 be humble, so keep asking your mates and other programmer and learn from them, and listen and evaluate after that, don't take everyone's advice with research, please don't do research to prove they are wrong, do the research to get second opinion and learn more about it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;THERE IS NO ROCKSTAR/NINJA/GURU developer&lt;/strong&gt; it is a marketing word, and they are not true, nice programmers are making mistakes and they are not superheroes, there are some companies that advertise they need Ninja, Rockstar or Guru developer, no way they do not exist and they won't, developer are human who make mistakes, learn, and improve. In other words, it is a &lt;a href="https://en.wikipedia.org/wiki/Software_craftsmanship" rel="noopener noreferrer"&gt;craftsmanship&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Read books about the career beside learning the tools/language/framework, programming is not about writing code only.&lt;/strong&gt; Here is my list of &lt;a href="http://www.emadmokhtar.com/how-do-i-learn.html" rel="noopener noreferrer"&gt;books to read&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Write a blog.&lt;/strong&gt; Start a blog and write what you have learned during your day, and write is as your source of knowledge. I started this one for this purpose and many times I'll return to my blog to get the information I need.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contribute to open source software.&lt;/strong&gt; You will learn a lot from contributing to open source project, so you will learn, helping the community, and the maintainers will be happy. Start small and learn more about the project, start with a framework/tool you are using, there are so many ways to contribute to open source projects, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Report a bug.&lt;/li&gt;
&lt;li&gt;Reproduce the bug, and write how to reproduce it on the ticket.&lt;/li&gt;
&lt;li&gt;Write a documentation.&lt;/li&gt;
&lt;li&gt;Translate the software or the documentation.&lt;/li&gt;
&lt;li&gt;Write some code to fix a bug or implement a new feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enjoy the journey.&lt;/strong&gt; You need to enjoy the journey, it won't be an easy one, and you will have some difficult times, but remember to be patient, and like what you are doing to keep going.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;NOTE: This is was originally posted on &lt;a href="http://emadmokhtar.com/" rel="noopener noreferrer"&gt;my blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>developer</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Let's build it</title>
      <dc:creator>Emad Mokhtar</dc:creator>
      <pubDate>Sun, 04 Mar 2018 09:00:00 +0000</pubDate>
      <link>https://dev.to/emadmokhtar/lets-build-it--4fbn</link>
      <guid>https://dev.to/emadmokhtar/lets-build-it--4fbn</guid>
      <description>

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BCqcCgTp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.emadmokhtar.com/images/james-pond-185593-unsplash.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BCqcCgTp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.emadmokhtar.com/images/james-pond-185593-unsplash.jpg" alt="idea"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://unsplash.com/@shotbyjamespond?utm_medium=referral&amp;amp;utm_campaign=photographer-credit&amp;amp;utm_content=creditBadge"&gt;unsplash-logo&lt;br&gt;
James Pond&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Discovery
&lt;/h1&gt;

&lt;p&gt;After many years of developing web applications, I found my passion is building Web APIs. so why I like it, I like it because I think it's giving your application a power to integrate with other apps (desktop, mobile apps, etc.), other devices (Amazon Dot, Google Home, etc.),  sensors (RaspberryPi, Arduino, etc.), and bots (Slack, Telegram, Facebook Messanger, etc.).&lt;br&gt;
Can you feel the power that Web API that can add to your apps?&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's build something
&lt;/h1&gt;

&lt;p&gt;After I found my passion and start to search for a project to ably what I like and keep developing it. I found that there is no Web API for &lt;a href="https://en.wikipedia.org/wiki/Tafsir"&gt;Quran Tafseer/Translation&lt;/a&gt;. What can Quran Tafseer API do for developers? If you want to develop an application for Quran and you want to provide a Tafseer/Translation to the application users, you need to gather the information from more than one source. I found most of the existing applications done it and after that work, app developers will keep this information available to their app only, so I thought of doing this work for the community and provide Tafseer/Translation for free as Web API.&lt;/p&gt;

&lt;h1&gt;
  
  
  Stages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Stage I
&lt;/h2&gt;

&lt;p&gt;I built the models and the API endpoints using &lt;a href="https://www.djangoproject.com/"&gt;Django&lt;/a&gt; and &lt;a href="http://www.django-rest-framework.org/"&gt;Django REST Framework&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage II
&lt;/h2&gt;

&lt;p&gt;I started to search for the sources I can get the Tafseer/Translation from, I found two sources, one source provide .txt file and the second one is not easy to get, but I used &lt;a href="https://scrapy.org/"&gt;Scrapy&lt;/a&gt; to get the Tafseer/Translation for their web app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage III
&lt;/h2&gt;

&lt;p&gt;After gathering the Tafseer/Translation I deploy the application,  the application and its database were deployed on Heroku, but after 2 days Heroku sent me an email that I reached the maximum records for free tier, so I moved the database to AWS RDS.&lt;/p&gt;

&lt;h1&gt;
  
  
  Future
&lt;/h1&gt;

&lt;p&gt;My future plan is to make this Web API fast, easy to use, and used globally by many developers.&lt;/p&gt;

&lt;h1&gt;
  
  
  Help
&lt;/h1&gt;

&lt;p&gt;If you want to help, please spread the words in your community and give me your feedback, and if you want to contribute to the project please visit &lt;a href="https://github.com/emadmokhtar/tafseer_api#how-to-contribute-and-help-the-project"&gt;How to contribute guide&lt;/a&gt;&lt;/p&gt;


</description>
      <category>sideprojects</category>
      <category>django</category>
      <category>python</category>
    </item>
    <item>
      <title>Being a Team member</title>
      <dc:creator>Emad Mokhtar</dc:creator>
      <pubDate>Sat, 10 Feb 2018 09:00:00 +0000</pubDate>
      <link>https://dev.to/emadmokhtar/being-a-team-member--4fon</link>
      <guid>https://dev.to/emadmokhtar/being-a-team-member--4fon</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwww.emadmokhtar.com%2Fimages%2Fkaren-maes-310484.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwww.emadmokhtar.com%2Fimages%2Fkaren-maes-310484.jpg" alt="Team" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://unsplash.com/@karen1974?utm_medium=referral&amp;amp;utm_campaign=photographer-credit&amp;amp;utm_content=creditBadge" rel="noopener noreferrer" title="Download free do whatever you want high-resolution photos from Karen Maes"&gt;&lt;span&gt;unsplash-logo&lt;/span&gt;&lt;span&gt;Karen Maes&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Start
&lt;/h2&gt;

&lt;p&gt;In September 2017 I left my job and my life in &lt;a href="https://en.wikipedia.org/wiki/Kuwait" rel="noopener noreferrer"&gt;Kuwait&lt;/a&gt; and traveled to the &lt;a href="https://en.wikipedia.org/wiki/Netherlands" rel="noopener noreferrer"&gt;Netherlands&lt;/a&gt; to join &lt;a href="https://veneficus.nl/en/" rel="noopener noreferrer"&gt;Veneficus&lt;/a&gt; as Software developer, one of the reasons I moved to the Netherlands is to work in a team and I started to feel being a &lt;a href="//{filename}/Solo%20Developer.md"&gt;solo developer&lt;/a&gt; is bad for my career.&lt;/p&gt;

&lt;p&gt;I joined a team of 7 developers mixed between full-time and part-time, and start to fell there are some missing skills I need to develop, and yes I was correct I worked alone for almost 7 years. What is it mean working alone? it means no need for communication, no need for development plans, no need for technical debates, no need to manage your time or other team member's time. In the beginning, I feel so bad and stressed with that change, to be honest, I made many mistakes, but with a growth mindset you need to learn from mistakes and grow and fix them, os what I did?&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Help!
&lt;/h2&gt;

&lt;p&gt;First, I asked for community help, I went to &lt;a href="https://www.pythonistacafe.com/" rel="noopener noreferrer"&gt;PythonistaCafe&lt;/a&gt; forum and posted my situation and the members gave me great answers regarding my situation, and one member point me to something very useful and first time to know it, which is the Egoless Developer and The 10 Commandments of Egoless Programming, they pointed me to links to posts to read.&lt;/p&gt;

&lt;p&gt;Here are links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/" rel="noopener noreferrer"&gt;Jeff Atwood post about egoless developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.c2.com/?EgolessProgramming" rel="noopener noreferrer"&gt;EgolessPRogramming C2.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Team Help!
&lt;/h2&gt;

&lt;p&gt;Second, I asked my team members, and my manager, yes I asked my team for help, and I found out they really helped and they understand my problem. I found out I'm not alone, we as developers have many in common issues, and it is addressed in books and community for many years.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;Please don't hesitate to ask for help from the community or your teammates, yeah it is not an easy step to take, but it is not bad and hard as you think, it is easy and you'll get good benefits from it 😉. You find you are not lone and many developers in your community faced the same issues, so the community can help you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Last but not least, &lt;a href="https://veneficus.nl/en/working-at/" rel="noopener noreferrer"&gt;Veneficus is hiring&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>work</category>
      <category>netherlands</category>
    </item>
    <item>
      <title>Shinny New Tools</title>
      <dc:creator>Emad Mokhtar</dc:creator>
      <pubDate>Mon, 10 Jul 2017 12:00:00 +0000</pubDate>
      <link>https://dev.to/emadmokhtar/shinny-new-tools--4dbm</link>
      <guid>https://dev.to/emadmokhtar/shinny-new-tools--4dbm</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MVVBU1Dj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/http://www.emadmokhtar.com/images/felix-russell-saw-167176.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MVVBU1Dj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/http://www.emadmokhtar.com/images/felix-russell-saw-167176.jpg" alt="Old Tools" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://unsplash.com/@frsphoto?utm_medium=referral&amp;amp;utm_campaign=photographer-credit&amp;amp;utm_content=creditBadge"&gt;&lt;br&gt;
Felix Russell-Saw&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One day I realized that Microsoft technologies are not for what I'm looking for. what I'm looking for is working in startup that developing its own product like Instagram, Shopify, or Pinterest. So I've done some research and I found that Microsoft technologies are not made for this purpose, Microsoft technologies made for enterprises, I worked with Microsoft Dynamics AX, Microsoft SharePoint, ASP.NET WebForms, and ASP.NET Web Services you won't find a startup work with these or built their business around these kind of products, so I start to research for another technology to use.&lt;/p&gt;

&lt;p&gt;After long time of research and Q&amp;amp;A with my friend &lt;a href="https://github.com/burhan"&gt;Burhan&lt;/a&gt;, I switched to &lt;a href="https://www.python.org/"&gt;Python&lt;/a&gt;, I didn't pick &lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt; or &lt;a href="http://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;, because I don't like to pick a new shinny tool/framework for sake of it's new, I picked Python and Django one of it's web framework. I found during my research many people recommended Node.js because it's the new thing, again I don't like to pick the new shinny tool, this is common between developer community, developer will be proud if someone ask Which language/framework are you using? and the developer answer is the new shinny MV- JavaScript framework or Z lang the best programming language on planet.&lt;/p&gt;

&lt;p&gt;After I picked Python and Django I found &lt;a href="https://www.caktusgroup.com/"&gt;Caktus Group&lt;/a&gt; posted nice blog post with &lt;a href="https://www.caktusgroup.com/blog/2016/12/14/django-boring-or-why-tech-startups-should-use-django/"&gt;Django is Boring, or Why Tech Startups (Should) Use Django&lt;/a&gt; title, please read the post and I'll tell you again why I picked Python and I'm loving it.&lt;/p&gt;

&lt;h2&gt;
  
  
  I picked and loving Python/Django and I'll tell you why
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Community:&lt;/strong&gt; Python community are very welcoming for anyone from any level for anywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; Python docs and Django docs are enough to get start or to be expert. They are taking care of details and issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mature:&lt;/strong&gt; Python and Django are mature language and framework, they already faced many issues and it's fixed or implemented.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packages:&lt;/strong&gt; Python packages and Django apps are great way to implement or fill missing thing in the language or framework, you will find more than one package/app to use and you'll start to pick one based on your requirements. For example if you want to build simple web app or web api, you can pick &lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt; instead of Django and you are good to go.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So my advise is to pick what will be the best for you based on your requirements and needs. My needs are learning new language that will give me a way to build products and it has a strong community around it, because when you will face an obstacle or an issue, community will help you to pass or fix it.&lt;/p&gt;

&lt;p&gt;Note: I'm not writing this to say Node.js or RoR are bad or don't pick them. No, when I was searching for new language, I found Python and Django are the best language and framework that fill my needs, maybe now Node.js is the best based on your needs, maybe RoR, maybe anther language or framework, I don't know you need to do some research and pick one by yourself, but please don't pick thing because it's a new shinny tool, and it's the new Lamborghini, and if you don't know what to pick, please take Python and you won't regret it 😉.&lt;/p&gt;

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