Cover photo
Jeff Sharkey
Works at Google
Lived in Mountain View, CA
2,821 followers|237,299 views


Jeff Sharkey

Shared publicly  - 
The correct way to read "Java: Concurrency In Practice."
sergej shafarenka's profile photoDorian Cussen's profile photo
Add a comment...
Have I raved about +Monoprice recently?  ;)  I ordered a big pile of Ethernet patch cables, and they're at my desk ~26 hours later for only $5.90 overnight shipping (!!).  #california
Chris Turner's profile photoTodd Fisher's profile photoYash Sekhon's profile photoChristopher Tate's profile photo
Lost your crimp tool big fella? ;)
Add a comment...

Jeff Sharkey

Shared publicly  - 
So Virgin was the cheapest flight to Seattle, and I forgot they're pretty much a nightclub in the sky lol. Blue/purple mood lighting, and this is their new in-flight safety (music!?) video.
sfshiraz's profile photoHarshad RJ's profile photoMatthew Runo's profile photoMichael Kendle's profile photo
I actually like Virgin America. They have nice clean new jets and try little things like this to make flying a bit more than a bus ride in the sky..
Add a comment...

Jeff Sharkey

Shared publicly  - 
Yay, live streaming MST3K marathon all day long!
Romain Guy's profile photoDan Sandler's profile photo
That one is for you +Emily Guy :)
Add a comment...

Jeff Sharkey

Shared publicly  - 
Gentoo on Android!  =D
ssh session from gentoo kde to Nexus 7 cyanogenmod + gentoo-prefix
Add a comment...

Jeff Sharkey

Shared publicly  - 
Color grading!

I built a NAS server recently, and I wanted to get some nice blinkenlights footage before installing it.

So I grabbed a lens with some nice shallow DoF, and fidgeted around with lighting, but I still wasn't happy with how it looked.

It all came down to colors, and +Patrick Sharkey recommended I check out DaVinci Resolve.  I was blown away; it's an incredibly powerful color grading suite, and it's free!

It supports selecting regions based on color thresholds, motion tracking, and more.  I ended up with a pretty straightforward 6-node graph, and all the processing was offloaded to my GPU.

Here's the final footage, with the original to compare against:

[after] NAS (post color grading)
[before] NAS (original)
Anthony Colangeli's profile photoInderjit Gill's profile photoMaximilian Salomon's profile photoJeff Sharkey's profile photo
Looking good. :)
Add a comment...

Jeff Sharkey

Shared publicly  - 
While the dogs enjoyed poking around in the fresh powder, I enjoyed poking around with a new camera body.  :)   #letitsnow  
Kay Jessee's profile photoDavid Chandler's profile photoAlexander Lucas's profile photo
I love my mk iii! I do sometimes miss the articulated screen of my old 60d, but overall the upgrade was definitely worth it.
Add a comment...
Last week I had the privilege of talking about the new Storage Access Framework in KitKat.  :)
+Chet Haase, +Tor Norbye, are joined by +Jeff Sharkey, on the second episode of Android Developers Backstage, a podcast by and for Android Developers. 

Jeff is a longtime engineer on the Android Framework team responsible in large part for one of the exciting new features in Android 4.4 KitKat, the Storage Access Framework. Learn about that new feature along with other random Android things that happened to come up in the conversation.

Linkgard's profile photoEric Hung's profile photoVicki Shimizu's profile photo
+Jeff Sharkey  In your talk and in all the other information I can find on SAF, there is no mention of using SAF to open one of the files managed by my app in another app, e.g. QuickOffice, for editing. 

I've implemented a DocumentsProvider in my app. This allows me to view and edit my app's files (along with files from other documents providers) in QuickOffice. However, I'd also like to select one of my app's files from within my app, select Open with (which starts an activity for android.intent.action.VIEW), select QuickOffice, edit the file in QuickOffice, and have it saved back to my app. 

I don't want my app to be a SAF client because I don't want the file chooser to display files from all document providers. My app already displays all the files it manages. I just want to the user to be able to edit these files using an editor app such as QuickOffice. When I expose my app's files using a normal content provider, it opens in QuickOffice as read-only. When I use the uri for the file in my new DocumentsProvider, QuickOffice crashes with an NPE. 

Both Google Drive and Box are able to open files that they manage in QuickOffice for editing in KitKat (doesn't work in 4.0.4). However, they pass a file uri in the VIEW intent, rather than the content uri for their documents providers. 

Do you think this scenario should work for documents providers and it's a bug in QuickOffice? 
Add a comment...

Jeff Sharkey

Shared publicly  - 
Vault: an advanced Storage Access Framework example

Recently, I’ve been working on the new Android Storage Access Framework which introduces an abstraction layer between apps that work with files and apps that can store those files. This is powerful because apps like QuickOffice can now use simple intents to open and save documents using any storage app that implements a DocumentsProvider.  The DocumentsProvider API is designed to support a wide range of storage types, including cloud storage, physical media, etc.

As an advanced DocumentsProvider example, I wrote “Vault” which encrypts all files that a user saves inside.  It keeps data encrypted with AES-128 while at rest, and uses Unix pipes to encrypt/decrypt data on the fly.  It protects the encryption key by wrapping it using a hardware-backed KeyStore, if available.  It also uses a new feature of ParcelFileDescriptor to detect when a remote process has encountered an error or crashed, indicating that any partially written data should be ignored and rolled back.

Hopefully this advanced example is helpful as you look at implementing your own DocumentsProvider.  :)
Brian Hoffmann's profile photoAlexander Lent's profile photoKoushik Dutta's profile photoYao-Te Tsai's profile photo
+Jeff Sharkey I've thought about using this read portions of large files. How does that work? If I InputStream.skip through a large part of a file, will that still end up downloading the file up to the new position?

My use case:

Stream a video from the cloud storage.
User skips to random point in the video, I need to seek to the new position somehow. The framework doesn't seem to have a concept of seeks?

Under the hood, for cloud providers at least, http supports Range requests. Files support seek/skip. Is there no equivalent in this API?
Add a comment...
Achievement unlocked: made a pumpkin pie from scratch!
Amanda Walker's profile photoJeff Sharkey's profile photoChristopher Tate's profile photoDan Sandler's profile photo
next time i'll try the real whipped cream  :)

also, upon further investigation, i didn't actually make the pie from scratch, lol  Carl Sagan, Kosmos - Applepie from scratch
Add a comment...
Have him in circles
2,821 people
Yauhen Patsel's profile photo
Christopher Temples's profile photo
Milton Wu's profile photo
Chris Loft's profile photo
Andreas Zeiser's profile photo
Penk Zhou's profile photo
Jeff Reis's profile photo
Alberto Gonzalez Barranco's profile photo
Seal S's profile photo
Map of the places this user has livedMap of the places this user has livedMap of the places this user has lived
Mountain View, CA
  • Google
    Software Engineer, present
Basic Information
Public - 3 months ago
reviewed 3 months ago
Public - 5 months ago
reviewed 5 months ago
Food: GoodDecor: GoodService: Good
Public - 11 months ago
reviewed 11 months ago
11 reviews
Public - 6 months ago
reviewed 6 months ago
Food: ExcellentDecor: Very goodService: Excellent
Public - 11 months ago
reviewed 11 months ago
Public - a year ago
reviewed a year ago