Wednesday, July 02, 2025

๐Ÿงญ Our Kafka Kubernetes Setup Journey

From CrashLoops to Clarity: A Kafka Story with Punchlines and Pods


๐Ÿ•’ The Timeline (Kafka Chronicles)

  • Day 1: 

    • Installed Lens, deployed initial YAMLs, faced mysterious pod crash loops with no logs — panic set in.
    • Started brute-force debugging using kubectl, then switched to manual container testing via ctr.
  • Day 2: 

    • Narrowed down the issue to Bitnami image defaults, fought KRaft mode, fixed image version.
    • Built dynamic environment variable injection for broker.id, node.id, and advertised listeners.
  • Day 3: 

    • Introduced authentication via secrets, tested producers/consumers.
    • Added REST proxy, tested with cluster ID and REST API.
    • Finalized all YAML files and ran celebratory kafka-topics.sh --create like champions.

๐Ÿ›ซ Phase 0: The Glorious (and Naive) Start

Goal: Spin up a 3-node Apache Kafka cluster using Kubernetes (via Lens), Zookeeper-based (no KRaft), no PVCs, exposed via services and REST proxy.

Initial Stack:

  • Bitnami Kafka Docker image

  • Bitnami Zookeeper image

  • Kubernetes Lens

  • REST Proxy image (confluentinc)

  • Secrets via Kubernetes

Expectation: Easy.

Reality:

"Back-off restarting failed container kafka"

That one line haunted our logs for hours with no output. That single error message forced us to roll up our sleeves, dive into the container runtime, and take control like mad engineers on a runaway train.


๐Ÿ” Phase 1: Let the Logs Speak (and Yell)

Kafka wasn't happy. Errors included:

  • Kafka requires at least one process role to be set

  • KRaft mode requires a unique node.id

  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: unbound variable

๐Ÿคฆ Root Causes:

  • Bitnami defaults to KRaft, even if we want Zookeeper.

  • KAFKA_ENABLE_KRAFT=no was ignored in early attempts.

  • Forgot KAFKA_CFG_NODE_ID and KAFKA_CFG_PROCESS_ROLES

We started building dynamic broker/node IDs using this trick:

