Upgrade to Pro — share decks privately, control downloads, hide ads and more …

open source efforts

open source efforts

The story behing our open source efforts

Freek Van der Herten

October 05, 2016
Tweet

More Decks by Freek Van der Herten

Other Decks in Programming

Transcript

  1. The story
    behind our

    open source efforts

    View Slide

  2. About me
    Freek Van der Herten
    Partner & developer at SPATIE
    @freekmurze
    https://murze.be

    View Slide

  3. About me
    phpantwerp.be
    Dries Vints
    @driesvints
    Frederick Vanbrabant
    @TheEdonian

    View Slide

  4. Since 2003
    Websites, applications and webshops
    Team
    4 developers, 1 manager
    Specialization
    Laravel development

    View Slide

  5. OPEN SOURCE SOFTWARE

    View Slide

  6. Open source software
    We use a lot of it
    Nginx, Laravel, Ubuntu, Elasticsearch, Memcached, Redis,
    Beanstalkd, MySQL, Composer, Glide, Homestead, Flysystem,
    Fractal, Carbon, PHPUnit, NPM, React, jQuery, Java, SSH, Sequel
    Pro, BackupPC …
    Basically everything listed in composer.json and package.json

    View Slide

  7. ± 80 packages on Packagist
    + 1 000 000 downloads
    A lot of Laravel specific packages, some framework
    agnostic ones, a few JavaScript packages
    We create a lot of it
    Open source software

    View Slide

  8. Zend Framework 1
    PHP world was pretty stale around 2012
    Laravel 4: developer happiness, clear syntax
    Laracasts: miniseries on package development + Travis
    The first package

    View Slide

  9. Browsershot: take screenshots of website programmatorically
    PhantomJS
    Working in the open
    People started blogging about it
    The first package

    View Slide

  10. Blender: conversion from Zend Framework to Laravel
    A lot of functionalities that could be helpful to other developers
    New packages: laravel-newsletter, laravel-medialib, laravel-analytics
    Opensourcing Blender itself
    Very positive feedback from the community
    Beyond the first package

    View Slide

  11. Every package gets born inside a client project
    Almost every client project results in a package
    laravel-sitemap, opening-hours, …
    Beyond the first package

    View Slide

  12. Making time
    Time consuming
    Coding, writing tests, writing docs, getting the word out
    Maintenance, responding to issues, reviewing PRs
    1000 issues, 750 PRs

    View Slide

  13. Making time
    Only plan 4 days a week for client work
    Extra day for support, learning and opensource efforts
    Free time

    View Slide

  14. The benefits of creating
    packages
    A lot of learning by coding up the package and writing tests
    Feedback from the community
    Free code!
    Dogfooding

    View Slide

  15. Requirements
    Latest version of PHP / Laravel
    Package reflects the requirements of the project it gets born in
    Can use latest features: return type hints, null coalescing, anonymous
    classes
    PHP 5 is dead (to us)
    Probably hurts popularity, but nudges community to use latest versions

    View Slide

  16. TOP 10

    View Slide

  17. 10. laravel-permission
    $role = Role::create(['name' => 'writer']);

    $role->givePermissionTo('edit articles');

    $user->assignRole('writer');

    $user->can('edit articles’);

    View Slide

  18. 9. laravel-fractal
    fractal()

    ->collection($books)

    ->transformWith(new BookTransformer())

    ->includeCharacters()

    ->toArray();

    View Slide

  19. 8. laravel-tail
    php artisan tail

    View Slide

  20. 7. laravel-medialibrary
    $newsItem->addMedia($file)
    ->toCollection('images');

    $newsItem->getMedia('images')->first()->getUrl();

    $newsItem->getMedia('images')->first()->getUrl('thumb');


    $newsItem->addMedia($bigFile)
    ->toCollectionOnDisk('downloads', 's3');

    View Slide

  21. 6. db-dumper
    Spatie\DbDumper\Databases\MySql::create()

    ->setDbName($databaseName)

    ->setUserName($userName)

    ->setPassword($password)

    ->excludeTables(['table1', 'table2', 'table3'])

    ->dumpToFile('dump.sql');

    View Slide

  22. 5. laravel-analytics
    Analytics::fetchMostVisitedPages();
    Analytics::fetchVisitorsAndPageViews();

    Analytics::getTopReferrers();

    View Slide

  23. 4. string
    string('StartMiddleEnd')

    ->between('Start', 'End')

    ->toUpper(); // outputs "MIDDLE"

    View Slide

  24. 3. laravel-glide
    GlideImage::create($pathToImage)

    ->modify(['w'=> 50, 'filt'=>'greyscale'])

    ->save($pathToWhereToSaveTheManipulatedImage);

    View Slide

  25. 2. pdf-to-image
    $pdf = new Spatie\PdfToImage\Pdf('file.pdf');

    $pdf->saveImage($pathToImage);


    collect(range(1, $pdf->getNumberOfPages()), function(int
    $pageNumber) use ($pdf) {

    $pdf->setPage($pageNumber)

    ->saveImage("page{$pageNumber}.jpg");

    });

    View Slide

  26. 1. laravel-backup

    View Slide

  27. HIGHLIGHTS OUTSIDE TOP 10

    View Slide

  28. Laravel Menu
    Menu::macro('main', function () {

    return Menu::new()

    ->action('HomeController@index', 'Home')

    ->action('AboutController@index', 'About')

    ->action('ContactController@index', 'Contact')

    ->setActiveFromRequest();

    });

    View Slide

  29. Speed up your application 

    by caching the entire response
    Laravel Responsecache
    RESPONSE CACHE
    REQUESTS
    APP
    1
    2

    View Slide

  30. Laravel Translatable
    $newsItem = new NewsItem; // This is an Eloquent model

    $newsItem

    ->setTranslation('name', 'en', 'Name in English')

    ->setTranslation('name', 'nl', 'Naam in het Nederlands')

    ->save();


    $newsItem->name; // Returns 'Name in English'

    $newsItem->getTranslation('name', 'nl');

    View Slide

  31. https://spatie.be/opensource

    View Slide

  32. Not free!

    View Slide

  33. POSTCARDWARE

    View Slide

  34. Spatie

    Samberstraat 69D
    2060 Antwerp

    Belgium

    View Slide

  35. Future plans
    No roadmap
    Depends on the client projects
    Will probably diminish a bit as the most common problems are solved

    View Slide

  36. In closing
    Working on packages has a lot of benefits
    It’s fun
    Social aspect
    Can be recommended to everyone

    View Slide

  37. QUESTIONS?

    View Slide

  38. Thank you!
    https://speakerdeck.com/freekmurze/open-source-efforts
    https://murze.be
    https://spatie.be/opensource

    View Slide