Technical Portfolio - Sample Code

Our technical section shows only a bit of our sample code (lack of time for posting), to give you a better understanding of our approach and skills.



Libraries (for clean architecture):


  • Eventbus  
  • RxJava
  • Dart & Henson  
  • Retrofit
  • Picasso
  • Gson
  • Dagger
  • Dagger 2 - easier debugging  
  • greenDAO - ORM solution
  • Butterknife


3rd party libraries (Ads, Analytics, social networks):


  • FreeWheel
  • writing white label components - combining analytics providers
  • AdMob
  • Google Analytics
  • Facebook API
  • Twitter API


ARCore - Augmented Reality:


  • Android Studio & Unity development


Graphic User Interface:


  • Material Design
  • testing layout on devices  
  • Multichoice dialog, displaying the selected field names using the Toast class  
  • displaying a Progress Dialog  
  • User Interface XML: @id vs @+id  
  • Text Changed Listener  


Android Studio:


  • Gradle  
  • Gradle - packagingOptions
  • Hardware Acceleration  
  • debugging using Android Studio's tools  
  • using a move script to copy files from a Gist on GitHub to right locations in an Android project
  • importing Eclipse project into Android Studio: replacing .jars with Gradle dependencies


Firebase


  • database rules, simulation results  
  • Parse.com & migration from Parse to Firebase  
  • Firebase Open Data Sets (deprecated)


Testing:


  • unit testing the database  
  • unit testing using JUnit in Eclipse  
  • MonkeyTalk functional testing (Android & iOS)
  • currently learning Appium


SQLite skills:


  • using autoincrement for primary keys - useful for client/server syncing,  
  • contract classes  
  • using the database only as a cache for online data (simply discard the data in onUpgrade and start over) 
  • foreign key, UNIQUE constraint with a replace strategy 
  • unit testing the database  
  • SQLite vs Content Provider interface: Uri, projection, UriMatcher
  • unit testing the Content Provider, testGetType


Video streaming:


  • video streaming a mp4 file from the server, with buffering  
  • short demo link to youtube in a new window
  • streaming videos from local server on Android using NanoHttpD  


Distribution:


  • OBB expansion files (main, patch), downloading using Google Play's Application Licensing
  • distribution outside of Google Play e.g. APKs without OBBs for 4k video Virtual Reality apps
  • Amazon Appstore distribution from scratch
  • Google Play submission from scratch (whole life-cycle): Australia, Canada, Egypt, Italy, Poland, South Africa, Singapore, Spain.
  • localization (mirroring the layout) into Right-to-Left languages: Arabic, Hebrew, Urdu
  • localization into Chinese, German, Italian, Polish, Portuguese, Spanish.


Google App Engine - Cloud:


  • endpoints configuration  
  • Maven  
  • Datastore: key-value, column-oriented, kinds, entities, properties
  • Datastore: save and get entities via Objectify  
  • Admin Console: Datastore Viewer
  • Api explorer, authorization  
  • Calling endpoints from a not-mobile, standard webapplication using JavaScript  
  • unit testing using JUnit in Eclipse  
  • data relationships: Ancestor, Has-A
  • query by kind, filter by ancestor, filter by property
  • Built-In Index, Composite Index, @Unindex, conditional indexing e.g. @Index(IfNotDefault.class)
  • Auto generated/ Manual index configuration file - running on localhost before deploying to the server 
  • query restrictions, solving query errors, sample helper class for checking the query feasibility (single inequality filter plus right order)  
  • data store commit process: eventual vs strong consistency
  • transactions, example: make sure only one profile registers for a given event  
  • wrapper for Boolean - endpoint functions must return an object instance  
  • differences between Objectify and native Datastore Transactions
  • transaction rules: snapshot isolation, optimistic concurrency, 5 ancestor groups, 60 seconds
  • objectify session cache, memcache, cron jobs, memcache viewer e.g. using for generating announcements without using any quota  
  • task queues, 10 minutes per 1 task queue, push/pull queues, dashboard (monitoring the quota)
  • adding a task to a queue in a transaction, e.g. SendConfirmationEmail servlet  
  • debugging a task queue error, logs e.g. wrong confirmation email URL
  • modules, manual/automatic scaling, version upgrades, idle instances, pending latency, instance classes, edge caching, optimization  
  • appstats: Path stats, RPC stats/timeline, maven configuration  
  • cloud endpoints vs plain REST API
  • connecting mobile Android & iOS applications to an App Engine backend using Endpoints, generating keys, SHA1, generating client libraries 
  • Push Notifications