ordinal=${HOSTNAME##*-}
export KAFKA_CFG_NODE_ID=$ordinal
export KAFKA_BROKER_ID=$ordinal

๐Ÿ” Phase 2: Debugging the Bitnami Beast

We went full bare-metal using ctr to run Kafka containers manually with all debug flags:

ctr --debug run --rm -t \
  --hostname kafka-test-0 \
  --label name=kafka-test \
  --env BITNAMI_DEBUG=true \
  --env KAFKA_LOG4J_ROOT_LOGLEVEL=DEBUG \
  --env KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 \
  --env KAFKA_BROKER_ID=0 \
  --env ALLOW_PLAINTEXT_LISTENER=yes \
  --env KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT \
  --env KAFKA_CFG_PROCESS_ROLES=broker \
  --env KAFKA_ENABLE_KRAFT=false \
  --env KAFKA_CLUSTER_ID=kafka-test-cluster-1234 \
  --env KAFKA_CFG_NODE_ID=0 \
  docker.io/bitnami/kafka:latest kafka-test

Based on the generated errors, I found out that whatever I do KRAFT is always enabled so I found out that I need to go to a previous version of bitnami/Kafka, I checked the helm chart and if you scroll down after the flags you can find out the version of Kafka used for each image and for that I needed to go to version: kafka:3.9.0-debian-12-r13

✅ Switching to Kafka 3.9.0 fixed issues — Kafka 4.0 enforces KRaft, breaking Zookeeper compatibility


๐Ÿ” Phase 3: Securing It with Secrets (and Sanity)

We created a Kubernetes Secret with the following mapping:

User Password
producer producer@kafkaserver
consumer consumer@kafkaserver
apiVersion: v1
kind: Secret
metadata:
  name: kafka-auth-secret
  namespace: kafka-server
  labels:
    app: kafka
    component: auth
type: Opaque
data:
  KAFKA_CLIENT_USERS: cHJvZHVjZXIsY29uc3VtZXI=
  KAFKA_CLIENT_PASSWORDS: cHJvZHVjZXJAa2Fma2FzZXJ2ZXIsY29uc3VtZXJAa2Fma2FzZXJ2ZXI=

Then injected into the StatefulSet via env.valueFrom.secretKeyRef.

 ✅ To generate the data values for KAFKA_CLIENT_USERS and KAFKA_CLIENT_PASSWORDS you need to use base64 command

echo -n 'producer@kafkaserver,consumer@kafkaserver' | base64

echo -n 'producer,consumer' | base64 


๐Ÿงช Phase 4: Testing Inside the Pod

To validate authentication, we ran:

Producer

kafka-console-producer.sh \
  --broker-list kafka-0.kafka.kafka-server.svc.cluster.local:9092 \
  --topic auth-test-topic \
  --producer.config <(echo "...with producer JAAS config...")

Consumer

kafka-console-consumer.sh \
  --bootstrap-server kafka-0.kafka.kafka-server.svc.cluster.local:9092 \
  --topic auth-test-topic \
  --from-beginning \
  --consumer.config <(echo "...with consumer JAAS config...")

๐ŸŒ Phase 5: REST Proxy Integration

We deployed Kafka REST Proxy and queried the cluster ID:

curl http://kafka-rest-proxy.kafka-server.svc.cluster.local:8082/v3/clusters

Then used:

curl -X POST -H "Content-Type: application/vnd.kafka.v3+json" \
  --data '{"topic_name": "test-topic", "partitions": 1, "replication_factor": 1}' \
  http://kafka-rest-proxy.kafka-server.svc.cluster.local:8082/v3/clusters/<cluster-id>/topics

It worked -- Eventually 


๐Ÿง  Technical Findings

  • Bitnami Kafka 4.0+ forces KRaft — use 3.9.0 for Zookeeper.

  • Set KAFKA_ENABLE_KRAFT=no, but also avoid any KRaft-only vars.

  • Use ordinal to dynamically assign broker.id and node.id.

  • Zookeeper must be deployed before Kafka.

  • REST Proxy works fine once cluster ID is fetched and correct Content-Type is used.

  • The Back-off restarting failed container error with no logs can often mean missing required env vars.


✅ Final Working YAMLs

Kafka StatefulSet (3 Nodes)

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: kafka
  namespace: kafka-server
spec:
  serviceName: kafka
  replicas: 3
  selector:
    matchLabels:
      app: kafka
  template:
    metadata:
      labels:
        app: kafka
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: kafka
          image: bitnami/kafka:3.9.0-debian-12-r13
          ports:
            - containerPort: 9092
          env:
            - name: KAFKA_CFG_ZOOKEEPER_CONNECT
              value: "zookeeper.kafka-server.svc.cluster.local:2181"
            - name: KAFKA_CFG_LISTENERS
              value: "PLAINTEXT://:9092"
            - name: KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP
              value: "PLAINTEXT:PLAINTEXT"
            - name: KAFKA_CFG_INTER_BROKER_LISTENER_NAME
              value: "PLAINTEXT"
            - name: KAFKA_ENABLE_KRAFT
              value: "no"
            - name: ALLOW_PLAINTEXT_LISTENER
              value: "yes"
            - name: KAFKA_CLIENT_USERS
              valueFrom:
                secretKeyRef:
                  name: kafka-auth-secret
                  key: KAFKA_CLIENT_USERS
            - name: KAFKA_CLIENT_PASSWORDS
              valueFrom:
                secretKeyRef:
                  name: kafka-auth-secret
                  key: KAFKA_CLIENT_PASSWORDS
            - name: BITNAMI_DEBUG
              value: "true"
            - name: KAFKA_LOG4J_ROOT_LOGLEVEL
              value: "DEBUG"
          command:
            - bash
            - -c
            - |
              ordinal=${HOSTNAME##*-}
              export KAFKA_CFG_NODE_ID=$ordinal
              export KAFKA_BROKER_ID=$ordinal
              export KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://${HOSTNAME}.kafka.kafka-server.svc.cluster.local:9092
              exec /opt/bitnami/scripts/kafka/entrypoint.sh /opt/bitnami/scripts/kafka/run.sh

✅ For production make sure to remove DEBUG related configurations 

Zookeeper StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zookeeper
  namespace: kafka-server
spec:
  serviceName: zookeeper
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: zookeeper
          image: bitnami/zookeeper:latest
          ports:
            - containerPort: 2181
              name: client
          env:
            - name: ALLOW_ANONYMOUS_LOGIN
              value: "yes"

REST Proxy Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-rest-proxy
  namespace: kafka-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-rest-proxy
  template:
    metadata:
      labels:
        app: kafka-rest-proxy
    spec:
      containers:
        - name: rest-proxy
          image: confluentinc/cp-kafka-rest:7.4.0
          ports:
            - containerPort: 8082
          env:
            - name: KAFKA_REST_BOOTSTRAP_SERVERS
              value: PLAINTEXT://kafka.kafka-server.svc.cluster.local:9092
            - name: KAFKA_REST_HOST_NAME
              value: kafka-rest-proxy

Services

---
apiVersion: v1
kind: Service
metadata:
  name: kafka
  namespace: kafka-server
spec:
  clusterIP: None
  selector:
    app: kafka
  ports:
    - name: kafka
      port: 9092
      targetPort: 9092
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper
  namespace: kafka-server
spec:
  clusterIP: None
  selector:
    app: zookeeper
  ports:
    - port: 2181
      targetPort: 2181
      name: client
---
apiVersion: v1
kind: Service
metadata:
  name: kafka-rest-proxy
  namespace: kafka-server
spec:
  type: ClusterIP
  selector:
    app: kafka-rest-proxy
  ports:
    - port: 8082
      targetPort: 8082

Sunday, July 11, 2021

git_find_big Contrib Back

I am contributing back some modifications as my way to thanks Antony Stubbs for the git_find_big.sh script.

As per Antony Stubbs recommendations, I have added some documentation for the changes I made and also made more changes so this should be the latest version.

#!/bin/bash
#set -x

# Shows you the largest objects in your repo's pack file.
# Written for osx.
#
# @see https://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
# @author Antony Stubbs

# Did some modifications on the script - 08-July-2021 @author Khamis Siksek
# [KS] changed the size to kilo bytes
# [KS] added KB=1024 constant to be used later in size calculations
# [KS] changed " to ' where applicable
# [KS] added a check for the pack file if it exists or not
# [KS] made the number of returned big files become a passable parameter
# [KS] used topBigFilesNo=10 as default value if not passed
# [KS] changed `command` to $(command) where applicable
# [KS] put the output in formattedText and echo that variable
# [KS] added exit 0 in case of success and exit -1 in case of an error
# [KS] packFile might hold multiple idx files thats why I used $(echo ${packFile}) in verify-pack
# [KS] added a check on the size and compressedSize since if they are too small they will show wrong output
# [KS] changed the variable "y" to "object" to make more readable
# [KS] enclosed all variables with {} wherever applicable
# [KS] changed sort to regular sort instead of reverse and used tail instead of head
# [KS] added more types to grep -v in objects (was only chain now it contains commit and tree)
# [KS] added informative message for the user that this may take few minutes

# make the number of returned big files configurable and can be passed as a parameter
topBigFilesNo=${1};
[[ -z "${1}" ]] && topBigFilesNo=10;

# check if the pack file exists or not
packFile=$(ls -1S .git/objects/pack/pack-*.idx 2> /dev/null);
[[ $? != 0 ]] && echo "index pack file(s) in .git do not exist" && exit -1;

# informative message for the user
echo 'This may take few seconds(minutes) depending on the size of the repository, please wait ...';

objects=$(git verify-pack -v $(echo "${packFile}") | grep -v 'chain\|commit\|tree' | sort -k3n | tail -"${topBigFilesNo}");

# as they are big files its more reasonable to show the size in KiB
echo 'All sizes are in KiBs. The pack column is the size of the object, compressed, inside the pack file.';

# constant
KB=1024;

# set the internal field seperator to line break, to iterate easily over the verify-pack output
IFS=$'\n';

# preparing the header of the output
output='Size,Pack,SHA,Location';

# loop goes through the objects to check their sizes
for object in $objects
do
    # extract the size in kilobytes
    size=$(echo ${object} | cut -f 5 -d ' ');
    [[ ! -z ${size} ]] && size=$((${size}/${KB})) || size=0;

    # extract the compressed size in kilobytes
    compressedSize=$(echo ${object} | cut -f 6 -d ' ');
    [[ ! -z ${compressedSize} ]] && compressedSize=$((${compressedSize}/${KB})) || compressedSize=0;

    # extract the SHA
    sha=$(echo ${object} | cut -f 1 -d ' ');

    # find the objects location in the repository tree
    other=$(git rev-list --all --objects | grep ${sha});
    
    #lineBreak=$(echo -e "\n")
    output="${output}\n${size},${compressedSize},${other}";
done

formattedOutput=$(echo -e ${output} | column -t -s ', ');
echo "${formattedOutput}";

exit 0;

Wednesday, July 24, 2019

xml2csv.sh

Thanks to David who irritated me since my old xml2csv.sh file used to take 7-8 minutes to generate around 13k+ lines of CSV so I went back and rewritten the script in a way that now it takes around 2 seconds :-D

The script contains validation and comments but putting that aside the coversion is actually one liner command as the following:

tail +n filename.xml | sed s'/\(<.\+>\)\(.\+\)\?\(<\/.\+>\)/\2^/'g | tr -d '\n' | sed s'/<\/\?ITEM>/\n/'g | grep -v '^$'

The only things that needs to be changed in the previous command are the items highlighted in blue:
  • +n: Lines to skip
  • filename.xml: The xml file to convert to csv
  • ^: The delimiter to be used in the output file
  • ITEM: The XML object item header such as in the following:
<ITEM>
<CAR-LICENSE>83838</CAR-LICENSE>
<CAR-MODEL>Ferrari</CAR-MODEL>
<CAR-YEAR>2015</CAR-YEAR>
</ITEM>

And this is the long script:

#!/bin/bash
###############################################################################
#    Written by Khamis Siksek (Saksoook)
#    khamis dot siksek at gmail dot com
#    14 July 2019
# Description:
#    A bash script that aims to convert XML input to CSV file
# License:
#    This program/script is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see .
###############################################################################

# Passed variables
XML_FILENAME="${1}"; #'Filename.xml';
LINES_TO_SKIP="${2}"; # If there are XML meta tags that do not contain data
CSV_FIELDS_FILENAME="${3}"; #'csv_fields.txt';
INITIAL_ITEM_TAG="${4}"; #'ITEMS';
OUTPUT_DELIMITER="${5:-^}"; # Default value ^

# OUTPUT_FILENAME can be empty and therefore GENERATED_NAME will be used
GENERATED_NAME="$(basename "${XML_FILENAME}")_$$.csv";
OUTPUT_FILENAME="${6:-/tmp/${GENERATED_NAME}}"; # Can be empty

# Validation for mandatory fields (using && operator)
[[ -z "${XML_FILENAME}" ]] && echo 'Error: XML_FILENAME cannot be empty' && exit -1;
[[ -z "${CSV_FIELDS_FILENAME}" ]] && echo 'Error: CSV_FIELDS_FILENAME cannot be empty' && exit -2;
[[ -z "${INITIAL_ITEM_TAG}" ]] && echo 'Error: INITIAL_ITEM_TAG cannot be empty' && exit -3;

# Initiate the file with the header line (extracted from the CSV_FIELDS_FILENAME)
HEADER_LINE=$(echo `cat "${CSV_FIELDS_FILENAME}"` | sed s'/ /'"${OUTPUT_DELIMITER}"'/'g);

echo -n "${HEADER_LINE}" > "${OUTPUT_FILENAME}";

#######################################################################################################################
# This is much faster than going through a loop and processing the file line-by-line. I kept the loop version for history
# purposes only. I know that using the text processing commands on a whole file is much more faster than doing it
# line-by-line due to the fact that such commands are optimized to process big and huge files and can process files much
# more faster than read each line from a file and spawning command(s) for each line, but I though the impact will be in
# the fraction of seconds but it appears that the impact is really big (2-3 seconds new way : up to 7-8 minutes old way).
#
#Now to explain the command here it is (arrangement of commands is important):
#
#tail +"${LINES_TO_SKIP}" "${XML_FILENAME}": skip the first few lines if not related (such as xml meta-tags)
#sed s'/\(<.\+>\)\(.\+\)\?\(<\/.\+>\)/\2'"${OUTPUT_DELIMITER}"'/'g: remove the xml tags and add the delimiter
#tr -d '\n': remove the new lines from the result making it one line
#sed s'/<\/\?'"${INITIAL_ITEM_TAG}"'>/\n/'g: replace the INITIAL_ITEM_TAG with a newline
#grep -v '^$' : because of the previous sed command there will be extra empty lines so this command removes the empty lines
#######################################################################################################################

tail +"${LINES_TO_SKIP}" "${XML_FILENAME}" | sed s'/\(<.\+>\)\(.\+\)\?\(<\/.\+>\)/\2'"${OUTPUT_DELIMITER}"'/'g | tr -d '\n' | sed s'/<\/\?'"$
{INITIAL_ITEM_TAG}"'>/\n/'g | grep -v '^$' >> "${OUTPUT_FILENAME}";
exit 0

Sunday, July 14, 2019

xml2csv and csv2xml

I was working on a request to convert an XML file to CSV file, I tried to find a tool or a script to do that but I didn't find something that is straightforward.

There might be one, but to be honest I didn't search for a long time and when I found this https://github.com/dfellis/2csv and installed xml2 on ubuntu that is written by Dan Egnor, I decided to ignore finding a ready tool and thought of writing my own.

This is not the first time I write my own script but this is the first time I thought of sharing it and get some feedback and ideas to improve it and I hope this will not be the last (depends on the feedback). So here you go:

xml2csv.sh

#!/bin/bash
###############################################################################
#    Written by Khamis Siksek (Saksoook)
#    khamis dot siksek at gmail dot com
#    14 July 2019
# Description:
#    A bash script that aims to convert XML input to CSV file
# License:
#    This program/script is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see .
###############################################################################

# Passed variables
XML_FILENAME="${1}"; #'Filename.xml';
LINES_TO_SKIP="${2}"; # If there are XML meta tags that do not contain data
CSV_FIELDS_FILENAME="${3}"; #'csv_fields.txt';
INITIAL_ITEM_TAG="${4}"; #'ITEMS';
OUTPUT_DELIMITER="${5:-^}"; # Default value ^

# OUTPUT_FILENAME can be empty and therefore GENERATED_NAME will be used
GENERATED_NAME="$(basename "${XML_FILENAME}")_$$.csv";
OUTPUT_FILENAME="${6:-/tmp/${GENERATED_NAME}}"; # Can be empty

# Validation for mandatory fields (using && operator)
[[ -z "${XML_FILENAME}" ]] && echo 'Error: XML_FILENAME cannot be empty' && exit -1;
[[ -z "${CSV_FIELDS_FILENAME}" ]] && echo 'Error: CSV_FIELDS_FILENAME cannot be empty' && exit -2;
[[ -z "${INITIAL_ITEM_TAG}" ]] && echo 'Error: INITIAL_ITEM_TAG cannot be empty' && exit -3;

# Initiate the file with the header line (extracted from the CSV_FIELDS_FILENAME)
HEADER_LINE=$(echo `cat "${CSV_FIELDS_FILENAME}"` | sed s'/ /'"${OUTPUT_DELIMITER}"'/'g);
echo "${HEADER_LINE}" > "${OUTPUT_FILENAME}";

# +2 for the INITIAL_ITEM_TAG OPENING AND CLOSING and
XML_FIELDS_COUNT="$(($(cat "${CSV_FIELDS_FILENAME}" | wc -l)+2))";

# Counting how many items are in the file
ITEMS_COUNT=$(cat "${XML_FILENAME}" | grep '<'"${INITIAL_ITEM_TAG}"'>' | wc -l);

LINES_OFFSET=0;
declare -a XML_ITEMS;

for ((i=1;i<=${ITEMS_COUNT};i++)); do
{
    # tail +LINES_TO_SKIP skip the first line (Header Line)
    # The sed command is used to add _ to the values so they do not get separated when
    # building the array as the read -a XML_ITEMS uses the SPACE as the separator
    # +${LINES_OFFSET} is needed to skip the read ITEM and go to the next item
    read -a XML_ITEMS <<< $(echo `cat "${XML_FILENAME}" | tail +$((${LINES_TO_SKIP}+${LINES_OFFSET})) | head -"${XML_FIELDS_COUNT}" | sed
 s'/[[:space:]]\+/_/'g`);

    for ((j=1;j<$((${XML_FIELDS_COUNT}-1));j++)); do
    {
        # The first sed command isolates the value from the tags (\2)
        # The second sed command replaces the _ with space (this _ was added in a previous sed command)
        echo -n "${XML_ITEMS[$j]}${OUTPUT_DELIMITER}" | sed s'/\(<.\+>\)\(.\+\)\?\(<\/.\+>\)/\2/'g | sed s'/_/ /'g >> "${OUTPUT_FILEN
AME}";
    }
    done

    # Adding a new line at the end of each csv record
    echo >> "${OUTPUT_FILENAME}";

    # As stated before this calculates the next starting point for the next item
    LINES_OFFSET=$((LINES_OFFSET+XML_FIELDS_COUNT));
    #echo "${LINES_OFFSET}";
}
done

exit 0;


-------------------------------------------------------------------


csv2xml.sh

#!/bin/bash
###############################################################################
#    Written by Khamis Siksek (Saksoook)
#    khamis dot siksek at gmail dot com
#    14 July 2019
# Description:
#    A bash script that aims to convert XML input to CSV file
# License:
#    This program/script is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see .
###############################################################################

# Passed variables
CSV_FILENAME="${1}"; #'Filename.csv';
INITIAL_ITEM_TAG="${2}"; #'ITEMS';
INPUT_DELIMITER="${3:-^}"; # Default value ^

# OUTPUT_FILENAME can be empty and therefore GENERATED_NAME will be used
GENERATED_NAME="$(basename "${CSV_FILENAME}")_$$.xml";
OUTPUT_FILENAME="${4:-/tmp/${GENERATED_NAME}}";

# Validation for mandatory fields (using && operator)
[[ -z "${CSV_FILENAME}" ]] && echo 'Error: CSV_FILENAME cannot be empty' && exit -1;
[[ -z "${INITIAL_ITEM_TAG}" ]] && echo 'Error: INITIAL_ITEM_TAG cannot be empty' && exit -3;

# Initiate the file with the header line (extracted from the CSV_FIELDS_FILENAME)
HEADER_LINE=$(head -1 "${CSV_FILENAME}");

# Array to contain the XML items tags
declare -a XML_ITEMS;
read -a XML_ITEMS <<< $(echo "${HEADER_LINE//${INPUT_DELIMITER}/ }");

#echo "${#XML_ITEMS[@]}"; # Debugging

> "${OUTPUT_FILENAME}";

# tail +2 to skip the header line
cat "${CSV_FILENAME}" | tail +2 | while read CSV_LINE; do
{
    # Start the item xml tag
    echo '<'"${INITIAL_ITEM_TAG}"'>' >> "${OUTPUT_FILENAME}";

    # For the read command to use the INPUT_DELIMITER as the delimiter
    OIFS="${IFS}";
    IFS="${INPUT_DELIMITER}";
    read -a CSV_LINE_ARR <<< $(echo "${CSV_LINE}");
    IFS="${OIFS}";

    for ((i=0;i<"${#XML_ITEMS[@]}";i++)); do
    {
        # Building the XML tags
        echo -n '    <'"${XML_ITEMS[$i]}"'>' >> "${OUTPUT_FILENAME}";
        echo -n "${CSV_LINE_ARR[$i]}" >> "${OUTPUT_FILENAME}";
        echo -n '</'"${XML_ITEMS[$i]}"'>' >> "${OUTPUT_FILENAME}";
        echo >> "${OUTPUT_FILENAME}";
    }
    done

    # End the item xml tag
    echo '</'"${INITIAL_ITEM_TAG}"'>' >> "${OUTPUT_FILENAME}";
}
done

exit 0;






-------------------------------------------------------------------

To run them (of course they have to be executable):

csv2xml.sh CSV_FILENAME ITEM_START_TAG DELIMITER OUTPUT_FILENAME

xml2csv.sh XML_FILENAME LINES_TO_SKIP CSV_FIELDS_FILE ITEM_START_TAG DELIMITER OUTPUT_FILENAME

Let us assume that you have this example.xml file:

<ITEM>
<ITEM-CODE>1</ITEM-CODE>
<TRANSACTION-DATE>20171207121400</TRANSACTION-DATE>
<ITEM-TYPE>Bus</ITEM-TYPE>
<ORDERED-BY>Customer1</ORDERED-BY>
<ORDER-DATE>20181207111600</ORDER-DATE>
<ORDER-ID>4190126</ORDER-ID>
<CUSTOMER-LOCATION>Egypt</CUSTOMER-LOCATION>
</ITEM>
<ITEM>
<ITEM-CODE>5</ITEM-CODE>
<TRANSACTION-DATE>20161207111400</TRANSACTION-DATE>
<ITEM-TYPE>Car</ITEM-TYPE>
<ORDERED-BY>Customer2</ORDERED-BY>
<ORDER-DATE>20161207111400</ORDER-DATE>
<ORDER-ID>3190996</ORDER-ID>
<CUSTOMER-LOCATION>Jordan</CUSTOMER-LOCATION>
</ITEM>



You will need to generate the example_fields.txt (containing the XML start tags without the <>) to be as the following:

more example_fields.txt

ITEM-CODE
TRANSACTION-DATE
ITEM-TYPE
ORDERED-BY
ORDER-DATE
ORDER-ID
CUSTOMER-LOCATION


If you run xml2csv.sh example.xml 1 example_fields.txt 'ITEM' '^'

You will get

more /tmp/example.xml_14799.csv
 

ITEM-CODE^TRANSACTION-DATE^ITEM-TYPE^ORDERED-BY^ORDER-DATE^ORDER-ID^CUSTOMER-LOCATION
1^20171207121400^Bus^Customer1^20181207111600^4190126^Egypt^
5^20161207111400^Car^Customer2^20161207111400^3190996^Jordan^


when you run csv2xml.sh on the generated file as the following:
bash csv2xml.sh /tmp/example.xml_14799.csv 'ITEM' '^'

You will get

more /tmp/example.xml_14799.csv_14884.xml

<ITEM>
    <ITEM-CODE>1</ITEM-CODE>
    <TRANSACTION-DATE>20171207121400</TRANSACTION-DATE>
    <ITEM-TYPE>Bus</ITEM-TYPE>
    <ORDERED-BY>Customer1</ORDERED-BY>
    <ORDER-DATE>20181207111600</ORDER-DATE>
    <ORDER-ID>4190126</ORDER-ID>
    <CUSTOMER-LOCATION>Egypt</CUSTOMER-LOCATION>
</ITEM>
<ITEM>
    <ITEM-CODE>5</ITEM-CODE>
    <TRANSACTION-DATE>20161207111400</TRANSACTION-DATE>
    <ITEM-TYPE>Car</ITEM-TYPE>
    <ORDERED-BY>Customer2</ORDERED-BY>
    <ORDER-DATE>20161207111400</ORDER-DATE>
    <ORDER-ID>3190996</ORDER-ID>
    <CUSTOMER-LOCATION>Jordan</CUSTOMER-LOCATION>
</ITEM>


Saturday, September 20, 2014

Third Arduino Project

This time it was influenced by my younger brother to write a code that will detect the distenation and if it is more than 100 cm to light up a green light, if it is less than 100 but more than or equal 50 to light up a blue LED and if it is less than 50 to light up a red LED. If the distance is critically small (less than or equal 10 cm) to start flashing the red LED and play a long alarming tone. Then we modified the code to play a smaller alarming tone on other distenations too.

Shown is the circuit and below is the code.









#include

#define TRIG_PIN 5
#define ECHO_PIN 6

#define RED_LED 8
#define GREEN_LED 9
#define BLUE_LED 10

#define SPEAKER_PIN 12

void setup ()
{
  Serial.begin (9600);
 
  PinMode (TRIG_PIN, OUTPUT);
  PinMode (ECHO_PIN, INPUT);
 
  PinMode (RED_LED, OUTPUT);
  PinMode (GREEN_LED, OUTPUT);
  PinMode (BLUE_LED, OUTPUT);

  PinMode (SPEAKER_PIN, OUTPUT);
}

void loop ()
{
  DigitalWrite (TRIG_PIN, HIGH);
  delayMicroseconds (100);
  DigitalWrite (TRIG_PIN, LOW);
  delayMicroseconds (100);
  DigitalWrite (TRIG_PIN, HIGH);

  int iPulseLength = pulseIn (ECHO_PIN, HIGH);
  float fDistance = iPulseLength / 29.387 / 2;

 Serial.print ("The distance in Centimeters is: ");
 Serial.println (fDistance);

 if (fDistance <= 10.0)
 {
    DigitalWrite (GREEN_LED, LOW);
    DigitalWrite (BLUE_LED, LOW);
   
    DigitalWrite (RED_LED, HIGH);
    PlayTone (SPEAKER_PIN, NOTE_B6, 2);
    delay (500);
    DigitalWrite (RED_LED, LOW);
    //PlayTone (SPEAKER_PIN, NOTE_G3, 4);
    //delay (500);
 }
 else if (fDistance > 10 && fDistance <= 50.0)
 {
   DigitalWrite (RED_LED, HIGH);
   DigitalWrite (GREEN_LED, LOW);
   DigitalWrite (BLUE_LED, LOW);

   PlayTone (SPEAKER_PIN, NOTE_B6, 4);
   delay (500);
 }
 else if (fDistance > 50.0 && fDistance <= 100.0)
 {
   DigitalWrite (RED_LED, LOW);
   DigitalWrite (GREEN_LED, LOW);
   DigitalWrite (BLUE_LED, HIGH);

   PlayTone (SPEAKER_PIN, NOTE_B6, 8);
   delay (500);
 }
 else //fDistance > 100
 {
   DigitalWrite (RED_LED, LOW);
   DigitalWrite (GREEN_LED, HIGH);
   DigitalWrite (BLUE_LED, LOW);
 }

 delay (1000);
}

Friday, September 19, 2014

Second Arduino Project

This time I learned new thing, which is how to control the speaker, I also learned how to build my own llibrary and use it in Arduino. I have created an API that contains the following functions:
  1. bool ValidAnalogPin (IN const int ciAnalogPin);
  2. bool ValidDigitalPin (IN const int ciDigitalPin);
  3. bool ValidPWMPin (IN const int ciPWMPin);
  4. bool ValidNote (IN const unsigned int cuiNote);
  5. float ReadTemperature (IN const int ciTempPin);
  6. int PlayTone    (IN const int ciSpeakerPin, IN const unsigned int cuiNote, IN const unsigned long culDuration); 
I also created an include file that includes different constants and definitions that I will be using in all my upcoming Arduino projects.


/*************************Arduino_api file******************************/

#ifndef __ARDUINO_API_H__
#define __ARDUINO_API_H__

#include "Arduino.h"
#include "consts.h"

/*
    Description:
        Validates that the AnalogPin used is in the valid range
    Input:
        ciAnalogPin: Analog pin number
    Output:
        N/A
    Returns:
        true if valid and false otherwise
*/
bool ValidAnalogPin (IN const int ciAnalogPin);

/*
    Description:
        Validates that the DigitalPin used is in the valid range
    Input:
        ciDigitalPin: Digital pin number
    Output:
        N/A
    Returns:
        true if valid and false otherwise
*/
bool ValidDigitalPin (IN const int ciDigitalPin);

/*
    Description:
        Validates that the PWMPin used is in the valid range
    Input:
        ciPWMPin: PWM pin number
    Output:
        N/A
    Returns:
        true if valid and false otherwise
*/
bool ValidPWMPin (IN const int ciPWMPin);

/*
    Description:
        Validates that the Note used is in the valid range
    Input:
        cuiNote: Passed note based on pitches.h
    Output:
        N/A
    Returns:
        true if valid and false otherwise
*/
bool ValidNote (IN const unsigned int cuiNote);

/*
    Description:
        Reads the temperature from the analog pin, then
        converts it to celsius which based on it you can
        take desicions
    Input:
        ciTempPin: The pin used to read the temperature
    Output:
        N/A
    Returns:
        Returns the temperature in celsius degrees
*/
float ReadTemperature (IN const int ciTempPin);

/*
    Description:
        Plays the tone based on the passed note and duration
    Input:
        ciSpeakerPin: The pin used to play the tone
        cuiNote: The note passed to be played
        culDuration: The duration in milliseconds of the note
    Output:
        N/A
    Returns:
        -1: if the pin is not valid digital pin
        -2: if the duration equals 0 to avoid divide by zero
        -3: if the note is not valid note as in pitches.h
         0: if everything is OK
    Notes:
        To play quarter tone pass the duration = 4, to play half tone
        pass the duration = 8 since internal calculation is done which
        divides 1000 over the passed culDuration
*/
int PlayTone    (
        IN const int ciSpeakerPin,
        IN const unsigned int cuiNote,
        IN const unsigned long culDuration //milliseconds
        );

#endif //__ARDUINO_API_H__

/*************************consts.h file**********************************/

#ifndef __CONSTS_H__
#define __CONSTS_H__

// Constants and definitions

#define IN
#define OUT
#define INOUT

#include "pitches.h"

// Valid Analog Pins
const int ciaAnalogPins[] = {A0,A1,A2,A3,A4,A5};

// Valid Digital Pins
const int ciaDigitalPins[] = {2,3,4,5,6,7,8,9,10,11,12,13};

// Valid PWM Pins
const int ciaPWMPins[] = {3,5,6,9,10,11};

// Valid Notes
const unsigned int cuiaValidNotes[] = {
NOTE_B0, NOTE_C1, NOTE_CS1, NOTE_D1, NOTE_DS1, NOTE_E1, NOTE_F1, NOTE_FS1, NOTE_
G1, NOTE_GS1, NOTE_A1, NOTE_AS1, NOTE_B1, NOTE_C2, NOTE_CS2, NOTE_D2,
NOTE_DS2, NOTE_E2, NOTE_F2, NOTE_FS2, NOTE_G2, NOTE_GS2, NOTE_A2, NOTE_AS2, NOTE
_B2, NOTE_C3, NOTE_CS3, NOTE_D3, NOTE_DS3, NOTE_E3, NOTE_F3, NOTE_FS3,
 NOTE_G3, NOTE_GS3, NOTE_A3, NOTE_AS3, NOTE_B3, NOTE_C4, NOTE_CS4, NOTE_D4, NOTE
_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4
, NOTE_B4, NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOT
E_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5, NOTE_C6, NOTE_CS6, NOTE_D6
, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NO
TE_B6, NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS
7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7, NOTE_C8, NOTE_CS8, NOTE_D8, NO
TE_DS8, NOTE_BLANK};

// Forbidden Pins
const int ciRxPin = 0;
const int ciTxPin = 1;

#endif // __CONSTS_H__
/************************ Sketch file ****************************/

/*
    Project Name: Temperature Sensor with Sound Alert
    Description: This is going to work indefinitely checking for temperature
    and if the temperature is critical high it will sound alarm and the red
    LED will start flashing.
    If the temperature is normal the green LED lights and if the temperature
    is LOW then the blue LED lights.
    Learned Stuff:  1- Making my own API and include (library) and calling it fr
om
            outside.
            2- Making the API defensive and created consts.h file that contains
            valid inputs (pins and notes).
*/

#include

#define COLD_ALARM_LED 6
#define HOT_ALARM_LED 7
#define NORMAL_LED 8
#define SPEAKER_PIN 10

#define HIGH_TEMP 25.0
#define CRITICAL_HIGH_TEMP 26.0
#define LOW_TEMP 24.0

#define TEMPERATURE_PIN A0

void setup ()
{
  Serial.begin (9600);

  pinMode (HOT_ALARM_LED, OUTPUT);
  pinMode (NORMAL_LED, OUTPUT);
  pinMode (COLD_ALARM_LED, OUTPUT);
}

void loop ()
{
  float fTemp = ReadTemperature(TEMPERATURE_PIN);

  if (fTemp == -100.0)
  {
    Serial.println ("An Error Occured while reading temperature");
  }

  if (fTemp >= HIGH_TEMP)
  {
    digitalWrite (COLD_ALARM_LED, LOW);
    digitalWrite (HOT_ALARM_LED, HIGH);
    digitalWrite (NORMAL_LED, LOW);
    
    while (fTemp >= CRITICAL_HIGH_TEMP)
    {
      digitalWrite (HOT_ALARM_LED, LOW);
      delay (1000);
      digitalWrite (HOT_ALARM_LED, HIGH);
      if (PlayTone (SPEAKER_PIN, NOTE_B6, 8) == 0)
        if (PlayTone (SPEAKER_PIN, NOTE_A7, 8) == 0)
          delay (1000);

      fTemp = ReadTemperature(TEMPERATURE_PIN);
      if (fTemp == -100.0)
      {
        Serial.println ("An Error Occured while reading temperature");
      }
    }
  }
  else if (fTemp <= LOW_TEMP)
  {
    digitalWrite (HOT_ALARM_LED, LOW);
    digitalWrite (COLD_ALARM_LED, HIGH);
    digitalWrite (NORMAL_LED, LOW);
  }
  else
  {
    digitalWrite (HOT_ALARM_LED, LOW);
    digitalWrite (COLD_ALARM_LED, LOW);
    digitalWrite (NORMAL_LED, HIGH);
  }
  delay (1000);
}

Saturday, September 13, 2014

My First Arduino Project

I had this Basic Arduino Kit from the US (and got it to pass the Jordanian customs) and started learning it.

The first tutorial was about the thermal detector or temperature sensor.  It was a great achievement for me to get it to read the temperature and get it to reflect it on the serial monitor. I also read the first digital lesson regarding lightining up the LED. So now I had to use my basic knowledge about both in a project and thats what i did.

I combined what I learned about the thermal detection along with LED control to create my first project "The Temperature Detection With Basic Alarm".

The idea basically is simple; it will detect the temperature and if it is greater than or equal 22 it will light up the Red Alarm LED and if it is less than or equal 20 it will light up the Blue Alarm LED, otherwise both LEDs are off (which means that I would like to keep the temperature between 20 and 22 exclusive). When I finished, I thought why not adding an LCD to the combination to show up the temperature and that's what I did. Of course this could be connected to an AC controller where you can control the temperature as desired.

Below is the code along with pictures for the circuit.

// Detecting temperture and based on it will light up the red alarm LED
// if the temp grt or equal 22 and will light up the blue alarm LED
// if the is less or equal 20 while at the same time will show the temp on the LCD

#include <LiquidCrystal.h>
const int HOT_ALARM_LED = 7;
const int COLD_ALARM_LED = 6;
const int TEMPERATURE_PIN = A0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup ()
{
  Serial.begin (9600);
  
  pinMode (HOT_ALARM_LED, OUTPUT);
  pinMode (COLD_ALARM_LED, OUTPUT);
  
  lcd.begin(16, 2);
}

void loop ()
{
  while (float fTemp = ReadTemperature())
  {
    if (fTemp >= 22.0)
    {
      digitalWrite (COLD_ALARM_LED, LOW);
      digitalWrite (HOT_ALARM_LED, HIGH);
    }
    else if (fTemp <=20.0)
    {
      digitalWrite (HOT_ALARM_LED, LOW);
      digitalWrite (COLD_ALARM_LED, HIGH);
    }
    else
    {
      digitalWrite (HOT_ALARM_LED, LOW);
      digitalWrite (COLD_ALARM_LED, LOW);
    }
    delay (1000);
  }
}

float ReadTemperature ()
{
  lcd.clear();
  
  float fTemp = 0.0;
  
  fTemp = analogRead (TEMPERATURE_PIN);
  
  fTemp = (fTemp / 1023) * 500;
  
  Serial.print ("Temperature is: ");
  Serial.print (fTemp);
  Serial.println (" C");
  
  lcd.print (fTemp);
  
  return fTemp;
}

Sunday, December 23, 2012

ุญูƒูŠู… ูุณุงุฏ ุฅุฏุงุฑูŠ ูˆู…ุงู„ูŠ ... ู‡ู„ุง ุนู…ูŠ

ู„ู‚ุฏ ุฅุณุชู…ุชุนุช ุฎู„ุงู„ ุงู„ูุชุฑุฉ ุงู„ู…ุงุถูŠุฉ ูˆุฃู†ุง ุฃู‚ุฑุฃ ู…ู‚ุงู„ุงุช ุงู„ูุณุงุฏ ุนู† ู…ุดุฑูˆุน ุญูƒูŠู… ูˆุนู† ู‡ุฏุฑ ุงู„ุฃู…ูˆุงู„ ูˆุถูŠุงุน ุงู„ุนูŠุงู„ ูˆู…ุฏู‰ ุฎุทูˆุฑุฉ ุงู„ู…ุดุฑูˆุน ูˆ ูˆ ูˆ، ูˆู…ู† ุฃุฌู„ ุฐู„ูƒ ู‚ู…ุช ุจูˆุถุน ูƒู„ ู…ู‚ุงู„ ุฃุฑุงู‡ุง ุญูˆู„ ู‡ุฐุง ุงู„ู…ูˆุถูˆุน ููŠ ู…ุฑุฌุนูŠุฉ ุงู„ู…ุชุตูุญ (browser bookmark) ุญุชู‰ ุฃู‚ุฑุฃู‡ู… ูƒู„ู…ุง ุฃุฑุฏุช ุงู„ุถุญูƒ ุฃูˆ ุงู„ุจูƒุงุก ูุนู„ูŠุง ุนู„ู‰ ูƒู… ุงู„ุฅุชู‡ุงู…ุงุช ุงู„ุฌุฒุงููŠุฉ ุงู„ุชูŠ ูŠู‚ูˆู… ุจู‡ุง ุนุงู…ّุฉ ุงู„ู†ّุงุณ ูˆู„ู„ุฃุณู ู„ุญู‚ ุงู„ู…ุซู‚ููˆู† ุจุงู„ุนูˆุงู… ูˆุจุฏุฃูˆุง ุจุงู„ุฅุชู‡ุงู… ุฃูŠุถุง ูˆู†ู‚ู„ ู…ุง ูŠู‚ุฑุฃูˆู‡ ุจุฏูˆู† ุฃูŠ ุฏู„ูŠู„.

ู…ุดุฑูˆุน ุญูƒูŠู… ู‡ูˆ ู…ุดุฑูˆุน ุฑุงุฆุฏ ุจุงู„ุฃุฑุฏู† ูˆุงู„ูˆุทู† ุงู„ุนุฑุจูŠ ูˆููŠ ู…ุฌุงู„ ุงู„ุตุญุฉ ุจุดูƒู„ ุนุงู… ูˆู†ุฌุงุญู‡ ูŠุนุฏ ู†ุฌุงุญุง ุนู„ู‰ ุฃูƒุซุฑ ู…ู† ุตุนูŠุฏ ูƒู„ู‡ุง ุณูˆู ุชูƒูˆู† ุฎูŠุฑุง ู„ู„ุฃุฑุฏู† ูˆู…ุซุงู„ ุฐู„ูƒ ุฅุชุงุญุฉ ุงู„ู…ุฒูŠุฏ ู…ู† ูุฑุต ุงู„ุนู…ู„ ูˆู‡ุฐุง ูˆุงุถุญ ู…ู† ุชุนุงูˆู† ุงู„ุดุฑูƒุฉ ู…ุน ุงู„ุฌุงู…ุนุงุช ุงู„ุฃุฑุฏู†ูŠุฉ ุณูˆุงุกุง ุงู„ุฎุงุตุฉ ู…ู†ู‡ุง ุฃูˆ ุงู„ุญูƒูˆู…ูŠุฉ ูˆูƒุงู†ุช ู†ุชูŠุฌุฉ ู‡ุฐุง ุงู„ุชุนุงูˆู† ุฅู†ุดุงุก ุฏุจู„ูˆู… ู„ู„ุญูˆุณุจุฉ ุงู„ุตุญูŠุฉ ููŠ ุฌุงู…ุนุฉ ุงู„ุฃู…ูŠุฑุฉ ุณู…ูŠุฉ.

ูƒุฐู„ูƒ ู…ุดุฑูˆุน ุญูƒูŠู… ุฑุงุฆุฏ ุนู„ู‰ ู…ุณุชูˆู‰ ุงู„ุชูƒู†ูˆู„ูˆุฌูŠุง ูˆู…ุง ูŠู‚ูˆู… ุจู‡ ู…ู† ุฑูุน ู…ุณุชูˆู‰ ุงู„ุฎุฏู…ุฉ ุงู„ุทุจูŠุฉ ููŠ ุงู„ู…ุณุชุดููŠุงุช ูˆุงู„ุญุฑุต ุนู„ู‰ ุตุญุฉ ุงู„ู…ุฑูŠุถ ู…ู† ุฎู„ุงู„ ุญู…ุงูŠุชู‡ ุจุจุฑู…ุฌูŠุฉ ุชุญุชูˆูŠ ุนู„ู‰ ู…ู†ุจู‡ุงุช ุฎุงุตุฉ ุจุงู„ุฃุทุจุงุก ู…ู† ุฃุฌู„ ุงู„ุฅุทู…ุฆู†ุงู† ุนู„ู‰ ู…ุฑุถุงู‡ู… ูˆุงู„ุชุฃูƒุฏ ู…ู† ุฃู† ุงู„ู…ุฑูŠุถ ู‚ุงู… ุจุงู„ูุญูˆุตุงุช ุงู„ู„ุงุฒู…ุฉ ูˆูŠุณุชุทูŠุน ุงู„ุทุจูŠุจ ุฃู† ูŠุฑู‰ ู†ุชุงุฆุฌ ุงู„ูุญูˆุตุงุช ูˆุตูˆุฑ ุงู„ุฃุดุนุฉ ุฃูˆ ุงู„ุฑู†ูŠู† ุงู„ู…ุบู†ุงุทูŠุณูŠ ุนู„ู‰ ุฌู‡ุงุฒ ุงู„ุญุงุณุจ ุงู„ุฎุงุต ุจู‡، ูƒู…ุง ูˆูŠู†ุจู‡ ุงู„ุทุจูŠุจ ู…ู† ุงู„ุชุฏุงุฎู„ุงุช ุงู„ุฏูˆุงุฆูŠุฉ ุฃูˆ ุงู„ุชุนุงุฑุถุงุช ุงู„ุฏูˆุงุฆูŠุฉ ู…ุน ุญุณุงุณูŠุงุช ุงู„ู…ุฑูŠุถ ูˆุบูŠุฑู‡ุง.
ูˆู‡ูˆ ุฑุงุฆุฏ ู…ู† ู†ุงุญูŠุฉ ุงู„ูˆูุฑ ุณูˆุงุกุง ุจุงู„ุจุฑู…ุฌูŠุฉ ุฃูˆ ุงู„ุฏูˆุงุก ุฃูˆ ุงู„ูุญูˆุตุงุช ูˆู„ุง ุชู†ุณูˆุง ุงู„ุฃูู„ุงู… ุงู„ู…ุณุชุนู…ู„ุฉ ููŠ ู‚ุณู… ุงู„ุฃุดุนุฉ.
ูˆูƒุงู†ุช ู‡ู†ุงูƒ ุฅุชู‡ุงู…ุงุช ุญูˆู„ ุจุนุถ ุงู„ู…ูˆุธููŠู† ูˆู…ุง ูŠุคูƒุฏ ูƒุฐุจ ู…ุนุธู… ู‡ุฐู‡ ุงู„ุฅุชู‡ุงู…ุงุช ุงู„ุชุงู„ูŠ:
  1. ุฃู†ุง ุฃุญุฏ ุงู„ู…ุฑูˆุฌูŠู† ูˆุงู„ู…ุฏุงูุนูŠู† ุนู† ุฅุณุชุฎุฏุงู… ุงู„ุจุฑู…ุฌูŠุงุช ุงู„ุญุฑุฉ ูˆุงู„ู…ูุชูˆุญุฉ ุงู„ู…ุตุฏุฑ ู„ู…ุง ุชูˆูุฑู‡ ู…ู† ุงู„ู‚ุฏุฑุฉ ุนู„ู‰ ุนู…ู„ ู…ุง ูŠุฑุงุฏ ู…ู† ุงู„ุชุบูŠูŠุฑุงุช، ุงู„ุชุฎู„ุต ู…ู† ุงู„ุญุงุฌุฉ ู„ุฎุจุฑุงุก ุฃูˆ ู…ู„ุงّูƒ ุงู„ุจุฑู…ุฌูŠุฉ ุฃู†ูุณู‡ู… ู„ุนู…ู„ ุงู„ุชุนุฏูŠู„ุงุช ุฃูˆ ุงู„ุฅุถุงูุงุช ูˆุฃุฎูŠุฑุง ุชูˆููŠุฑ ู†ู‚ูˆุฏ ุงู„ุฑุฎุต ูˆู…ุง ุฅู„ู‰ ุฐู„ูƒ ูˆุชูˆููŠุฑ ู†ู‚ูˆุฏ ุงู„ุฅุณุชุนุงู†ุฉ ุจุฎุจุฑุงุก ู…ู† ุงู„ุฎุงุฑุฌ ูˆุงู„ุชู‚ู„ูŠู„ ู…ู†ู‡ุง ุฅู„ุง ู„ู„ุถุฑูˆุฑุฉ ุงู„ุจุญุชุฉ
  2. ุงู„ุชุนุฏูŠู„ุงุช ุงู„ุชูŠ ุนู…ู„ุช ู…ู† ู‚ุจู„ู†ุง ุชุชุฌุงูˆุฒ 95% ู…ู† ุฅุฌู…ุงู„ูŠ ุงู„ุชุนุฏูŠู„ุงุช ูˆู‡ูŠ ูƒุซูŠุฑุฉ ูˆุณูŠูƒูˆู† ุฌุฒุก ูƒุจูŠุฑ ู…ู†ู‡ุง ู…ุชูˆูุฑ ู„ู„ุชุญู…ูŠู„ ู…ู† ู…ูˆู‚ุน ุงู„ุดุฑูƒุฉ ููŠ ุบุถูˆู† ุงู„ุฃุดู‡ุฑ ุงู„ู‚ุงุฏู…ุฉ ูˆู‡ูŠ ุฌู‡ูˆุฏ ุฃุฑุฏู†ูŠุฉ ูŠุดูƒุฑ ุนู„ูŠู‡ุง ุงู„ู…ูˆุธููŠู† ุณูˆุงุกุง ุงู„ู…ุจุฑู…ุฌูŠู† ุฃูˆ ุบูŠุฑู‡ู….
  3. ุฃู†ุง ุฃุญู…ู„ ุดู‡ุงุฏุฉ ุจูƒุงู„ูˆุฑูŠุณ ููŠ ุงู„ู‡ู†ุฏุณุฉ ุงู„ุชูƒู†ูˆู„ูˆุฌูŠุฉ ู…ู† ูƒู„ูŠุฉ ุงู„ุญุฌุงูˆูŠ/ุฌุงู…ุนุฉ ุงู„ูŠุฑู…ูˆูƒ ุณู†ุฉ 2000، ูˆู„ุณุช ุฃุญู…ู„ ุดู‡ุงุฏุฉ ุงู„ุฏุจู„ูˆู… ูƒู…ุง ูŠู‚ุงู„ ู…ุน ุฃู†ّู†ูŠ ู‚ุงุจู„ุช CTO ูŠุนู…ู„ ููŠ ุดุฑูƒุฉ ุนุงู„ู…ูŠุฉ ูŠุญู…ู„ ุงู„ุฏุจู„ูˆู… ูˆู„ู… ูŠูƒู…ู„ ุฏุฑุงุณุชู‡. ุฃู† ุชูƒูˆู† ุญุงู…ู„ุง ู„ุดู‡ุงุฏุฉ ุงู„ุฏุจู„ูˆู… ู„ูŠุณ ุนูŠุจุง ุงู„ุนูŠุจ ุฃู† ุชูƒูˆู† "ุฅู†ุช ูˆุงู„ูƒุฑุณูŠ ุงู„ู„ูŠ ุฅู†ุช ู‚ุงุนุฏ ุนู„ูŠู‡ ูˆุงุญุฏ ุณูˆุงุกุง ูƒู†ุช ุฏูƒุชูˆุฑ ูˆู„ุง ุชูˆุฌูŠู‡ูŠ"
  4. ู†ุญู† ู†ุฎุชุงุฑ ู…ูˆุธููŠ ุงู„ุดุฑูƒุฉ ุจุนู†ุงูŠุฉ ู‚ุฏุฑ ุงู„ุฅู…ูƒุงู† ูˆุฅู† ูƒุงู† ู‡ู†ุงูƒ ุฎุทุง ูุฅู† ู‡ุฐุง ุงู„ุฎุทุฃ ูŠุตุญّุญ ุฏุงุฆู…ุง ูˆู‡ุฐุง ุฌุฒุก ู…ู† ุทุจูŠุนุชู†ุง ุงู„ุจุดุฑูŠุฉ
  5. ู†ุธุงู… ุงู„ููŠุณุชุง ู„ู„ุฐูŠู† ูŠู‚ูˆู„ูˆู† ุฃู†ّู‡ ุจุณูŠุท ู‡ูˆ ู†ุธุงู… ุถุฎู… ุจู†ูŠ ุนู„ู‰ ู…ุฏู‰ ุนู‚ูˆุฏ ูˆููŠู‡ ุฎุจุฑุงุช ุทุจูŠุฉ ุฃุดูƒ ุฃู†ู‡ุง ุชูˆุฌุฏ ููŠ ู†ุธุงู… ุบูŠุฑู‡ ูˆูŠุญุชูˆูŠ ุนู„ู‰ ุฃูƒุซุฑ ู…ู† 25000 ู…ู„ู ุจุฑู…ุฌูŠ ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ู…ุง ูŠุฒูŠุฏ ุนู† 2500 ุฌุฏูˆู„ (Table) ูˆู‡ูˆ ุจู†ูŠ ุฎุตูŠุตุง ู…ู† ุฃุฌู„ ู‚ุทุงุน ุงู„ุตุญุฉ ูˆุจุฅุณุชุฎุฏุงู… ู„ุบุฉ ุฎุงุตุฉ ุชุณุชุนู…ู„ ูƒุซูŠุฑุง ููŠ ุงู„ุฃู†ุธู…ุฉ ุงู„ุจู†ูƒูŠุฉ ูˆุงู„ุตุญูŠุฉ ุชุณู…ู‰ (MUMPS) ู…ู…ุง ูŠุชุทู„ุจ ุงู„ูˆู‚ุช ูˆุงู„ุฌู‡ุฏ ู„ุฅุชู‚ุงู† ุงู„ู„ุบุฉ ูˆู…ุนุฑูุฉ ุงู„ู†ุธุงู…
ุฎู„ุงุตุฉ ุงู„ุญุฏูŠุซ، ู‡ู†ุงูƒ ู…ู† ู„ู‡ู… ู…ุตุงู„ุญ ู„ูˆุฃุฏ ุงู„ู…ุดุฑูˆุน ูˆู‡ูˆ ููŠ ุจุฏุงูŠุชู‡ ููŠุง ุฃูŠู‡ุง ุงู„ู†ุงุณ ู„ุง ุชุณุงุนุฏูˆู‡ู… ุนู„ู‰ ุฐู„ูƒ ูˆุชุญู‚ู‚ูˆุง ู…ู…ุง ุชู‚ูˆู„ูˆู† ูˆุจุฏู„ ุฃู† ุชู‚ููˆุง ููŠ ูˆุฌู‡ู†ุง ูˆููŠ ุทุฑูŠู‚ู†ุง ู‚ููˆุง ู…ุนู†ุง ูˆุญูˆุงู„ูŠู†ุง ูˆุฅู† ุฃุฎุทุฃู†ุง ู‚ูˆّู…ูˆู†ุง ูˆุณุงุนุฏูˆู†ุง ูˆู„ูƒู† ู„ุงุชุชู‡ู…ูˆู†ู†ุง ุจู…ุง ู„ูŠุณ ููŠู†ุง ููˆุงู„ู„ู‡ ู‡ู†ุงูƒ ู…ูˆุธููŠู† ูŠุนู…ู„ูˆู† ูˆู‡ู… ูŠุฃู…ู„ูˆู† ุฃู† ูŠุฑูˆุง ู‡ุฐุง ุงู„ู…ุดุฑูˆุน ูŠู†ุฌุญ ู„ุฃุณุจุงุจ ู…ุฎุชู„ูุฉ ู…ู†ู‡ู… ู„ุชุฌุฑุจุฉ ุทุจูŠุฉ ุณูŠุฆุฉ ูˆู…ู†ู‡ู… ู„ุฃุฌู„ ู‚ุตุฉ ู†ุฌุงุญ ูˆู…ู†ู‡ู… ู„ุฃุฌู„ ุงู„ูˆุทู† ูˆุงู„ู…ูˆุงุทู† ูˆุฃุจุณุท ุณุจุจ ุญุชู‰ ูŠุนูŠุดูˆุง  ูˆูŠุตุฑููˆุง ุนู„ู‰ ุจูŠูˆุช ุงู„ู„ู‡ ูุชุญู‡ุง ูุฃู†ุชู… ุจุงู„ุฅุชู‡ุงู…ุงุช ูˆุงู„ุฃุญูƒุงู… ุงู„ู…ุณุจู‚ุฉ ูˆู†ุดุฑ ุงู„ุฃุฎุจุงุฑ ุงู„ุณูŠุฆุฉ ูˆุบูŠุฑ ุงู„ุตุญูŠุญุฉ ู‚ุฏ ุชุญูƒู…ูˆู† ุนู„ู‰ ู…ุตูŠุฑ ู…ุง ูŠุฒูŠุฏ ุนู† 105ู…ู† ุงู„ู…ูˆุธููŠู† ุจุงู„ุถูŠุงุน ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ู…ุง ู†ุชู…ู†ู‰ ุฃู† ูŠูƒูˆู† ูˆุงุญุฏ ู…ู† ุฃู†ุฌุญ ู…ุดุฑูˆุนุงุช ุงู„ุฃุฑุฏู† ูˆุฃู†ุฌุญ ู…ุดุฑูˆุนุงุช ุงู„ุญูˆุณุจุฉ ุงู„ุตุญูŠุฉ ุนู„ู‰ ุงู„ู…ุณุชูˆู‰ ุงู„ูˆุทู†ูŠ ููŠ ุงู„ุนุงู„ู… ูˆุฃู†ุฌุญ ู…ุดุฑูˆุน ู„ู„ุจุฑู…ุฌูŠุงุช ุงู„ู…ูุชูˆุญุฉ ุงู„ู…ุตุฏุฑ ููŠ ู…ุฌุงู„ ุงู„ุตุญุฉ ุนู„ู‰ ู…ุณุชูˆู‰ ุงู„ู…ู†ุทู‚ุฉ.

ุณุฃุฐูƒุฑ ู…ุซุงู„ ุจุณูŠุท ู„ู…ุง ู‚ู…ู†ุง ุจุจู†ุงุฆู‡ ู…ู† ุงู„ุตูุฑ ููŠ ุดุฑูƒุฉ ุงู„ุญูˆุณุจุฉ ุงู„ุตุญูŠุฉ ูˆุงู„ุฐูŠ ุฅุณุชุนุถู†ุง ุจู‡ ุนู† ุงู„ุทุฑูŠู‚ุฉ ุงู„ุฃุตู„ูŠุฉ ู„ุชุณุฌูŠู„ ุงู„ู…ุฑุถู‰ ูˆูŠุณุชุฎุฏู… ู…ู†ุฐ ุฃูƒุซุฑ ู…ู† ุณู†ุฉ ููŠ ู…ุณุชุดูู‰ ุงู„ุฃู…ูŠุฑ ุญู…ุฒุฉ ูˆู…ุฑูƒุฒ ุตุญูŠ ุนู…ّุงู† ุงู„ุดุงู…ู„ ูˆุจุฏุฃูˆุง ุจุฅุณุชุฎุฏุงู…ู‡ ููŠ ู…ุณุชุดูู‰ ุงู„ุฃู…ูŠุฑ ุญุณูŠู† ูˆู…ู† ู…ูŠุฒุงุชู‡ ุฃู†ู‡ ุจุณูŠุท ุญูŠุซ ุฃู†ّ ุงู„ุทุฑูŠู‚ุฉ ุงู„ุฃุตู„ูŠุฉ ู…ุนู‚ّุฏุฉ ูˆููŠู‡ุง ุงู„ูƒุซูŠุฑ ู…ู† ุงู„ุฃุณุฆู„ุฉ ูˆุงู„ู…ูŠุฒุฉ ุงู„ุซุงู†ูŠุฉ ุฃู†ّู‡ ู…ุฑุจูˆุท ู…ุน ุฏุงุฆุฑุฉ ุงู„ุฃุญูˆุงู„ ุงู„ู…ุฏู†ูŠุฉ ูุจู…ุฌุฑุฏ ูˆุถุน ุงู„ุฑู‚ู… ุงู„ูˆุทู†ูŠ ูŠู‚ูˆู… ุงู„ุจุฑู†ุงู…ุฌ ุจุงู„ุฅุณุชุนู„ุงู… ุนู† ุงู„ู…ุฑูŠุถ ูˆุฅุณุชุฑุฌุงุน ูƒุงูุฉ ุงู„ู…ุนู„ูˆู…ุงุช ุงู„ู…ุทู„ูˆุจุฉ ู„ุชูˆููŠุฑ ุงู„ูˆู‚ุช ูˆุงู„ุฌู‡ุฏ ููŠ ุนู…ู„ูŠุฉ ุงู„ุชุณุฌูŠู„ ูˆู‡ูˆ ุงู„ุจุฏุงูŠุฉ ู„ู„ู…ุฒูŠุฏ ุฅู† ุดุงุก ุงู„ู„ู‡.

ุทุจุนุง ู…ุง ูƒุชุจุชู‡ ู‡ูˆ ูƒู„ุงู… ุดุฎุตูŠ ูˆู„ุง ูŠู…ุซู„ ุงู„ุดุฑูƒุฉ ุจุฃูŠ ุดูƒู„.

Friday, December 21, 2012

ู„ู„ูŠ ู‚ุงู„ุชู‡ ู„ูŠู„ู‰ ... ู…ุง ูู‚ุนุช ู…ุนูŠ


ูƒู… ุฃุญุจ ุฃู† ุฃุณู…ุน ุนู† ุงู„ุฑุจูŠุน ุงู„ุนุฑุจูŠ ุงู„ุฐูŠ ุฃุถุญู‰ ุฎุฑูŠูุง ููŠ ู†ุธุฑ ุงู„ูƒู„، ู„ู‚ุฏ ุฃุบูู„ุช ุงู„ู†ุงุณ ุงู„ุญู‚ูŠู‚ุฉ ุงู„ูˆุญูŠุฏุฉ ุฃู†ู‡ ู„ุง ูˆุฌูˆุฏ ู„ู„ุฏูŠู…ูˆู‚ุฑุงุทูŠุฉ ุญุชู‰ ููŠ ุงู„ุฏูˆู„ ุงู„ู…ุชู‚ุฏู…ุฉ ูู‡ูˆ ูƒุฃู† ุฃุฎูŠุฑูƒ ุจูŠู† ุฃู† ุชู…ูˆุช ุดู†ู‚ุง ุฃูˆ ุชู…ูˆุช ุบุฑู‚ุง ... ุญุจุงูŠุจูŠ ูƒู„ู‡ุง ู…ูˆุชุฉ ูˆุขุฎุฑูŠุชู‡ุง ู‚ุทู†ุฉ ุจุชู†ุฏุญุด ููŠ ู…ุคุฎุฑุงุชู†ุง ุฒูŠ ุงู„ุฎูˆุงุฒูŠู‚ ุงู„ู„ูŠ ุนู… ู†ุงูƒู„ู‡ุง ุจุดูƒู„ ุดุจู‡ ูŠูˆู…ูŠ.

ู„ุง ุชู‚ู„ ุฃู†ุง ุญุฑ ูู„ุณุช ูƒุฐู„ูƒ ุฃู†ุช ุนุจุฏ ูุฅุฎุชุฑ ู…ู† ุชุนุจุฏ ู‡ู„ ู‡ูˆ ุงู„ู„ู‡، ุงู„ู…ุงู„، ุตุงุญุจ ุงู„ุณู„ุทุฉ، ุงู„ูƒุฑุณูŠ، ุงู„ุฑุบุจุฉ ุฃูˆ ุงู„ุญูŠุงุฉ. ู„ุง ูˆุฌูˆุฏ ู„ู„ุญุฑูŠุฉ ูุญุชู‰ ุงู„ุญุฑูŠุฉ ู…ู‚ู†ّู†ุฉ ูˆู„ุง ุชู‚ู„ ุฃู†ุง ุฏูŠู…ูˆู‚ุฑุงุทูŠ، ุญุงุฑุชู†ุง ุถูŠู‚ุฉ ูˆุจู†ุนุฑู ุจุนุถ ูุด ู…ู†ู‡ ู‡ุงู„ุญูƒูŠ ู„ุฃู†ّูƒ ุฒูŠ ุงู„ู„ูŠ ุจุจูŠุน ู…ูŠ ููŠ ุญุงุฑุฉ ุงู„ุณู‚ุงูŠูŠู†.

ู„ุณุช ุญุฑุง ูˆู„ุง ุฃู†ุง ู†ุญู† ู…ุญุชู„ูŠู† ุจู„ู‚ู…ุฉ ุงู„ุนูŠุด ูˆู…ุชุทู„ุจุงุช ุงู„ุฑูุงู‡ูŠุฉ ูุทุงู„ู…ุง ู†ุญู† ูƒุฐู„ูƒ ูู„ุง ูƒุฑุงู…ุฉ ูˆู„ุง ุญุฑูŠุฉ، ูƒู… ุฃุชู…ู†ّู‰ ุฃู† ุฃุชุฎู„ุต ู…ู† ู…ู„ู ุงู„ู…ุตุงุฑูŠู ูˆุงู„ู…ุฏููˆุนุงุช ูˆุฃู† ุฃุญูŠุง ูƒุฅู†ุณุงู† ูˆู„ูŠุณ ูƒู…ุงูƒูŠู†ุฉ ุตุฑุงู ุขู„ูŠ ู…ู† ุฃุฌู„ ุงู„ุฃูƒู„ ูˆุงู„ุจูŠุช ูˆุงู„ู…ุฏุงุฑุณ ูˆ ูˆ ูˆ ูŠุง ุฌู…ุงุนุฉ ุญุชู‰ ุดู…ุฉ ุงู„ู‡ูˆุง ุจู…ุตุงุฑูŠ ูˆู‡ุงุฏ ู‡ูˆ ู…ุฑุจุท ุงู„ูุฑุณ --- ุงู„ู…ุตุงุฑูŠ، ุฃู†ุง ุฑุงุถ ุฃูƒูˆู† ุซูˆุฑ ููŠ ุงู„ุณุงู‚ูŠุฉ ูˆุฃุญุฑุซ ุงู„ุฃุฑุถ ุจุณ ูŠุง ุฃุฎูŠ ู„ู…ุง ุชุทุนู…ูŠู†ูŠ ุดุจุนู†ูŠ ุฃู†ุง ูˆูˆู„ุงุฏูŠ، ู„ู…ุง ุจุฏูŠ ุฃูˆุงุฏูŠู‡ู… ุนู„ู‰ ู…ุฏุฑุณุฉ ู…ุญุชุฑู…ุฉ ูุด ุฏุงุนูŠ ุฃุดู„ุญ ุฃูˆุงุนูŠูŠ ูˆุฃุนูŠุด ุจุงู„ุฏูŠู† ู„ู…ุง ุจุฏูŠ ุฃุณูƒู† ุจูŠุช ูุด ุฏุงุนูŠ ุฃุจูŠุน ุงู„ู„ูŠ ูˆุฑุงูŠ ูˆุงู„ู„ูŠ ู‚ุฏุงู…ูŠ.

ู„ุง ูŠูˆุฌุฏ ุญุฑูŠุฉ... ูุฃู†ุง ุนุจุฏ ุงู„ู…ุฃู…ูˆุฑ (ู„ุงุญุธ ู…ุฃู…ูˆุฑ) ู…ูŠู† ุงู„ู„ูŠ ุฃู…ุฑู‡ ูˆู‡ู„ ุงู„ู„ูŠ ุฃู…ุฑู‡ ู…ุฃู…ูˆุฑ ูƒู…ุงู†؟!! ุทุจ ู…ูŠู† ุงู„ุขู…ุฑ ุงู„ู†ุงู‡ูŠ؟ّّ!! ุฃู†ุง ูˆุงู„ุนูŠุงุฐ ุจุงู„ู„ู‡ ูˆู„ู„ุฃุณู ุฃุดุฑูƒ ุจุงู„ู„ู‡، ุฃูƒูŠุฏ ูˆุฃู†ุง ู…ุชุฃูƒุฏ ุฅู†ู‡ ู…ุนุธู…ู†ุง ู‡ูŠูƒ ูˆูŠุง ุฑูŠุช ุดุฑูƒ ู…ุญุฑุฒ (ุฃูŠุงู… ุฒู…ุงู† ูƒุงู†ูˆุง ู‡ุจู„ ูˆุงู„ู„ุงุช ูˆุงู„ุนุฒู‰) ูˆู„ูƒู† ุงู„ุขู† ุดุฑูƒู†ุง ูŠุชู„ุฎุต ููŠ (ู…ุตุงุฑูŠ، ุดุบู„، ู…ุฏูŠุฑ، ุฃุทูุงู„، ุชู„ูุฒูŠูˆู† ูˆุฅู†ุชุฑู†ุช). ุณุงู…ุญู†ุง ูŠุง ุฑุจ ุจู†ุตู„ูŠ ุงู„ูุฑุถ ุนู„ู‰ ุนุฌุงู„ุฉ ู„ุฃู†ู‡ ููŠ ู…ู„ูŠูˆู† ุดุบู„ุฉ ู†ุฎู„ุตู‡ุง ุฃูˆู„ู‰ ู…ู† ุงู„ุตู„ุงุฉ ู…ู† ูˆุฌู‡ุฉ ู†ุธุฑู†ุง.

ุฌู…ุงุนุชู†ุง ุนุงู…ู„ูŠู† ู‚ุตุฉ ู„ุชุญุฑูŠุฑ ุงู„ุฅู†ุชุฑู†ุช، ู†ูŠّุงู„ ุฅู…ูŠ ูˆู„ูƒู… ู…ูŠูŠู† ููŠูƒู… ุญุฑ ุฃุตู„ุง ู…ุง ุฅุญู†ุง ุนุงุฑููŠู† ุงู„ู„ูŠ ููŠู‡ุง ุจู„ุงุด ู†ูƒุฐุจ ุนู„ู‰ ุจุนุถ، ุงู„ู…ูˆุถูˆุน ูƒู„ู‡ ู…ุตุงุฑูŠ، ู„ูˆ ุงู„ุญุฑูŠุฉ ู„ู‡ุงูŠ ุงู„ุฏุฑุฌุฉ ู…ู‡ู…ุฉ ูƒุงู† ุญุฑุฑุชูˆุง ุงู„ุฃู‚ุตู‰ ูŠุง .... ู…ู†ูƒ ุฅู„ู‡ ุฃู‚ู„ูƒ ุฑูˆุญ ุญุฑّุฑ ุญุงู„ูƒ ุฃูˆّู„ ุฅุดูŠ. ูˆุจุณุชุฐูƒุฑ ู‡ู„ู‚ ุฃุบู†ูŠุฉ ู„ุณูŠّุฏ ุฏุฑูˆูŠุด "ุฃู‡ูˆ ุฏุง ุงู„ู„ูŠ ุตุงุฑ". ูŠุง ุญุจูŠุจูŠ، ุฅู†ุณู‰ ุงู„ู…ูˆุถูˆุน ูˆุฎู„ูŠูƒ ููŠ ุญุงู„ูƒ ุญุชู‚ูˆู„ ุนู†ูŠ ู…ุชุดุงุฆู… ูˆู‚ูˆู‰ ุดุฏ ุนูƒุณูŠ ูŠุง ุณูŠุฏูŠ ุฃู†ุง ู‡ูŠูƒ، ุฑูˆุญ ุนู„ู‰ ุงู„ุณุงู‚ูŠุฉ ุชุจุนุชูƒ ูˆุจู„ุด ู„ู ููŠู‡ุง ุจูƒููŠ ู‡ุจู„.

ุงู„ุญุฑูŠุฉ ู…ูˆุถูˆุน ู„ู† ูŠุชุญู‚ّู‚ ููŠ ูŠูˆู… ู…ู† ุงู„ุฃูŠุงู… ุญุชู‰ ู†ุฏุฑูƒ ุฃู†ّู†ุง ู„ุณู†ุง ุฃุญุฑุงุฑุง ุฃุตู„ุง ูˆุฃู† ุงู„ุญุฑูŠุฉ ุญู„ู… ุฌู…ูŠู„ ูู„ูŠุจู‚ ูƒุฐู„ูƒ ูˆู„ูƒู† ู„ุง ุชุญุงูˆู„ ุชุญู‚ูŠู‚ู‡ ู„ุฃู†ู‡ ู„ู† ูŠุชุญู‚ّู‚ ู„ุฃู†ู‡ ู…ุฌุฑّุฏ ุญู„ู… ูˆุฃู†ุง ู…ู‚ุชู†ุน ุฃู†ّ ุฏูˆุฑู†ุง ููŠ ู‡ุฐู‡ ุงู„ุญูŠุงุฉ ุฃู† ู†ุณุชุนุฏ ุฃูˆ ุฃู† ู†ุนุฏ ุงู„ุฃุฌูŠุงู„ ุงู„ู‚ุงุฏู…ุฉ ู„ุชู‚ูˆู… ุจู…ุง ู„ู… ูˆู„ู† ู†ุณุชุทูŠุน ุงู„ู‚ูŠุงู… ุจู‡. ุจุงู„ู„ู‡ ุนู„ูŠูƒู… ุงู„ุดุจุงุจ ูˆุงู„ุตุจุงูŠุง ุงู„ู„ูŠ ุจู†ุดูˆูู‡ู… ูƒู„ ูŠูˆู… ู‡ุงูŠ ู†ุงุณ ููŠู‡ุง ุชุญุฑّุฑ ุฅุดูŠ ุบูŠุฑ ุฃุฒุฑุงุฑ ุงู„ู‚ู…ูŠุต ูˆุญุฒุงู… ุงู„ุจู†ุทู„ูˆู† ุนุดุงู† ู†ุต ....ู‡ ุชุจูŠّู† ุฃูˆ ุนุดุงู† ุชูˆุฑุฌูŠู†ุง ู‡ูŠ ุงู„ุฌูŠ ุงู„ู„ูŠ ู„ุงุจุณูŠุชู‡.

ุดูƒู„ูŠ ุฎุจّุตุช ุจุณ ูƒุงู† ู„ุงุฒู… ุฃูุด ุบู„ّูŠ ู„ุฃู†ู‡ ู‡ูŠูƒ ู…ุฒุจุทุฉ ุจุฏู‡ุง ู‡ูŠูƒ ุฎุชู… ูˆุฅุญู†ุง ุฃูƒุชุฑ ุฅุดูŠ ุจุทู„ุนู„ู†ุง ู‡ูˆ ุฅู†ู‡ ู†ุดูƒุฑ ู‡ุงู„ูˆุทู† ุนู„ู‰ ุฅู†ู‡ ู„ุณู‡ ุฑุงุถูŠ ููŠู†ุง ูƒู…ูˆุงุทู†ูŠู†.

ุนุฒูŠุฒุชูŠ ุงู„ุญูƒูˆู…ุฉ ูˆู…ู† ูŠูƒูˆู† ุงู„ุขู…ุฑ ุงู„ู†ุงู‡ูŠ، ุฃู†ุง ุฑุถูŠุช ูˆุจุตู…ุช ุจุงู„ุนุดุฑุฉ، ุฃู†ุง ุซูˆุฑูƒ ูˆุชุฑุงุจ ูƒู†ุงุฏุฑ ุงู„ูˆุฒุฑุงุก ูˆุงู„ู„ูŠ ุฃุนู„ู‰ ู…ู†ู‡ู… ุนู„ู‰ ุฑุงุณูŠ ู…ู† ููˆู‚ ุจุณ ู„ูˆ ุณู…ุญุชูˆุง ู„ู…ุง ุชุฏุนุณูˆุง ุนู„ู‰ ุฑุงุณูŠ ุฎู„ูŠูƒู… ุญู†ุงูŠู† ู…ุด ุนุดุงู†ูŠ ู„ูˆ ุนู„ูŠ ู„ู„ูŠ ู‚ุงู„ุชู‡ ู„ูŠู„ู‰ ุจุณ ุนุดุงู† ู‡ุงู„ุจู†ุชูŠู† ุฐู„ّูˆู†ูŠ ูˆูƒุณุฑูˆุง ุธู‡ุฑูŠ ูˆุฎุถّุนูˆู†ูŠ، ูˆูŠุง ุฑูŠุช ุชุฎู„ูˆุง ุฑุงุณูŠ ุจุฑุฉ ุงู„ุทูŠู† ุนุดุงู† ุฃุดูˆู ุถุญูƒุชู‡ู… ู„ุฃู†ู‡ุง ู‡ูŠ ุงู„ู„ูŠ ู…ุณูƒุชูŠุชู†ูŠ ูˆู…ุด ู…ุฎู„ูŠุชู‡ุง ุชูู‚ุน ู…ุนูŠ.

Saturday, April 28, 2012

Sorry girls ... Labor day is Anger day


The idea from having a Labor day is that the "labor" enjoy a day off as part of appreciating them, well thats great.

We took an extra day off, what are we going to do with it? Me personally, will stay home, most probably picking fights and creating a non-comfortable environment in home and I have my reasons for that.

If we are OK and having fun then that means that I will have to take the girls and wife to somewhere outside the house to play and have lunch and maybe even have dinner outside, so we are going to enjoy our time.


Very lovely, a day like that should start maybe at 10 AM, breakfast somewhere (5 JDs) then go to a play ground or a park and since in "East Amman" (The ignored part of Amman) doesn't have a clean park or garden (in East Amman, kids areas are full of glass, cigarettes butts, impolite boys add to that they are dirty, unhealthy and full of small harmful things), so I have to take the girls to somewhere clean (+ 5 JDs), they will play there enjoy their time then lunch time will come, usually lunch consists of unhealthy fast food thats full of calories, oily and not edible (15 -20 JDs).



After that the day should move forward to go to place where we should walk (safe place to walk) then that means we have to go to a mall, if we go to a mall that means one of two things, either I have to comply to the "Buy" requests or I will have to be a grumpy, cheap and hated father and husband (50+ JDs).

After that we will have to go to play again!! If in a mall then we are talking about extra 10 JDs. Most probably we have to drink something from one of the Donuts stores and eat donuts (10 JDs)


After that dinner, either I buy it and take it home or go and have it outside in either cases we are talking about 10 JDs and add to that 10 JDs for gasoline then a total fun and joyful day that will end perfectly and everyone will be happy will cost me around 100-120 JDs, therefore the best thing is to start my day with a fight that will make my wife take the expected approach, take the kids and go to her mother's, they will have fun and maybe go to walk here or there (10-20 JDs).


In my beloved country, everything costs money even the most trivial and basic needs, which is to enjoy time in a clean, usable, kids-friendly place. I do not know why should I drive 15 Kms to go to a place where I can feel that its a safe place for the girls and be comfortable in it.

By the way a school in East Amman even private ones 500-800, in West Amman 1200-1700 JDs) and actually you can see the difference (at least the ones I saw):
- West: Clean, organized, caring, healthy, safe, etc ...
- East: otherwise

