Hello! I'm David, a software engineer based in Morgan Hill, California who enjoys building things. I love beautiful code and creating elegant solutions to difficult problems. My expertise is primarily in development using C, Objective-C and Swift.
David Stites
165 Campoli Drive
Morgan Hill, California 95037 US
309/825-0155
me[at]davidstites.com
Software Engineer • April 2020 - Present • Cupertino, California
Core Data is a framework that developers use to manage the model layer objects in their application. It provides generalized and automated solutions to common tasks associated with object life cycle and object graph management, including persistence.
Software Engineer • October 2014 – April 2020 • Cupertino, California
Designed, performed analysis, and implemented location-based and motion-based features, technologies and systems on iOS, watchOS, tvOS and macOS, with an emphasis on machine learning.
Privacy Engineer • May 2012 – October 2014 • Cupertino, California
Designed, performed analysis, and audited shipping and pre-release features and systems. Partnered with development teams to protect customer privacy while delivering amazing experiences for customers. Advocated and educated Apple teams about privacy-related technology issues, and then helped them implement best practices.
Software Engineer • May 2010 - March 2012 • Peyton, Colorado
Designed, developed, tested and maintained DSP firmware code for RF signal detection, collection and analysis of electronic counter measures (ECM) for the Air Force. Implemented Java front-end interfaces for operator control of system.
iOS Software Developer • May 2009 - May 2010 • Colorado Springs, Colorado
Developed the Coupious application for iOS, an app that gives the user on-demand, location-based, instantly redeemable coupons.
Firmware Engineer • August 2007 - May 2009 • Colorado Springs, Colorado
Developed support for RAID6 and solid state drives within firmware for enterprise class storage arrays. Triaged and fixed defects.
M.S. Degree, Computer Science • December 2012
B.S. Degree, Computer Science • May 2007
US 10,117,046 • Issued October 30, 2018
A method for identifying a location of a mobile device is disclosed. The method includes during each of a plurality of instances of time: measuring one or more signal properties of one or more other devices across a time interval; obtaining an identifier from each of the one or more other devices; creating a data point to include the one or more signal properties; and storing the data point in a database. The method further includes analyzing the plurality data points in the database to determine clusters of data points; detecting an event at an input device of the mobile device; measuring one or more new signal properties of one or more of the plurality of other devices at one or more new times; creating a new data point from the one or more new signal properties; and identifying a first cluster corresponding to the new data point.
US 10,091,303 • Issued October 2, 2018
Techniques for suggesting accessory devices controlled by an application executing on a mobile device are disclosed. A method includes measuring one or more sensor values to determine a data point at each of a plurality of first times, associating an accessory device with each of the data points, clustering the data points within a threshold distance of each other to create a plurality of clusters. The method also includes, after clustering the data points, measuring one or more sensor values to determine one or more current data points at a second time, determining that one or more current data points at the second time corresponds to a first cluster of the plurality of clusters, identifying a first accessory device associated with one or more of the data points in the first cluster, and providing a message using the application.
US 9,529,500 • Issued March 21, 2017
Systems and method for allowing an identifier value associated with a computing device, and that is delivered to content providers when requesting content, to be altered from that of the unique identifier value associated with the computing device. A computing device will include user interface elements that allow a user to request a new identifier on-demand. In some cases, the user can also configure the computing device to obtain a new identifier value in response to other actions at the computing device or automatically when some type of usage criteria is met. The identifier value is configured to be substantially unique and to be different than a unique identifier associated with the computing device to provide anonymity for the user.
US 9,529,500 • Issued December 26, 2016
An event can be detected by an input device. The event may be determined to be a triggering event by comparing the event to a group of triggering events. A first prediction model corresponding to the event is then selected. Contextual information about the device specifying one or more properties of the computing device in a first context is then received, and a set of one or more applications is identified. The set of one or more applications may have at least a threshold probability of being accessed by the user when the event occurs in the first context. Thereafter, a user interface is provided to a user for interacting with the set of one or more applications.
WWDC 2023. Elevate your app's data persistence with improvements in Core Data. Learn how you can use composite attributes to create more intuitive data models. We'll also show you how to migrate your schema through disruptive changes, when to defer intense migrations, and how to avoid overhead on a person's device. To get the most out of this session, you should be familiar with handling different data types in Core Data as well as the basics of lightweight migration. p>
WWDC 2022. Learn how you can cleanly migrate Core Data schemas after updating your app, and breeze through data model changes. We'll show you how you can take advantage of built-in migration tools to keep your data storage up to date, and let Core Data analyze your schema to infer data model migrations. We'll also provide best practices, help you tackle tough migration challenges, and discover how Core Data schemas can interact with CloudKit to support easy migrations in the cloud. To get the most out of this session, we recommend being familiar with Core Data schemas and data types, and have a basic understanding around syncing Core Data databases with CloudKit. p>
WWDC 2021. Discover how Core Data can surface data from your app in Spotlight with as little as two lines of code. Learn how to make that data discoverable in Spotlight search and to customize how it is presented to people on device. Lastly, we'll show you how to implement full-text search within your app, driven completely with the data indexed by Spotlight. p>
December 1, 2012
Mobile devices, such as smartphones or PDAs, have become increasingly popular with consumers and often provide essential functionality in their everyday life. Usually these mobile devices contain a great deal of sensitive information such as addresses, contacts, ingoing/outgoing call logs, SMS messages and, on the latest models, a calendar, emails and potentially the user’s current location. A smartphone or mobile device today can be as powerful as a desktop or laptop in some respects and, while the latest models feature a complete OS, for many users these devices are “just phones” so there is an underestimation of the risk connected to mobile device privacy. There is a currently existing privacy problem associated with user and hardware tracking in mobile devices. Users can be tracked without their knowledge and consent and have rich profiles built about them using their hardware interface address regarding their location and preferences. This information can be potentially cross correlated to other existing datasets to build advertising profiles for these users. The mitigation to this problem using a framework to support randomly generated, disposable hardware addresses.
WWDC 2014, Session 715
WWDC 2013, Session 714
Although I'm not currently looking for job opportunities, my inbox is always open. Whether for a potential project or just to say hi, I'll try my best to answer your email!