Jeffrey H. Diaz
acecr3@r.postjobfree.com
551-***-**** (Cell phone)
*** ***** ***'s Avenue
Apartment 11I
Bronx, NY 10454
Goal: My goal is to begin a career in a Computer Science related field and earn valuable
experience while improving my current skills and learning new ones.
Education: Graduated from University at Buffalo (Class of 2014) with a BA in Computer Science and a
cumulative GPA of 3.0.
Programming: I have a basic proficiency level with programming in Standard ML, SWI prolog, R and
PostScript. I have an intermediate proficiency level with programming in Java, c/c++. MIPS
Assembly, Verilog HDL, Android (Java) and Python.
Projects:
• I worked with a Finch robot and had to write code so that the finch would stop and
move depending on the readings of its obstacle and heat sensors. The finch had to
stop near the edge of a wall and continue forward until a corner was detected;
meaning that the front and side obstacle sensors of the finch are returning a value of
true. It also had to detect when it was under a light using its heat sensors (with a
threshold of 30 degrees Fahrenheit) and come to a complete stop until the light was
turned off.
- CSE 115, Introduction to Computer Science I, Fall 2012
- Programmed in Java
• A team and I had to remake the board game Lotus where each player starts at the
beginning with a stack of pieces and the top piece can move the same amount of
spaces as the height of the stack it was on top of. Also had to implement 2-3 and 4-
6 player functionality and create special board tiles (such as one that lets the player
move a random amount of spaces between 1 and 3 spaces after their piece has
landed on the tile).
- CSE 116, Introduction to Computer Science II, Spring 2013
- Programmed in Java
•Made a program in MIPS Assembly Language that prompted a user for a string of
signed integers then stored the user-inputted data as a null terminated string at a
specific memory address (0x10000100). The program also had an interface where
the user could choose to display the stored string, enter a new string, convert the
null terminated string of signed integers to an array of unique halfwords, return the
mean of the signed integers in the array, return the median of the signed integers in
the array, or display the array stored in memory.
- CSE 341, Computer Organization, Fall 2013
- Programmed in MIPS Assembly
•Implemented an entire 32-bit ALU using Verilog HDL and wrote a report on the
implementation which included the circuit diagram of the ALU, critical path delay
and gate cost analysis of the ALU, functional simulations of the ALU to prove that
it works, and an analysis of temporal dependencies within the ALU while using the
gate delay model.
- CSE 341, Computer Organization, Fall 2013
- Programmed in Verilog HDL
•Implemented a simpler version of an Auto-Flight Controller System (AFLIC) which
simulated concurrent flights using threads and simulated random collisions
between these flights by utilizing race conditions created by using these concurrent
threads.
- CSE 321, Real-time and Embedded Operating Systems, Fall 2013
- Programmed in c
•Worked on an embedded system (XINU) which was installed on a Linksys WRT54GL
router, and contributed to its development by adding commands and applications to
its pre-existing shell, such as a chat application which used the UART ports on the
router for communication, a simple word reversing application that takes any string
as it’s argument and prints the reverse of said string, and a periodic real-time tasks
scheduling app that used a predetermined task table.
- CSE 321, Real-time and Embedded Operating Systems, Fall 2013
- Development for the embedded system was done in c
•Implemented a stack-based Read-Evaluate-Print-Loop which was basically a shell.
This stack-based repl would push an evaluated item onto the stack and use the top n
(n = number of arguments required for said command) elements of the stack as the
arguments for the command. This repl was able to do many things such as perform
arithmetic functions (addition, subtraction, multiplication, division, calculate the
remainder of 2 numbers), negate a number, perform Boolean functions (if, and, not,
or), perform relational functions (less than, equal too) and other functions such as
bind (binded a name to a value) and load (attempted to open a given file name, and
if successful, would use the input inside of the file as if it was inputted directly by
the user). Many of these commands required specific types as their arguments. The
REPL handled many types such as numbers, both negative and positive (were used
in arithmetic and relational functions and were denoted as themselves on the stack),
boolean literals (were denoted as either ‘:true:’ or ‘:false:’ on the stack), an error
literal (was denoted as ‘:error:’ on the stack), names; a string of consecutive
alphanumeric characters starting with a letter (were denoted as themselves on the
stack), string literals; anything between two quotation marks (were denoted as
themselves on the stack), and closures; anything between a closing and opening
bracket, including nested closures (were denoted as ‘:closure:’ on the stack).
- CSE 305, Introduction to Programming Languages, Spring 2014
- The repl was fully created twice in two languages separately:
python and c
•Made a distributed chat system consisting of both a client and a server application. The
client application is user-based (commands are used in order to establish
connections or disconnect from a server/other client) and is used in order to
communicate with client processes across different machines, or the same machine
if desired. There can be multiple client processes whether it is on one machine, or
across different machines. The server process is used to register a client with a
desired username, and it keeps track of which clients are online, along with which
clients are chatting with each other, if any (up to 2 clients are allowed in any given
chat session). Clients are able to connect to each other initially because of the
server. The client must know the address of the server (its IP address and port
number) in order to establish a connection with it. Once this connection is
established, the client is considered online and is registered with the server. The
server keeps track of all of the client’s addresses, and once two clients wish to
establish a chat session with each other, the server sends the address of the
corresponding chat partner to each client, allowing them to chat with each other
without help from the server (chat functionality is still possible even if the server
process is ended once both client processes are in a chat session).
- CSE 305, Introduction to Programming Languages, Spring 2014
- Programmed in Java and used the Socket API for client-to-server
and client-to-client communication
•Aggregated data from twitter by creating a twitter app, then using that app with the
twitter API in order to analyze and mine the data. The data was analyzed using
many algorithms implemented through MapReduce on the Hadoop Distributed File
System. The algorithms used were wordcount (used with a combination of python
scripts in order find the most popular #tags and @tags), co-occurrence (both pairs
and stripes approaches), k-means (used to cluster users based on their followers
counts), and shortest path (used on a provided graph).
- CSE 487, Data-intensive Computing, Spring 2014
- MapReduce algorithms and twitter aggregation were done in Java.
- Various scripts for data cleaning, ordering and processing were
done in python
•Implemented a simplified version of the Amazon Dynamo which stored values based
on the key assigned to said value. Storage for a key was determined by hashing a
key (SHA-1 hashing was used) and using lexicographical comparison between the
key and the id of a node in order to find where the key belonged in the system (all
nodes formed a ring based on their lexicographical order). In this version of the
Dynamo, each node knows all the other nodes in the system and which partition
belongs to which node. All keys and values from one node are replicated in the
next two nodes within the ring (successor, and successor of the successor). Failure
handing and node recovery were also implemented.
- CSE 486, Distributed Systems, Spring 2014
- Programmed for Android in Java
- Was tested using android device emulators
- Was debugged using logcat
- Used Socket API for inter-device client/server communications
Experience:
Worked with the University at Buffalo athletic promotions department (Fall 2013-Spring
2014), where I helped set up vendors and oversaw fan activities before and during home
football and basketball games. Also distributed student tickets for many games, including
the game called “The Clash at the Ralph” where I had to diligently and efficiently hand out
tickets to thousands of students from a ticket booth while verifying that they were indeed
students, and quickly calculate the cost and remaining change for students who brought
guests (students were free but each of their guests were extra).
• This job greatly improved my interpersonal skills as I regularly had to
communicate with others when accomplishing different tasks
• This job showed me that I am prepared to work under heavy stress (thousands of
students coming to get student tickets) while maintaining efficiency
• This job showed me that I am great at following instructions as many times there
were different kinds of tasks that I would have to pick up and learn to do on the fly
This job improved my leadership skills as on more than one occasion I was put in charge of
our athletic promotions group. Such as when our boss left early and we had to close things
down, then return the keys and certain materials to her office, after which I contacted her to
let her know the task was completed.
Field-related Skills:
• Have experience using MapReduce on the Hadoop Distributed File System.
• I am very comfortable with using the Socket API with Java for client-server and
inter-machine communication, and I understand well the concepts of client-side
programming versus server-side programming.
• I am comfortable doing Android programming in java, testing code using Android
Virtual Devices, and debugging code using ADB along with logcat.
• Have experience collecting data, cleaning said data, and then analyzing the data.
• I am very comfortable working on a Linux/Unix-based environment and using shell
commands.
• I have vast experience writing a program (using a text-editor such as vi/vim),
compiling it, and then executing it in a shell on a Unix-based operating system,
using different programming languages (c/c++, java, python, SWI Prolog,
PostScript, Standard ML, etc.).
• I have much experience troubleshooting Windows and Unix-based operating
systems.
• I am experienced in using Microsoft Office.
• I am comfortable with concurrent programming, making multiple processes and
using threads (I am aware of race conditions and managing timings on different
threads)
• I am comfortable with object-oriented programming languages and other
programming paradigms such as procedural programming, functional
programming, declarative programming and Event-driven programming.
• I am a quick learner as I have had to pick up programming languages on my own
for some of my classes (c /c++ for CSE 250 and CSE 321, python for CSE 305 and
CSE 487).
• I am passionate about programming and truly enjoy it. Nothing feels better than
being presented with a problem, planning and coming up with a solution, then
executing that solution in code.