Skip navigation
1 2 Previous Next

Mahmoud Rabie's Blog

21 posts

Goal:

Jenkins is an open source, Java-based automation server that offers an easy way to set up a continuous integration and continuous delivery (CI/CD) pipeline. Here are the steps to install and initialize it on Oracle Linux 7

 

Steps:

(1) If JDK doesn't exist on your system

yum install java-1.8.0-openjdk-devel

 

(2) Enable Jenkins repository

curl --silent --location http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo | sudo tee /etc/yum.repos.d/jenkins.repo

And add the repository to your system

sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key

 

(3) Install Jenkins

yum install -y jenkins

 

(4) Start, check and enable the service

systemctl start jenkins
systemctl status jenkins
systemctl enable jenkins

 

(5) Add the firewall rules

firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload

 

(6) Open Jenkins on your browser

http://localhost:8080

Use the following command to print the password on your terminal

cat /var/lib/jenkins/secrets/initialAdminPassword 

 

(7)  Choose (Install suggested plugins)

 

(8) Wait for the installation of the plugins

 

(9) Set the admin password and choose (Save and Continue)

 

(10) Get the URL and click (Save and Finish)

 

(11) Start Using Jenkins

 

(12) Install (locale plugin) to change the UI language if required.

Goto http://localhost:8080/pluginManager/available

and search for (locale)

 

(13) If you want Jenkis to use English, goto http://localhost:8080/configure

and set language to ( en ) and ignore your browser language

 

Enjoy!

 

I hope it helps someone

 

Regards

Mahmoud

Goal

Docker is  #1 container industry conference for enterprise IT professionals, developers, architects and business leaders. Docker Community Edition (CE) is ideal for developers and small teams looking to get started with Docker and experimenting with container-based apps. It is one of the most important tools of DevOps engineer. Node.js is a JavaScript-based platform for server-side and networking applications.

Here are the steps of installing Docker CE installation on Oracle Linux 7. Then we will pull docker official image of Node.js.

 

Steps

(1) Install the prerequisites

yum install -y yum-utils device-mapper-persistent-data lvm2

 

(2)  Setup the stable repository

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

(3) Install Docker CE

yum install docker-ce docker-ce-cli containerd.io

 

(4) Start docker service and make it auto starting

systemctl start docker
systemctl enable docker

 

(5) Verify that it is working

docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest


Hello from Docker!
This message shows that your installation appears to be working correctly.


To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.


To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash


Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/


For more examples and ideas, visit:
 https://docs.docker.com/get-started/

 

(6) Pull the official Node.js image on docker

docker pull node

 

(7) List the docker images

docker image list

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
node                latest              a0d7a409d125        37 hours ago        904MB
hello-world         latest              fce289e99eb9        2 months ago        1.84kB

 

Enjoy!

 

I hope it helps someone.

 

Regards

Mahmoud

Goal:

Micronaut is a modern, JVM-based, full-stack framework for building modular, easily testable microservice and serverless applications. This blog post is giving a step-by-step guide for installation on OL7

 

Steps:

(1) Install SDKMAN

curl -s "https://get.sdkman.io" | bash

 

(2) Update SDKMAN

sdk update

 

(3) Initialize SDKMAN

source "~/.sdkman/bin/sdkman-init.sh"

 

(4) Update SDKMAN

sdk update

 

(5) Install micronaut

sdk install micronaut

 

(6) Check Micronaut CLI --> Interactive Mode

 

mn
Resolving dependencies...
| Starting interactive mode...
| Enter a command name to run. Use TAB for completion:
mn> 

 

(7) Creating a Java Project

mn> create-app hello-world
| Generating Java project...
| Application created at /home/student/hello-world
| Initializing application. Please wait...

 

(8) Creating a Groovy Project

Micronaut]$ mn create-app hello-world --lang groovy
| Generating Groovy project...
| Application created at /home/student/Micronaut/hello-world

 

Enjoy!

 

I hope it helps someone

 

Regards

Mahmoud

 

Goal

Installation of NetBeans, GlassFish and Tomcat on Oracle Linux 7

 

Steps

(1) Download JDK 8 rpm from

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

 

(2) Install JDK's rpm using yum

yum install -y jdk-8u201-linux-x64.rpm

 

(3) Check the Java version

java -version

openjdk version "1.8.0_191"

