Software Development Journal

2015 – 2017

Drupal.org: jbhovik. WordPress.org: jbhovik. Magento.com: jbhovik. Over 650 commits across projects.

Wrote the first iteration of the “Settings” portion of the Drupal 8 module in three months as an intern, having no previous PHP or Drupal experience.

Wrote API error and Advanced Custom Fields code for the WordPress plugin.

Lead developer for the Drupal 7 module (used by 30+ Lingotek clients) and Magento 2 extension.

Added Drupal 7 translation support for groups, paragraphs, file entities, menu entities, and many others.

Wrote suites of Selenium tests for Drupal 7 and 8 using Behave and Python. Wrote the Drupal 8 tests in a week.

Wrote Lingotek’s Magento 2 extension (with no previous Magento experience) in six months while maintaining the Drupal 7 module.

Compiled a Docker image using Docker Compose to showcase Magento 2 connector.

Refactored large SQL queries resulting in 50% faster page loads within Drupal 7 module.

Spun up 20+ client site dumps locally to test module compatibility, using mostly Apache and Linux.

Delivered written and spoken reports after week-long site audits to companies like HPe, BlueJeans, WatchGuard, and Travelopia.

Participated in numerous diverse client calls with Lingotek technical account managers to help troubleshoot and resolve problems.

Supplied countless software solutions to clients, many being delivered same day.

Performed upwards of 40+ interviews with prospective team members.

Wrote a utility to recursively discover Drupal node entity references and correct translated node entity references.

2018 – 2020

Joined Lingotek’s core platform team January 2018 (One million-line codebase).

Converted Lingotek’s Terminology UI section from JSPs to Vue.js in three weeks having no previous Vue.js experience.

Inherited Lingotek’s Linguistic Quality Evaluation app which was written in Scala (I had no previous Scala experience), the PLAY framework, and Angular JS. Maintained the project by committing bug fixes and feature improvements. I also added the batch files to run the quality app in Lingotek’s local developer environment.

Helped write Lingotek’s Terminology system as a micro service using Java, Maven, Jersey, Jetty, Cassandra, and Solr. Revamped the UI again using Vue.js.

Wrote multi-threaded Java scripts verifying data integrity for a 360-million record Cassandra migration for Lingotek’s Terminology and Translation Memory systems.

Installed the Lingotek development environment on an extra stand-alone computer so our project owners and managers can demonstrate new features and validate bug fixes.

Converted Lingotek’s Translation Management System upload, update, and download actions from synchronous to asynchronous to prepare for new Adobe InDesign translation feature. Also changed the API integration tests to use the same.

Helped write and test an industry-leading feature to translate and download native InDesign files and packages using Lingotek’s Translation Management System, including a in-context live preview. Used Java, Apache Struts, Vue.js, and Adobe Extendscript (yes, Extendscript). I also wrote the PostgreSQL Flyway migration for the InDesign server instances.

Inherited Lingotek’s Client Portal project, which was written with Laravel and Angular JS. I worked on it for about a month, cleaning up the code and providing bug fixes. I also converted the upload and download actions from synchronous to asynchronous. I injected a Vue component in the Angular JS codebase and manipulated Webpack to run a progress widget.

Helped test Lingotek’s newly created Translation Memory micro service. (Maven, Jersey, Jetty, Cassandra 3, and Solr 7) Wrote API integration tests using PyTest for said micro service. I also tested a Solr migration and reindexing script after the new TM micro service was deployed.

Added new RESTful endpoints and DAOs to Lingotek’s public API, as needed to implement new features.

Helped write and test a major feature change to Lingotek’s Translation Management System enabling users to select different versions of Okapi (https://okapiframework.org) for string segmentation. I helped write a command-pattern set of pipeline steps for uploading, updating, and downloading InDesign file types. I also tested Lingotek’s WordPress, Drupal 8, Drupal 7, and Magento connectors locally against the new feature.

Added new feature enabling the bulk editing of translation memories and wrote a new algorithm to apply format tags intelligently (new positions or not applying tags) to newly edited translation memories. The feature also included a case-sensitive find and replace function using Solr, complete with search-phrase highlighting.

Wrote a new Translation Profiles section of Lingotek’s Translation Management System using JSPs and Javascript. This feature was written quite quickly as it was needed for a lucrative new client account.

Helped write an industry-leading feature translating SRT (subtitle rip files) that included live playback of video containing translated SRT subtitles.

Developed a fully working, proof-of-concept suite of solutions for in-context translation of Microsoft Office files (docx, pptx, xlsx) using Mammoth.js, Aspose, Jodconverter, Apache POI, Docx4j, and other offerings.

Added Okapi’s newest version (1.40) to Lingotek’s platform. Since we have the previously mentioned modular design, adding a new version of Okapi was easy.

Wrote backend migrations to facilitate a frontend rewrite of Lingotek’s Translation Quality app. This was a pretty big effort.

Posted in Uncategorized | Leave a comment

Personal Development Mantra

This is one of my favorite quotes, by Bruce Lee.

“When you pour water in a cup, it becomes the cup. When you pour water in a bottle, it becomes the bottle. When you pour water in a teapot, it becomes the teapot. Water can drip and it can crash. Become like water my friend.”

I’ve been interested in technology for as long as I can remember. And technology has always changed. I consider adaptability to be the most important attribute for a technologist, and it would seem that learning and applying the current medium is absolutely crucial.

School was awesome. I learned about the halting problem, and why it’s important. I learned about the Fourier transform, which blew my mind for a solid three weeks. I wrote an inverse kinematic solver in 3d. I wrote a multilayer perceptron. The math classes pushed me to my intellectual limits, and I’m still enamored with Euler’s identity. Design patterns, data structures, machine learning; the list goes on and on.

When I graduated, I started interviewing for jobs. I was surprised by some of the questions that came up in interviews. “What visual frameworks have you used?” “Do you like front end or backend?” “Do you have any Scala experience?” “How can you slice a three-dimensional cake into eight pieces using 3 cuts?” I understood that the interviews were trying to gauge my logical acumen, but I felt the questions were short sighted, given the rigor that a degree in Computer Science from BYU commands. I posit that the language or stack shouldn’t matter. The medium shouldn’t matter. A competent programmer should learn it and apply it.

Having started my second career as a software developer, and having so little strict development experience under my belt, I was anxious to progress as fast as could. I started reading the most prestigious and applicable software books in an effort to ascertain what really defined a good software developer. I read “The Mythical Man-Month” by Fred Brooks, “Peopleware: Productive Projects and Teams” by Tom DeMarco, “Code Complete: A Practical Handbook of Software Construction” by Steve McConnell. I learned that the philosophies driving software development where just as important as writing code.

When I started working for Lingotek as an intern, I was tasked with writing a connector for the Drupal 8 CMS (before Drupal 8 was released in 2015). How much experience did I have with PHP, or Drupal? Zero. It was a baptism of fire. Just take a look at how this XKCD comic describes the Drupal learning curve. 

In two months, I had written the first iteration of the “Settings” tab (roughly one third of the Drupal 8 connector at the time). Over the next two years, I worked on WordPress, Drupal 7, and Magento 2. I was the sole developer for Lingotek’s Drupal 7 connector, and I wrote Lingotek’s Magento 2 connector in six months while maintaining Drupal 7.

When I joined Lingotek’s platform team in 2018, I learned what it means to maintain mission-critical systems. Working with millions of rows of data opened my eyes to the importance of programming for scale. Cassandra would supply blazing speed for data retrieval and Solr would furnish nimble search results for customers; very important services for a translation company.

The next two years brought new challenges, languages, and projects, including Java, Scala, Vue JS, Angular JS, Cassandra, Solr, Laravel, Python (PyTest), Adobe InDesign server and others. While on the platform team, I helped rewrite three mission-critical systems essential to Lingotek’s bottom line. I learned the platform or language, and I applied it. I provided service for whatever Lingotek needed to accomplish, regardless of the stack. I adapted.

During the decade I worked for Alpine School District as a systems administrator, I led thousands of machines into battle. I deployed desktops and laptops and later I deployed chrome books and tablets as the mobile paradigm saturated computing. The number of devices went up exponentially, and after some years, I was looking up at a mountain of devices, all of which I was responsible to manage. I also was charged with the maintenance of on-site servers and networks. All this responsibility for one person.

Could the system be maintained, you ask? Could the technology, being the absolute backbone of all productivity, be sustained? The system included DHCP servers, Open Directory servers, Novell Netware servers, WordPress servers, Koha servers, Apple XServe servers, PowerSchool, Alexandria, Scholastic, Clonezilla, DeployStudio, Apple Remote Desktop, Deep Freeze, LinFreeze, RSync, InfoBlox, Ubuntu, Console One, Gmail, Windows computers, and Apple computers.

I did maintain the system. In fact I was so proficient that I was assigned two additional sites: Rocky Mountain Elementary and Alpine School District’s main office. Organization was the key. I configured each site for remote access so I wasn’t bound by my geographic location. I also initiated creative ways of meeting the technological needs of each site, one of which was instantiating a knowledge-base for teachers and principals to glean information from. Help from me was no longer the bottleneck.

For my premier service, I was voted Employee of the Year for Oak Canyon Junior High 2005 – 2006 (the first year I worked there). I was later voted Employee of the Year for Alpine School District Technology department 2007 – 2008 and for Rocky Mountain Elementary 2008 – 2009.

My personal development mantra is that I will always produce. I’ll learn it and apply it. Learning is fun after all; I consider my ability to adapt one of my greatest traits.

Joseph Hovik

Posted in Uncategorized | Leave a comment

Smallish Post 7: Personal Ethics

As I was reading through ACM’s code of ethics, I noticed that all the sections seemed to deal with people and the relationships we will have with those we work with. The “Avoid harm to others” section caught my eye. When I worked for Alpine School District, teachers and administrators trusted me to keep the system running, and to safe-guard their data. This was quite the undertaking because technology is the absolute backbone of all productivity. If the network or computers went down, students and teachers could do close to nothing. To gain someone’s trust meant everything to me in this role, because up to that point in my life, I had never worked with finer people. I think that it really is about the people. We all have different gifts and talents, and we as computer scientists can serve society using our logical skills for good and not evil, so long as the code is in us.

Posted in Uncategorized | 1 Comment

Postion Vlog: The Evolution of Technology

Technology has some interesting properties that are unlike other industries. It evolves so quickly that it’s hard to stay relevant. Competition in the industry is also a strange beast. Many state that the competitive force in technology isn’t strong enough. Think of what happened to WordPerfect and Novell. At first glance it may appear that Microsoft or some other domineering company always has a monopolistic strangle hold on every competitor, and those ethics are questionable. However, I think this outlook may be a little superficial. Competition always seems to rise up from the most unlikely of sources. Apple invented iPhone, which totally revolutionized the mobile computing arena. Google revolutionized the web search space and offers so many great services it’s hard to count them. The list goes on: Android, Netflix, Oculus Rift, Linux and open-source software. It is my position that the technology industry will always just roll on and evolve, taking care of these supposed monopolies and that is what makes technology so fascinating. It will be fun to see what happens in the coming years. It seems we will only be limited by our imaginations.

Posted in Uncategorized | 1 Comment

Smallish Post 6: Some Video Games Are Good

After watching Elder Bednar’s talk “Things as They Really Are,” I thought a lot about my own experience with digital media and especially video games. From an early age, my brother, my cousins, and I have played video games together. Sometimes we would play on the weekends, but the times that I remember vividly came during holiday breaks or the summer. I really identified with Elder Bednar’s words about personal relationships. He said that we “sacrifice cherished human relationships because of mind- and spirit-numbing video and online games.” And I absolutely agree with Elder Bednar, but the reason the line caught my eye was because those cherished relationships were mine partially because of video games. Some of my fondest memories, around the holidays, are centered around the video games I played, but more specifically around the people that I played with. I know it sounds pretty nerdy, but I can say that video games were an important part of my growing up, and they also influenced my interest in computer science. So I think the key to healthy technological participation in this digital world is to remember that relationships with others is the substance of the matter; the technology is just merely the medium.

Posted in Uncategorized | 3 Comments

Book Post 2: Wikipedia

One of my favorite parts in “Here Comes Everybody: The Power of Organizing Without Organizations,” is when Clay Shirky addresses Wikipedia, and how in fits in the information age. He says the most common criticism of Wikipedia is: “That can’t work. [The author] Sanger understood this objection and titled an early essay on the growth of Wikipedia ‘Wikipedia is wide open. Why is it growing so fast? Why isn’t it full of nonsense?'” Shirky then cites Jimmy Wales, Wikipedia’s founder, stating that Wikipedia is “self-healing.” It’s fascinating that the “self-healing” attribute comes from society’s combined efforts to contribute facts. But why shouldn’t it work? When a publication is on world-wide medium like the Internet, how can untruths survive for an extended period of time. While Wikipedia isn’t perfect, it is very interesting how often we cite it as source for something we want to learn about.

Posted in Uncategorized | 2 Comments

Smallish Post 5: Revolution OS

I have loved Linux through the years. The first exposure I had to Linux was while I was working for Alpine School District when, at a technology department meeting, I looked upon a co-worker’s laptop. It was apparent that it was not any operating system I had seen before. When I asked him what it was, he said it was SuSe Linux. After talking to him for a while, I decided to try it, and it’s been a source of great fun for me ever since. I’ve tried many of the different distributions, and I’ve been fascinated by the quality and diversity not only in the Linux community but in the open source community in general. While I understand that the world has a place for both proprietary and open source software, one philosophy that is often overlooked in debates is that of technological procurement. At a sociological level, shouldn’t we take an elevated interest in who controls the vehicle for technology that we use every day–the operating system? Competition should insure that the operating systems we use will be around in the future, but I’m glad that Linux is around, and there is a lot of fun to be had.

Posted in Uncategorized | Leave a comment

Smallish Post 4: Women in Computer Science, Among Other Things

After reading the study, “Ambient Belonging”, which was very long I might add, several thoughts came to my mind. I suppose there are strong stereotypes in computer science, and also in other mathematical sciences. I wondered, though, how applicable are these stereotypes now, generally speaking? It seems that computer science draws a wide range of people. In part, I think this may be because of the wide range in which technology affects our every-day lives, and because an intrinsic property of technology is that it evolves quickly. Since software is everywhere, it would only make sense that more people would find interest in it. I for one have never thought that women don’t belong in computer science. Interests are interests. So ladies, have you ever felt like you didn’t belong down in the dungeon in the Talmage building?

Posted in Uncategorized | Leave a comment

Smallish Post 3: The Internet is Still Good

As I was reading the assigned content for class, I payed particular attention to the Church News article, “Using Social Media for Gospel Purposes.” Whilst reading the various paragraphs about how church members use social media to share the gospel, a part about Stephanie Nielson impressed me. Stephanie Nielson is a member of church who was involved in a horrific plane crash that left her in a coma for three months and burned much of her skin, including her face. I watched a short video about her life and it was very inspiring. The content of the video was very spiritual indeed, and it made me think, “Why shouldn’t we as members carry good influence in cyber space?” The bad influence is there as well to be sure, but why shouldn’t we stand our ground in this arena as well, and be a force for good? We shouldn’t let evil dominate technological corridors just because it seems sometimes that the good is irreversibly outnumbered.

https://www.lds.org/pages/my-new-life?lang=eng

Posted in Uncategorized | Leave a comment

Book Post 1: The Cuckoo’s Egg

As I finished reading “The Cuckoo’s Egg,” I understood the plot, the conclusion and why the story was told, but a sentence from the epilogue caught my eye. “The monster is still out there, ready to come alive again. Whenever someone forgets that the networks she loves to play on are fragile, and can only exist when people trust each other.” This phrase rung true for me. Why wouldn’t our digital citizenship be a tangible extension of our social citizenship? The lives of others are violated in the same way when hackers act to endanger the trust of all of those who use the network. It’s amazing to think about how much the computational landscape has changed just since this book was written. The Internet has all but overwhelmed our lives. I do more shopping at Amazon.com than Walmart for crying out loud. Like the book says, trust becomes the vital issue. Hopefully that trust can be maintained, because the Internet still has much good to offer.

Posted in Uncategorized | Leave a comment