{"id":2,"date":"2013-03-21T22:43:51","date_gmt":"2013-03-21T22:43:51","guid":{"rendered":"http:\/\/www.coreyabel.com\/?page_id=2"},"modified":"2024-11-15T09:33:19","modified_gmt":"2024-11-15T17:33:19","slug":"sample-page","status":"publish","type":"page","link":"https:\/\/www.coreyabel.com\/?page_id=2","title":{"rendered":"Work"},"content":{"rendered":"<h2>Accretive Technology Group<\/h2>\n<p>I have been at Accretive Technology Group since April 2019 as a senior lead software engineer.<\/p>\n<ul>\n<li>Worked on client and server applications with <strong>TypeScript<\/strong><\/li>\n<li>Used <strong>React<\/strong> &amp; <strong>Redux<\/strong> for single-page applications<\/li>\n<li>Server developed with <strong>Node.js<\/strong> and <strong>Koa<\/strong><\/li>\n<li>Live service monitoring<\/li>\n<li>GUI automation<\/li>\n<\/ul>\n<h2>ArenaNet<\/h2>\n<p>I worked at ArenaNet from May 2017 to March 2019 as a tools programmer for an internal editor and engine.<\/p>\n<ul>\n<li>Worked on a multi-tool, 3D game editor with <strong>C#<\/strong> and <strong>WPF<\/strong><\/li>\n<li>Created native tools and engine features with <strong>C++<\/strong><\/li>\n<li>Used <strong>C++\/CLI<\/strong> to perform editor\/engine communication<\/li>\n<li>Developed a cinematics editor with scrubbable timeline<\/li>\n<li>Added cinematics features to the engine<\/li>\n<li>Refactored curve editor for new types, features, and performance<\/li>\n<li><span style=\"font-weight: 400;\">Enabled editing of inherited resource content to increase flexibility and productivity for world designers<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Interacted with cinematic, world, and VFX artists frequently for support and quick feedback loops<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Constructed unit tests to ensure stability of editing features and resource deserialization<\/span><\/li>\n<li>Created a <strong>Node.js<\/strong> console application to help automate daily tasks<\/li>\n<\/ul>\n<h2 id=\"ddi\">DoubleDown Interactive<\/h2>\n<p>I worked at DoubleDown Interactive from September 2013 to September 2016 with a large team of mobile developers, QA testers, and artists.<\/p>\n<ul>\n<li>Developed casino games with <strong>JavaScript<\/strong>\u00a0and a modified <a href=\"http:\/\/www.limejs.com\/\"><strong>LimeJS<\/strong><\/a> framework<\/li>\n<li>Componentized sub systems for better plug &amp; play of shared code<\/li>\n<li>Utilized <a href=\"https:\/\/developers.google.com\/closure\/\"><strong>Google Closure<\/strong><\/a> Library and Templates<\/li>\n<li>Created an custom WYSIWYG editor with <strong><a href=\"https:\/\/github.com\/nwjs\/nw.js\/\">nw.js<\/a><\/strong>\u00a0(formerly node-webkit) and <a href=\"https:\/\/github.com\/dataarts\/dat.gui\"><strong>dat.GUI<\/strong><\/a><\/li>\n<li>Worked with <strong>C#<\/strong> and <strong>Unity<\/strong> to develop a better level editor<\/li>\n<li>Used <strong>PHP<\/strong> and <a href=\"https:\/\/www.getpostman.com\/\"><strong>Postman<\/strong><\/a> to develop and test\/debug API requests<\/li>\n<li>Created a few small tools with <strong>Python<\/strong><\/li>\n<li>Developed unit tests for newly developed systems<\/li>\n<li>Created a simple automation and test tool<\/li>\n<li>Contributed greatly to internal documentation<\/li>\n<\/ul>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2017\/01\/IMG_3945.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-304 size-medium alignright\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2017\/01\/IMG_3945-225x300.jpg\" alt=\"IMG_3945\" width=\"225\" height=\"300\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2017\/01\/IMG_3945-225x300.jpg 225w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2017\/01\/IMG_3945-768x1024.jpg 768w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2017\/01\/IMG_3945-624x832.jpg 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2017\/01\/IMG_3945.jpg 1536w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><\/p>\n<p>At DDI, I was a source of knowledge for both programmers and artists, and I would always take the time to answer questions and assist with bugs or new solutions. \u00a0I could remember our\u00a0codebase fairly well, so I rarely had to look something up when working with someone. \u00a0This ability helped immensely when I was\u00a0writing documentation, as well as when I got contacted for help while on vacation.<\/p>\n<p>After my departure, my co-workers missed me. \u00a0My manager put a photo of me on a cardboard cutout of Ellen and placed it next to his desk.<\/p>\n<h3 id=\"ddiCasino\">DoubleDown Casino<\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/IMG_1336.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-235\" style=\"clear: right;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/IMG_1336-300x225.png\" alt=\"DoubleDown Casino\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/IMG_1336-300x225.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/IMG_1336-768x576.png 768w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/IMG_1336-1024x768.png 1024w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/IMG_1336-624x468.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/IMG_1336.png 2048w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2016\/12\/IMG_1337.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-299\" style=\"clear: right;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2016\/12\/IMG_1337-300x225.png\" alt=\"img_1337\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2016\/12\/IMG_1337-300x225.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2016\/12\/IMG_1337-768x576.png 768w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2016\/12\/IMG_1337-1024x768.png 1024w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2016\/12\/IMG_1337-624x468.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2016\/12\/IMG_1337.png 2048w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"https:\/\/www.google.com\/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=6&amp;cad=rja&amp;ved=0CF0QFjAF&amp;url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fdoubledown-casino-free-slots%2Fid485126024%3Fmt%3D8&amp;ei=m5mVUru9M47SoASXqYKIBw&amp;usg=AFQjCNH1XwkxvxjHQXlqhzfqoxoyo2j0kg&amp;sig2=E3v4-mclH97dAETVYjt5ow&amp;bvm=bv.57155469,d.cGU\" target=\"_blank\" rel=\"noopener noreferrer\">iTunes Store<\/a> &#8211; <a href=\"https:\/\/www.google.com\/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=5&amp;cad=rja&amp;ved=0CFQQFjAE&amp;url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.ddi%26hl%3Den&amp;ei=m5mVUru9M47SoASXqYKIBw&amp;usg=AFQjCNFFh0v2Pvl8C2FyVyrUCeNcoJz34w&amp;sig2=VFaElFn47VpcBG24T0yw1Q&amp;bvm=bv.57155469,d.cGU\" target=\"_blank\" rel=\"noopener noreferrer\">Google Play Store<\/a><\/p>\n<p>The DoubleDown Casino app was developed with an HTML5 game framework that was run on desktop browsers, iOS, and Android. \u00a0It features many different casino games (slots, roulette, blackjack, and video poker). \u00a0Two of the best parts about working on the app is the amount of shared code between the games and the millions of people that play the app.<\/p>\n<p>I started out working on just casino game content, but a good chunk of time was spent refactoring systems to make it easier for development of new games. \u00a0One major focus was componentizing large sections of code we had. \u00a0Each game relied on common code to function. \u00a0The idea was to not reinvent the wheel each time, and the first few games were incredibly similar. \u00a0Having the same code run for each game did not work as well when the content we were tasked to develop was becoming more unique and deviating from the standard common code.<\/p>\n<p>The first componentization was for our server response parsing. \u00a0Not all responses were equal for the same kind of feature, and not all games had the same set of features. \u00a0I mostly worked on improving on the details after a fellow developer did the initial work. \u00a0\u00a0My goal was to tidy up the processed data as well as make the parsing more flexible. \u00a0Our default parsing was initially written during a time with less developer time and resources, and it included many hard-coded values to check for in the server response. \u00a0For backwards compatibility purposes (and to prevent some regression testing), those were left in, but I added the ability to override options with data per game.<\/p>\n<p>For each user interaction, the parsed data was fed to a\u00a0very long method that scheduled a series of actions, animations, and sounds. \u00a0The method kept growing as new games with different features were developed. \u00a0I was tasked to work on a new game that repeated a section of the long method with different data, but I did not want to copy\/paste a large chunk of code and hack it in. \u00a0I took the individual features of the core game code and put them into separate component classes that could be removed or replaced per game. \u00a0Each component defined actions to take on specific events. \u00a0In a new system, I mimicked the the previous long method by just dispatching a few of these events that the components registered for. \u00a0I was also able to sequence the order of the components that got triggered for each of those events.<\/p>\n<p>With the high-level execution only requiring a few event dispatching calls, it made it easy to override and customize for a particular game. \u00a0It was also incredibly easy to add new features specific to a game or create common, reusable components. \u00a0By segmenting the core code into components, each game&#8217;s level data could define what functionality it needed and which order each feature would get called on triggered events for\u00a0scheduling tasks. \u00a0Each part could get replaced\u00a0with an advanced shared-code version, one custom to the particular game, or removed if the game didn&#8217;t have that feature.<\/p>\n<h3 id=\"ddiLevelEditor\">Level Editor<\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/unnamed.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-236\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/unnamed-300x175.png\" alt=\"Level Editor\" width=\"300\" height=\"175\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/unnamed-300x175.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/unnamed-768x448.png 768w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/unnamed-1024x597.png 1024w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/unnamed-624x364.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/unnamed.png 1675w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>We needed a way to visually edit the scenes we were creating, so I spent time working on two different level editors.<\/p>\n<p>Our first editor was initially created during a hectic week where teams could create whatever they wanted. \u00a0Four developers created a WYSIWYG editor by running our game framework within a WebKit renderer. \u00a0<a href=\"https:\/\/github.com\/nwjs\/nw.js\/\">nw.js<\/a> (formerly node-webkit) was used to display the local web page and give us some Node.js functionality for saving &amp; loading. \u00a0<a href=\"https:\/\/github.com\/dataarts\/dat.gui\">dat.GUI<\/a>\u00a0was used for displaying editable properties of a selected object. \u00a0We developed a serialization system for both JSON and XML and a deserialization for JSON.<\/p>\n<p>I worked on the transform gizmos, property inspector, tree view, history, UI paneling, sprite sheet generation, and XML serialization. \u00a0History was recorded by serializing objects at the start and end of editing and trimming down just to the changed properties. \u00a0Undoing &amp; redoing just made the objects deserialize the subset of properties recorded.<\/p>\n<p>For each class,\u00a0we created a map of property names to getters and setters. \u00a0This property list could be iterated over for both serialization and showing the properties in the object inspector. \u00a0The inspector would use default settings for editing each property, but a separate list was used to modify and tweak the controls and add extra functionality<\/p>\n<p>The second editor was developed with Unity. \u00a0This was done to reduce the amount of &#8220;editor&#8221; programming we had to to, as well as let the artists use something more familiar (the artists never used the first editor). \u00a0We developed a C# plugin for Unity that included more MonoBehaviour components and specific\u00a0version that inherited from the base classes provided by Unity. \u00a0It also included various menu options (exporting, validation, etc.).<\/p>\n<p>Most of my work was done fine-tuning the export process to make the usage of it easier for developers. \u00a0We hadn&#8217;t yet got to the stage were we could export from Unity or our own custom level editor to completely override the level files in our packages. \u00a0My goal when working on the project was to decrease the amount of changes from the exported scene to what was usable. \u00a0I also focused on making multi-scene exporting less of a hassle for developers and allowing artists to use more features for animations. \u00a0I worked on turning prefab objects and instances into Google Closure templates and calls to reduce duplication between our different layouts.<\/p>\n<h3 id=\"ddiTestTool\">Test Tool<\/h3>\n<p>Some of the sloppiest code I ever wrote was the most useful. \u00a0I needed a quick way to test a bunch of different settings on almost all of our game content due to new A\/B tests we were going to do. \u00a0I wrote a independent file that I could load on top of the app to inject functionality. \u00a0The tool was able to automatically go through all scenes, do verification at various steps, take screenshots, switch layouts, switch A\/B settings, etc. \u00a0Theses actions were performed without restarting the app. \u00a0It was extended later to switch between resolutions and languages, which was not something our app was structured to do.<\/p>\n<p>The Google Closure Library does not use a\u00a0module pattern that will hide &#8220;private&#8221; members in a closure. \u00a0&#8220;Private&#8221; properties are only denoted with the use of an underscore in the property name. \u00a0So all properties are accessible, and the rest of our code base followed the format of the Google Closure Library. \u00a0I knew all of the properties that had to be manipulated, so my code modified many\u00a0properties that shouldn&#8217;t have been touched. \u00a0I also wrapped major methods to collect and redefine data when the methods were called.<\/p>\n<p>We had automation already (which could take screenshots), but it took several minutes for one game to do a complete pass and wasn&#8217;t easy to add the verification steps that I needed. \u00a0I didn&#8217;t need the waiting and many of the validation tests that the automation had. \u00a0I wrote my own simple automation in the tool to be able to go through all games in about five minutes, so rapid testing was possible for my A\/B work.<\/p>\n<h2 id=\"theIntegratedAgency\">The Integrated Agency<\/h2>\n<p>I did contract work with five other developers and artists for interactive apps on mobile devices from May 2012 to July 2013.<\/p>\n<h3 id=\"ICGN\">ICGN Annual Conference<\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/06\/icgn.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-219\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/06\/icgn-300x204.png\" alt=\"icgn\" width=\"300\" height=\"204\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/06\/icgn-300x204.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/06\/icgn-1024x699.png 1024w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/06\/icgn-624x426.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/06\/icgn.png 1280w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"https:\/\/itunes.apple.com\/us\/app\/icgn-annual-conference\/id660492810?ls=1&amp;mt=8\" target=\"_blank\" rel=\"noopener noreferrer\">iTunes Store<\/a> &#8211; <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.theintegratedagency.icgnny2013\" target=\"_blank\" rel=\"noopener noreferrer\">Google Play Store<\/a> &#8211; <a href=\"http:\/\/www.icgn-ny-2013.com\" target=\"_blank\" rel=\"noopener noreferrer\">Development Site<\/a> (user: icgntest, pass: ws7zas)<\/p>\n<p>A UI designer and I created an app for the\u00a0International Corporate Governance Network Annual Conference.\u00a0 I helped implement features and converted a website for app deployment.<\/p>\n<ul>\n<li>Converted static pages to run as a single-page application<\/li>\n<li>Used <strong>HTML5 Web Storage<\/strong> for saving items retrieved from a database at 60 minute intervals<\/li>\n<li>Used <a href=\"http:\/\/phonegap.com\/\"><strong>PhoneGap<\/strong><\/a> to deploy app on iOS, Android, and Windows Phone and store files locally<\/li>\n<li>Optimized CSS for mobile<\/li>\n<li>Loading\/unloading of images to reduce memory footprint<\/li>\n<li>Utilized Sched.org&#8217;s RESTful API for managing user schedules<\/li>\n<\/ul>\n<h3 id=\"avid\">Internal Sales Tool for Avid Technology<\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/avid-01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-33\" style=\"margin-top: 0;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/avid-01-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/avid-01-300x225.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/avid-01-624x468.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/03\/avid-01.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.axxisdigital.com\/avid\/app.cgi?file=home.lua\" target=\"_blank\" rel=\"noopener noreferrer\">Avid Sale Tool Development Site<\/a><\/p>\n<p>We created an internal sales tool for <a href=\"http:\/\/www.avid.com\/US\/\" target=\"_blank\" rel=\"noopener noreferrer\">Avid Technology<\/a> to help sell their suite of hardware and software to news stations and video production studios. Development was done on an online site, while we served a local version on an iPad. I worked with another programmer, a UI designer, and a sound designer.<\/p>\n<ul>\n<li>Created a database-driven, single-page iPad app<\/li>\n<li>Used <strong>CSS<\/strong> to layout and create website based on designer&#8217;s mockups<\/li>\n<li>Used <strong>JavaScript<\/strong> with AJAX to request JSON from the <strong>SQLite3<\/strong> database<\/li>\n<li>Interactive elements and animations handled by JavaScript library <strong>jQuery<\/strong><\/li>\n<li>Other animations created with CSS3 transitions<\/li>\n<li>Developed an admin section for user-friendly editing<\/li>\n<\/ul>\n<h3 id=\"jackAndJill\"><i>Jack &amp; Jill&#8217;s ABC&#8217;s of Christmas<\/i><\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/jackandjill.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-129\" style=\"margin-top: 0;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/jackandjill-300x225.png\" alt=\"jackandjill\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/jackandjill-300x225.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/jackandjill-624x468.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/jackandjill.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/itunes.apple.com\/us\/app\/jack-jills-abcs-of-christmas\/id586785050?mt=8&amp;ign-mpt=uo%3D4\" target=\"_blank\" rel=\"noopener noreferrer\">iTunes Store<\/a> &#8211; <a href=\"http:\/\/www.youtube.com\/watch?v=KUhO5odGHXQ\" target=\"_blank\" rel=\"noopener noreferrer\">Video<\/a><\/p>\n<p><i>Jack &amp; Jill&#8217;s ABC&#8217;s of Christmas<\/i> is an interactive eBook for children covering different aspects of Christmas. Users can swipe to transition to another letter apart of a large scene and touch to interact with items. I worked with another programmer, an artist, and a sound designer \/ musician.<\/p>\n<ul>\n<li>Programmed in <strong>Lua<\/strong> using the<a href=\"http:\/\/getmoai.com\/\"><strong> Moai SDK<\/strong><\/a> for iOS and Android<\/li>\n<li>Exported and edited artwork from <strong>Adobe Flash<\/strong><\/li>\n<li>Adapted <a href=\"http:\/\/www.cocos2d-x.org\/\"><strong>Cocos2d-x<\/strong><\/a> WinRT build (<strong>C++<\/strong>) to have <strong>Lua<\/strong> bindings for a Windows 8 &#8220;Metro&#8221; release<\/li>\n<li>Converted ActionScript 3 code to Lua<\/li>\n<\/ul>\n<h3 id=\"rainbowFairy\"><i>Magical Fairy Friends: Dorothy the Rainbow Fairy<\/i><\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/mff.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-127\" style=\"margin-top: 0;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/mff-300x224.png\" alt=\"mff\" width=\"300\" height=\"224\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/mff-300x224.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/mff-624x466.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/mff.png 960w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/itunes.apple.com\/app\/id569410191\" target=\"_blank\" rel=\"noopener noreferrer\">iTunes Store<\/a> &#8211; <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=air.com.theintegratedagency.mffdorothy\" target=\"_blank\" rel=\"noopener noreferrer\">Google Play Store<\/a> &#8211; <a href=\"http:\/\/www.amazon.com\/Magical-Fairy-Friends-Dorothy-Rainbow\/dp\/B00BHNYTWE\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon App Store<\/a><\/p>\n<p><i>Magical Fairy Friends: Dorothy the Rainbow Fairy<\/i> is an interactive eBook for children focusing on a fairy that is responsible for rainbows. It&#8217;s aimed to explain rainbows to young girls. It has sliders similar to pop-up books and a few more complex interactive elements (coin toss into a three-teir fountain, bendable hose). I worked with another programmer, two artists, and a sound designer \/ musician.<\/p>\n<ul>\n<li>Programmed a children&#8217;s eBook in <strong>ActionScript 3<\/strong> with <strong>Adobe Flash<\/strong><\/li>\n<li>Used <strong>Adobe AIR<\/strong> to deploy app on iPad and Android<\/li>\n<li>Optimized artist&#8217;s work for mobile devices<\/li>\n<\/ul>\n<h2 id=\"amazingElephant\">Amazing Elephant<\/h2>\n<p>Initially brought on to do a Flash game, I was then responsible for creating an iOS app for Thai recipes. I then progressed to doing additions to ImportFood.com and then a complete overhaul of several sections, while still maintaining some of the older look. I worked from June 2011 to December 2012.<\/p>\n<h3 id=\"importFood\"><a href=\"http:\/\/importfood.com\" target=\"_blank\" rel=\"noopener noreferrer\">ImportFood.com<\/a><\/h3>\n<p><a style=\"clear: right;\" href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodrecipe.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-115\" style=\"margin-top: 0; clear: right;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodrecipe-300x224.png\" alt=\"importfoodrecipe\" width=\"300\" height=\"224\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodrecipe-300x224.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodrecipe-1024x768.png 1024w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodrecipe-624x468.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodrecipe.png 1164w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><a style=\"clear: right;\" href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodsearch.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-117\" style=\"clear: right;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodsearch-300x224.png\" alt=\"importfoodsearch\" width=\"300\" height=\"224\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodsearch-300x224.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodsearch-1024x768.png 1024w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodsearch-624x468.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/importfoodsearch.png 1164w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>ImportFood.com is an online retailer that sells imported food and cookware from Thailand, along with fresh local produce. The site provides recipes, videos, and other featured articles on Thai food and Thailand.<\/p>\n<ul>\n<li>Revamped static recipe, video, and feature pages into dynamic database-driven pages using <b>PHP<\/b>, <b>MySQL<\/b>,<b> JavaScript<\/b>, and<b> jQuery<br \/><\/b><\/li>\n<li>Provided rich snippets markup for Google search results<\/li>\n<li>Developed an AJAX-driven admin page<\/li>\n<li>Wrote a <strong>C++<\/strong> parser to grab unique ingredients from hundreds of recipes<\/li>\n<li>Added ability to let users add all the ingredients of a recipe to their <a href=\"http:\/\/www.shopsite.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">ShopSite<\/a> shopping cart<\/li>\n<li>Created a tool in PHP and JavaScript to search for recipes by their ingredients<\/li>\n<li>Created a login and ability for users to upload images to recipes and earn rewards<\/li>\n<li>Wrote a PHP parser to grab text, images, comments, and other content for the database from static pages previously generated with a non-templated Adobe GoLive site<\/li>\n<li>Programmed a fuzzy word matching tool in PHP using a modified <a href=\"http:\/\/en.wikipedia.org\/wiki\/Levenshtein_distance\" target=\"_blank\" rel=\"noopener noreferrer\">Levenshtein distance algorithm<\/a><\/li>\n<li>Rewrote fuzzy word matching tool in C++ for a site-wide auto-suggestion search ability with <b>CGI<\/b><\/li>\n<li>Took inventory and provided information for Google Product Listings<\/li>\n<\/ul>\n<h3 id=\"thaiCuisine\"><a href=\"http:\/\/thaicuisine.com\" target=\"_blank\" rel=\"noopener noreferrer\">ThaiCuisine.com<\/a><\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/thaicuisine.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-105\" style=\"margin-top: 0;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/thaicuisine-300x224.png\" alt=\"thaicuisine\" width=\"300\" height=\"224\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/thaicuisine-300x224.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/thaicuisine-1024x768.png 1024w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/thaicuisine-624x468.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/thaicuisine.png 1164w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>ThaiCusine.com has a database of Thai restaurants in the US. Users are able to find restaurants and submit reviews and photos.<\/p>\n<ul>\n<li>Revamped review site similar to ImportFood.com<\/li>\n<li>Developed an AJAX-driven admin page<\/li>\n<li>Admin page included color highlighting to indicate user-submitted issues and provided methods to auto-correct issues in formatting<\/li>\n<li>Added ability to automatically add links in user reviews<\/li>\n<\/ul>\n<h3 id=\"thaiSidewalkChef\"><a href=\"https:\/\/apps.facebook.com\/importfoodgame\/\" target=\"_blank\" rel=\"noopener noreferrer\"><i>Thai Sidewalk Chef<\/i><\/a><\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/cookinggame.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-109\" style=\"margin-top: 0;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/cookinggame-300x200.png\" alt=\"cookinggame\" width=\"300\" height=\"200\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/cookinggame-300x200.png 300w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/cookinggame-624x416.png 624w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/cookinggame.png 722w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>I created a game for ImportFood.com&#8217;s Facebook page. In the two stages, the user collects ingredients and then follows a recipe to cook that dish. Several dishes were created.<\/p>\n<ul>\n<li>Created game on Facebook using <strong>ActionScript 3 <\/strong>and <strong>Adobe Flash<\/strong><\/li>\n<li>Levels driven by <strong>XML<\/strong><\/li>\n<li>Used <strong>Adobe Photoshop<\/strong> to edit artist&#8217;s images<\/li>\n<li>Used Facebook API to keep scores of users<\/li>\n<\/ul>\n<h3 id=\"iosThaiRecipes\"><i><a href=\"https:\/\/itunes.apple.com\/us\/app\/authentic-popular-thai-recipes\/id479370562?mt=8\" target=\"_blank\" rel=\"noopener noreferrer\">Authentic &amp; Popular Thai Recipes<\/a><\/i><\/h3>\n<p><a href=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/authenticandpopularthairecipes.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-111\" style=\"margin-top: 0;\" src=\"http:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/authenticandpopularthairecipes-225x300.jpg\" alt=\"authenticandpopularthairecipes\" width=\"225\" height=\"300\" srcset=\"https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/authenticandpopularthairecipes-225x300.jpg 225w, https:\/\/www.coreyabel.com\/wp-content\/uploads\/2013\/05\/authenticandpopularthairecipes.jpg 360w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a>I developed an iOS app for both iPhone and iPad that featured ImportFood.com&#8217;s recipes with pictures and videos.<\/p>\n<ul>\n<li>Used <strong>Objective C<\/strong> and <strong>iOS SDK<\/strong> to develop a native app in <strong>Xcode<\/strong><\/li>\n<li>Stored data in a <strong>SQLite3<\/strong> database<\/li>\n<li>Implemented fuzzy, auto-correcting search by name or ingredients<\/li>\n<li>Used Handbrake and other tools for batch converting video and images<\/li>\n<li>Implemented In-App Purchases and provided downloadable content<\/li>\n<\/ul>\n<h3 id=\"thaiStreetVendor\"><a href=\"http:\/\/importfood.com\/vendor_video\/thai_street_vendor_videos.html\" target=\"_blank\" rel=\"noopener noreferrer\">Thai Street Vendor Videos<\/a><\/h3>\n<p>I helped edit many videos of Thai street vendors using <strong>Adobe Premiere<\/strong>. I managed their upload to YouTube and provided a YouTube alternative to our Flash player on mobile devices.<\/p>\n<h2 id=\"nintendoTesting\">Nintendo of America &#8211; Aerotek Staffing Agency<\/h2>\n<p>I spent a few months in crunch mode from May to July in 2007 as a tester on <i>Metroid Prime 3: Corruption<\/i> until its completion.<\/p>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Accretive Technology Group I have been at Accretive Technology Group since April 2019 as a senior lead software engineer. Worked on client and server applications with TypeScript Used React &amp; Redux for single-page applications Server developed with Node.js and Koa Live service monitoring GUI automation ArenaNet I worked at ArenaNet from May 2017 to March [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.coreyabel.com\/index.php?rest_route=\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.coreyabel.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.coreyabel.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.coreyabel.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.coreyabel.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2"}],"version-history":[{"count":10,"href":"https:\/\/www.coreyabel.com\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":343,"href":"https:\/\/www.coreyabel.com\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions\/343"}],"wp:attachment":[{"href":"https:\/\/www.coreyabel.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}