Update January 2016

Written by TJ Maynes

It’s been quite a long time since I last posted anything up on my blog. I wanted to share with everyone where am I today and where I’m going tomorrow. Today, I sleep in New Jersey and work in Midtown New York (two blocks from the Glass Apple Store) at a company called Rejuvenan Global Health. I’m an iOS Engineer. I enjoy the projects that I’m working on and I’m always challenging myself to learn something new every single day. I was very nervous about moving up to the NJ/NY area. I had just graduated and literally a month later I’d landed a job in one of the largest cities in the world. However, when you get your first real job (out of college or school or wherever) you’ll find that a majority of your time is taken up by that job. I thought I would have more time for things now since I didn’t have homework or exams to study for. But no, I was wrong.

When you account for a 45 min train ride to New York, walking from Penn to 57th street, working for 9ish hours, and walking back to Penn, and finally getting home after rush hour train traffic, you start to prioritize what you want to do when you get home (don’t forget dinner!) I’ve started to pull myself away from random reddit searches, reading blog posts about obscure things, and checking out what people are working on via twitter. I’ve even deleted my Facebook account. Instead, I’m spending more of my time reading blog posts about iOS development, software design patterns, and reading some popular open source iOS libraries on Github. I want to get further in my career and to do that I need to soak up how to quickly solve problems at work.

When I was coming up with a list of things to work on this year, my list kept growing and growing. My refined list includes: test driving every piece of software that I write from now on, learn reactive functional programming, and getting better at iOS design via Autolayouts and UIKit.

I’m currently working on a team with 3 developers (one UI/UX Engineer, 2 Systems/Backend Engineers) and they are all test driven. A majority of our standup talk revolves around testing. That’s because when you’re trying to build a platform with a small team, there isn’t much room for error. Any error that occurs in the platform is known by a member of the error domain before it happens, all through test driven development! So, I’ve decided to test drive every piece of reasonable software that I write from now on. This means going back and writing tests for each older project I have on Github.

If I had more time I’d like to learn functional programming with Haskell. I’ve spent a few days with Haskell but nothing serious (not yet). Instead I’m going to learn reactive functional programming by using a framework called ReactiveCocoa. ReactiveCocoa is a Cocoa framework inspired by Functional Reactive Programming, by providing APIs for composing and transforming streams of values over time. I believe functional programming will help me solve a vast majority of problems I have at work.

I feel very comfortable with Objective-C and various software design patterns such as Model View Controller, Abstraction, Singletons, Adapter, and Delegation (to name a few). However, I’d like to get better at the look and feel of building an iOS application. I’ll be the first to admit, I suck at Autolayouts, but soon enough I’m going to master it. This means spending a majority of my time getting better at Autolayouts and UIKit, by spending a lot of my time in a repo called Ray. By the end of the year, I want to be able to build views without interface builder.

Thank you for reading my update! Stay tuned to read blog posts about building network controllers using NSUrlSession and test driven iOS development using XCTests and XCUITests!

[09 January 2016]

Using LaTeX

Written by TJ Maynes

This blog post serves as a gentle introduction to LaTeX, the documentation preparation system and docmentation markup language.

Background

This semester I decided to write my reports from my Analysis of Algorithms class in LaTeX. This was not a difficult task to accomplish, it actually made writing these reports easier (and prettier). Before diving into installing LaTeX packages and setting up your first LaTeX document, let us begin by looking into the history of LaTeX.

History behind LaTeX

TeX is a typesetting system written by Donald Knuth in 1978 and is still used for typesetting complex math formulas today. LaTeX is written in TeX and, like Tex, was designed “to allow anybody to produce high-quality books using a reasonably minimal amount of effort, and to provide a system that would give exactly the same results on all computers, at any point in time”.

LaTeX/TeX is still quite popular in academia in areas such as mathematics, sciences, and economics. You may have actually read a few books that were written in LaTeX (and you didn’t even know). But, did you also know you can create beautiful resumes and CVs with LaTeX as well? Excited yet? Let’s begin installing LaTeX on your machine!

Installation

On Windows 7/8, download MiKTeX from here.

On Mac OS X, download MacTeX from here.

On *Nix System, just check your distribution’s package manager for “xelatex”.

If you have any issues installing LaTeX, just follow this link for more download instructions.

Setting up your LaTeX file.

This is an example from a report I wrote in my Analysis of Algorithms class. Remember that LaTeX can still be used for all kinds of documents (not just computer science reports).

% File: example.tex
% Author: TJ Maynes
% This is a comment!!
\documentclass[12pt]{article}
\RequirePackage{color,graphicx}
\usepackage{newcent}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{cite}
\usepackage{url}
\usepackage{xltxtra,url,parskip}
\usepackage{xunicode}
\usepackage{float}
\usepackage[ruled,lined,linesnumbered,nofillcomment]{algorithm2e}
\usepackage[absolute]{textpos}
\usepackage[left=0.7in, right=0.7in, top=0.7in, bottom=0.7in]{geometry}
\usepackage[xetex,
  unicode,
  pdfencoding=auto,
  pdfinfo={
    Title={tjmaynes/Project1},
    Author={TJ Maynes},
    Subject={TJ Maynes Project1},
    Keywords={insertion sort, quick sort, merge sort, algorithms, undergraduate},
    Producer={xelatex},
    Creator{xelatex}}]{hyperref}
