<?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: Hanane Kacemi</title>
    <description>The latest articles on DEV Community by Hanane Kacemi (@hananekacemi).</description>
    <link>https://dev.to/hananekacemi</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%2F109577%2Fc9e80cd1-277b-4ac2-bbb2-8c79d5251b1f.jpeg</url>
      <title>DEV Community: Hanane Kacemi</title>
      <link>https://dev.to/hananekacemi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hananekacemi"/>
    <language>en</language>
    <item>
      <title>TIL: using --no-deps with docker compose</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Sat, 14 Dec 2024 22:14:19 +0000</pubDate>
      <link>https://dev.to/hananekacemi/til-using-no-deps-with-docker-compose-295l</link>
      <guid>https://dev.to/hananekacemi/til-using-no-deps-with-docker-compose-295l</guid>
      <description>&lt;p&gt;Currently, I am working on a Laravel project with two containers: one for the web app and the other for the database. &lt;/p&gt;

&lt;p&gt;Previously, whenever I needed to update the image used by the container hosting the web app, I had to stop both containers using &lt;code&gt;docker compose stop app db&lt;/code&gt;, remove them with &lt;code&gt;docker compose rm -v app db&lt;/code&gt;, execute &lt;code&gt;docker compose down&lt;/code&gt;, and finally rebuild to apply changes to the desired container using &lt;code&gt;docker compose up --build -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As you might guess, this process required me to export the database, even if I only wanted to apply changes to the app container.&lt;/p&gt;

&lt;p&gt;Recently, while watching some tutorials related to Docker and Docker Compose, I learned about the --no-deps option. This option allows us to apply changes to one container without affecting the other dependent containers.&lt;/p&gt;

&lt;p&gt;Now, whenever I want to recreate the app container using a new image, I simply run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker compose stop app&lt;br&gt;
docker rm app &lt;br&gt;
docker compose up -d --no-deps app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There's no need to export the database, remove the database container, or import it again. This process is much easier for me now.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>todayilearned</category>
      <category>docker</category>
    </item>
    <item>
      <title>Notes about design patterns</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Sat, 10 Dec 2022 22:36:08 +0000</pubDate>
      <link>https://dev.to/hananekacemi/notes-about-design-patterns-mjj</link>
      <guid>https://dev.to/hananekacemi/notes-about-design-patterns-mjj</guid>
      <description>&lt;p&gt;Design patterns are practical proven solutions to recurring design problems. They are blueprints not algorithms or code to solve a common software problems.&lt;/p&gt;

&lt;p&gt;It's important to note that it won't be so simple to look at a software design problem and automatically know which design pattern to use.&lt;/p&gt;

&lt;p&gt;Design patterns are categorized into 3 groups : &lt;br&gt;
&lt;strong&gt;Creational Patterns :&lt;/strong&gt; provide mecanisms for object creation which increase flexibility and reuse of existing code. Example : Factory Pattern, Builder Pattern, Singleton...&lt;br&gt;
&lt;strong&gt;Structural Patterns :&lt;/strong&gt; Describe how objects are connected to each other, example : Adapter Pattern, Decorator Pattern, Facade...&lt;br&gt;
&lt;strong&gt;Behavioral Patterns :&lt;/strong&gt; how objects distribute work and how they work towards a common goal.&lt;/p&gt;

&lt;p&gt;Design patterns help to have a common design vocabulary between developers. Rather than having to explain the details of a design solution you can simplify the discussion by having a suggestive word to describe it.&lt;/p&gt;

&lt;p&gt;One of the design principles is to identify the aspects of application that varies and separate them from what stays the same. With this approach we won't have to make changes in different places when a new request is made by the client, that minimize the amount of bugs that can be introduced by the change and it makes the code flexible.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;1. Strategy pattern : *&lt;/em&gt;&lt;br&gt;
Define a family of algorithms encapsulates each other and make them interchangeable. Strategy lets the algorithm vary independently from client that use it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0o1_LoY1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fr5vl8yd4zy215lrhli5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0o1_LoY1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fr5vl8yd4zy215lrhli5.png" alt="Strategy-pattern-example" width="880" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>designpatterns</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Symfony &amp; Doctrine: Part 5</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Thu, 20 Jan 2022 12:20:51 +0000</pubDate>
      <link>https://dev.to/hananekacemi/symfony-doctrine-part-5-3kk3</link>
      <guid>https://dev.to/hananekacemi/symfony-doctrine-part-5-3kk3</guid>
      <description>&lt;p&gt;Doctrine has built-in methods like &lt;strong&gt;findAll&lt;/strong&gt;, &lt;strong&gt;findBy&lt;/strong&gt;…. For specific needs these functions may not be sufficient, that’s why we can write custom queries with multiples criteria (with join, where,order by … clauses).&lt;/p&gt;

