The Geek Gathering


Osijek, 11.10.2013 - 13.10.2013

What did we Learn/Hear about?

Couple of things:

  1. Open Source
  2. Big data

  3. Mobile UX/UI/Architecture
  4. Mobile development tehniques
  5. Mobile development process/tools
  6. Desktop development love

  7. Graph Database (Neo4j)

Open Source 

Even hardware is going open source
Fast/cheap prototyping is possible with 3d printers

The buzzword is crowdsourcing

Can 2e opensource and how?


"Keep the unique part closed and OS the rest."

Big data


Big data (three V-s): 

  • volume (“billions of billions”)
  • velocity (analysis in real time) 
  • variety (problem of data structure, no standardized data delivery protocol)

No single solution


BIG DATA (2)

 Big insight
Perception (visualization)

"In Detroit, amongst the most segregated cities in America, 8 Mile Road serves as a sharp racial dividing line"

Mobile UX/UI

Questions we should be asking ourselves when developing a mobile app:

1) What is the user doing 
Car key example - focus on the problem, decrease complexity

2) What is the user doing right now 
Identify the users' situation

Example - Croatia airlines web check-in


MOBILE UX/UI

User perspective

  1. Why are you making me do this? 
  2. Don’t make me think!
     
Programmers perspective

  1. An app is not a (just a) smaller web page!
  2. Go the extra mile
  3. Degrade gracefully



MOBILE  ARCHITECTURE


Mobile development tehniques

3 approaches:

1. Full native
2. Web applications/frameworks
3. Hybrid native (Embarcadero, Xamarin)


So what's the difference? Is the difference important?



Depends :)

You need native if:

a) you can't access all the phone sensors and you really need them
b) you're doing cool transitions/transformations (lots of rendering)


MOBILE DEVELOPMENT 'GUIDELINEs'


An app is as good as its programmer

Non-developers mostly consider an app native if there is a slide-in left menu with not "hiccups" in open/close transitions

What does your team already know and what are the clients needs?

Native development (+)


  1. full access to hardware
  2. excellent performances
  3. gain new stuff each time the OS updates
  4. results in cool and smooth apps

NATIVE DEVELOPMENT (-)



  1. you have to do it for each platform separately
  2. requires device specific programming
  3. a lot of attention needs to be pointed to architecture
  4. usually requires a more experienced developer

Web applications/frameworks (+)


  1. Sencha, PhoneJS, jQMobile, PhoneGap...
  2. develop once for all platforms (almost)
  3. steeper learning curve
  4. cool web-kit transformations
  5. easier maintenance
  6. develop using one language

WEB APPLICATIONS/FRAMEWORKS (-)


  1. poor performances
  2. limited access to hardware (or complicated)
  3. not all features can be developed in a framework
  4. might get complicated!

Hybrid native (+)


  1. access to hardware better than with Mobile web apps
  2. excellent performances
  3. better suport for native functions
  4. develop once for all platforms (almost)
  5. easier maintenance
  6. develop using one language

Hybrid native (-)


  1. support for native functions dependent on the "manufacturer"
  2. either you can do more but with extra effort  for different platforms (Xamarin) or you're limited in what you can acutally do (Embarcadero)
  3. we haven't seen an app that uses "2e languages" (PHP/Java)

So what's the conclusion for 2e?


  • PhoneGap supports enough hardware options
  • Mostly simple/fast animations/transitions
  • We already know the languages
  • Judging by the current user needs/requests, Mobile "Web development" is the way to go

Mobile development process/tools

(From the guys that built CodeAnywhere, Appcurious and Spotie)

Collaboration tools


  • e-mail :/
  • BaseCamp ->Jira, hipchat
  • skype, google hangout
  • Trello

trello

( https://trello.com/b/nV9rkC0W/tasks )


HOW DOES PROFICO USE TRELLO?

each project has 2 Trello boards:

  1. Project development board
  2. Project QA board

Boards contain:
  • small tasks
  • UI and logic separated
  • QA board has typical QA process lists
  • reports generated by internal QA and clients QA

DEVELOPMENT TOOLS


  • BitBucket private repositories
  • SourceTree / IDE
  • XCode
  • IntelliJ IDEA Android IDE
  • mlopatkin/android log viewer

  • Crashlytics
  • Fiddler
  • TestFlight
  • Prediction.io
  • Bunch of phones and tablets

CRASHLYTICS



CRASHLYTICS

easy integration
errors caching
full trace
hardware info
analytics
Android + iOS

INSTABUG



Testflight


Fiddler


PREDICTION.IO


"PredictionIO is an open source machine learning server for software developers to create predictive features, such as personalization, recommendation and content discovery."

Desktop development love

Graph DB and neo4j

NOSQL - Not Only SQL

Why?

RDBMS: Relationships part of the fixed schema
Graph: Relationships are part of the data

"Relational database is good at calculating the avg. age of the people in this room, a graph database is good at telling me who’s the person most likely to buy me a beer."

Graph DB 101


NO: not for charts & diagrams, or vector artwork

YES: for storing data that is structured as a graph
( linked lists, trees)
graphs are the general-purpose data structure

Two Ways to Work with Neo4j

  1. Embeddable on JVM (can use Spring mapping)
  2. Server with REST API



AnD the queries?

Combination of SQL and ASCII art

Graph example


Query example


START andreas=node:People(name = 'Andreas') #index

MATCH andreas-[:knows]-(friends)-[:knows]-new_friends

WHERE new_friends.age>18

RETURN new_friends



A 2e related example:





Questions?

The Geek Gathering

By Andrija Jambrović

The Geek Gathering

  • 1,191