\defaultfontfeatures{Scale=MatchLowercase,Mapping=tex-text}
\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
\restylefloat{table}

Above is a portion of code that serves as the “header” of your LaTeX document. The header of the page includes the documentclass, packages, specific fonts, etc. The “header” can be extended to include much more than this including custom layouts for various kinds of documents.

You can look here for more information on creating your own .sty files.

\begin{document}

\title{Asymptotic Notation and Sorting Project}
\author{TJ Maynes}
\date{October 15, 2014}

\maketitle

\textbf{1 Theory}

\vspace{0.2in}
\textbf{1.1 Insertion Sort}

Insertion sort is a sorting method that starts at a single element in an array and then increments the rest of the elements in an array. Pseudocode for implementing an insertion sort is provided in Algorithm 1.

\begin{algorithm}
  \For{$i=1$ to $n$}{

    $j=i$

    \While{$j > 0$ and {$A[j] < A[j-1]$}}{
      $\mathtt{Swap}(A[j], A[j-1])$

      $j-=1$
    }
  }
  \caption{\texttt{Insertionsort}($A,low,high$)}
\end{algorithm}

Below is a table of CPU times (in milliseconds) from running an increasing array of various instance sizes on mergesort. \\

\begin{table}[H]
  \begin{tabular}{lllllllllll}
    & \multicolumn{10}{c}{Mergesort}                                                               \\
    & \multicolumn{10}{c}{Instance Size}                                                           \\
    & 10000  & 20000  & 30000  & 40000  & 50000  & 60000   & 70000   & 80000   & 90000   & 100000  \\
    1   & 20.736 & 36.352 & 55.552 & 81.408 & 98.816 & 118.528 & 141.568 & 159.488 & 192.256 & 206.592 \\
    2   & 17.920 & 36.608 & 63.488 & 74.496 & 93.952 & 113.664 & 142.592 & 171.264 & 185.856 & 198.912 \\
    3   & 17.408 & 36.352 & 56.320 & 81.152 & 94.464 & 114.432 & 137.728 & 169.984 & 191.488 & 208.384 \\
    4   & 17.664 & 39.680 & 59.904 & 78.592 & 94.464 & 118.016 & 142.080 & 161.536 & 178.432 & 207.360 \\
    5   & 17.408 & 36.352 & 55.552 & 75.264 & 98.048 & 115.200 & 149.760 & 165.632 & 179.456 & 212.224 \\
    Avg & 18.227 & 37.069 & 58.163 & 78.182 & 95.949 & 115.968 & 142.746 & 165.581 & 185.498 & 206.694
  \end{tabular}
  \end{table}

% this is another comment!

\end{document}

Above is the portion of code that makes up the “body” of the LaTeX document. The body is where all the contents of your document are contained. In example below, I have included a Title, Author, and Date Tag (which is created by the \maketitle tag), an Algorithm function and an example table of CPU clock cycle times in Milliseconds.

Compiling your LaTeX file

To compile your LaTeX file to pdf format, run the following command.

xelatex example.tex

If you run into any issues on compilation, first read the compilation error and enter ‘r’ to finish compilations.

You can also use an online LaTeX editor such as WriteLaTeX.com.

Conclusion

Many LaTeX concepts can be learned from the example file, however you can learn way more by just diving into LaTeX (which ultimately helped me the most). Also, I feel as though LaTeX has helped me better structure and think through my reports for class. I hope this post was of some use to you!

Please comment below with any questions or concerns. Thanks again!

Extra: Here is an example of a LaTeX resume.

Free Templates

Sources

[21 November 2014]

Update November 2014

Written by TJ Maynes

Lately, I haven’t had very much time to write blog posts and work on the projects that I want to work on. Instead Analysis of Algorithms and undergraduate research has taken a significant portion of my time. However, I did start writing my papers in LaTeX which has actually been a fun experience and pretty easy to learn (and you get pretty reports)! Also, I’ve started to gain in interest in Video Streaming development from the undergradute research project that I am working on. My time management has been out of wack lately too, need to fix this problem. My algorithms class has been kicking my butt, however I’m enjoying the material I am learning - especially dynamic programming (very interesting concept). You can find the algorithm projects that I have been working on here.

[06 November 2014]
TJ Maynes, profile picture

Hello, my name is TJ Maynes and I am a Software Engineer building apps at Rejuvenan Global Health in New York City. I am primarily interested in iOS Development and ReactJS. Currently, I'm focused on growing as a software engineer, while learning some functional programming concepts where I can. My projects are hosted on github, along with my CV in pdf format. The easiest way to contact me is through my email: tjmaynes at gmail dot com. Also, you can find me on twitter. Look below to see links to projects found on Github.