Parliament members, believe it or not, there is no hope in you for sure and I think there is no hope in us too, our mindsets are corrupted, the hope is in the upcoming generations, if anyone cares.

Monday, February 13, 2012

ูƒูŠุณ ุงู„ุฑّู…ู„ ุฃู… ...


ู…ุน ุฅุญุชุฑุงู…ูŠ ุงู„ุดุฏูŠุฏ ู„ู„ุญุฑุงูƒ ูˆู…ุง ูŠุญุงูˆู„ ุฃู†ุตุงุฑู‡ ูˆู…ุคูŠุฏูˆู‡ ุฃู† ูŠูุนู„ูˆู‡ ูˆู„ูƒู† ุงู„ุญู„ ู„ูŠุณ ุจุงู„ุญุฑุงูƒ ูˆุงู„ู…ุธุงู‡ุฑุงุช ูู‡ุฐู‡ ุงู„ู…ุธุงู‡ุฑุงุช ุชุนุทูŠ ูุฑุตุฉ ู„ู„ูุณุงุฏ ูˆุงู„ู…ูุณุฏูŠู† ุจุงู„ุชูˆุบู„ ุจู…ุง ูŠูุนู„ูˆู‡!! ูƒูŠู؟ ๏ปทู†ّ ุงู„ูƒุซูŠุฑ ู…ู† ุงู„ุดุฑูุงุก ููŠ ุงู„ุดูˆุงุฑุน ุฅู…ุง ูŠุชุธุงู‡ุฑูˆุง ุฃูˆ ูŠُุถุฑุจูˆุง ูˆุงู„ุฎุงุณุฑ ูุงู„ู†ู‡ุงูŠุฉ ู‡ูˆ ุงู„ูˆุทู† ูˆุงู„ู…ูˆุงุทู† ูˆููŠ ู†ูุณ ุงู„ูˆู‚ุช ุจุทู„ุน ู…ุชุณู„ّู‚ูŠู† ู„ูŠุฑูƒุจูˆุง ุงู„ู…ูˆุฌุฉ ูˆูŠุตุจุญูˆุง ู‡ู… ุงู„ู…ุคุณّุณูŠู† ู„ู„ูˆุทู†ูŠุฉ ูˆุงู„ุฅุตู„ุงุญ ููŠ ุงู„ุจู„ุฏ


ู‡ู†ุงูƒ ู‚ุตّุฉ ู‚ุตูŠุฑุฉ ุฃุฑูŠุฏ ุฃู† ุฃุฑูˆูŠู‡ุง ู‚ู„ู‡ุง ู„ูŠ ุฃุจูŠ، ุนู† ุฑุฌู„ ุณูˆุฑูŠ ูƒุงู† ูŠู‚ุทุน ุงู„ุญุฏูˆุฏ ูƒู„ ูŠูˆู… ู…ู† ุณูˆุฑูŠุง ุฅู„ู‰ ู„ุจู†ุงู† ุนู„ู‰ ู…ุชู† ุฏุฑّุงุฌุชู‡  ูˆูŠุนูˆุฏ ุจุนุฏ ุจุถุนุฉ ุฃูŠّุงู… ูˆูƒุงู† ุฏุงุฆู…ุง ูŠุนูˆุฏ ู…ู† ู„ุจู†ุงู† ูˆู…ุนู‡ ูƒูŠุณ ุตุบูŠุฑ ู…ู† ุงู„ุฑّู…ู„ ูˆูƒุงู† ุถุงุจุท ุงู„ุฃู…ู† ุนู„ู‰ ุงู„ุญุฏูˆุฏ ูŠูุชّุด ุงู„ูƒูŠุณ ูˆูŠุจุญุซ ููŠู‡ ุนู† ุฃูŠ ู…ู‡ุฑّุจุงุช ูˆู„ุง ูŠุฌุฏ ุฃูŠ ุดูŠุก ูˆูŠุณุฃู„ ุงู„ุฑุฌู„ ู„ู…ุงุฐุง ู‡ุฐุง ุงู„ูƒูŠุณ ููƒุงู† ูŠุฌุงูˆุจู‡ ุจุฃู†ّู‡ ูŠุญุจ ู„ุจู†ุงู† ูˆูŠุนุดู‚ ุชุฑุงุจู‡ุง ูˆุฃู†ّู‡ ูŠุฃุฎุฐ ู‡ุฐู‡ ุงู„ุญูู†ุฉ ู…ู† ุงู„ุชุฑุงุจ ู…ู† ุฃุฌู„ ุฃู† ุชุจู‚ู‰ ู„ุจู†ุงู† ููŠ ุฐู‡ู†ู‡ ... ูˆุงุณุชู…ุฑّ ุงู„ุญุงู„ ุนู„ู‰ ู…ุง ู‡ูˆ ุนู„ูŠู‡ ุณู†ูˆุงุช ุทูˆุงู„ ูˆูƒุงู† ุฑุฌู„ ุงู„ุฃู…ู† ููŠ ูƒู„ ู…ุฑّุฉ ูŠูุชّุด ุงู„ูƒูŠุณ ูˆูŠุฌุนู„ ุงู„ูƒู„ุงุจ ุชุดู…ّู‡ ูˆูŠุฃุฎุฐ ุนูŠّู†ุงุช ู„ู„ุชุญู„ูŠู„ ูˆุบูŠุฑู‡ ูˆู…ุง ูŠุทู„ุน ุดูŠ ... ู…ุฌุฑّุฏ ุชุฑุงุจ.