&lt;p&gt;Doctrine has its own language, like SQL, to write queries. It's called &lt;strong&gt;DQL (Doctrine Query Language)&lt;/strong&gt;, the difference is that in SQL we use Tables &amp;amp; columns and in DQL we use classes and properties. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QueryBuilder&lt;/strong&gt; object is used to create DQL query, to have a list of jobs that are not expired, we can write a custom query in JobRepository like this :&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%2Fuploads%2Farticles%2Fvyk9j96spnnp2zio55z4.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%2Fuploads%2Farticles%2Fvyk9j96spnnp2zio55z4.png" alt="JobRepository getActiveJobs"&gt;&lt;/a&gt;&lt;br&gt;
DQL uses prepared statement which prevents from &lt;strong&gt;SQL injection&lt;/strong&gt;. Instead of concatenating values to the query we use &lt;strong&gt;Placeholder&lt;/strong&gt; (&lt;code&gt;-&amp;gt;andWhere('j.exampleField = :val')&lt;/code&gt;) and we pass the value via &lt;em&gt;setParameter&lt;/em&gt; (&lt;code&gt;-&amp;gt;setParameter('val', $value)&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;To get result(s) we always call &lt;em&gt;getQuery() _function and then we either call _getResult()&lt;/em&gt; to return many rows or &lt;em&gt;getOneOrNullResult()&lt;/em&gt; to have a single object.&lt;/p&gt;

&lt;p&gt;Now, let's assume that we want to get the category of each job. We have a &lt;strong&gt;ManyToOne relationship&lt;/strong&gt; between Job and Category (Many jobs belong to one Category). We can easily have the category using this syntax in twig : &lt;br&gt;
&lt;code&gt;{{ job.category.name }}&lt;/code&gt;&lt;br&gt;
But, check the profiler -&amp;gt; Doctrine, we have multiple queries ! &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%2Fuploads%2Farticles%2Fgo58r46cqqp6vbfsz706.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%2Fuploads%2Farticles%2Fgo58r46cqqp6vbfsz706.png" alt="n+1 performance problem"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We expected to have the 1st one to query all jobs that are not expired, but once we have added the code to have the category in twig, Doctrine had to make other queries to get the name of each category related to a single job, this is known as &lt;strong&gt;N+1 performance problem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is a good example to see the power of DQL, we can change our previous query as below in order to have one query instead of multiple ones :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; public function findNoneExpiredJobs()
    {
        return $this-&amp;gt;createQueryBuilder('j')
            -&amp;gt;innerJoin('j.category', 'cat')
            -&amp;gt;addSelect('cat')
            -&amp;gt;andWhere('j.expiresAt &amp;gt; :today')
            -&amp;gt;setParameter('today', new \DateTime())
            -&amp;gt;orderBy('j.createdAt', 'DESC')
            -&amp;gt;getQuery()
            -&amp;gt;getResult()
        ;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if we check again the profiler, we have only one query : &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%2Fuploads%2Farticles%2F13xbtxjr6glmrbhm1zmy.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%2Fuploads%2Farticles%2F13xbtxjr6glmrbhm1zmy.png" alt="resolve N+1 performance issue"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all, thanks for reading :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Symfony &amp; Doctrine: Part 4</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Sun, 09 Jan 2022 14:45:57 +0000</pubDate>
      <link>https://dev.to/hananekacemi/symfony-doctrine-part-4-59al</link>
      <guid>https://dev.to/hananekacemi/symfony-doctrine-part-4-59al</guid>
      <description>&lt;p&gt;While developing a new app, we usually don’t have any data on DB, it’s common to add fake data to do our tests, either manually or using libraries. With Symfony we have a bundle called &lt;strong&gt;“Doctrine Fixture”&lt;/strong&gt;, I tried it and below are my notes about it. &lt;/p&gt;

&lt;p&gt;To install it, use: &lt;code&gt;composer require orm-fixtures --dev&lt;/code&gt;&lt;br&gt;
New folder &lt;strong&gt;“DataFixtures”&lt;/strong&gt; is created under “src”, it will contain PHP Classes where we create objects to persist into DB.&lt;/p&gt;

&lt;p&gt;I like to keep things organized so I will create many fixtures classes instead of adding all dummy data to &lt;strong&gt;AppFixtures&lt;/strong&gt; generated by default. &lt;/p&gt;

&lt;p&gt;In order to reuse objects across fixtures Classes we use &lt;strong&gt;object References&lt;/strong&gt;(line 32 to 34) and we can get easily the reference in the 2nd Fixture Class (line 15)&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%2Fuploads%2Farticles%2F8wxyh8rmgc2zbbji23kt.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%2Fuploads%2Farticles%2F8wxyh8rmgc2zbbji23kt.png" alt="Category Fixtures"&gt;&lt;/a&gt;&lt;br&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%2Fuploads%2Farticles%2Frxvibfz1s4yx7mn0hqg7.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%2Fuploads%2Farticles%2Frxvibfz1s4yx7mn0hqg7.png" alt="Job Fixtures"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When using multiple fixtures, we need to specify the order in which fixtures will be loaded otherwise Doctrine will use the alphabetical order, which may result in errors if objects referenced are not yet created. To do so, we need to implement &lt;strong&gt;DependentFixtureInterface&lt;/strong&gt; and then add &lt;strong&gt;getDependencies()&lt;/strong&gt; to specify fixtures to load before. &lt;br&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%2Fuploads%2Farticles%2F4s2sdtrm4r4dkcetmo3b.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%2Fuploads%2Farticles%2F4s2sdtrm4r4dkcetmo3b.png" alt="Fixtures dependencies"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To add data to db, we run :  &lt;code&gt;symfony console doctrine:fixtures:load&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I have also tried an other bundle that helps to generate dummy data instead of setting values manually (if you lack inspiration like me :D ) to add it : &lt;code&gt;composer require fzaninotto/faker --dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once installed, we can use methods availables in this library to get a name, address, country, slug, numbers... It's awesome.&lt;br&gt;&lt;br&gt;
Below my JobFixtures class after using this library&lt;br&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%2Fuploads%2Farticles%2Fig4hknhr41h4q2dja7a9.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%2Fuploads%2Farticles%2Fig4hknhr41h4q2dja7a9.png" alt="JobFixtures using Faker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;more infos on the documentation : &lt;a href="https://github.com/fzaninotto/Faker" rel="noopener noreferrer"&gt;https://github.com/fzaninotto/Faker&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Thanks for reading :)&lt;/p&gt;

</description>
      <category>symfony</category>
      <category>doctrine</category>
      <category>php</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Symfony &amp; Doctrine: Part 3</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Sun, 02 Jan 2022 20:34:05 +0000</pubDate>
      <link>https://dev.to/hananekacemi/symfony-doctrine-part-3-3odn</link>
      <guid>https://dev.to/hananekacemi/symfony-doctrine-part-3-3odn</guid>
      <description>&lt;p&gt;Previously, I talked about how to create easily an Entity (ex:JOB) using a simple command line &lt;code&gt;make:Entity&lt;/code&gt; and answering a few question(fields,type…).&lt;/p&gt;

&lt;p&gt;This article will be about saving data to, fetching data from, the database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saving Data to DB :
&lt;/h2&gt;

&lt;p&gt;To do so, we need to use a service provided by &lt;strong&gt;Doctrine&lt;/strong&gt;, called &lt;strong&gt;EntityManagerInterface&lt;/strong&gt;. The command  &lt;code&gt;symfony console  debug:autowiring doctrine&lt;/code&gt; shows all doctrine services available.&lt;/p&gt;

&lt;p&gt;Type-hint an argument $em to &lt;strong&gt;EntityManagerInterface&lt;/strong&gt;, create an Object &lt;em&gt;(ex $job)&lt;/em&gt;, set all its properties then call &lt;em&gt;persist&lt;/em&gt; and &lt;em&gt;flush&lt;/em&gt; methods.&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%2Fuploads%2Farticles%2Fvaawbak5xw2ncbs21nto.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%2Fuploads%2Farticles%2Fvaawbak5xw2ncbs21nto.png" alt="Persist object to Db"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Calling &lt;em&gt;persist()&lt;/em&gt; method tells &lt;strong&gt;Doctrine&lt;/strong&gt; that we want to save the object, no query is executed yet. We call this method as many time as objects that we have, once we call &lt;em&gt;flush()&lt;/em&gt; method, Doctrine execute the queries needed to insert to database.&lt;/p&gt;

&lt;p&gt;We can check if data has been inserted with : &lt;code&gt;symfony console doctrine:query:sql 'select * from job'&lt;/code&gt;&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%2Fuploads%2Farticles%2Fug9hmxm6nr46jb4ijlsr.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%2Fuploads%2Farticles%2Fug9hmxm6nr46jb4ijlsr.png" alt="Data persisted to db"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fetching Data from DB :
&lt;/h2&gt;

&lt;p&gt;Getting data(objects) from db is even easier, one way to do that is by using &lt;strong&gt;JobRepository&lt;/strong&gt; $jobRepo as an argument in our method. &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%2Fuploads%2Farticles%2Fo6n6emonfvrijtsecg5y.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%2Fuploads%2Farticles%2Fo6n6emonfvrijtsecg5y.png" alt="Fetch Data from DB"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;repository&lt;/strong&gt; class offers many helper methods to get our data from db like : &lt;em&gt;findBy, findOneBy...&lt;/em&gt; We can also add custom methods to have complex queries, more about that in my next article. &lt;/p&gt;

&lt;p&gt;Finally, I like to mention that Profiler provides a lot of tools to use when developing an app, for doctrine, it shows all queries executed : &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%2Fuploads%2Farticles%2Frumd2o2ryy532s80zpda.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%2Fuploads%2Farticles%2Frumd2o2ryy532s80zpda.png" alt="Queries in Profiler"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading and Happy new year :)&lt;/p&gt;

</description>
      <category>symfony</category>
      <category>doctrine</category>
      <category>php</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Symfony &amp; Database-Part 2</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Sat, 11 Dec 2021 10:11:19 +0000</pubDate>
      <link>https://dev.to/hananekacemi/symfony-database-part-2-9b6</link>
      <guid>https://dev.to/hananekacemi/symfony-database-part-2-9b6</guid>
      <description>&lt;p&gt;In the previous post, we configured Symfony to use Docker for Database, in this post we will talk about Database creation(table, column...) using Doctrine and Symfony.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create Database :
&lt;/h2&gt;

&lt;p&gt;We can create a database with a simple command : &lt;code&gt;symfony console doctrine:database:create&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Doctrine is an &lt;strong&gt;ORM&lt;/strong&gt; (Object Relational Mapper) : Each Table in Database (ex:employee) has a corresponding class in our App (known as &lt;strong&gt;Entity&lt;/strong&gt;, ex : Employee.php) and each column of this table (ex:name) is related to a property of that class (ex: &lt;code&gt;private $name;&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;To create the entity class, run : &lt;code&gt;symfony console make:entity&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;New file is created under &lt;em&gt;src/Entity&lt;/em&gt; folder &lt;em&gt;(I like to run after each command &lt;code&gt;git status&lt;/code&gt; to check what has been generated by Symfony and access to the file to see its content)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;make:entity&lt;/code&gt; command can be used to create an new Entity or to update an existing one (add new property, a constraint...). &lt;/p&gt;

&lt;p&gt;Now to create the table and its columns, we need to execute 2 commands, the 1st one is : &lt;code&gt;symfony console make:migration&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This command compares the actual state of the database with all Entity classes, if an Entity is newly created or modified the command creates the query for that changes under &lt;em&gt;migrations&lt;/em&gt; folder in order to make database matches entities. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EewUp3SY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vtm80g9my4bajuqgsxqc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EewUp3SY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vtm80g9my4bajuqgsxqc.png" alt="query generated for table creation" width="880" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To execute this query, we run the 2nd command : &lt;code&gt;symfony console doctrine:migrations:migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Symfony is smart enough :D to know if a query has already been executed : The migration system create a table in Database &lt;em&gt;doctrine_migration_versions&lt;/em&gt;  where it stores all migrations executed : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F10VT7__--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/982rcpkdgphkwgbtfv0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F10VT7__--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/982rcpkdgphkwgbtfv0o.png" alt="content of doctrine_migration_versions" width="697" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading and Have a nice day ;)&lt;/p&gt;

</description>
      <category>symfony</category>
      <category>doctrine</category>
      <category>php</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Symfony and Database </title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Fri, 03 Dec 2021 16:40:59 +0000</pubDate>
      <link>https://dev.to/hananekacemi/symfony-and-database-11j5</link>
      <guid>https://dev.to/hananekacemi/symfony-and-database-11j5</guid>
      <description>&lt;p&gt;I'm having free time these days so I decided to go back to learn symfony. I picked up a course about doctrine and symfony. I will post my notes here, feel free to leave a comment, I am open to all suggestions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Doctrine Installation :
&lt;/h1&gt;

&lt;p&gt;Symfony 5 doesn’t come with a database layer when installing it, to be able to store data in a Database we need to add a library for that, like &lt;strong&gt;Doctrine&lt;/strong&gt;. run : &lt;code&gt;composer require orm&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;orm is an alias for a library called &lt;em&gt;symfony/orm-pack&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pack is a shortcut to install several packages using one command&lt;/strong&gt;, for example if we check the github repo of orm-pack, we see that it contains only a &lt;em&gt;composer.json&lt;/em&gt; file where we have all dependencies(packages) needed for Doctrine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Symfony and Docker :
&lt;/h2&gt;

&lt;p&gt;Once the installation is done, you will notice that &lt;strong&gt;Symfony Flex&lt;/strong&gt; added a &lt;em&gt;docker-compose.yml&lt;/em&gt; file. Instead of using a local Database (ex :mysql)  and attach it to our project let's take advantage of docker and the automatic configuration added by Flex.&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%2Fuploads%2Farticles%2F6kge70wf1qt4027q03sv.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%2Fuploads%2Farticles%2F6kge70wf1qt4027q03sv.png" alt="docker-compose file"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check that Docker is installed on your machine, and then run : &lt;br&gt;
&lt;code&gt;docker compose up  -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To see the mysql Docker container, run :&lt;br&gt;
&lt;code&gt;docker compose ps&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To connect to mysql : &lt;br&gt;
&lt;code&gt;docker compose exec database mysql -u root --password=password&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Without Docker, you need to configure the environment variable DATABASE_URL in the &lt;em&gt;.env&lt;/em&gt; file. Since we are using the local symfony server (by running &lt;code&gt;symfony serve -d&lt;/code&gt;) we don’t need that, because when the symfony binary detects the &lt;em&gt;docker-compose.yml&lt;/em&gt; file it reads all the config and environment variables of running services and make them available for our app.&lt;br&gt;
You can run &lt;code&gt;symfony var:export --multiline&lt;/code&gt; to see the value of environment variables.&lt;/p&gt;

&lt;p&gt;To stop a container : &lt;br&gt;
&lt;code&gt;docker compose stop&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's all for today :)&lt;/p&gt;

</description>
      <category>php</category>
      <category>symfony</category>
      <category>doctrine</category>
      <category>docker</category>
    </item>
    <item>
      <title>Week 2 : Google PM specialization </title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Mon, 04 Oct 2021 20:43:39 +0000</pubDate>
      <link>https://dev.to/hananekacemi/week-2-google-pm-specialization-5ffa</link>
      <guid>https://dev.to/hananekacemi/week-2-google-pm-specialization-5ffa</guid>
      <description>&lt;p&gt;Hello All, &lt;/p&gt;

&lt;p&gt;In this article, I will sum up what I have learnt in the course during the week 2 (for those who didn't see my previous posts, I should mention that I decided to wrote articles as a memo of a course that I am taking on Coursera related to Project Management).&lt;/p&gt;

&lt;p&gt;So, ready to continue from where we have left last time? :D&lt;/p&gt;

&lt;p&gt;This time we will talk about goals and some methods to set them properly.&lt;/p&gt;

&lt;p&gt;In the initiation phase, it is important to well-define the goals of your project to get the result expected. &lt;br&gt;
Having goals that are clear for you, your stakeholders and your team is crucial. It helps you and your team to know what to do, it's like having a roadmap, shared with all people involved, to a specific destination.&lt;/p&gt;

&lt;p&gt;There is a lot of methods to set goals, one of the most common one is &lt;strong&gt;SMART Method&lt;/strong&gt; (I am sure you know or heard about it before), so what does each letter means? &lt;/p&gt;

&lt;p&gt;1.S for &lt;strong&gt;Specific&lt;/strong&gt;: the goal must be specific, not a global or a vague one. For example, saying that you want to lose weight isn't specific, but saying that you want to lose 5kg during 15days, you make it a clear and a specific goal. When setting a goal try to answer these questions: &lt;em&gt;What do I want to accomplish? Why is this a goal? Does it have a specific reason, purpose, or benefit?&lt;/em&gt;&lt;br&gt;
2.M for &lt;strong&gt;Measurable&lt;/strong&gt;: You can tell the goal is measurable by asking &lt;em&gt;how much, how many, and how will I know when it's accomplished?&lt;/em&gt; Taking the same example about weight, loosing 5kg&lt;br&gt;
make the goal measurable.&lt;br&gt;
3.A for &lt;strong&gt;Attainable&lt;/strong&gt;: what is the purpose of setting goals that are not reachable? goals must be challenging but not so hard to reach, otherwise you lose motivation, and you may give up before attending your goal. For our example, you may decide to exercise 30min during 3days of a week instead of 2hour every day.  Break down the goal into smaller parts and see if it makes sense.&lt;br&gt;
4.R for &lt;strong&gt;Relevant&lt;/strong&gt;: does it make sense to try and reach this goal? Think about how the goal lines up with other goals, priorities, and values. Deciding to lose weight, may align with your values: Eat healthy / Avoid food waste / Have a good shape...&lt;br&gt;
5.T for &lt;strong&gt;Time-bound&lt;/strong&gt;: Time-bound means your goal has a deadline. For our example, we assumed that we can achieve the goal in 15days.&lt;/p&gt;

&lt;p&gt;Specific, Measurable, Attainable, Relevant, and Time-bound (SMART) goals are very helpful for ensuring project success.&lt;/p&gt;

&lt;p&gt;Another method to define goals for a project is &lt;strong&gt;OKRs&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;OKRs stands for &lt;strong&gt;Objectives and key results&lt;/strong&gt;, it helps to establish and clarify the goal of an organization/Project/Person.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--of2cnX6n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j33tqpevju14eaft2gz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--of2cnX6n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j33tqpevju14eaft2gz7.png" alt="Alt OKRs"&gt;&lt;/a&gt;&lt;br&gt;
You can learn more about these two methods on the Internet : when it is appropriate to use one instead of the other, what are the pros and cons of each method and more..., and why not share with us what you learnt in the comment section :)&lt;/p&gt;

&lt;p&gt;Thanks for reading and have a nice day &lt;/p&gt;

</description>
      <category>management</category>
      <category>projectmanager</category>
      <category>agile</category>
      <category>methodology</category>
    </item>
    <item>
      <title>Week 1/Google PM Specialization -Part 2</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Fri, 01 Oct 2021 16:28:51 +0000</pubDate>
      <link>https://dev.to/hananekacemi/week-1-google-pm-specialization-part-2-4f22</link>
      <guid>https://dev.to/hananekacemi/week-1-google-pm-specialization-part-2-4f22</guid>
      <description>&lt;p&gt;Hey all, &lt;/p&gt;

&lt;p&gt;Today I am going to write about what I've learnt from the course that I am taking currently about Project Management. &lt;/p&gt;

&lt;p&gt;As I have said in my previous post,I'm going to talk about CBA(aka Cost-benefit Analysis). &lt;/p&gt;

&lt;p&gt;CBA is a process that is used to compare project benefits to its costs, the goal is to reduce waste and invest resources responsibly. &lt;/p&gt;

&lt;p&gt;Project Managers don't make decisions based on gut instinct, they ask questions, gather data to analyze, use tools... &lt;/p&gt;

&lt;p&gt;Below are some questions to consider when determining the benefits and costs of a project. &lt;/p&gt;

&lt;p&gt;Example of questions to determine benefits : &lt;br&gt;
1.What value will the project create ? &lt;br&gt;
2.How much money could this project save ? &lt;br&gt;
3.How much time will be saved ? &lt;br&gt;
...&lt;/p&gt;

&lt;p&gt;Example of questions to determine costs :&lt;br&gt;
1.How much time will people spend on this project ? &lt;br&gt;
2.What will be the one time cost ? &lt;br&gt;
3.Are there any ongoing costs ? &lt;br&gt;
...&lt;/p&gt;

&lt;p&gt;There is many ways to calculate costs &amp;amp; benefits of a project (known also as ROI : Return On Investment), here is one of them : &lt;br&gt;
&lt;strong&gt;(G - C)/C = ROI&lt;/strong&gt;&lt;br&gt;
G : Financial Gain&lt;br&gt;
C : Costs&lt;/p&gt;

&lt;p&gt;Let's take un example to calculate ROI : &lt;br&gt;
Consider a project that costs 5000$ upfront plus 25$ per month for 12 months. You estimate that the project will gain 10000$ using the formula above, ROI = (10000-5300)/5300, the result is : 0.88 or 88%. &lt;/p&gt;

&lt;p&gt;Depending on the ROI, the project manager and stakeholders will decide to pursue the project or not.&lt;/p&gt;

&lt;p&gt;This is the end of this post, thanks for reading it. &lt;/p&gt;

&lt;p&gt;Have a good day :) &lt;/p&gt;

</description>
      <category>management</category>
      <category>coursera</category>
      <category>projectmanager</category>
    </item>
    <item>
      <title>Week 1/Google PM Specialization</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Sun, 26 Sep 2021 20:25:59 +0000</pubDate>
      <link>https://dev.to/hananekacemi/week-1-google-pm-specialization-4pdm</link>
      <guid>https://dev.to/hananekacemi/week-1-google-pm-specialization-4pdm</guid>
      <description>&lt;p&gt;Hey all, &lt;/p&gt;

&lt;p&gt;Recently I've started the second course of Project Management specialization created by Google and titled : &lt;strong&gt;Project Initiation : Starting a successful project&lt;/strong&gt;. I decided to post my notes here as a memo. &lt;/p&gt;

&lt;h1&gt;
  
  
  Week 1 :
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Initiation phase of the project life cycle :
&lt;/h2&gt;

&lt;p&gt;Among Project Manager responsibilities during the project initiation phase we find:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify goals and resources based on initial discussion with stakeholders&lt;/li&gt;
&lt;li&gt;Ask the right questions to stakeholders, perform research&lt;/li&gt;
&lt;li&gt;Document the key component of the project.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Getting in the same page with the stakeholders, by clarifying the goals of the project, will save a lot of time and extra work for everyone throughout the project.&lt;br&gt;
It's  a crucial phase, because it determines how well the goals will be met, and it ensures that the benefits will outweigh the cost of the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key component of project initiation :
&lt;/h2&gt;

&lt;p&gt;The key component to concider during the initiation phase are : &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yQYVm-j9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/813e7jjj23o9evj2pna2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yQYVm-j9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/813e7jjj23o9evj2pna2.png" alt="Project Key component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once key components established, you need to create a project charter, the document that contain all project details to review with stakeholders in order to get their approval so you can start with the planning stage.&lt;/p&gt;

&lt;p&gt;Next, I will write about cost-benefit analysis and its importance in project management.&lt;/p&gt;

&lt;p&gt;Have a nice day all :)&lt;/p&gt;