OpenGL ES skills:


  • OpenGL ES 1.0,1.1 as well as OpenGL ES 2.0 (however, the Java bindings are working fine only with Android 2.3),
  • Testing only on real devices, the emulator unfortunately is not handling OpenGL ES well,
  • Parallel projections (2D), perspective projections (3D),
  • Generating random colors in the fullscreen mode  


Basic skills:


  • fragments  
  • testing SMS messages via Telnet and DDMS perspective in Eclipse,
  • Lifecycle - preparing for termination (before & after Honeycomb)  
  • resolving intent filter collision
  • icon design  
  • overriding methods  
  • refactoring: pull up  
  • updating SDK build tools from the command line 


NDK, OpenCV (Computer Vision):


  • Running a demo NDK Android project  
  • Application Binary Interface  
  • Alphabet Race app example - OpenCV Computer Vision: www.alphabetrace.com.


Game development - Unity3D (in C#), LibGDX, AndEngine:


  • game loop, menus, scenes, layers, transitions, and modifiers
  • bitmap, vector graphics, displaying sprites, animation, text
  • user input: touch, multi-touch, keyboard, voice recognition, accelerometer, location, compass
  • tile maps
  • particle system, particle effects as XML files
  • background music and sound effects
  • physics engine, Box2D
  • artificial intelligence
  • scoring framework, collisions
  • testing and publishing
  • LibGDX - developing for Android, iOS, desktop and a HTML/JavaScript web game  
  • LibGDX - debugging the HTML web application in a browser
  • graphic design, Photoshop, Illustrator, Gimp, texture atlases  


Git, GitHub:


  • working directory, staging area, repository via command line  


Completed online courses:


  • 'Programming Cloud Services for Android Handheld Systems' on the cousera.org platform, from Vanderbilt University, course syllabus. This course describes by example how to connect Android mobile devices to clouds via the use of object-oriented design techniques, Java programming language features, Jetty middleware, Java Servlets, the Java Spring Framework, and cloud computing platforms, such as Google App Engine.
  • 'Developing Scalable Apps with Java, with Google App Engine' on the udacity.com platform, from Google, course syllabus. Cloud Endpoints, authentication and user profiles, Datastore (queries, filters, indexes and transactions), task push queues, cron jobs, customised Memcache entry, generate native libraries for Android and iOS.
  • 'UX Design for Mobile Developers' on the udacity.com platform, from Google, course syllabus. High-level UX planning, user-centered design, constraints and opportunities of mobile platforms, Low-fi wireframing and prototyping, personas, the 5 big constraints (limited data, finite battery, hand-held usage, divided user attention, and small screens), Android sensors, Android APIs (Google Play Services).
  • 'Pattern-Oriented Software Architectures: Programming Mobile Services for Android Handheld Systems' on the cousera.org platform, from Vanderbilt University, course syllabus. Java Concurrency Mechanisms, Synchronization and Scheduling Classes, ReentrantLock, Semaphore, ConditionObject, CountDownLatch, Built-in Monitor Objects, AsyncTask Framework, Android Services and IPC, programming Bound Services with Messengers/ with AIDL, Apps Lie & Steal, App Account Mapping to Linux Users, principles of Secure Abstractions, Privilege Escalation Concepts, Cross-platform User Interface Attacks, Activator Pattern, Command Processor Pattern, Proxy Pattern, Broker Pattern, Publisher-Subscriber Pattern, Thread-Specific Storage Pattern, Active Object Pattern, Half-Sync/Half-Async Pattern.
  • In French language: 'Introduction à la programmation orientée objet (en Java)' on the coursera platform, from École Polytechnique Fédérale de Lausanne course syllabus.