ูˆุจุนุฏ ู…ุถูŠ ุงู„ุณู†ูˆู† ุชู‚ุงุนุฏ ุฑุฌู„ ูˆู„ูƒู†ู‡ ุจู‚ูŠ ุนู„ู‰ ุงู„ุญุฏูˆุฏ ูŠู†ุชุธุฑ ุงู„ุฑุฌู„ "ุงู„ู…ู‡ุฑّุจ" ุฅู„ู‰ ุฃู† ุฌุงุก ูู‚ุงู„ ู„ู‡: ุงู„ุขู† ูˆู‚ุฏ ุชู‚ุงุนุฏุช ูˆู„ูŠุณ ู„ูŠ ุนู„ูŠูƒ ุฃูŠ ู…ู‚ุฏุฑุฉ ุฃูˆ ุณู„ุทุฉ ุฃุฑุฌูˆูƒ ู‚ู„ ู„ูŠ ู…ุง ู‚ุตุฉ ุงู„ูƒูŠุณ، ูุฃุฌุงุจู‡ ุงู„ุฑุฌู„ ุงู„ุณูˆุฑูŠ ู„ูŠุณุช ุงู„ู‚ุตّุฉ ููŠ ุงู„ูƒูŠุณ ูˆู„ูƒู†ّูŠ ููŠ ูƒู„ ู…ุฑّุฉ ุฃุนูˆุฏ ููŠู‡ุง ู…ู† ู„ุจู†ุงู† ูƒู†ุช ุฃุญุถุฑ ุฏุฑّุงุฌุฉ ุฌุฏูŠุฏุฉ ุจุฏู„ ุงู„ู‚ุฏูŠู…ุฉ ู„ุฃุจูŠุนู‡ุง ูˆุฃุนูˆุฏ ููŠ ุงู„ู…ุฑّุฉ ุงู„ู‚ุงุฏู…ุฉ ุจุฏุฑุงุฌุฉ ู‚ุฏูŠู…ุฉ ุฃุฎุฑู‰ ูุฃุจุฏู„ู‡ุง ู…ู† ู„ุจู†ุงู† ูˆู‡ูƒุฐุง ...

