bookmark_borderComposer Smart Updater

Reflection:
In a big Symfony v5.0 project we wanted to upgrade composer packages (around +140 updates available includes orm, doctrine packages, fixtures, migration, api platform, etc)
after update using composer update when run the migration symfony console doctrine:migration:migrate -n migration not working fine because of conflicts and different migrations table name pattern so it can’t detect names of migrations file and because some packages needs PHP v7.4.11 (relreased this month 1st October 2020) and our env uses PHP v7.4.3 and needs Composer v2 and our env used old Composer version.


I created a Python script that reads composer.json file and loop over its required and required-dev packages and install each package individually then run migration command and check if everything is working fine or not!

composer-smart-updater.py on GitHub: https://github.com/khaledalam/composer-smart-updater

This script will helps to detect and find which exactly package that cause this conflict.

Plus I unify infrastructure cloud architecture env (AWS) and Git pipelines (BitBucket) container images to use most updated versions.

bookmark_borderIBM October 2020 – Challenge (control-flow graph)

https://www.research.ibm.com/haifa/ponderthis/challenges/October2020.html

This month’s challenge is dedicated to the memory of Frances Allen, who passed away in August. Among her many accomplishments is the invention of the control-flow graph, in her 1970 paper “Control flow analysis

My solution

with step number:

10 A = a
20 B = b
30 JMP_ZERO B 90
40 AA = A
50 BB = B
60 A = B
70 B = AA % BB
80 JMP 30
90 RETURN A


-----

without step number:

A = a
B = b
JMP_ZERO B 90
AA = A
BB = B
A = B
B = AA % BB
JMP 30
RETURN A

IBM Gadi submission result:

Thanks! This indeed computes the GCD, but the requirement on the number of paths is not fulfilled.

bookmark_borderUsing Pipelines to Invalidate AWS CloudFront Cache that Pointing to AWS S3 bucket

Steps:

  • Add Repository Variables for Distribution IDs
  • Add Repository Variables for AWS keys as well
  • Add invalidate step in your pipeline
    e.g.
- step:
          name: ">> Invalidate AWS CloudFront (by: Khaled alam)"
          script:
          - pipe: atlassian/aws-cloudfront-invalidate:0.4.1
            variables:
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
              DISTRIBUTION_ID: $TEST_CLOUDFRONT_DISTRIBUTION_ID
              # PATHS: <string> # Optional
              DEBUG: "true" # Optional

Note: in case you want to invalidate specific files or paths, you should define that in PATHS: <string>

bookmark_borderReset Root Password in MySQL ^8.*

  1. Add below code to the end of /etc/mysql/my.cnf file.
    [mysqld]
    skip-grant-tables
  2. Restart service:
    sudo systemctl restart mysql
  3. Login into mysql:
    sudo mysql -uroot
  4. Remove root password:
    UPDATE mysql.user SET authentication_string=null WHERE User='root'; FLUSH PRIVILEGES; exit;
  5. Comment below code at the end of /etc/mysql/my.cnf file by add # in front of each line.
    # [mysqld]
    # skip-grant-tables
  6. Restart service:
    sudo systemctl restart mysql
  7. Login into mysql:
    sudo mysql -uroot

Done! 🙂

bookmark_borderSimple System With GraphGL, Reactjs, PHP

simple system with GraphQL, Reactjs, PHP

Tools used: PHP v7.3^ , Symfony 4.4^ , React 16^ , VPS, SQL , Docker , overblog/GraphQLBundle

Preview:

as gif – video

note: this is my first time to use GraphQL & Reactjs

GraphiQL:

Example Query:

query {
buyer(id: 20){
id,
name,
authToken
},
products{
id,
name
},
buyers{
name
}
}

Example Mutation: 
Note: entered buyerID and productsIDs must be existed to create order!

mutation {
createOrder(buyerID: "20", productsIDs: ["26", "24"]){
id,
buyer{
name
},
products{
name,
id
}
}
}

Install & run:
  • $ git clone git@github.com:khaledalam/simple-system-with-graphql-react-php.git $ cd simple-system-with-graphql-react-php
  • Update DB info in .env file:DATABASE_URL=mysql://USERNAME:PASSWORD@127.0.0.1:PORT/DB_NAME
  • $ composer install # press (a) to accept all recipes $ yarn install $ php bin/console doctrine:database:create $ php bin/console doctrine:schema:update --force -n $ php bin/console doctrine:fixtures:load -n # add dummy buyers&products
  • $ php bin/console server:start
Assumptions:
  • I assume order can contain multi-products instead of a single product.
  • I assume we can use any ready jwt sandbox app (ex. example)
    • host jwt sandbox on any server
    • inject it throw register, login and retrieving buyer’s orders processes via HTTPexample: – curl -H “Authorization: jwt+[TOKEN]” http://jwt_server/getBuyerIdOfThisToken – compare returnedId with current buyer id – if equal then fetch all current buyer’s orders
  • I assume all current urls available only for admins
  • I assume validations are very basic annotation constraints
  • I assume we use symfony environment (ex. this docker-symfony)
  • I assume more improvements will be done (ex. decrease redundant codes, reducing repetition logic)
  • I assume using another toolkit that supports editing HTTP headers for graphql instead of playground(since I used symfony not laravel and no stable symfony bundle similar to mll-lab/laravel-graphql-playground)

GitHub: https://github.com/khaledalam/simple-system-with-graphql-react-php

bookmark_borderFirebase Logger

Firebase Logger is a simple firebase PHP logger package to monitor and save the users activities.

Installation

Use composer to install firebase-logger:
composer require khaledalam/firebase-logger

Preview

Usage

example.php

<?php
// PHP 7.1^
//error_reporting(0);

include_once './FirebaseLogger.php';

$serviceFile = __DIR__ . '/serviceAccountKey.json';
$databaseUri = 'https://{EDIT_THIS}.firebaseio.com';

$firebaseLogger = new FirebaseLogger([
    'service_account_key_json' => $serviceFile,
    'database_uri' => $databaseUri,
    'database_realtime_name' => 'Logger',
]);

if ($_POST['search'])
{
    echo "<h2>Log saved!</h2>";
    $data = [
        'action' => 'search action',
        'value' => $_POST['search'],
    ];
    $firebaseLogger->log($data);
}
?>

<center>
    <form action="./example.php" method="post">
        <input type="text" placeholder="search text" name="search">
        <input type="submit" value="search">
    </form>
</center>

Check the config section in README file and files on GitHub: https://github.com/khaledalam/firebase-logger

Packagist: https://packagist.org/packages/khaledalam/firebase-logger

bookmark_borderAmazon Job Hiring Related Email

Amazon-Jobs

Amazon Jobs Apps that help the user to check if some email relates to any AMAZONIAN hrs, recruiters, interviewees, interviewers, talents, candidates and so on..

  • – check hiring-related emails,
  • – get job post recruiter details,
  • – get more statistics about job posts,
  • – search jobs globally with more deep filters

Preview:




Mobile App:


Web App:
https://khaledalam.net/amazon

GitHub:



Screens: