Slide 1

Slide 1 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 www.filemaker-konferenz.com Mit Open Source Software eine Webapplikation erstellen Stefan Husch [email protected] qutic development Consulting, Development, Hosting Open Source - eine FileMaker Alternative?

Slide 2

Slide 2 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Wahl des richtigen Tools

Slide 3

Slide 3 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Wahl des richtigen Tools

Slide 4

Slide 4 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch FileMaker: Vor- & Nachteile + Graphische Oberfläche + Geringe Lernkurve + Schnelles Prototyping + Das FileMaker Magazin Forum - Graphische Oberfläche - Maus-Arm - Lizenzkosten - Keine Entwickler-Leitlinien - Schwer zu erweitern (Plugins) - Schlecht zu skalieren - Schlecht zu dokumentieren (SourceCode) - Keine automatisierten Tests

Slide 5

Slide 5 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Wahl des richtigen Tools

Slide 6

Slide 6 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Rails: Vor- & Nachteile + Open Source + Textbasierte Entwicklung + Versionskontrolle + Schnelle App-Entwicklung + Entwickler-Leitlinien + Flexibel + Beliebig zu skalieren + Gut zu dokumentieren + Automatisierte Tests + Endlose Möglichkeiten - Steilere Lernkurve - Endlose Möglichkeiten - Dokumentation in Englisch

Slide 7

Slide 7 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Entwicklungskosten Web == FMP * *große Projekte: Web < FMP

Slide 8

Slide 8 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Warum ein Webframework? • Datenbankzugriff (Object-relational mapping, ORM) • Templatesysteme (View) • Scaffolding (Gerüstbau für Controller, Model, View) • Routing (URL-Struktur) • Role Based User Authentification (Wer darf was) • Lokalisierung (Mehrsprachigkeit) • Sicherheitsfunktionen (SQL-Injection, XSS, etc.)

Slide 9

Slide 9 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Warum Rails? • Ausgereiftes Webframework (seit 2005, Vorbild für Andere) • Objektorientiert • Don’t repeat yourself • Konvention vor Konfiguration • Einfach zu lernen • Sehr große Community • Vielfalt an vorhandenen Bibliotheken (gems)

Slide 10

Slide 10 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Endlose Möglichkeiten • Welche Datenbank wähle ich? PostgreSQL, MySQL, SQLite, MonoDB, Oracle, etc. • Welche Template-Engine wähle ich? Haml, ERB, etc. • Welches CSS-Framework wähle ich? Sass, SCSS, Less, Stylus, etc. • Welche Background-Queue wähle ich? Sidekiq, DelayedJob, Resque, RabbitMQ, etc.

Slide 11

Slide 11 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch FileMaker Starter Solutions

Slide 12

Slide 12 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch

Slide 13

Slide 13 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Keep it simple • Ziel: Intranet-Applikation für maximal 250 Benutzer • Datenbank: SQLite • Template-Engine: - • CSS-Framework: - • Background-Queue: -

Slide 14

Slide 14 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Entwicklungs-Umgebung • Ruby (Programmiersprache) • Rails (Webframework) • bundler (Installations-Automatisierung für Ruby Bibliotheken) • rvm (Ruby Version Manager) • git (Versionskontrollsystem) • TextMate (Textverarbeitung, macOS) • SQLite

Slide 15

Slide 15 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch „Textbasierte Entwicklung“ $ $ $ $ $ $ # Das Terminal ist Dein Freund :) $ $ $ $ $

Slide 16

Slide 16 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Ruby und Rails installieren $ \curl -sSL https://get.rvm.io | bash -s head $ rvm install ruby-2.4.2 $ gem install bundler $ echo "rvm use ruby-2.4.2@contacts --create" \ > .rvmrc $ source .rvmrc $ gem install rails

Slide 17

Slide 17 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Rails Projekt erstellen $ rails new contacts -d sqlite3

Slide 18

Slide 18 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Rails Projekt ansehen $ cd contacts $ m . # öffnet das Projekt in TextMate

Slide 19

Slide 19 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Rails Überblick • Model-View-Controller Architektur (MVC) • active_record (ORM) • Klare Projekt-Struktur • Konfiguration • Initializers • Routes • Datenbank-Schema • Datenbank-Migration • Gemfile • Log

Slide 20

Slide 20 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch

Slide 21

Slide 21 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Was ist ActiveAdmin? • Rails-Erweiterung (Engine) • Keine Controller und Views nötig (aber möglich) • Domain-specific language (DSL) • Einfache Entwicklung

Slide 22

Slide 22 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Und los geht es $ cat <> Gemfile gem 'activeadmin' gem 'devise' EOF $ $ bundle $ rails generate active_admin:install $ rails db:migrate $ rails db:seed $ $ git init . $ git add . $ git commit -m "initial commit" $ $ rails server

Slide 23

Slide 23 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Browser-Ansicht

Slide 24

Slide 24 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch

Slide 25

Slide 25 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Datenbank-Model FileMaker

Slide 26

Slide 26 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Datenbank-Model Rails persons id group_id title first_name last_name company job_title notes addresses id person_id type street street_addition city zip groups id name contact_types id name contacts id person_id contact_type_id contact

Slide 27

Slide 27 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Modell erstellen $ rails generate model group \ name:string $ $ rails generate model contact_type \ name:string $ $ rails generate model contact \ person:belongs_to \ contact_type:belongs_to \ contact:string

Slide 28

Slide 28 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Modell erstellen $ rails generate model person \ group:belongs_to \ title:string \ first_name:string \ last_name:string \ company:string \ job_title:string \ notes:text

Slide 29

Slide 29 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Modell erstellen $ rails generate model address \ person:belongs_to \ mode:string \ street:string \ street_addition:string \ city:string \ zip:string

Slide 30

Slide 30 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch ActiveAdmin-Ressourcen erstellen $ rails generate active_admin:resource Person $ rails generate active_admin:resource Address $ rails generate active_admin:resource Group $ rails generate active_admin:resource ContactType $ rails generate active_admin:resource Contact

Slide 31

Slide 31 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Select-Menu Daten erstellen $ cat <> db/seeds.rb Group.create!(name: 'Personal') Group.create!(name: 'Professional') Group.create!(name: 'Family') Group.create!(name: 'Friend') ContactType.create!(name: 'Office Phone') ContactType.create!(name: 'Mobile Phone') ContactType.create!(name: 'Personal Phone') ContactType.create!(name: 'Fax') ContactType.create!(name: 'Office Email') ContactType.create!(name: 'Personal Email') ContactType.create!(name: 'FaceTime') ContactType.create!(name: 'Twitter') EOF

Slide 32

Slide 32 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Datenbank-Migration $ rails db:drop $ rails db:create $ rails db:migrate $ rails db:seed $ $ git add . $ git commit -m "integrate ActiveAdmin"

Slide 33

Slide 33 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Browser-Ansicht

Slide 34

Slide 34 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Todo • Comments deaktivieren • permit_params in allen ActiveAdmin-Resources setzen • routes.rb: root to: redirect('/admin') • Addresses und Contacts aus Menü entfernen (menu false) • Model-Relations erweitern • ActiveAdmin-Ressourcen anpassen

Slide 35

Slide 35 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch ActiveAdmin-Ressourcen anpassen # app/admin/address.rb ActiveAdmin.register Address do menu false permit_params :person_id, :type, :street, :street_addition, :city, :zip end # app/admin/contact_type.rb ActiveAdmin.register ContactType do permit_params :name end # app/admin/contact.rb ActiveAdmin.register Contact do menu false permit_params :person_id, :contact_type_id, :contact end # app/admin/group.rb ActiveAdmin.register Group do permit_params :name end

Slide 36