ุงู„ุดّุงู‡ุฏ ููŠ ุงู„ู‚ุตّุฉ ุฃู†ุง ุฎุงุฆู ุฃู† ู†ูƒูˆู† ู„ุงู‡ูŠู† ููŠ ูƒูŠุณ ุงู„ุฑّู…ู„ ูˆู„ุง ู†ุณุชุทูŠุน ุฃู† ู†ุฑู‰ ุงู„ุฏุฑّุงุฌุงุช ุงู„ุชّูŠ ุชุจุฏّู„ ูƒู„ ูŠูˆู….


ุฅู‚ุชุฑุงุญูŠ ุจู…ุง ุฃู†ّ ู„ุฏูŠู†ุง ู‡ุฐุง ุงู„ุนุฏุฏ ู…ู† ุงู„ุดّุฑูุงุก ูˆุงู„ุดุฌุนุงู† ุงู„ุฐّูŠู† ู„ุง ูŠุฎุดูˆู† ู‚ูˆู„ ูƒู„ู…ุฉ "ู„ุง" ุฃู† ูŠูƒูˆู†ูˆุง ููŠ ุฃู…ุงูƒู† ุนู…ู„ู‡ู… ุจู†ูุณ ุงู„ู‚ูˆّุฉ ูˆุงู„ุดุฌุงุนุฉ ูˆุงู„ูˆู„ุงุก ู„ู„ูˆุทู† ูˆุฃู† ูŠู‚ูˆู„ูˆุง "ู„ุง" ูƒู„ّู…ุง ุดุนุฑูˆุง ุจุฃู†ّ ุงู„ูˆุทู† ูŠุญุชุงุฌู‡ุง ูˆูƒู„ّู…ุง ุดุนุฑูˆุง ุฃู†ّู‡ู… ุนู„ู‰ ุญู‚ ูˆู„ูŠุณ ุงู„ุณّุจุจ ุฃู† ุฃู‡ุจّุท ู…ู† ุนุฒูŠู…ุชู‡ู… ูˆู„ูƒู† ุฅุญุชู…ุงู„ ู„ูˆ ุชูˆุญุฏูˆุง ุนู„ู‰ ู…ุตู„ุญุฉ ุงู„ูˆุทู† ูˆุงู„ู…ูˆุงุทู† ููŠ ุฃู…ุงูƒู† ุนู…ู„ู‡ู… ูˆุฑุงุนูˆุง ุงู„ู„ู‡ ูˆุถู…ูŠุฑู‡ู… ุงู„ูˆุทู†ูŠ ูˆุงู„ุฅู†ุณุงู†ูŠ ููŠ ูƒู„ ู…ุง ูŠูุนู„ูˆู‡ ุฃู† ูŠูƒูˆู† ู„ู‡ู… ุชุฃุซูŠุฑ ุฃู‚ูˆู‰ ุนู„ู‰ ุฌุนู„ ุงู„ูˆุถุน ุฃุญุณู† ููŠุตุจุญ ุงู„ุชุนู„ูŠู… ุฃุญุณู† ู…ุด ุนุดุงู†ู‡ ุดุบู„ ุจุณ ุนุดุงู† ุงู„ู…ุนู„ّู… ุจุฏู‡ ูŠุทู„ّุน ู†ุงุณ ุจุชูู‡ู… ูˆุญุฑّุฉ ูˆุชูƒูˆู† ุงู„ุฑุนّุงูŠุฉ ุงู„ุตّุญูŠุฉ ุฃุญุณู† ุนุดุงู† ุงู„ุฏูƒุชูˆุฑ ุจู‡ู…ูˆุง ุงู„ู†ุงุณ ูˆุฅู†ู‡ ูŠุนุงู„ุฌู‡ู… ูˆูŠูƒูˆู† ุงู„ู…ูˆุธّู ุจู‡ู…ูˆّุง ูŠุฎุฏู… ุงู„ู†ّุงุณ ุนุดุงู† ู‡ุฏุง ูˆุงุฌุจู‡، ู„ูˆ ูƒู„ ูˆุงุญุฏ ุจุญู„ّู„ ุฑุงุชุจู‡ ูˆุจุญุท ุงู„ู„ู‡ ู‚ุฏّุงู… ุนูŠู†ูŠู‡ ุณุงุนุชู‡ุง ุฎุงูˆุฉ ุงู„ูุงุณุฏูŠู† ูˆุงู„ู…ูุณุฏูŠู† ุจุทู„ุนูˆุง ู…ู† ุฌุญูˆุฑู‡ู… ูˆุจูŠู†ูƒุดููˆุง.