OpenJDK Runtime Environment (build 1.8.0_191-b12)

OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

 

(4) Download NetBeans 8.2 IDE Installer

 wget -c http://download.netbeans.org/netbeans/8.2/final/bundles/netbeans-8.2-linux.sh

 

(5) Make the installer executable and run it

chmod +x netbeans-8.2-linux.sh 
./netbeans-8.2-linux.sh

 

(6) Customize the installation

 

(7) Choose JDK and NetBeans pathes

 

(8) Install GlassFish Server

 

(9) Install Tomcat Server

 

(10) Revise the Summary

 

(11) Add netbeans.sh to the $PATH by opening the file ~/.bash_profile and updating the following line then save the file.

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/netbeans-8.2/bin

 

(12) Activate changes by source command

source ~/.bash_profile

 

Now you could run netbeans from command line. Enjoy!

 

I hope it helps someone.

 

Regards

Mahmoud

Goal

  • Architecting for DevOps by replacing large Monolithic Applications with Microservices.

 

Key-enabling technology

Docker containers

 

Services Orchestration

Swarm

 

Microservices Application Lab (using Swarm)

https://training.play-with-docker.com/swarm-stack-intro/

 

Reference

https://www.docker.com/solutions/microservices

Continuous Improvement is on of the core principles of DevOps

Screen Shot 2018-12-31 at 7.14.53 AM.png

 

What is DMAIC?

     Continuous improvement is to solve problems in order to:

  • deliver better value faster and cheaper to the customers,
  • bring more meaning to your work,
  • and/or leave a healthier environmental footprint.

     A well-known method to for structured problem solving to facilitate continuous improvement, is DMAIC.

 

DMAIC is an acronym that stands for Define, Measure, Analyze, Improve, and Control. It represents the five phases that make up the process:

Screen Shot 2018-12-31 at 7.10.23 AM.png

Reference

DASA DevOps Fundamentals

Prerequisites

Microsoft Windows [Version 10.0.17134.472]

 

Steps

(1) Download Office 365 Offline/Standalone installer O365HomePremRetail.img

(2) Mount the img

(3) Install from the file Office\Setup64

(4) Download and Install BIPublisherDesktop64

(5) Go to folder C:\Program Files\Oracle\BI Publisher\BI Publisher Desktop\DotNetInstallFiles

(6) Install TBAddInSetup64 into this location C:\Program Files\Oracle\BI Publisher\BI Publisher Desktop\TBAddInSetup64

(7) Word --> Options --> Manage COM Add-ins

(8) Activate Oracle BI Publisher Desktop

Goal

Developer (Dev) and DBA (Ops) together must build a new web application for the recently-acquired coffee shops chain

 

Preconditions

- Oracle DB 12c as JSON document store.

 

Why JSON?

JSON supported by all Oracle features

- Analytics

- Encryption

- In-Memory

- RAC

- Parallel SQL

 

How is JSON stored?

- No special data type for JSON. It can be VARCHAR2, BLOB or CLOB.

- Add CONSTRAINT checks could validate the input document.

SQL> CREATE TABLE orders(order_details BLOB  
                            CONSTRAINT is_json 
                                 CHECK (order_details IS JSON)      );

 

Native SQL support for JSON

Screen Shot 2018-12-28 at 1.21.53 PM.png

 

Reference

https://www.nloug.nl/downloads/ogh20170615_m._colgan.pdf

Prerequisites

- Remote Oracle Database + ORDS 17.3 or later

- ORDS instance having a connection pool configured for target database

 

The Basics

Execute any SQL through a REST Endpoint - e.g. "curl" utility

curl   -H    "Content-Type:application/json"
       -u    "SOCTT:TIGER"
       -d    '{"statementText":"select systimestamp as dt from dual"}'
       http://{ords-hostname}:{ords-port}/ords/{db-schema}/_/sql

 

And the response would be the following self-describing JSON

Screen Shot 2018-12-26 at 10.04.26 PM.png

 

Using Remote Database Connections

(1) Shared Components --> Data Sources --> REST Enabled SQL

( Name, End Point, Authentication)

(2) Use a REST Enabled SQL Service and therefore a remote Oracle database as the Data Source for Oracle APEX components like:

• Classic Reports, Interactive Reports

• Reflow Report, Toggle Columns Report

• Tree Region, JET Charts, CSS Calendar

• PL/SQL Process