</description>
      <category>management</category>
      <category>projectmanager</category>
      <category>googlecourse</category>
      <category>coursera</category>
    </item>
    <item>
      <title>My notes about Google Course titled "Foundations of Project Management" -Part 2</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Sun, 15 Aug 2021 18:46:25 +0000</pubDate>
      <link>https://dev.to/hananekacemi/my-notes-about-google-course-titled-foundations-of-project-management-part-2-17e4</link>
      <guid>https://dev.to/hananekacemi/my-notes-about-google-course-titled-foundations-of-project-management-part-2-17e4</guid>
      <description>&lt;p&gt;Hello, &lt;/p&gt;

&lt;p&gt;As mentionned in the title, this is the 2nd part of my notes about Google Course "Foundations of Project Management", &lt;a href="https://dev.to/hananekacemi/my-notes-about-google-course-titled-foundations-of-project-management-part-1-2cfk"&gt;here&lt;/a&gt; you can find the 1st part.&lt;/p&gt;

&lt;h4&gt;
  
  
  Exploring the phases of the project life cycle :
&lt;/h4&gt;

&lt;p&gt;The project life cycle has 4 major phases &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--osNnK0L9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lf4foo5fav9n0z1xe3o4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--osNnK0L9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lf4foo5fav9n0z1xe3o4.png" alt="Phases of a Project life cycle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Introduction to lean and six sigma :
&lt;/h4&gt;