ุฑุฃูŠูŠ، ุฅู†ّู‡ ุงู„ุญุฑุงูƒ ุจุทุฑูŠู‚ุฉ ุบูŠุฑ ู…ุจุงุดุฑุฉ ูˆุนู„ู‰ ุงู„ุฃุบู„ุจ ุบูŠุฑ ู…ู‚ุตูˆุฏุฉ ูŠุณุงุนุฏ ุงู„ูุงุณุฏูŠู† ุจุฃู† ูŠุฒุฏุงุฏูˆุง ูุณุงุฏุง ูˆุงู„ุฎุฑุงุจ ูŠุฒุฏุงุฏ ุฎุฑุงุจุง ู…ุน ุฅู†ู‡ ูƒู„ ุงู„ู…ุทู„ูˆุจ ู‡ูˆ ุชุทุจูŠู‚ ุญู‚ ุงู„ู„ู‡ ูˆุงู„ูˆุทู† ูˆุงู„ู…ูˆุงุทู† ููŠ ุงู„ุนู…ู„ ูู„ุง ุชู‚ูˆู… ู„ู„ูุณุงุฏ ู‚ุงุฆู…ุฉ ูˆู„ุง ูŠูƒูˆู† ู„ู„ูุงุณุฏูŠู† ุธู‡ุฑ ูŠุณุชู†ุฏูˆุง ุนู„ูŠู‡ ูˆุจุตุฑุงุญุฉ ู…ู† ู„ุง ูŠุฑุงุนูŠ ุญู‚ูˆู‚ ุงู„ู„ู‡ ูˆุงู„ูˆุทู† ูˆุงู„ู…ูˆุงุทู† ููŠ ุนู…ู„ู‡ ุฃูุณุฏ ู…ู† ุงู„ูุงุณุฏูŠู† ูู‡ูˆ ู…ู† ุฃุนุทุงู‡ู… ุงู„ู‚ูˆّุฉ ูˆุงู„ู‚ุฏุฑุฉ ูˆุงู„ุฃุฏูˆุงุช ูˆุงู„ุชุบุทูŠุฉ ุงู„ุฅุฌุชู…ุงุนูŠุฉ ูˆุงู„ู…ู‡ู†ูŠّุฉ ู„ูŠูƒูˆู†ูˆุง ูุงุณุฏูŠู†.

 

