So a couple of days ago I posted about an interview I had at work for a Jr QA Engineer position, and by what I can only call luck... I got the job! I start next week after my current sprint is over at work.
Basically what happened is that a couple of other people had applied for the position, but on the day of their interview (yesterday), they canceled since they had accepted job offers somewhere else. So I guess by default I got it?
I know that I shouldn't be happy that I got the position by pure luck, but I am truly grateful that they decided to give me an opportunity since they could have easily just kept looking for someone else. Since there was a lot of stuff I didn't know about databases in general, I am actually joining the team as a temp. If I do well in the first 90 days, then I get to stay on the team. I am going to give it my all and try to learn as much as possible in this position. I hope that with this job I will get the required experience needed and one day be a full fledged QA Engineer one day.
Needless to say, I am super happy right now and I can't wait for this next challenge. I am also super nervous, but I will just face it as it comes.
That's all for now, thanks for reading!
Hi, my name is Christian Munoz and this is my blog about the different game projects I've been involved in. I recently graduated from the University of Utah with my MFA and now I'm looking for a job in the game industry as a game artist.
This blog includes work I did for my capstone project as an undergrad and all the projects that I worked on as a graduate student at the U of U.
My portfolio can be found at christian.brushd.com
Wednesday, May 18, 2016
Monday, May 16, 2016
Jr QA Engineer Interview
So today I had an interview for a Jr QA Engineer at my work place, and since it was my first engineering interview I didn't really know what to expect. And I have to say that I was not ready for some of the stuff that they were going to ask me.
The interview started with some SQL and database questions. I had tried to study some basic SQL stuff over the weekend, but I didn't think that they were going to ask me anything about it, I figured they would focus more on my C# experience. Since my experience with SQL and databases is very limited, I think its safe to say that I failed this part of the interview.
Next they moved on to some OOP (Object Oriented Programming) questions and I'm happy to say that I did much better in this sections. They asked me a few different questions on what inheritance was, when would you implement inheritance, and a few other questions. I struggled a bit on explaining myself, but I got through it.
Next was probably my favorite part, actual coding on a white board. They asked me how I would write a function that would calculate the factorial of a given number. This part I spent probably a couple of minutes since it was really straight forward. This is the code I wrote:
They looked at the code, and told me it was good. Then they asked me to rewrite the function using recursion. I struggled a bit on this part, I had trouble trying to put into code what I had already done in a different way. They gave me a hint saying that 5! = 5 * 4! and that was all I needed. Here is the code I wrote:
Overall I think I did much better in the second part of the interview than the first. I am not too hopeful on getting the position, but at least now I know what I need to work on and I am ready for the future. That is all for now, thanks for reading!
The interview started with some SQL and database questions. I had tried to study some basic SQL stuff over the weekend, but I didn't think that they were going to ask me anything about it, I figured they would focus more on my C# experience. Since my experience with SQL and databases is very limited, I think its safe to say that I failed this part of the interview.
Next they moved on to some OOP (Object Oriented Programming) questions and I'm happy to say that I did much better in this sections. They asked me a few different questions on what inheritance was, when would you implement inheritance, and a few other questions. I struggled a bit on explaining myself, but I got through it.
Next was probably my favorite part, actual coding on a white board. They asked me how I would write a function that would calculate the factorial of a given number. This part I spent probably a couple of minutes since it was really straight forward. This is the code I wrote:
public static int Factorial(int n)
{
int result = 1;
for (int i = n; i > 0; i--)
result = result * i;
return result;
}
They looked at the code, and told me it was good. Then they asked me to rewrite the function using recursion. I struggled a bit on this part, I had trouble trying to put into code what I had already done in a different way. They gave me a hint saying that 5! = 5 * 4! and that was all I needed. Here is the code I wrote:
public static int FactorialRecursive(int n)
{
int current = n;
if (n == 1)
return n;
int next = FactorialRecursive(n - 1);
return current * next;
}
Overall I think I did much better in the second part of the interview than the first. I am not too hopeful on getting the position, but at least now I know what I need to work on and I am ready for the future. That is all for now, thanks for reading!
Wednesday, May 11, 2016
Learning Selenium WebDriver
So as you can probably tell my my recent blog posts, I have been trying to get more into coding and learning different things that will help me become a developer in the future.
Since I am a QA Specialist, I've heard the buzzwords "selenium" and "automated test" thrown around the office, but I didn't really know what any of those were. So I decided to start looking into it and try to understand how Selenium works and how to make automated test.
After spending sometime looking at some videos on Pluralsight, I got the basic idea that basically you can use a programming language like C# and write a "script" on what you would like to do in a website. I did some basic examples, but I didn't really think about it until yesterday.
In my current project at work, we are currently working on migrating our existing database from RavenDB to MartenDB. There are many documents that we have saved in the Raven database, and we are going to migrate each type of document. But in order to test it correctly, we were trying to find a simple way that would allows us to generate a lot of activity on the site, like customer's trying to reset passwords and see if it would affect the migration.
I had the idea that I could write a Selenium script that would do this for us on the site. Here is what I came up with:
This script would essentially go to a site and go through the steps a customer would take to recover their password on their account. The script would repeat it 100 times (but it can be increased if we wanted) and we wouldn't have to worry about doing it ourselves manually. The downside to this script, is that it would perform the same action for the same account/email address provided. I was thinking of maybe modifying this script to read a text file that contained a lot of different email address that it would just input on the site.
I don't think this script will actually get used at work since I am not a QA Engineer, and I think they might have a better approach at doing this with some internal tool, but I thought that it was interesting how easy this was to write.
Anyways, that's all for now. Thanks for reading!
Since I am a QA Specialist, I've heard the buzzwords "selenium" and "automated test" thrown around the office, but I didn't really know what any of those were. So I decided to start looking into it and try to understand how Selenium works and how to make automated test.
After spending sometime looking at some videos on Pluralsight, I got the basic idea that basically you can use a programming language like C# and write a "script" on what you would like to do in a website. I did some basic examples, but I didn't really think about it until yesterday.
In my current project at work, we are currently working on migrating our existing database from RavenDB to MartenDB. There are many documents that we have saved in the Raven database, and we are going to migrate each type of document. But in order to test it correctly, we were trying to find a simple way that would allows us to generate a lot of activity on the site, like customer's trying to reset passwords and see if it would affect the migration.
I had the idea that I could write a Selenium script that would do this for us on the site. Here is what I came up with:
using System;
using System.Diagnostics;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumTest
{
class GenerateTokens
{
public static void Main()
{
Generator();
Environment.Exit(1);
}
private static void Generator()
{
IWebDriver driver = new ChromeDriver(@"C:\Libraries\");
driver.Url = "some-site.com";
Debug.Assert(driver.PageSource.Contains("A message has been sent with directions on how to reset your password.") == false);
for (int counter = 0; counter < 100; counter++)
{
driver.FindElement(By.Id("forgot-link")).Click();
IWebElement email = driver.FindElement(By.Name("Email"));
email.SendKeys("some-email@some-domain.com");
driver.FindElement(By.ClassName("btn-primary")).Click();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
Debug.Assert(driver.PageSource.Contains("A message has been sent with directions on how to reset your password.") == true);
}
driver.Quit();
}
}
}
This script would essentially go to a site and go through the steps a customer would take to recover their password on their account. The script would repeat it 100 times (but it can be increased if we wanted) and we wouldn't have to worry about doing it ourselves manually. The downside to this script, is that it would perform the same action for the same account/email address provided. I was thinking of maybe modifying this script to read a text file that contained a lot of different email address that it would just input on the site.
I don't think this script will actually get used at work since I am not a QA Engineer, and I think they might have a better approach at doing this with some internal tool, but I thought that it was interesting how easy this was to write.
Anyways, that's all for now. Thanks for reading!
Tuesday, May 10, 2016
The End of Disney Infinity
As most people know by now, Disney Infinity has come an end... by the sound of things is was kind of a surprise to everyone that Disney decided to end the production of the game.
I haven't worked at Avalanche since September of last year, so I don't really know what went down but all my friends that still worked there are really shocked at the news. I just hope that everyone there is able to find another position at other studios soon.
I was only a game ester in my short time at Avalanche, but I loved my time there and it thanks to them that I am now a software tester.
That's all for now, thanks for reading!
I haven't worked at Avalanche since September of last year, so I don't really know what went down but all my friends that still worked there are really shocked at the news. I just hope that everyone there is able to find another position at other studios soon.
I was only a game ester in my short time at Avalanche, but I loved my time there and it thanks to them that I am now a software tester.
That's all for now, thanks for reading!
Sunday, May 8, 2016
Caesar Cipher in C#
So I was talking to a co-worker the other day and the topic of a Caesar Cipher came up in our conversation. We talked about how it wouldn't be too hard to code something quick that would be able to "encrypt" some text.
So I was kind of bored over this weekend, and I decided that it would be a good exercise to write a Caesar Cipher. Here is my code:
That's all for now, thanks for reading!
So I was kind of bored over this weekend, and I decided that it would be a good exercise to write a Caesar Cipher. Here is my code:
class CaesarCipher
{
private string Sentence;
private int EncryptShift;
private int DecryptShift;
private bool IsEncrypted = false;
public CaesarCipher(string input, int shifting)
{
Sentence = input.ToLower();
EncryptShift = shifting;
DecryptShift = -shifting;
}
public string Encrypt()
{
if (IsEncrypted)
return Sentence;
char[] char_array = Sentence.ToCharArray();
Shuffle(char_array, EncryptShift);
Recunstruct(char_array);
return Sentence;
}
public string Decrypt()
{
if (!IsEncrypted)
return Sentence;
char[] char_array = Sentence.ToCharArray();
Shuffle(char_array, DecryptShift);
Recunstruct(char_array);
return Sentence;
}
private void Shuffle(char[] char_array, int shift)
{
for (int index = 0; index < char_array.Length; index++)
{
char letter = char_array[index];
if (letter >= 'a' && letter <= 'z')
{
letter = (char)(letter + shift);
if (letter > 'z')
letter = (char)(letter - 26);
else if (letter < 'a')
letter = (char)(letter + 26);
}
char_array[index] = letter;
}
}
private void Recunstruct(char[] char_array)
{
Sentence = null;
foreach (char letter in char_array)
Sentence += letter;
IsEncrypted = true;
}
}
That's all for now, thanks for reading!
Wednesday, May 4, 2016
Max & Min Heap
So now that class is over and I took my final for my CS2420 class last night, I find that I have come to love programming and I miss not having an assignment to work on. So today I decided that since I had already created a Max Heap class, that I should also create a Min Heap class.
While I was working, I found that 99% of the code was going to be the same, and I didn't want to just create a copy and tweak a few lines. So instead I decided to create a abstract Heap class that I could inherit from.
So I created the base class and moved most of the code to that file. Then I made the Max and Min Heap classes and made the changes required in each class to make it work. While this also wasn't that hard, I think that it was a good exerciser. I did something similar in the Components assignment, but I think this was a much better example of how to use inheritance.
Here is my code:
That's all for now, thanks for reading!
While I was working, I found that 99% of the code was going to be the same, and I didn't want to just create a copy and tweak a few lines. So instead I decided to create a abstract Heap class that I could inherit from.
So I created the base class and moved most of the code to that file. Then I made the Max and Min Heap classes and made the changes required in each class to make it work. While this also wasn't that hard, I think that it was a good exerciser. I did something similar in the Components assignment, but I think this was a much better example of how to use inheritance.
Here is my code:
That's all for now, thanks for reading!
Friday, April 29, 2016
Stack Class in C#
So this week there is no more homework for my C# class since the semester is coming to an end and we have a final exam next week.
Since I was bored at work, I started thinking that we never created a stack for one of the class assignments. So I decided to create my own, which wasn't that hard since its essentially just a wrapper around an array.
I started to work on it yesterday for a couple hours and finished it this morning.
Here is my code:
Thanks for reading!
Since I was bored at work, I started thinking that we never created a stack for one of the class assignments. So I decided to create my own, which wasn't that hard since its essentially just a wrapper around an array.
I started to work on it yesterday for a couple hours and finished it this morning.
Here is my code:
Thanks for reading!
Wednesday, April 27, 2016
CS 2420 - Assignment 9 - Max Heap
This week's assignment is not as hard as the last one, we just have to create a heap data structure. We had the choice of either creating a min heap or max heap, so I went with Max since it made the most sense to me.
While the assignment its self wasn't too hard, it took me a while to do all the conditional logic behind the Sink() function.
Here is my code:
That's all for now, thanks for reading!
While the assignment its self wasn't too hard, it took me a while to do all the conditional logic behind the Sink() function.
Here is my code:
using System;
using System.Collections;
using System.Collections.Generic;
namespace Assignment9
{
class MaxHeap<T> : IEnumerable<T> where T : IComparable
{
private T[] UnderlyingArray;
private int ElementCount = 0;
private int OldCount = 0;
private bool IsHeap = true;
public MaxHeap(int starting_size)
{
UnderlyingArray = new T[starting_size];
}
public MaxHeap()
{
UnderlyingArray = new T[5];
}
public int Count
{
get
{
return ElementCount;
}
}
public void Clear()
{
UnderlyingArray = new T[UnderlyingArray.Length];
}
public T this[int index]
{
get
{
return UnderlyingArray[index];
}
}
public void Add(T new_value)
{
if (!IsHeap)
BuildHeap();
if (ElementCount == UnderlyingArray.Length)
Resize();
UnderlyingArray[ElementCount] = new_value;
Swim();
ElementCount++;
}
public T PopTop()
{
if (!IsHeap)
BuildHeap();
T max = UnderlyingArray[0];
Swap(0, ElementCount - 1);
UnderlyingArray[ElementCount - 1] = default(T);
ElementCount--;
Sink();
return max;
}
public void Sort()
{
if (!IsHeap)
BuildHeap();
OldCount = ElementCount;
for (int i = 0; i < OldCount; i++)
{
Swap(0, ElementCount - 1);
ElementCount--;
Sink();
}
IsHeap = false;
ElementCount = OldCount;
}
public void BuildHeap()
{
if (IsHeap)
return;
int last_item = OldCount - 1;
for (int index = 0; index < OldCount / 2; index++)
{
Swap(index, last_item);
last_item--;
}
ElementCount = OldCount;
IsHeap = true;
}
private void Swim()
{
int current_index = ElementCount;
while (current_index != 0)
{
int parent_index = FindParent(current_index);
if (UnderlyingArray[current_index].CompareTo(UnderlyingArray[parent_index]) == 0)
break;
else if (UnderlyingArray[current_index].CompareTo(UnderlyingArray[parent_index]) > 0)
Swap(current_index, parent_index);
current_index = parent_index;
}
}
private void Swap(int first, int second)
{
T temp = UnderlyingArray[first];
UnderlyingArray[first] = UnderlyingArray[second];
UnderlyingArray[second] = temp;
}
private void Sink()
{
int current_index = 0;
while (current_index < ElementCount)
{
int max_child_index = current_index;
int left_child_index = FindLeft(current_index);
int right_child_index = FindRight(current_index);
if (left_child_index >= ElementCount)
break;
if (right_child_index >= ElementCount)
max_child_index = left_child_index;
if (right_child_index < ElementCount &&
UnderlyingArray[left_child_index].CompareTo(UnderlyingArray[right_child_index]) == 0)
max_child_index = left_child_index;
if (right_child_index < ElementCount &&
UnderlyingArray[left_child_index].CompareTo(UnderlyingArray[right_child_index]) > 0)
max_child_index = left_child_index;
if (right_child_index < ElementCount &&
UnderlyingArray[left_child_index].CompareTo(UnderlyingArray[right_child_index]) < 0)
max_child_index = right_child_index;
if (UnderlyingArray[max_child_index].CompareTo(UnderlyingArray[current_index]) == 0)
break;
if (UnderlyingArray[max_child_index].CompareTo(UnderlyingArray[current_index]) > 0)
Swap(current_index, max_child_index);
current_index = max_child_index;
}
}
private int FindParent(int current_index)
{
return (current_index - 1) / 2;
}
private int FindLeft(int current_index)
{
return (current_index * 2) + 1;
}
private int FindRight(int current_index)
{
return (current_index * 2) + 2;
}
private void Resize()
{
T[] new_array = new T[UnderlyingArray.Length * 2];
for (int index = 0; index < UnderlyingArray.Length; index++)
new_array[index] = UnderlyingArray[index];
UnderlyingArray = new_array;
}
public IEnumerator<T> GetEnumerator()
{
for (int index = 0; index < ElementCount; index++)
{
T temp = UnderlyingArray[index];
//Console.WriteLine("Current Value: {0}", temp);
yield return temp;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}That's all for now, thanks for reading!
Wednesday, April 20, 2016
CS 2420 - Assignment 8 - Components
This week's assignment is a bit more fun that usual since we are got to build a "game."
The point of this week's assignment to learn how to use components to build a game, instead of hard coding everything like we usually do. We also had a chance to review inheritance and understand how it works.
This time around there is too much code involved for me to put it here like I usually do, but if you are interested in looking at the code you can look here:
https://github.com/fushinoryuu/EAE2420/tree/master/DataStructuresAndSorts/Assignment8
I created these main class files: Component, Entity, Grid, Point, and Power Up.
The Grid was essentially a 2D array and everything ran through this file, it represented the map the player was going to play on. It also updated itself on the position of each enemy and the player and then displayed itself on the console.
The player and the enemies in the game all inherited from the Entity class and used a bunch of components to make each unique. For example, enemies had a component that allowed them to wrap around the Grid but the player was bound and couldn't go past the edges of the grid. To do this there was two components and I just had to make sure to give one to the player and the other to the enemies.
Power Ups are a type of component, but they don't inherit from the component class. I made it so they would modify the player's action. For example I had a Teleport Power Up. When they stepped on it, they would get randomly taken to an empty spot in the map.
I had a lot of fun with this assignment, but it took a little longer than I anticipated.
Anyways, that's all for now. Thanks for reading!
The point of this week's assignment to learn how to use components to build a game, instead of hard coding everything like we usually do. We also had a chance to review inheritance and understand how it works.
This time around there is too much code involved for me to put it here like I usually do, but if you are interested in looking at the code you can look here:
https://github.com/fushinoryuu/EAE2420/tree/master/DataStructuresAndSorts/Assignment8
I created these main class files: Component, Entity, Grid, Point, and Power Up.
The Grid was essentially a 2D array and everything ran through this file, it represented the map the player was going to play on. It also updated itself on the position of each enemy and the player and then displayed itself on the console.
The player and the enemies in the game all inherited from the Entity class and used a bunch of components to make each unique. For example, enemies had a component that allowed them to wrap around the Grid but the player was bound and couldn't go past the edges of the grid. To do this there was two components and I just had to make sure to give one to the player and the other to the enemies.
Power Ups are a type of component, but they don't inherit from the component class. I made it so they would modify the player's action. For example I had a Teleport Power Up. When they stepped on it, they would get randomly taken to an empty spot in the map.
I had a lot of fun with this assignment, but it took a little longer than I anticipated.
Anyways, that's all for now. Thanks for reading!
Tuesday, April 12, 2016
CS 2420 - Assignment 7 - Hash Table
This week we had to write a hash table, also known as a dictionary. Hash tables are really nice because you can index with more than just integers, and they are faster running times than a regular array or a linked list.
Here is my code:
That's all for now, thanks for reading!
Here is my code:
That's all for now, thanks for reading!
Subscribe to:
Posts (Atom)