Please contact me so I send a copy of my resume. My email is listed in the Contact page
A Software engineer and a researcher with a strong background in development of distributed systems, static and dynamic analyses, a fast pro-active learner, committed to high quality standards and best practices.
I am seeking a job in Systems Software, Static/Dynamic Analyses, Source Code Transformations, [Cross] Compiler Design and Implementation, Domain Specific Languages Design and Implementation, Parallel and/or Distributed Systems Specification and/or Development, High Performance Computing Software Design and Development (CPU,GPU, Heterogeneous Arch), Back-end Systems, and/or similar fields.
Target Industries: Research Labs, Innovative Tech Industry (e.g. Big Tech Companies).
Responsibilities include: Reviewing Research papers, co-authoring papers, Grant Proposals, and a book. Administered research lab machines (Linux), web pages, and troubleshooting services/servers. I co-taught a course on Parallel Programming (3 full lectures each is 80 minutes, link to slides) and the constructed a 9-nodes Pi Cluster (Construction Tutorial & Administering cluster) for in class demos.
Specializing in ABAP/4, BPS, WebDynPro
Responsibilities include: Automation of workflows on the used SAP module for professional training advising, HR Planning, and working on Quality Assurance Certification by ISO for the whole inspection department.. I also helped in monthly budget planning and notifying Sr. Supervisor of possible over/under runs.
Designed the RAM module Database to interface between Exel (Logistics company) and Saudi ARAMCO), Participated in development of a secured FTP based file puller between remote sites using Java SE, and Evolving an ERP (Enterprise Resource Planning sub-module) requirements and specifications of an ERP for time accountancy, employee utilization, car fleet management and maintenance, projects/customers and requirements management, financial management, business intelligence and visualization.
Developed a unified human resources system for hiring and managing that keeps track of consultants, candidates, invoices, international hiring agents, and employees to apply for available jobs. Its completion was around 85% by my self and supervisor of HR department.
The DS2 project (PhD) emerged after exploring (source code reading) an extension of IBM’s X10 project by Rice University called Habanero Java. DS2 is aimed at model checking/auto-testing of distributed systems written in Akka-Scala (actor-based event-driven parallelism). We developed a linearizability checking tool of basic distributed stores on top of it, e.g. key-value stores, that underlie most modern distributed databases, and cloud storage systems. Project link (and list of publications) are in this link , and the repository link. The project resulted in two novel Dynamic Partial Order Reduction algorithms.
In a compiler class taken at the University of Utah, we developed a real Python compiler front and mid end in the Racket programming language. The plan was to develop a full and real non-optimizing python 3.4 compiler including the backend’s register allocation, and assembly code generation. We stopped at the point of de-sugaring python into a normal form using function calls and reduced grammar after which emission of assembly code will be much easier than starting with the python AST that uses the full syntax.
This project is composed of Four main components: the front end that uses Antlr to define an imperative-like language to be parsed into a Lambda calculus DSL defined in Scala, Scala Lambda Calculus , Interpreter (reducer) implemented in scala’s recursive pattern matching, and a proof subsystem to show the proof for the final result of the reduced imperative program to a lambda calculus expression. The entire project was done in less than two weeks, including learning how to use Antlr from scratch.
In cooperation with Tyler Sorensen, we developed a semi-automatic concurrent Data- structures checker (bug catching). It used linearizability as a measure for correctness to reason about all possible concurrent executions of the concurrent data structure written in C/C++. It is a front end, with test case specified in XML and two pipelines generating all possible-correct “sequential executions schedules” and “Concurrent executions schedules”. Then it uses concrete test cases to execute all of them to generate two master logs. These are to be compared in order to reason about the correctness of the implementation of the data structure and report back to the user.
This project was designed and implemented using Java RMI and other custom classes for networking. It, also, takes advantage of the UUID for generating a unique identifier per user account. The self replicating-servers elect a coordinator to communicate with clients using an election algorithm and that server forwards the server-client communication as atomic replicated transactions. The server(s) is/are run in a reliable High-performance setup. Both the clients and servers utilize multicasting sockets to set up the replicated server-client interactions and discovery and multithreading to achieve reactiveness and concurrent adaptivity to multiple events. Some other features implemented include: check pointing and on the fly recovery for corrupted databases on different servers (distributed collaborative merge) as well as shutdown hooks to clean after a crash. The system can recover from any network partitioning including ethernet cable disconnection, sudden node shutdown, and latent/divergent states. All of the servers and clients act as peers, i.e. they are transient and discovery of servers by the client is per request/automatic.
Client and server are multithreaded using Java ExecutersService thread pool and the file transfers are done in chunks of 1MB size with re-ordering on the receiver end and retries on the sender.
Using TCP-sockets and thread pools to create connections and process file chunks received from different connections/peers at a time by different threads. To learn how Skype works by assigning an initial server to which all clients connect and share their info then elect a leader/coordinating peer. Later, all connections are teared down to let all peers act equally by sending queries to each other and then requesting and responding to requests at the same time, and asynchronously.
Implemented in Java, it is a simple simulation project that simulates a 3-node and 4-node (node can be a router) network that use a distributed Distance Vector algorithm to calculate the shortest path through direct links to each other node and/or through one or two (in case of 4-node setup) of the other nodes. Implemented is Poisoned-reverse solution for the count-to-infinity problem arising in routers when calculating Distance Vector Tables for their shortest paths calculation (routing algorithm).
Two hosts share public keys, given that a third pair of public and private key is pre-shared and instead of certificate. Then, one host sends a single message implementing all hash, hash-signature and encryption/decryption features to deliver the message securely to the other host. This is identical to the infamous BGP protocol.
One computing Sobel out of a normal picture, one does triangular matrix solve on the GPU, most significant is bucket sort on the GPU.
I maintain a complete IT infrastructure/Home Lab, with containers and services. Back in 2003 I had audio/video conferencing, remote assistance services, web hosting, periodic network file server backups of all home machines, along with managing updates for my entire household. This was done before formal education in any networking (self taught when networking was not common place in households).
Scala (advanced), Java (advanced), C/C++ & CUDA (medium-advanced), C# (medium), Python (medium), Racket (basic), Antlr (medium)
DBMS’s (Oracle, MySQL, MS SQL Server), OLTP (SQL, PL/SQL), OLAP (DMQL), Java Persistence API’s (Object Serialization, JPA, JAXB, XStream, Hibernate, Oracle Toplink)
Apache [Tomcat], glassfish, MS IIS, HTML, Javascript, JSF, ASPX .Net, CGI, CSS, XSLT, XML, json.
[Multicast] Sockets, RMI, Java Threadpools, Scala Akka, Apache Spark - Scala API, MPI, CUDA C (GPU), OpenMP, pThreads, Thrust Library.
SRS (Software Requirements and Specifications, Activity, collaboration, Sequence, State, Class, Entity, Use Case, and Deployment diagrams). OO Design Patterns to create quality, extensible, and maintainable software systems. Now, transitioning to Typed Functional Programming.
Git, Subversion, Eclipse, IntelliJ, Emacs, and containerizing of applications (Docker).
University of Utah [2012 – 2021], SLC, Utah -- USA [Link] -- School of Computing [Link] -- Gauss Group [Link] (MSc and PhD)
Course Work Highlights: Massively Parallel Programming (GPU), Adv. Computer Networks, Artificial Intelligence, Software Verification, HPC Formal Methods, Formal Methods Systems Design, Compilers
Boisestate University [2010–2011], Boise, Idaho -- USA [Link] -- Computer Science Dept. [Link] (Non-Matriculate)
Course Work Highlights: Distributed Systems, Advanced Algorithm Design and Analysis, Advanced Computer Architecture (ARM-RISC), Object Oriented Design Patterns.
King Fahd University of Petroleum and Minerals (KFUPM) [1999–2006] , Dhahran, Eastern Province -- Saudi Arabia [Link] -- ICS Department [Link] (BSc)
Course Work Highlights: Foundations of Computer Science, Discrete Structures , Data Structures, Computer Org. & Assembly Programming, Desing and Analysis of Alg., Computer Architecture (Intel-CISC), Fundamentals of Programming Languages, Software Engineering, Database Systems, Advanced Database Systems, Data warehousing and Mining, Computer Network Systems, Multimedia Systems, Internet and Web Application Dev., Operating Systems
Location: online Year: 2021 Institution: University of Oregon
Location: Lousanne, Switzerland Year: 2015 Institution: Ecole Polytechnique Federale de Lousanne - EPFL
Functional Programming in Scala (Coursera -- EPFL)
Location: online - Coursera.org Year: 2013 Institution: Ecole Polytechnique Federale de Lousanne - EPFL Instructor: Martin Odersky