ูŠุง ู…ู† ุชุฏุนูˆู† ุถุฏّ ุงู„ูุณุงุฏ ุฅุญุฐุฑูˆุง ูู„ุนู„ّูƒู… ุฃู†ุชู… ู…ู† ูˆุถุน ุงู„ูุณุงุฏ ูˆุฃู†ู…ุงู‡ ูˆู„ุนู„ّูƒู… ุฃู†ุชู… ู…ู† ุฌุนู„ ู„ู„ูุณุงุฏ ุฃู†ูŠุงุจ ูˆุฃุธุงูุฑ ูŠู†ู‡ุด ุจู‡ู… ู„ุญู…ูƒู… ูˆู„ุญู… ุงู„ุจู„ุฏ ูˆู…ุนุฐุฑุฉ ู…ู† ุงู„ู…ุนู„ّู…ูŠู† ูˆุฃุณุงุชุฐุฉ ุงู„ุฌุงู…ุนุงุช ูˆูƒู„ ุงู„ู…ุฑุจّูŠู† ุงู„ูุงุถู„ูŠู† ูˆุงู„ุขุจุงุก ูˆุงู„ุฃู…ّู‡ุงุช، ูˆู„ูƒู† ุจู†ุงุกุง ุนู„ู‰ ุงู„ู…ู‚ุงุจู„ุงุช ุงู„ุชูŠ ุฃุฌุฑูŠุชู‡ุง ุฎู„ุงู„ ุงู„ุฃุณุงุจูŠุน ุงู„ู…ุงุถูŠุฉ ูุฅู†ّู†ูŠ ุฃุฌุฒู… ุจุฃู†ّ ุงู„ุชุฑุจูŠุฉ ูˆุงู„ุชุนู„ูŠู… ููŠ ุงู„ุจู„ุฏ ููŠ ุฃุฑุฏู‰ ุฃุญูˆุงู„ู‡ุง ู„ุฏุฑุฌุฉ ุฃู†ّูŠ ุฅุณุชู…ุชุนุช ูˆุดูƒุฑุช ูˆุฃุซู†ูŠุช ุนู„ู‰ ุดุงุจ ู‚ุงุจู„ุชู‡ ู„ุฃู†ّู‡ ูƒุงู† ุฑุงุฆุน ููŠ ุงู„ู…ู‚ุงุจู„ุฉ ูˆุฃุฌุงุจ ุนู„ู‰ ุงู„ุฃุณุฆู„ุฉ ุจุดูƒู„ ู…ู…ูŠّุฒ ูˆู„ู… ุชูƒู† ุณู†ูŠู† ุงู„ุฌุงู…ุนุฉ ุงู„ุฃุฑุจุน ุงู„ุชّูŠ ุฃู…ุถุงู‡ุง ู‡ุจุงุกุง.


ุนู„ู‰ ูƒู„ ู…ู† ูŠุฎุดู‰ ุนู„ู‰ ุงู„ุจู„ุฏ ูˆุฃูˆู„ุงุฏ ุงู„ุจู„ุฏ ุฃู† ูŠุฎุดู‰ ุงู„ู„ู‡ ุฃูˆّู„ุง ูˆุฃู† ูŠุชุฐูƒّุฑ ุดูŠุก ู…ู‡ู… "{ูˆَุฌَุงุกุชْ ุณَูƒْุฑَุฉُ ุงู„ْู…َูˆْุชِ ุจِุงู„ْุญَู‚ِّ ุฐَู„ِูƒَ ู…َุง ูƒُู†ุชَ ู…ِู†ْู‡ُ ุชَุญِูŠุฏُ}"