Slide 36 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch ActiveAdmin-Ressourcen anpassen # app/admin/person.rb ActiveAdmin.register Person do permit_params :group_id, :title, :first_name, :last_name, :company, :job_title, :notes, contacts_attributes: [:id, :contact_type_id, :contact], addresses_attributes: [:id, :person_id, :mode, :street, :street_addition, :city, :zip] show do attributes_table_for person do Person.column_names.each do |c| row c.to_sym end end table_for person.contacts do column "Type", :contact_type column "Contact", :contact end table_for person.addresses do column "Mode", :mode column "Street", :street column "Addition", :street_addition column "City", :city column "Zip", :zip end end

Slide 37

Slide 37 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch ActiveAdmin-Ressourcen anpassen form :html => {:multipart => true} do |f| f.inputs 'Person' do f.input :group f.input :title f.input :first_name f.input :last_name f.input :company f.input :job_title f.input :notes f.input :image, as: :file end f.inputs do f.has_many :contacts, allow_destroy: true do |c| c.input :contact_type c.input :contact end end

Slide 38

Slide 38 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch ActiveAdmin-Ressourcen anpassen f.inputs do f.has_many :addresses, allow_destroy: true do |a| a.input :mode, :as => :select, :collection => [ ['Work','Work'], ['Personal','Personal'] ] a.input :street a.input :street_addition a.input :city a.input :zip end end f.actions end end

Slide 39

Slide 39 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Model erweitern # app/model/person.rb class Person < ApplicationRecord belongs_to :group has_many :contacts has_many :addresses accepts_nested_attributes_for :contacts, reject_if: :all_blank, allow_destroy: true accepts_nested_attributes_for :addresses, reject_if: :all_blank, allow_destroy: true def name [title, first_name, last_name].join(" ").strip end end

Slide 40

Slide 40 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Browser-Ansicht

Slide 41

Slide 41 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Bild-Upload $ cat <> Gemfile gem 'paperclip' EOF $ $ bundle $ rails generate paperclip person image $ $ # fix migration file $ sed -i '' -e "s#ActiveRecord::Migration#ActiveRecord::Migration[5.1]#g" \ db/migrate/*_add_attachment_image_to_people.rb $ $ rails db:migrate

Slide 42

Slide 42 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Image-Referenz hinzufügen # app/admin/person.rb ActiveAdmin.register Person do permit_params :group_id, :title, :first_name, :last_name, :company, :job_title, :notes, :image, contacts_attributes: [:id, :contact_type_id, :contact], addresses_attributes: [:id, :person_id, :mode, :street, :street_addition, :city, :zip] # app/model/person.rb class Person < ApplicationRecord has_attached_file :image, styles: { medium: "300x300>", thumbnail: "100x100>" } validates_attachment_content_type :image, :content_type => [ "image/jpg", "image/jpeg", "image/png", "image/gif" ]

Slide 43

Slide 43 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Browser-Ansicht

Slide 44

Slide 44 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch ?

Slide 45

Slide 45 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Links zum Vortrag • https://speakerdeck.com/qutic • https://de.wikipedia.org/wiki/Webframework • http://rubyonrails.org • https://www.ruby-lang.org/en/ • https://rvm.io • https://stackoverflow.com/questions/15691977/why-start-a-shell-command- with-a-backslash • http://bundler.io • https://gorails.com/setup/windows/10 • http://macromates.com/download • https://activeadmin.info • https://activeadmin.info/documentation.html

Slide 46

Slide 46 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Open Source - eine FileMaker Alternative? | Stefan Husch Weiter lernen • https://github.com/activeadmin/activeadmin/wiki • https://gorails.com/episodes/using-activeadmin-to-build-an-admin-ui • https://spin.atomicobject.com/2016/07/23/file-upload-active-admin-paperclip/ • https://pragprog.com/book/ruby4/programming-ruby-1-9-2-0 • https://pragprog.com/book/rails51/agile-web-development-with-rails-5-1 • http://railscasts.com

Slide 47

Slide 47 text

8. FileMaker Konferenz | Salzburg | 12.-14. Oktober 2017 Vortrag und Sprecher Vielen Dank unseren Sponsoren