&lt;p&gt;Lean Six sigma are commun for projects that have goals to save money, improve quality and move through processes quickly.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SGxci0yh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a4mc74arbi7wxal43449.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SGxci0yh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a4mc74arbi7wxal43449.png" alt="Phases of Lean &amp;amp; six Sigma"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Six Sigma : Reduce variations by ensuring that quality processes are followed every time. Below the 7 key principales :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always focus on client&lt;/li&gt;
&lt;li&gt;Identify and understand how work gets done&lt;/li&gt;
&lt;li&gt;Processes flow smoothly&lt;/li&gt;
&lt;li&gt;Reduce waste and concentrate on values&lt;/li&gt;
&lt;li&gt;Stop defects by removing variations&lt;/li&gt;
&lt;li&gt;Involves &amp;amp; collaborate with team&lt;/li&gt;
&lt;li&gt;Approach improvement in systematic way&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Overview of classic and matrix structures :
&lt;/h4&gt;

&lt;p&gt;Organizational structure refers to the way a company or organization is arranged or structured. There is 2 type of organizational structure :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classic : Top down hierarchy, CEO has direct authority over several department manager&lt;/li&gt;
&lt;li&gt;Matrix : Employees can have 2 or more manager&lt;/li&gt;
&lt;/ul&gt;

