Senior Android Developer
- Follow Shaul
- Linux (since Slackware 0.9) 23
- C/C++ 18
- Mobile (Palm/Symbian/J2ME/Brew/Win/Android) 15
- Java 12
- Android 7
- Android internals 4
- Windows 6
- MacOS 7
- Architecture and design 8
- JNI/NDK 6
- Embedded 2
- C#/.NET 3
- Project lead 3
- Kernel and drivers (Palm/WinCE/Linux/Android) 3
Senior Android Developer Cellbrite
Implement from scratch to production applications Buyback and Transfer, also was part of research task force for about 3 months. * The added value I brought to the task - Architecture, low level, fast getting into new technologies (transition from Java to Kotlin).
- The purpose of the project - Transitioning from hardware and application vendor to SAS/online model, implementing first two apps in that model.
- My tasks in the project: Buyback: major tasks were implementing networking layer for the new SAS engine called flows engine (retrofit, socket.io, moshi), advancing the subject of CI, contributed to all parts of the application, integrated with server team. Transfer: all team members were to research how to transfer data from phone to phone with no internet, in the end my concept was fastest, WiFi Direct and FTP, implementing a state machine that gets MAC address of other device as input, creates WiFi Direct connection between them, publishes a JMDns service, and in the end produces two sockets between the devices, one optimized for binary transfer (media files) other optimized for textual transfer (non media content like contacts, SMSes, etc), implemented several non-media content managers (call logs, SMS), helped team transition from java to kotlin with few lectures and tutoring. Also implemented a POC on linux laptop and android for fastest transfer via USB known to man, using AOA (Android Open Accessory USB protocol), it would transfer files at 100-150MBps (that’s megabytes not bits). On WiFi we managed to get 60-70 MBps, which is twice the declared WiFi bandwidth. Also implemented the most critical part of the application, code that reads from file and sends it over network, and the other way around, using okio it gave us a significant boost, like 20%. Research task force: Basically was left on my own to research a way to improve a list of diagnostic tests, produced 5 working POCs: * Sound - basic acceptance was playing a clip of speech, capturing it with speech recognition, and comparing the result with expected value, if this test fails, advanced test runs that plays sounds in incrementing frequencies (set from preferences), records the played sound with the microphone, and analyzes it using fourier transform, showed great promise with phones in Partner repair center, could tell a difference between damaged speaker and damaged microphone very clearly * Camera - Take a picture of a high frequency test image, extract its discrete cosine transform coefficients, analyze the result, it would detect, count and draw scratches on camera lens on top of the test image, only problem was very low end devices that produce fuzzy images even when new, had some ideas how to detect them, as low quality lens would produce fuzzy areas distributed in concentric circles, scratches would be mostly off center, and far sharper then bad lense artifacts * Flash - capture camera viewfinder images, turn flash on and off, compare viewfinder frames to see if there was a difference in exposure between them * Accelerometer and vibration - capture accelerometer data and record sound, turn vibration on and off, analyze captured data with fourier… If there is no sound and no vibration captured with accelerometer - vibration does not work (or all 3), if there is buzzing sound but no accelerometer changes - microphone does not work, if there is accelerometer and sound - all work. * screen brightness - similar to flash test except it it used screen backlight and front camera, kind of worked in low light conditions * The challenges in the project- In Buyback it was implementing the flows engine and its infrastructure, which is the SAS engine all new products were to be based on. In Transfer it was finding the fastest transfer method, and supporting establishment of connection for broad range of devices, due to device fragmentation, and that WiFi direct is not part of Android CTS, it is wild west * The tech stack and the architecture used: * Retrofit, Okio, Kotlin, dagger, Rx2, JMDns, Architecture was mix of MVP and MVVM with reactive and dependency injection, but that was just the app layer, the really smart stuff was what I described above… When google announced Pixel 2 they made a big deal on how fast and easy is it to transfer your data from iphone to pixel… https://www.youtube.com/watch?v=HeP0l9leco8&feature=youtu.be&t=32 * They did it with USB cable, we did it wireless, and we were 3 times faster (their test data pack was 10gb, they were 1gb per minute, we were 3gb per minute). My AOA/USB POC (wasn’t implemented in production but we were to implement it as Node.js, we had a POC for that ready as well) did it faster yet, I transferred a 4gb video file in 20 seconds from device to laptop, and in 15 seconds from laptop to device. That was using USB2, not USB3. There is nothing out there that even comes close.