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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. OPEN SOURCE SOFTWARE

    View full-size 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 full-size 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 full-size 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 full-size slide

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

    View full-size 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 full-size 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 full-size 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 full-size slide

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

    View full-size 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 full-size 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 full-size slide

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

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

    $user->assignRole('writer');

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

    View full-size slide

  17. 9. laravel-fractal
    fractal()

    ->collection($books)

    ->transformWith(new BookTransformer())

    ->includeCharacters()

    ->toArray();

    View full-size slide

  18. 8. laravel-tail
    php artisan tail

    View full-size slide

  19. 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 full-size slide

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

    ->setDbName($databaseName)

    ->setUserName($userName)

    ->setPassword($password)

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

    ->dumpToFile('dump.sql');

    View full-size slide

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

    Analytics::getTopReferrers();

    View full-size slide

  22. 4. string
    string('StartMiddleEnd')

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

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

    View full-size slide

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

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

    ->save($pathToWhereToSaveTheManipulatedImage);

    View full-size slide

  24. 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 full-size slide

  25. 1. laravel-backup

    View full-size slide

  26. HIGHLIGHTS OUTSIDE TOP 10

    View full-size slide

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

    return Menu::new()

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

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

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

    ->setActiveFromRequest();

    });

    View full-size slide

  28. Speed up your application 

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

    View full-size slide

  29. 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 full-size slide

  30. https://spatie.be/opensource

    View full-size slide

  31. POSTCARDWARE

    View full-size slide

  32. Spatie

    Samberstraat 69D
    2060 Antwerp

    Belgium

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide