Frontend / Full Stack Development
I worked at Engine Room Technology as a Frontend Dev / Full Stack software developer. I coded in PHP, HTML, CSS, SQL, and some JavaScript. It was custom work for clients, so though I can't post the code itself, I can post videos of sites I worked on. Most sites were using Drupal CMS, so my day to day was largely creating templates in Symfony (a PHP language) that included all necessary CSS styling, in which a client could use the template to fill in their specific information.
I also led deployments for the two sites listed here (Northwest Bank and LBBC) which means I was in change of making sure databases were consistent and up to date across local environments, test environments, and production environments. Suffice to say, I am proficient in GitHub and general version control software, Atlassian, Confluence, Jira, Pantheon and other multi-dev environments, and have experience setting up my Docker and MAMP local environment.
Video's above and below show mets.lbbc.org, a secondary site of lbbc.org (Living beyond breast cancer). I was the lead developer for this client and these videos show this landing page type site that I had significant visual control over (adding color-blocking, coloring text, some layout design choices). The above video shows the site on desktop, below video is the site on mobile. This site was hosted on Wordpress, but it was almost exclusively custom HTML and CSS.
Video above: lbbc.org, the main site for the non-profit. The site was hosted on Drupal, so I mostly had to rework existing templates (layouts and functionalities of the site) that were buggy or unfit for the amount of data lbbc had and needed to display.
Video below: northwest.bank, the main site for Northwest Bank. The site was hosted on Drupal, but this client mostly wanted new templates for new layouts and functionality they needed. Unlike lbbc, the northwest site has changed visual style quite a bit since I worked on it, but notable pages I worked on that were still looking how I initially created were some of the homepage layouts, the branch locator results, and most importantly, the digital demos page. I made the digital demos from scratch - both the landing page and individual demo pages. Along with making templates and visuals, I worked in the database for Northwest as well, making sure all branches stay up to date and with correct information.
Computer Organization
A class focused on computer organization, assembly language, and operating systems with a heavy emphasis on systems and low-level programming. This was a group project to build an Instruction Pipeline and Cache Simulator (IPLC-Sim). I wrote the code for the Cache functions, which should dynamically build the optimal cache data structure based on user input.
Here is a snippet of my code from the cache initialization:
void iplc_sim_init(int index, int blocksize, int assoc)
{
    int i=0, j=0;
    unsigned long cache_size = 0;
    cache_index = index;
    cache_blocksize = blocksize;
    cache_assoc = assoc;
    
    
    cache_blockoffsetbits =
    (int) rint((log( (double) (blocksize * 4) )/ log(2)));
    /* Note: rint function rounds the result up prior to casting */
    
    cache_size = assoc * ( 1 << index ) * ((32 * blocksize) + 33 - index - cache_blockoffsetbits);
    
    printf("Cache Configuration \n");
    printf("   Index: %d bits or %d lines \n", cache_index, (1<<cache_index) );
    printf("   BlockSize: %d \n", cache_blocksize );
    printf("   Associativity: %d \n", cache_assoc );
    printf("   BlockOffSetBits: %d \n", cache_blockoffsetbits );
    printf("   CacheSize: %lu \n", cache_size );
    
    if (cache_size > MAX_CACHE_SIZE ) {
        printf("Cache too big. Great than MAX SIZE of %d .... \n", MAX_CACHE_SIZE);
        exit(-1);
    }
    
    cache = (cache_line_t *) malloc((sizeof(cache_line_t) * 1<<index));
    
    // Dynamically create our cache based on the information the user entered
    for (i = 0; i < (1<<index); i++) {
    // DONE Cache:
        /* initialize and fill in with 0s */
        cache[i].valid = (int *)calloc(sizeof(int), assoc);
        cache[i].tag = (int *)calloc(sizeof(int), assoc);
        cache[i].replaced = (int *)calloc(sizeof(int), assoc);
        for (j=0; j<assoc; j++){
            cache[i].valid[j] = 0;
            cache[i].tag[j] = 0;
        }
    }
    
    // init the pipeline -- set all data to zero and instructions to NOP
    for (i = 0; i < MAX_STAGES; i++) {
        // itype is set to O which is NOP type instruction
        bzero(&(pipeline[i]), sizeof(pipeline_t));
    }
}

Back to Top