Screen Shot 2018-12-27 at 8.55.02 AM.png

 

 

Using Custom PL/SQL Code

  • Access REST enabled SQL sources within custom PL/SQL Code:
    • Execute query and provide a "cursor" object APEX_EXEC.OPEN_REMOTESQL_QUERY
    • Execute a PL/SQL block anonymously APEX_EXEC.EXECUTE_REMOTE_SQL
  • Use REST Enabled SQL as a Plug-In developer:
    • "Region Source supports different Data Sources" Plugin Attribute
    • Use APEX_EXEC PL/SQL package in Plug-In code

 

Reference

https://www.oracle.com/technetwork/developer-tools/apex/overview/apex-181-new-features-otn-4491380.pdf

Goal

MLE will be added to Oracle APEX upcoming releases. It contains the support of brilliant language Python. I will be ready to integrate my code once its ready!

 

Given:

- macOS High Sierra 10.13.6

- python3 Version

$ python3 --version
Python 3.7.1

 

- brew version

$ brew --version
Homebrew 1.8.6

 

Prerequisites

brew

brew install mpg321
brew install portaudio

 

pip3

pip3 install amp
pip3 install pyaudio
pip3 install pyspeech
pip3 install speechrecognition
pip3 install googletrans

 

ArToEnVoiceTranslator.py

#!/usr/bin/env python3

# Requires PyAudio and PySpeech.

import speech_recognition as sr

from time import ctime

import googletrans as gt

import time

import os

from gtts import gTTS

def speak(audioString,mylang):

print(audioString)

  tts = gTTS(text=audioString, lang=mylang)

  tts.save("audio.mp3")

  os.system("mpg321 audio.mp3")

def recordAudio():

# Record Audio

  r = sr.Recognizer()

with sr.Microphone() as source:

print()

  audio = r.listen(source)

# Speech recognition using Google Speech Recognition

  data = ""

try:

# Uses the default API key

# To use another API key: `r.recognize_google(audio, key="GOOGLE_SPEECH_RECOGNITION_API_KEY")`

  data = r.recognize_google(audio ,language="ar-SA")

print("You said: " + data)

except sr.UnknownValueError:

print("***")

except sr.RequestError as e:

print("Could not request results from Google Speech Recognition service; {0}".format(e))

return data


def translateToEnglish(text):

if text != "":

  mygt = gt.Translator()

  translation = mygt.translate(text,dest='en')

  speak(translation.text,'en')

# initialization

time.sleep(1)

speak('السلام عليكم هذا مترجم للكلام من اللغة العربية إلى اللغة الانجليزية، رجاء تكلم بالكلمة العربية واصبر ليتم ترجمتها لك بالانجليزية','ar')

while 1:

  data = recordAudio()

  translateToEnglish(data)

 

 

Regards

Mahmoud

Goal:

OpenStack is the future of modern data centers. RDO is all-in-one implementation for beginners.

 

(1) /etc/environment

LANG=en_US.utf-8
LC_ALL=en_US.utf-8

 

(2) /etc/hosts

192.168.68.111    openstack01

 

(3) Disable WiFi adapter by renaming its ifcfg-.... file

 

(4) /etc/sysconfig/network-scripts/ifcfg-enp38s0

HWADDR=E4:11:5B:59:3D:61
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NM_CONTROLLED=no
USERCTL=no
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=enp38s0
UUID=56b4291b-1032-48b3-b5e6-3b832cef7507
DEVICE=enp38s0
ONBOOT=yes
    IPADDR=192.168.68.111
        NETMASK=255.255.255.0
        GATEWAY=192.168.68.1
        DNS1=192.168.100.1
        DNS2=8.8.8.8

 

(5) Prerequisites

systemctl disable firewalld
systemctl stop firewalld
systemctl disable NetworkManager
systemctl stop NetworkManager
systemctl enable network
systemctl start network
yum install -y centos-release-openstack-rocky
yum-config-manager --enable openstack-rocky
yum update -y

 

(6) Install Packstack Installer

yum install -y openstack-packstack

 

(7) Run Packstack to install OpenStack

packstack --allinone

 

Reference

https://www.rdoproject.org/install/packstack/

 

Next Step

https://www.oracle.com/technetwork/systems/hands-on-labs/hol-openstack-linux-ovm-2399741.html

Goal:

A frequently-required function for Arabic accountants who are using Oracle database-based applications.

 

