Writing and Video Portfolio
TLDR
Robert Terakedis -- Turning Tech Chaos into Organized Harmony.
Explore my portfolio of technical writing, video tutorials, and automation scripts. Let’s collaborate to simplify complex challenges and create impactful solutions.
What I Do
I specialize in:
- Technical Documentation: Creating clear, actionable resources for teams and customers.
- Process Automation: Streamlining workflows to eliminate inefficiencies.
- Team Enablement: Empowering teams with intuitive tools and training.
Explore my portfolio below to see how I turn complex challenges into organized solutions.
My Toolkit
Development & Automation
Tools I use to build and automate solutions:
- Git Repos: GitHub | Bitbucket
- Git Clients: Tower | SourceTree | VS Code
- Developer Tools: VS Code | BBEdit | Postman | Chrome Developer Tools
Documentation & Training
Creating impactful resources with:
- Tools: Camtasia | SnagIt | Markdown | Hugo | Confluence | Readme.com
Productivity & Collaboration
Streamlining teamwork with:
- Productivity: Google Workspace | Office 365
- Task Management: Jira | Jira Service Manager | Trello | Microsoft Planner
Diagramming & Visualization
Visualizing ideas with:
- Tools: Miro | LucidChart | Draw.io | Visio
Platforms
Experienced across:
- Work OS: Apple iPadOS and macOS (preferred) | Windows 10/11 and ChromeOS (experienced)
This site uses the following technologies: Cloudflare (Websites, Analytics, Pages), Github, Hugo, Markdown, and the Hugo Clarity theme.
Some of the content below was written by me but owned by another organization and may be removed at any time.
Video Samples
Below is an example of a technical overview video I created to help customers and partners understand a new feature in OneTrust. This video demonstrates my ability to simplify complex topics and present them in an engaging, customer-focused way.
Category | About the Video |
---|---|
Technical Overview | As part of the Winter 2025 release, the OneTrust Consent & Preferences team released a new feature to track implicit consent for purposes. I created this video to help customers and partners understand implicit consent and how to enable and use it within OneTrust. |
Writing Samples
Category | Document | The Problem | The Solution |
---|---|---|---|
Hands-On Lab | Getting Started with Digital Workspace | New users needed quick onboarding with UEM Skills. | Designed and authored Apple iOS/macOS modules, updated biannually for SaaS feature changes. |
Troubleshooting | Troubleshooting macOS Management | Sales teams lacked macOS troubleshooting skills. | Authored a comprehensive guide based on testing and research, iterated three times. |
Tutorial | Managing iOS Updates | Customers were confused by iOS update behavior. | Authored a tutorial clarifying configuration and expected behaviors across iOS versions. |
Glossary | Mapping concepts from Munki to Workspace ONE UEM | macOS admins needed help understanding Munki integration. | Created a glossary linking Workspace ONE equivalents to Munki terminology. |
Best Practices | Best Practices for Apple Admins in Workspace ONE UEM | Lack of survivability documentation for Apple device management. | Created a guide to help admins set up environments for unexpected events like layoffs. |
Additional Writing Samples
For additional reference, I've included links to some additional documents that I've authored and/or contributed below:
- Onboarding Options for macOS Tutorial
- Distributing Scripts to macOS Devices
- Deploying a Third-Party macOS App
Code Sample
I strive to find repeatable processes and automate them. At one employer, I created multiple product satisfaction surveys in Gainsight PX. I wrote a script to combine the responses from all the surveys into a single CSV file (that also integrated additional information about the respondents and the accounts to which they belong). In the snippet below, I use Python to aggregate the responses from a single survey in Gainsight PX. I subsequently posted this Github Gist to the Gainsight PX Community to assist others in learning how to leverage the scrollID to return multiple pages of data from the API. The full version of this script included additional helper functions for the additional API's (account/user info), multi-threading, and recursion (aggregating responses from multiple API calls).
1# Example Gainsight Paging API Call
2
3##############################################################################
4# Reference API documentation:
5# https://gainsightpx.docs.apiary.io/#reference/surveyresponse
6#
7# Use the returned scrollId to make a request for the next page of results (i.e. /users?pageSize=100&scrollId=XXXXXXX)
8# Scroll until the returned result list is less than the requested size. Do not depend on the scrollId becoming null,
9# in some cases it does not be null even though the last page of results is returned.
10##############################################################################
11
12
13import json, requests, sys
14from datetime import datetime, timedelta, date
15
16##############################################################################
17## CONSTANTS
18##############################################################################
19
20# BaseURL for API calls
21BASE_URL = "BASE-URL-HERE"
22# API Key Name
23API_KEY_NAME = "X-APTRINSIC-API-KEY"
24# API Key Value
25API_KEY_VALUE = "GUID-HERE"
26# API Page Size
27API_PAGE_SIZE = 100
28# Survey Engagement ID
29ENGAGEMENT_ID = "ENGAGEMENT-ID-HERE"
30
31
32##############################################################################
33## HELPER FUNCTION
34##############################################################################
35
36# create a function to get the list of survey responses for a specific survey
37def get_surveyresponsesapi(engagementId, scrollId, datefiltertimestamp):
38
39 if scrollId == "":
40 # Set the request url for the first page of results
41 if datefiltertimestamp == "":
42
43 url = BASE_URL + "/v1/survey/responses?filter=engagementId=="+ engagementId + "&pageSize=" + str(API_PAGE_SIZE) + "&sort=-date"
44
45 else:
46
47 url = BASE_URL + "/v1/survey/responses?filter=engagementId=="+ engagementId + ";date>" + str(datefiltertimestamp) + "&pageSize=" + str(API_PAGE_SIZE) + "&sort=-date"
48
49 else:
50 # Set the request url for the subsequent pages of results
51 url = BASE_URL + "/v1/survey/responses?filter=engagementId=="+ engagementId + "&pageSize=" + str(API_PAGE_SIZE) + "&sort=-date" + "&scrollId=" + scrollId
52
53 payload={}
54 headers = {
55 'Accept': 'application/json',
56 API_KEY_NAME: API_KEY_VALUE
57 }
58
59 # Make the API call
60 return requests.request("GET", url, headers=headers, data=payload)
For the full script and additional helper functions, visit my Gist
Let's Connect
Thank you for exploring my portfolio! If you'd like to learn more about my work or discuss potential collaboration opportunities, feel free to connect with me on LinkedIn.