Follow along at https://zhangyijiang.github.io/orbital-choose-project-talk/
Do your own research
I can't talk about everything
Discuss with your partner
But not too loudly
Ask questions!
Your friends, your mentor, or me (at the end of this talk)
But now what?
Capabilities? Limitations?
Survived CS3216, CS3217
platform?
framework?
API?
The hardware, software and ecosystem on which your project is built
The foundation for your app
app
├── Console
│ └── Commands
├── Events
├── Exceptions
├── Http
│ ├── Composers
│ ├── Controllers
│ │ └── Auth
│ ├── Middleware
│ └── Requests
├── Jobs
├── Listeners
├── Models
├── Policies
└── Providers
Provides structure
Simplifies common tasks
How computers talk to each other
Walk the social graph
Show maps and directions
Display cats as HTTP status code
So what is right for me?
Rank your priorities
Evaluate the project types
Who can access or use your project, and is it easy to do so?
What do you learn from building the project?
Is it fun or easy to build? Is it expensive?
What do existing apps use?
Why did they choose it, and should you try to differentiate?
Can you make money?
HTML/CSS/JavaScript
PHP, Ruby, Python, JavaScript...
Reach - Easily cross platform
Accessible - No installation required
Easy to learn - start simple, learn as you go along
Easy to develop - No compilation, wide choice of languages
No direct hardware access - weaker API, poor performance
Weaker and inconsistent API
(Relatively) poor performance
Non-native UI
Fast changing - short knowledge lifespan
of things which you might not think was possible with web apps
Image compression! (Sort of)
Virtual reality!
Module planning!
Console emulation!
Pros | Cons |
---|---|
|
|
Native Platform
Native Platform - Native UI and API
Native Platform - Hardware access
Native Platform - Performance
Developer Experience - Better tooling, more mature
Developer Experience - Steep learning curve
let cannonFiringRangeGradient: CGGradient = {
let colors = [UIColor.white.withAlphaComponent(0.3).cgColor,
UIColor.white.withAlphaComponent(0).cgColor]
return CGGradient(colorsSpace: nil, colors: colors as CFArray, locations: nil)!
}()
let center = CGPoint(x: firingRange.bounds.width / 2, y: firingRange.bounds.height)
let radius = firingRange.bounds.height
firingRange.image = {
let renderer = UIGraphicsImageRenderer(size: firingRange.bounds.size)
return renderer.image { rendererContext in
let context = rendererContext.cgContext
let gradient = Constants.UI.cannonFiringRangeGradient
context.drawRadialGradient(gradient,
startCenter: center, startRadius: 0,
endCenter: center, endRadius: radius,
options: [])
}
}()
<div class="cannon-range-bg">
.cannon-range-bg {
background: radial-gradient(circle 100px,
rgba(255, 255, 255, 0),
rgba(255, 255, 255, 1));
}
Developer Experience - Compiled languages
Developer Experience - Heavier tooling
Mission Control - iOS development - 19 May
Quick fire round
Game Development Group - 26 May
(Looks familiar?)
Consider carefully
These choices will affect your entire Orbital projectBut choose quickly
Making any decision is more important than making the best decisionHave fun!
Thank you!
Any questions?