Hello! I'm David, a software engineer based in San Jose, California who enjoys building things. I have over 12 years of experience and I love beautiful code and creating elegant solutions to difficult problems. My expertise is primarily in embedded development using C, Objective-C and Python.
546 Lanfair Circle
San Jose, California 95136 US
Software Engineer • October 2014 – Present • Cupertino, CaliforniaDesigned, 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, CaliforniaDesigned, 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, ColoradoDesigned, 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, ColoradoDeveloped 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, ColoradoDeveloped 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.
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!