Here is the function for numbers less than 99999

 

CREATE OR replace FUNCTION Writenuminarabicwords (totnetget IN NUMBER)
RETURN VARCHAR2 
IS 
  strnum            VARCHAR2(10); 
  numinarabic       VARCHAR2(100); 
  a7ad              VARCHAR2(1); 
  a7adarabic        VARCHAR2(50); 
  asharat           VARCHAR2(1); 
  asharatarabic     VARCHAR2(50); 
  me2at             VARCHAR2(1); 
  me2atarabic       VARCHAR2(50); 
  alaaf             VARCHAR2(1); 
  alaafarabic       VARCHAR2(50); 
  asharatolof       VARCHAR2(1); 
  asharatolofarabic VARCHAR2(50); 
  me2atolof         VARCHAR2(1); 
  me2atolofarabic   VARCHAR2(50); 
  malayeen          VARCHAR2(1); 
  malayeenarabic    VARCHAR2(50); 
  numlength         NUMBER; 
BEGIN 
    strnum := To_char(totnetget); 

    -- check a7ad digit 
    a7ad := Substr(strnum, Length(strnum), 1); 

    IF a7ad != '0' THEN 
      IF a7ad = '1' THEN 
        a7adarabic := 'واحد'; 
      ELSIF a7ad = '2' THEN 
        a7adarabic := 'اثنان'; 
      ELSIF a7ad = '3' THEN 
        a7adarabic := 'ثلاثة'; 
      ELSIF a7ad = '4' THEN 
        a7adarabic := 'أربعة'; 
      ELSIF a7ad = '5' THEN 
        a7adarabic := 'خمسة'; 
      ELSIF a7ad = '6' THEN 
        a7adarabic := 'ستة'; 
      ELSIF a7ad = '7' THEN 
        a7adarabic := 'سبعة'; 
      ELSIF a7ad = '8' THEN 
        a7adarabic := 'ثمانية'; 
      ELSIF a7ad = '9' THEN 
        a7adarabic := 'تسعة'; 
      END IF; 

      numinarabic := a7adarabic; 
    END IF; 

    -- check asharat digit 
    IF( Length(strnum) > 1 ) THEN 
      asharat := Substr(strnum, Length(strnum) - 1, 1); 

      IF asharat != '0' THEN 
        IF asharat = '1' THEN 
          IF( a7ad = '0' ) THEN 
            asharatarabic := 'عشرة'; 
          ELSE 
            IF a7ad = '1' THEN 
              asharatarabic := 'احد عشر'; 
            ELSIF a7ad = '2' THEN 
              asharatarabic := 'اثنا عشر'; 
            ELSIF a7ad = '3' THEN 
              asharatarabic := 'ثلاثة عشر'; 
            ELSIF a7ad = '4' THEN 
              asharatarabic := 'أربعة عشر'; 
            ELSIF a7ad = '5' THEN 
              asharatarabic := 'خمسة عشر'; 
            ELSIF a7ad = '6' THEN 
              asharatarabic := 'ستة عشر'; 
            ELSIF a7ad = '7' THEN 
              asharatarabic := 'سبعة عشر'; 
            ELSIF a7ad = '8' THEN 
              asharatarabic := 'ثمانية عشر'; 
            ELSIF a7ad = '9' THEN 
              asharatarabic := 'تسعة عشر'; 
            END IF; 
          END IF; 
        ELSIF asharat = '2' THEN 
          asharatarabic := 'عشرون'; 
        ELSIF asharat = '3' THEN 
          asharatarabic := 'ثلاثون'; 
        ELSIF asharat = '4' THEN 
          asharatarabic := 'أربعون'; 
        ELSIF asharat = '5' THEN 
          asharatarabic := 'خمسون'; 
        ELSIF asharat = '6' THEN 
          asharatarabic := 'ستون'; 
        ELSIF asharat = '7' THEN 
          asharatarabic := 'سبعون'; 
        ELSIF asharat = '8' THEN 
          asharatarabic := 'ثمانون'; 
        ELSIF asharat = '9' THEN 
          asharatarabic := 'تسعون'; 
        END IF; 
      ELSE 
        asharatarabic := a7adarabic; 
      END IF; 

      IF( a7ad != '0' 
          AND asharat != '1' ) THEN 
        numinarabic := a7adarabic 
                       || ' و ' 
                       || asharatarabic; 
      ELSE 
        numinarabic := asharatarabic; 
      END IF; 
    END IF; 

    -- check me2at digit 
    IF( Length(strnum) > 2 ) THEN 
      me2at := Substr(strnum, Length(strnum) - 2, 1); 

      IF me2at != '0' THEN 
        IF me2at = '1' THEN 
          me2atarabic := 'مائة'; 
        ELSIF me2at = '2' THEN 
          me2atarabic := 'مائتان'; 
        ELSIF me2at = '3' THEN 
          me2atarabic := 'ثلاثمائة'; 
        ELSIF me2at = '4' THEN 
          me2atarabic := 'أربعمائة'; 
        ELSIF me2at = '5' THEN 
          me2atarabic := 'خمسمائة'; 
        ELSIF me2at = '6' THEN 
          me2atarabic := 'ستمائة'; 
        ELSIF me2at = '7' THEN 
          me2atarabic := 'سبعمائة'; 
        ELSIF me2at = '8' THEN 
          me2atarabic := 'ثمانمائة'; 
        ELSIF me2at = '9' THEN 
          me2atarabic := 'تسعمائة'; 
        END IF; 
      ELSE 
        me2atarabic := asharatarabic; 
      END IF; 

      IF( a7ad != '0' 
           OR asharat != '0' ) THEN 
        numinarabic := me2atarabic 
                       || ' و ' 
                       || Writenuminarabicwords(To_number(Substr(strnum,
                                                          Length(strnum)
                                                          - 1, 2))); 
      ELSE 
        numinarabic := me2atarabic; 
      END IF; 
    END IF; 

    -- alaaf digit 
    IF( Length(strnum) > 3 ) THEN 
      alaaf := Substr(strnum, Length(strnum) - 3, 1); 

      IF alaaf != '0' THEN 
        IF alaaf = '1' THEN 
          alaafarabic := 'ألف'; 
        ELSIF alaaf = '2' THEN 
          alaafarabic := 'ألفان'; 
        ELSIF alaaf = '3' THEN 
          alaafarabic := 'ثلاثة الاف'; 
        ELSIF alaaf = '4' THEN 
          alaafarabic := 'أربعة الاف'; 
        ELSIF alaaf = '5' THEN 
          alaafarabic := 'خمسة الاف'; 
        ELSIF alaaf = '6' THEN 
          alaafarabic := 'ستة الاف'; 
        ELSIF alaaf = '7' THEN 
          alaafarabic := 'سبعة الاف'; 
        ELSIF alaaf = '8' THEN 
          alaafarabic := 'ثمانية الاف'; 
        ELSIF alaaf = '9' THEN 
          alaafarabic := 'تسعة الاف'; 
        END IF; 
      ELSE 
        alaafarabic := me2atarabic; 
      END IF; 

      IF( a7ad != '0' 
           OR asharat != '0' 
           OR me2at != '0' ) THEN 
        numinarabic := alaafarabic 
                       || ' و ' 
                       || Writenuminarabicwords(To_number(Substr(strnum,
                                                          Length(strnum)
                                                          - 2, 3))); 
      ELSE 
        numinarabic := alaafarabic; 
      END IF; 
    END IF; 

    -- asharatolof digit 
    IF( Length(strnum) > 4 ) THEN 
      asharatolof := Substr(strnum, Length(strnum) - 4, 1); 

      IF asharatolof != '0' THEN 
        IF asharatolof = '1' THEN 
          asharatolofarabic := 'عشرة آلاف'; 
        ELSIF asharatolof = '2' THEN 
          asharatolofarabic := 'عشرون ألفا'; 
        ELSIF asharatolof = '3' THEN 
          asharatolofarabic := 'ثلاثون ألفا'; 
        ELSIF asharatolof = '4' THEN 
          asharatolofarabic := 'أربعون ألفا'; 
        ELSIF asharatolof = '5' THEN 
          asharatolofarabic := 'خمسون ألفا'; 
        ELSIF asharatolof = '6' THEN 
          asharatolofarabic := 'ستون ألفا'; 
        ELSIF asharatolof = '7' THEN 
          asharatolofarabic := 'سبعون ألفا'; 
        ELSIF asharatolof = '8' THEN 
          asharatolofarabic := 'ثمانون ألفا'; 
        ELSIF asharatolof = '9' THEN 
          asharatolofarabic := 'تسعون ألفا'; 
        END IF; 
      ELSE 
        asharatolofarabic := alaafarabic; 
      END IF; 

      IF( a7ad != '0' 
           OR asharat != '0' 
           OR me2at != '0' 
           OR alaaf != '0' ) THEN 
        numinarabic := Writenuminarabicwords(To_number(Substr(strnum, Length(
                                                       strnum) 
                                                                      - 4, 2)))
                       || CASE 
                            WHEN ( asharatolof = '1' 
                                   AND alaaf = '0' ) THEN ' آلاف ' 
                            ELSE ' ألف ' 
                          END 
                       || CASE 
                            WHEN ( a7ad != '0' 
                                    OR asharat != '0' 
                                    OR me2at != '0' ) THEN ' و ' 
                          END 
                       || Writenuminarabicwords(To_number(Substr(strnum,
                                                          Length(strnum)
                                                          - 2, 3))); 
      ELSE 
        numinarabic := asharatolofarabic; 
      END IF; 
    END IF; 

    -- me2atolof digit 
    IF( Length(strnum) > 5 ) THEN 
      me2atolof := Substr(strnum, Length(strnum) - 5, 1); 

      IF me2atolof != '0' THEN 
        IF me2atolof = '1' THEN 
          me2atolofarabic := 'مائة ألف'; 
        ELSIF me2atolof = '2' THEN 
          me2atolofarabic := 'مائتا ألف'; 
        ELSIF me2atolof = '3' THEN 
          me2atolofarabic := 'ثلاثمائة ألف'; 
        ELSIF me2atolof = '4' THEN 
          me2atolofarabic := 'أربعمائة ألف'; 
        ELSIF me2atolof = '5' THEN 
          me2atolofarabic := 'خمسمائة ألف'; 
        ELSIF me2atolof = '6' THEN 
          me2atolofarabic := 'ستمائة ألف'; 
        ELSIF me2atolof = '7' THEN 
          me2atolofarabic := 'سبعمائة ألف'; 
        ELSIF me2atolof = '8' THEN 
          me2atolofarabic := 'ثمانمائة ألف'; 
        ELSIF me2atolof = '9' THEN 
          me2atolofarabic := 'تسعمائة ألف'; 
        END IF; 
      ELSE 
        me2atolofarabic := asharatolofarabic; 
      END IF; 

      IF( a7ad != '0' 
           OR asharat != '0' 
           OR me2at != '0' 
           OR alaaf != '0' 
           OR asharatolof != '0' ) THEN 
        numinarabic := Writenuminarabicwords(To_number(Substr(strnum, Length(
                                                       strnum) 
                                                                      - 5, 3)))
                       || ' ألفا و ' 
                       || Writenuminarabicwords(To_number(Substr(strnum,
                                                          Length(strnum)
                                                          - 2, 3))); 
      ELSE 
        numinarabic := me2atolofarabic; 
      END IF; 
    END IF; 

    -- more than 999999 is not available in this version 
    IF( Length(strnum) > 6 ) THEN 
      numinarabic := strnum; 
    END IF; 

    RETURN numinarabic; 
END; 

I hope it helps someone.

 

Regards

Mahmoud

Below is a high-level guide with some quick and dirty definitions to inform you as you start to transition your team.

https://www.dragonspears.com/blog/agile-project-using-scrum-methodology

Hello Everybody

 

The Disciplined Agile (DA) process decision framework provides light-weight guidance to help organizations streamline their processes in a context-sensitive manner, providing a solid foundation for business agility.

https://www.disciplinedagiledelivery.com/

 

I hope that helps someone

 

Regards

Mahmoud

Hello Everybody

 

Python is a powerful programming language. It is used extensively by giants such as Google.

 

You might need to run Python script from Web not from CLI as usual. You have to be aware of CGI-BIN importance.

 

Here are two short guides for running Python scripts with cPanel

https://forums.cpanel.net/threads/short-guide-to-running-python-scripts-with-cpanel.244361/

https://www.namecheap.com/support/knowledgebase/article.aspx/9587/29/how-to-run-python-scripts

 

In addition, here is a nice tutorial for building a basic RESTful API in Python

https://www.codementor.io/sagaragarwal94/building-a-basic-restful-api-in-python-58k02xsiq

 

I hope that helps someone

 

Regards

Mahmoud