&lt;h6&gt;
  
  
  Reporting charts :
&lt;/h6&gt;

&lt;p&gt;shows relation between people and groups within the organization and details who person or groups reports to.&lt;/p&gt;

&lt;h4&gt;
  
  
  Introduction to organizational culture :
&lt;/h4&gt;

&lt;p&gt;Organization’s culture provides concepts and acts as a guide for what their people value, how they operate on a daily basis, how they relate one to another…&lt;/p&gt;

&lt;h6&gt;
  
  
  Change management :
&lt;/h6&gt;

&lt;p&gt;is the process of delivering a project and getting people to adopt. When project managers understand change management and their role in the process, it helps to ensure a smooth rollout and easier adoption.&lt;/p&gt;

&lt;h6&gt;
  
  
  Steering committees :
&lt;/h6&gt;

&lt;p&gt;Advisory board or council to help the Project Managers and the company make and approve strategic decisions that affect the company and the project.&lt;/p&gt;

&lt;p&gt;I Hope that those 2 posts will help you to have an overview of the Coursera Course "Foundation of PM" By Google. &lt;/p&gt;

</description>
      <category>management</category>
      <category>projectmanager</category>
      <category>coursera</category>
    </item>
    <item>
      <title>My notes about Google Course titled "Foundations of Project Management" -PART 1 -</title>
      <dc:creator>Hanane Kacemi</dc:creator>
      <pubDate>Sun, 15 Aug 2021 18:21:48 +0000</pubDate>
      <link>https://dev.to/hananekacemi/my-notes-about-google-course-titled-foundations-of-project-management-part-1-2cfk</link>
      <guid>https://dev.to/hananekacemi/my-notes-about-google-course-titled-foundations-of-project-management-part-1-2cfk</guid>
      <description>&lt;h4&gt;
  
  
  What is a project ?
&lt;/h4&gt;

&lt;p&gt;A project is a series of tasks, with a beginning and end, that need to be completed in order to reach the desired outcome. &lt;/p&gt;

&lt;h4&gt;
  
  
  What is the project Management ?
&lt;/h4&gt;

&lt;p&gt;Application of &lt;strong&gt;knowledge, skills, tools and techniques&lt;/strong&gt; to meet the project requirement and achieve the desired outcome &lt;strong&gt;with respect of budget and time.&lt;/strong&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  What does a project Manager do ?
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Follow a process that involves : 

&lt;ul&gt;
&lt;li&gt;Planning and organizing&lt;/li&gt;
&lt;li&gt;Managing tasks&lt;/li&gt;
&lt;li&gt;Budgeting&lt;/li&gt;
&lt;li&gt;Controlling costs and other factors.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Assure that the project will be completed on time and within budget.&lt;/li&gt;
&lt;li&gt;Bring value to the company.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  The value of a Project Manager :
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aMgPn3IN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7shtpf14gi30ogpx5op.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aMgPn3IN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7shtpf14gi30ogpx5op.png" alt="The value of PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Project Manager roles and responsibilities :
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sknTMDkl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gx2nm95hpufg7tx2t53a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sknTMDkl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gx2nm95hpufg7tx2t53a.png" alt="Roles and Responsabilities of Project Manager"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The core skills of a project Manager :
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z-_H1WnZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lp1ru6zm7gd1o2n58xw6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z-_H1WnZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lp1ru6zm7gd1o2n58xw6.png" alt="Core skills pf Project Manager"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>management</category>
      <category>coursera</category>
      <category>projectmanager</category>
    </item>
  </channel>
</rss>
