The Theory a + b = 180˚ Postulate 22: Angle-Angle (AA) Similarity Postulate The sum of the angles a b K L l2 l1 If two angles of one triangle are congruent to two angles of another triangle, then the two triangles are similar.
Matt’s app dev workflow See need Imagine how to meet that need as simply as possible Build the ugliest simplest solution Buy a domain Throw it up on Forge Send out a tweet and never look back
https://m.signalvnoise.com/exiting-the-dark-ages-of-capitalism-480f0600f103 DHH “EXITING THE DARK AGES OF CAPITALISM” “Squeezing out every last dollar from a relationship will leave it sour and dry. […] It’s a two-dimensional, flat, and antagonistic relationship. It’s also frequently completely unnecessary, and nearly always unsustainable.”
Common reasons to build apps Makes me money Makes me famous Gets me a job Usable by a large section of the community in a traditional open source context
Making money, getting famous, getting a job, contributing to open source, and any other common motivations for building apps are perfectly fine. DISCLAIMER But everyone knows that already.
Makes me money Makes me famous Gets me a job Usable by a large section of the community in a traditional open source context Makes me laugh Makes my kid laugh Makes my friends laugh Would be fun to build I want to try out a fun idea It would help me in a small way It would help my spouse Common reasons to build apps Less common reasons to build apps
“A state where people experience positive emotions, positive psychological functioning and positive social functioning, most of the time,” living "within an optimal range of human functioning” Human Flourishing
Clients are asking for it Clients will ask for it Can use it to build an app that will bring money/fame Can apply on apps I’m currently running Simplify/replace currently-used tech Common reasons to adopt tech
Clients are asking for it Clients will ask for it Can use it to build an app that will bring money/ fame Can apply on apps I’m currently running Simplify/replace currently-used tech It will let my grandma do something cool I can talk with my dog using it My daughter can use it to play her favorite game My spouse will totes appreciate it OMFG I feel like a wizard Common reasons to adopt tech Less common reasons to adopt tech
Valet Lambo Eloquent Laravel Frontend Presets Tailwind Autowiring, route model binding, routes/ console.php, service discovery, ignoring type hints and return type hints, realtime Facades, etc. Which is why I love…
The simplest Laravel app (1) It's basically Excel/Access... hosted on the cloud and shareable among your friends for $5/mo. Karani SmarterThings Symposium MarkedStyle
The simplest Laravel app (2) Or another super simple type: just takes some other source of data and manipulates it or responds to it. MarvelWatch SimplePodcastSite Giscus
Science for Grandma How I Built Step 7: Create users class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('phone_number')->nullable(); $table->string('facebook_id')->nullable(); $table->timestamps(); }); } }
Science for Grandma How I Built Step 8: RSS -> notifications Artisan::command('check', function (FeedsFactory $feeds) { $feedItems = $feeds->make(config('subscriber.rss_url'))->get_items(); collect($feedItems)->reject(function ($episode) { return $this->episodeExists($episode); })->each(function ($episode)) { Episode::create(['permalink' => $episode->get_permalink()]); dispatch(new NotifySubscribersOfNewEpisode($episode)); }); })->describe('Check for a new episode, and notify if appropriate.');
Science for Grandma How I Built Step 8: RSS -> notifications (2) // Job, notifying all users class NotifySubscribersOfNewEpisode implements ShouldQueue { ... public function handle() { Notification::send( User::all(), new NewEpisodeReleased($this->episode) ); } }
Science for Grandma How I Built Step 8: RSS -> notifications (3) // Notification (multi-channel) class NewEpisodeReleased extends Notification { ... public function via($notifiable) { return $notifiable->notificationChannel(); } public function toTwilio($notifiable) { return (new TwilioSmsMessage)->content("Message announcing new episode here"); } public function toFacebook($notifiable) { return FacebookMessage::create("Message announcing new episode here"); } }
Science for Grandma How I Built Step 8: RSS -> notifications (4) // User class, specifying notification channel class User { ... public function notificationChannel() { if ($this->phone_number) { return TwilioChannel::class; } if ($this->facebook_id) { return FacebookChannel::class; } throw new Exception('Un-notifiable user'); } }
Science for Grandma How I Built Step 12: Enter Botman // routes/botman.php $botman->hears('.*(Hi|Hello|Hey).*', function ($bot) { $bot->reply('Hello! What can I do for you today? Try "info" for more information.' }); $botman->hears('.*(info|help).*', function ($bot) { $bot->reply('Info message here but it is too long for Keynote HI LARACON ONLINE'); }); $botman->hears('subscribe.*', function ($bot) { $user = $bot->getUser(); Log::info('FB User subscribed! ' . $user->getId()); User::firstOrCreate(['facebook_id' => $user->getId()]); $bot->reply("You're now subscribed to " . config('app.name') . "!"); }); $botman->hears('unsubscribe.*', function ($bot) { $user = $bot->getUser();
Science for Grandma How I Built Tweet from @StaufferScience with new posts Listen for Facebook messages suggesting videos lil’ man can watch Let lil’ man press a button that releases each new episode Give lil’ man an SMS address he can text science pictures to that auto-posts to Twitter and his web site Step 14+: Future ideas?
Tech we often underestimate Facebook SMS iOS/Android apps Internet of Things (see other Laravel Notification Channels) That which reaches people more in the real world/day-to-day:
Change your perspective of what is worth building. Change your perspective of what is worth using. Change your perspective of what you're capable of. Work for human flourishing… and fun.