Web-Automatisierung mit WWW::MechanizeThomas Fahle
Oft sind wichtige Informationen, Daten und Dateien nur über aufwendig manuell auszufüllende Formulare zu ereichen.
Der Vortrag zeigt anhand einfacher und praktischer Beispiele auf, wie sich diese Tätigkeiten mit WWW::Mechanize schnell und kostengünstig automatisieren lassen.
Zielgruppe des Vortrags sind Einsteiger in das Thema Webscraping.
Inhalt
* Was ist Webscraping?
* Warum WWW::Mechanize?
* Erste Schritte
* Links extrahieren
* Links folgen
* Formulare
* Download von Dateien
* Passwortgeschützte Seiten
* CPAN-Module für Standardaufgaben
Vortrag "WordPress Professional II" von Sebastian Blum
Vortrag WordPress Professional II
Seit Jahren betreiben wir eine große WordPress-Multi-Installation mit über 50 Domains, gehostet auf einem ausfallsicheren Server-Cluster mit vielen selbstentwickelten Plugins & Themes.
Dieses Know-How möchten wir mit Euch teilen und geben im Vortrag tiefe Einblicke in die folgenden zwei Themengebiete:
WordPress Sicherheit – Wie sichere ich meine Installation ab und was sollte ich beachten?
Learnings aus Themes & Plugins – Wie baue ich eine zukunftssichere und wartbare WordPress-Anwendung auf?
Webseiten sind keine Gesamtkunstwerke, sondern Zusammenstellungen einzelner Module. Dieser Vortrag von der Jax 2013 ergründet, wie man vorgeht, um sinnvolle und pflegbare M;odule zu erschaffen. Dabei wird vor allem Wert auf das CSS gelegt. Das CSS wird dank Sass ebenso modular, wie das HTML.
Web-Automatisierung mit WWW::MechanizeThomas Fahle
Oft sind wichtige Informationen, Daten und Dateien nur über aufwendig manuell auszufüllende Formulare zu ereichen.
Der Vortrag zeigt anhand einfacher und praktischer Beispiele auf, wie sich diese Tätigkeiten mit WWW::Mechanize schnell und kostengünstig automatisieren lassen.
Zielgruppe des Vortrags sind Einsteiger in das Thema Webscraping.
Inhalt
* Was ist Webscraping?
* Warum WWW::Mechanize?
* Erste Schritte
* Links extrahieren
* Links folgen
* Formulare
* Download von Dateien
* Passwortgeschützte Seiten
* CPAN-Module für Standardaufgaben
Vortrag "WordPress Professional II" von Sebastian Blum
Vortrag WordPress Professional II
Seit Jahren betreiben wir eine große WordPress-Multi-Installation mit über 50 Domains, gehostet auf einem ausfallsicheren Server-Cluster mit vielen selbstentwickelten Plugins & Themes.
Dieses Know-How möchten wir mit Euch teilen und geben im Vortrag tiefe Einblicke in die folgenden zwei Themengebiete:
WordPress Sicherheit – Wie sichere ich meine Installation ab und was sollte ich beachten?
Learnings aus Themes & Plugins – Wie baue ich eine zukunftssichere und wartbare WordPress-Anwendung auf?
Webseiten sind keine Gesamtkunstwerke, sondern Zusammenstellungen einzelner Module. Dieser Vortrag von der Jax 2013 ergründet, wie man vorgeht, um sinnvolle und pflegbare M;odule zu erschaffen. Dabei wird vor allem Wert auf das CSS gelegt. Das CSS wird dank Sass ebenso modular, wie das HTML.
We’re all trying to find that idea or spark that will turn a good project into a great project. Creativity plays a huge role in the outcome of our work. Harnessing the power of collaboration and open source, we can make great strides towards excellence. Not just for designers, this talk can be applicable to many different roles – even development. In this talk, Seasoned Creative Director Sara Cannon is going to share some secrets about creative methodology, collaboration, and the strong role that open source can play in our work.
We are WP, we are legion - WP Camp 2013 Berlinstk_jj
Vortrag
We are WordPress, we are legion
WP Camp 2013 Berlin
Effiziente Verwaltung mehrere WP-Installationen. Vergleich mehrerer Management Plattformen, wie z.B. WP Remote, iControlWP, ManageWP, CMS Commander und InfiniteWP
Wissen das du für die Arbeit mit Wordpress mindestens brauchst.Sabine Kronenberger
Was ist ein Artikel/Beitrag, was eine Seite, wozu brauche ich Medien, wozu Wigdets? Wordpress Basics, die du für das alltägliche Arbeiten brauchst, wenn dein Design (Theme, Template) bereits angelegt wurde.
17 Ways to Design a Presentation People Want to ViewJim MacLeod
Tired of boring PowerPoint presentations? Me too. Here are 17 tips to help you create a presentation that not only engages the audience, but forces them to remember what you want them to remember.
An immersive workshop at General Assembly, SF. I typically teach this workshop at General Assembly, San Francisco. To see a list of my upcoming classes, visit https://generalassemb.ly/instructors/seth-familian/4813
I also teach this workshop as a private lunch-and-learn or half-day immersive session for corporate clients. To learn more about pricing and availability, please contact me at http://familian1.com
TEDx Manchester: AI & The Future of WorkVolker Hirsch
TEDx Manchester talk on artificial intelligence (AI) and how the ascent of AI and robotics impacts our future work environments.
The video of the talk is now also available here: https://youtu.be/dRw4d2Si8LA
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
Dieser Workshop ist in erster Linie für Konferenzteilnehmer gedacht, die sich für Plugin-Programmierung interessieren.
Der Workshop zeigt auf, welche überwachenswerten Daten und Parameter es auf einem NetApp-Filer gibt und wie die Zugänge zu diesen Daten (Telnet, HTTP, SNMP, SSH, XML/Webservices, Data ONTAP APIs) sind. Ingo Lantschner wird eine theoretische Einführung und Demonstration an Hand des NetApp-Simulators präsentieren und mit den Teilnehmern ein Demo-Plugin auf Basis der o.g. Erkenntnisse entwickeln, anschließend erfolgt der Upload des Plugins auf Nagios-Exchange.
Vortrag von der FrOSCon 2012
OpenLDAP als NoSQL-Datenbank im Einsatz.
Eine generische Rechteverwaltung mit Hilfe von Aliases und extensibleObjects realisiert.
OSMC 2009 | Entwicklung von Nagios-Plugins mit Net::SNMP und Nagios::Plugin b...NETWAYS
Der Vortrag soll einen Überblick geben, wie sich mit Hilfe der Nagios-Plugin API und dem Net::SNMP Modul von Perl ein einges Plugin zur Hardware-Überwachung bauen lässt.
We’re all trying to find that idea or spark that will turn a good project into a great project. Creativity plays a huge role in the outcome of our work. Harnessing the power of collaboration and open source, we can make great strides towards excellence. Not just for designers, this talk can be applicable to many different roles – even development. In this talk, Seasoned Creative Director Sara Cannon is going to share some secrets about creative methodology, collaboration, and the strong role that open source can play in our work.
We are WP, we are legion - WP Camp 2013 Berlinstk_jj
Vortrag
We are WordPress, we are legion
WP Camp 2013 Berlin
Effiziente Verwaltung mehrere WP-Installationen. Vergleich mehrerer Management Plattformen, wie z.B. WP Remote, iControlWP, ManageWP, CMS Commander und InfiniteWP
Wissen das du für die Arbeit mit Wordpress mindestens brauchst.Sabine Kronenberger
Was ist ein Artikel/Beitrag, was eine Seite, wozu brauche ich Medien, wozu Wigdets? Wordpress Basics, die du für das alltägliche Arbeiten brauchst, wenn dein Design (Theme, Template) bereits angelegt wurde.
17 Ways to Design a Presentation People Want to ViewJim MacLeod
Tired of boring PowerPoint presentations? Me too. Here are 17 tips to help you create a presentation that not only engages the audience, but forces them to remember what you want them to remember.
An immersive workshop at General Assembly, SF. I typically teach this workshop at General Assembly, San Francisco. To see a list of my upcoming classes, visit https://generalassemb.ly/instructors/seth-familian/4813
I also teach this workshop as a private lunch-and-learn or half-day immersive session for corporate clients. To learn more about pricing and availability, please contact me at http://familian1.com
TEDx Manchester: AI & The Future of WorkVolker Hirsch
TEDx Manchester talk on artificial intelligence (AI) and how the ascent of AI and robotics impacts our future work environments.
The video of the talk is now also available here: https://youtu.be/dRw4d2Si8LA
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
Dieser Workshop ist in erster Linie für Konferenzteilnehmer gedacht, die sich für Plugin-Programmierung interessieren.
Der Workshop zeigt auf, welche überwachenswerten Daten und Parameter es auf einem NetApp-Filer gibt und wie die Zugänge zu diesen Daten (Telnet, HTTP, SNMP, SSH, XML/Webservices, Data ONTAP APIs) sind. Ingo Lantschner wird eine theoretische Einführung und Demonstration an Hand des NetApp-Simulators präsentieren und mit den Teilnehmern ein Demo-Plugin auf Basis der o.g. Erkenntnisse entwickeln, anschließend erfolgt der Upload des Plugins auf Nagios-Exchange.
Vortrag von der FrOSCon 2012
OpenLDAP als NoSQL-Datenbank im Einsatz.
Eine generische Rechteverwaltung mit Hilfe von Aliases und extensibleObjects realisiert.
OSMC 2009 | Entwicklung von Nagios-Plugins mit Net::SNMP und Nagios::Plugin b...NETWAYS
Der Vortrag soll einen Überblick geben, wie sich mit Hilfe der Nagios-Plugin API und dem Net::SNMP Modul von Perl ein einges Plugin zur Hardware-Überwachung bauen lässt.
2. ONLINE KARRIERETAG MÜNCHEN 2016
AGENDA MODERNE WEBENTWICKLUNG
▸ TEIL 1: TESTGETRIEBENE ENTWICKLUNG
▸ CODEBEISPIEL
▸ TEIL 2: SYMFONY ENVIRONMENT
▸ VERSAND EINER NEWSLETTER KAMPAGNE
4. BEISPIELCODE: DATA CLASS
WAS MACHT DIESER CODE?
1 <?php
2
3 class data
4 {
5 private $data;
6
7 public function __construct($data)
8 {
9 $this->data = $data;
10 }
11
12 public function get()
13 {
14 $fp = array();
15 foreach ($this->data as $o) {
16 if ($o->bList == 1) { // What is bList?
17 $fp[] = $o;
18 }
19 }
20
21 return $fp;
22 }
23 }
24
WAS PASSIERT, WENN …
▸ … kein Array von Objekten
übergeben wird?
▸ … die Objekte nicht
public $bList; enthalten?
▸ … du diese Klasse
erweitern sollst?
?
5. WIR LIEBEN AUCH KAFFEE
DANN BRAUCHEN WIR ERST EINMAL EINEN KAFFEE…
6. EXKURS: TESTGETRIEBENE ENTWICKLUNG
RED » GREEN » REFACTOR - ZYKLUS
TEST FEHLGESCHLAGEN
TEST SCHREIBEN
TEST ERFOLGREICH
CODE HINZUFÜGEN
ABLAUF STÄNDIG WIEDERHOLEN
CODE VERBESSERN
REFACTOR
7. ERSTER TEST
PRODUCT LIST TEST
1 <?php
2
3 namespace TestsDemo;
4
5 use DemoProductList;
6
7 class ProductListTest extends PHPUnit_Framework_TestCase
8 {
9 public function testProductList()
10 {
11 $productList = new ProductList();
12 }
13 }
14
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
9. EXKURS: WAS IST EIN INTERFACE
INTERFACE: LISTBARES PRODUKT
1 <?php
2
3 namespace Demo;
4
5 interface ProductListInterface
6 {
7 /**
8 * Checks if the product is listed.
9 *
10 * @return bool
11 */
12 public function isListed();
13 }
14
Mit Hilfe des Interface schließen wir einen „Vertrag“,
dass die Methode „isListed“ vorhanden ist.
10. ERWEITERUNG DES TESTFALLS
ERWEITERUNG PRODUCT LIST TEST
8 class ProductListTest extends PHPUnit_Framework_TestCase
9 {
10 public function testProductList()
11 {
12 $listedProduct = $this->prophesize(ProductListInterface::class);
13 $listedProduct->isListed()->willReturn(true);
14 $notListedProduct = $this->prophesize(ProductListInterface::class);
15 $notListedProduct->isListed()->willReturn(false);
16
17 $productList = new ProductList(
18 [
19 $listedProduct->reveal(),
20 $notListedProduct->reveal(),
21 ]
22 );
23
24 $this->assertCount(1, $productList->getListedProducts());
25 $this->assertContains($listedProduct->reveal(),
26 $productList->getListedProducts());
27 }
28 }
29
GELISTET
NICHT
GELISTET
BEIDE
ÜBERGEBEN
NUR 1 PRODUKT
ERWARTET
11. FEHLERMELDUNG
ERGEBNIS PRODUCT LIST TEST
There was 1 error:
1) TestsDemoProductListTest::testProductList
Error: Call to undefined method DemoProductList::getListedProducts()
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
12. FINALE IMPLEMENTIERUNG DER PRODUCT LIST KLASSE
IMPLEMENTIERUNG PRODUCT LIST
5 class ProductList
6 {
7 private $products = [];
8
9 public function __construct(array $productList)
10 {
11 foreach ($productList as $product) {
12 $this->addProduct($product);
13 }
14 }
15
16 public function addProduct(ProductListInterface $product)
17 {
18 array_push($this->products, $product);
19 }
20
21 public function getListedProducts()
22 {
23 return array_filter(
24 $this->products,
25 function (ProductListInterface $product) {
26 return $product->isListed();
27 }
28 );
29 }
30 }
31
NUR ARRAY
ERLAUBT
INTERFACE
IMPLEMENTIERT
NUR GELISTETE
PRODUKTE
15. WAS IST DIE SYMFONY WELT?
SYMFONY
▸ Komponenten
▸ 36 einzelne Bibliotheken
in PHP
▸ Open Source und in
vielen Projekten oder
Frameworks verwendet
▸ Full-Stack-Framework
basierend auf den
Komponenten bildet
Symfony ein
vollständiges
Framework
17. ÜBERSICHT DES ABLAUFS
BEISPIEL: VERSAND EINER NEWSLETTER E-MAIL
NEWSLETTER
MAILER
instanziiert
Array an Empfängern
jede Instanz sendet eine
E-Mail an einen Empfänger
18. BEISPIEL EINER MÖGLICHEN IMPLEMENTIERUNG
KLASSE: MAILER
1 <?php
2
3 class Mailer
4 {
5 private $fromEmail;
6 private $fromName;
7 private $header;
8
9 public function __construct($fromEmail, $fromName, $header)
10 {
11 $this->fromEmail = $fromEmail;
12 $this->fromName = $fromName;
13 $this->header = "From: $fromName <$fromEmail>n".$header;
14 }
15
16 public function send($to, $subject, $message)
17 {
18 mail($to, $subject, $message, $this->header);
19 }
20 }
21
NICHT TESTBAR!
19. BEISPIEL EINER MÖGLICHEN IMPLEMENTIERUNG
KLASSE: NEWSLETTER
1 <?php
2
3 class Newsletter
4 {
5 private $mailer;
6
7 public function __construct()
8 {
9 $this->mailer = new Mailer('news@demo.de','Demo News','Reply-To: reply@demo.de');
10 }
11
12 public function send($recipients, $subject, $message){
13 foreach ($recipients as $to) {
14 $this->mailer->send($to, $subject, $message);
15 }
16 }
17 }
18
▸ Nicht testbar, erweiterbar und wiederverwendbar
▸ Kein Fehlerhandling & kaum Chancen Fehler zu finden
FAZIT:
DIREKTE
ABHÄNGIGKEIT
20. ENTWICKLUNG IM SYMFONY ENVIRONMENT
„THE SYMFONY WAY“
▸ Dependency Injection löst die Abhängigkeiten auf
▸ Kleine testgetriebene Klassen
▸ Config stellt einfache Konfiguration bereit
▸ Debug hilft beim Testen
▸ Framework integriert die Bibliothek SwiftMailer und stellt
umfangreiche Konfiguration zur Verfügung
21. KONFIGURATION DES SERVICE CONTAINERS MIT HILFE VON YAML
DEPENDENCY INJECTION KONFIGURATION
parameters:
mailer.transport: sendmail
services:
mailer: sendmail
class: Mailer
arguments: ['%mailer.transport%']
newsletter_manager:
class: NewsletterManager
calls:
- [setMailer‚ ['@mailer']]
22. BEISPIEL: UNIT-TEST FÜR NEWSLETTER-MANAGER
NEWSLETTER MANAGER TEST
1 <?php
2
3 namespace TestsDemo;
4
5 use DemoMailerInterface;
6 use DemoMessage;
7 use DemoNewsletterManager;
8
9 class NewsletterManagerTest extends PHPUnit_Framework_TestCase
10 {
11 public function testNewsletterManager()
12 {
13 $message = new Message('Test Betreff', 'Test-Inhalt Newsletter');
14 $mailer = $this->prophesize(MailerInterface::class);
15 $mailer->send('max@mustermann.de', $message)->shouldBeCalled();
16
17 $newsletterManager = new NewsletterManager();
18 $newsletterManager->setMailer($mailer->reveal());
19 $newsletterManager->sendMail(['max@mustermann.de'], $message);
20 }
21 }
22
STUB
24. SYMFONY ENVIRONMENT: DEPENDENCY INJECTION
VERWENDUNG DES NEWSLETTER-MANAGERS
▸ Im Controller oder Command kann nun der
NewsletterManager mit Hilfe der Dependency Injection
verwendet werden:
▸ Symfony liest die Konfiguration aus und erstellt den
NewsletterManager mit allen Abhängigkeiten
$newsletterManager = $this->get('newsletter_manager');
$newsletterManager->send($recipients, $message);
25. SYMFONY ENVIRONMENT: ERWEITERUNG
ZUSÄTZLICHE ANFORDERUNGEN
▸ Im Test- & Entwicklungssystem sollen keine E-Mails
versendet werden
▸ Einfache Konfiguration des Absenders
▸ Möglichkeit, über Gmail E-Mails zu versenden
▸ Bringt Symfony bereits alles mit
27. MODERNE WEBENTWICKLUNG
DANKE FÜR DIE AUFMERKSAMKEIT
▸ Sebastian Blum
sb@sblum.de
▸ Präsentation auf unserer Webseite
lj https://www.sblum.de/treffen
▸ Café an unserem Stand