Framework 2 oraz Scala Bartosz Jankiewicz Credit Suisse _ _ _ __ | | __ _ _ _| | | '_ \| |/ _' | || |_| | __/|_|\____|\__.

Slides:



Advertisements
Podobne prezentacje
Java Data Objects.
Advertisements

Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Java Server Faces Tomasz Nowak.
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
ALLEGRO PIERWSZA GRA: WYŚCIG
C++ w Objectivity Marcin Michalak s1744. Pomocne pakiety: Data Definition Language (DDL). Standard Template Library (STL). Active Schema.
YOUTH in Gdynia. YOUTH: step 1 – Recruitment (December 2007) Szkoła Podstawowa nr 21 Szkoła Podstawowa nr 6 Szkoła Podstawowa nr 12 Gimnazjum nr 15 Towarzystwo.
Software Engineering 0. Information on the Course Leszek J Chmielewski Faculty of Applied Informatics and Mathematics (WZIM) Warsaw University of Life.
Projekt przygotowany przez uczniów:
STL - Standard Template Library Autor: Błażej Chodarcewicz rainbow.mimuw.edu.pl/~bc189380/STL/
Strona Bierna.
GUI Struktury Spotkanie integracyjne Nazwa wydziału: EAIiE Nazwa katedry: Informatyka Miejsce i data prezentacji: Kraków,
Mirosław Ochodek Sponsorzy: JFace Jak jeszcze szybciej tworzyć interfejsy? ECESIS Eclipse Community Education Project An.
Eclipse jako IDE III a.
Team Building Copyright, 2003 © Jerzy R. Nawrocki Requirements Engineering Lecture.
Dzielenie relacyjne / Relational Division
Metody autoryzacji użytkowników wymaga integracji z systemem operacyjnym nie wymaga logowania mała pewność mechanizmu wymaga logowania duża pewność mechanizmu.
Łukasz Monkiewicz.
142 JAVA – sterowanie i wątki public class A20 extends javax.swing.JApplet implements ActionListener { private int licznik = 0; private JTextField t =
„Tworzenie aplikacji sieciowych w języku Java”
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Networking Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Threads Prezentacja.
MS SQL SERVER udział w rynku. Source: Gartner Dataquest (May 2006) Company Market Share (%) Market Share (%) Growth (%) Oracle6, ,
MS ASP.NET 2005/2006
1 Building Integration System - Training Internal | ST-IST/PRM1 | 02/2008 | © Robert Bosch GmbH All rights reserved, also regarding any disposal,
Wstępna struktura serwisu internetowego BTW events wersja 1.0 Warszawa,
More Secure and Dependable 1.User Account Protection, more secure boot, anti-spyware and anti-phishing 2.Restart Manager (fewer reboots) 3.Instant-on.
Tadeusz Janasiewicz IT Group, Tadeusz Janasiewicz, WSUS, IT Group, r.
Najpopularniejsze aplikacje ASP.NET i PHP.
SQL i internet PHP i MySQL. Programy MySQL: serverMySQL: server WWW serverWWW server Interpreter PHPInterpreter PHP Przeglądarka stron wwwPrzeglądarka.
Rozproszone transakcje z wykorzystaniem usługi Service Broker w SQL Server 2008 R2 Andrzej Ptasznik.
Piotr Nowak Development Manager Construction Innovation and Development Department The Chartered Institute of Building.
Download the latest version at This message wont show up when youre presenting Windows Phone 7.
Dr inż. Piotr Czapiewski. Overloading Znaczenie inne niż w większości języków obiektowych Metoda dynamicznego tworzenia pól i metod Magiczne metody.
PRZELICZNIK DŁUGOŚCI w programie NetBeans IDE autorzy: Michał Mrozek i Marcin Mrugała 2012.
Krzysztof Manuszewski
Theory of Computer Science - Basic information
Zarządzanie magazynem danych - Storage Spaces w Windows Server 2012 oraz w Windows 8 Błażej Miśkiewicz MCTMCP MCSA MCTS MCITP.
Damian Wojdan Kraków,
Zasoby elektroniczne w cyklu akademickim Biblioteka w kryzysie czy kryzys w bibliotece Łódź 2010.
Click to show the screen.
db4o Kacper Skory Marcin Talarek
Przygotował: Adrian Walkowiak
Czyli jak zrobić prezentację komputerową?
PIO. Autor -Zofia Kruczkiewicz1 Wykład 1-część druga Wstęp do inżynierii oprogramowania. Cykle rozwoju oprogramowania (część biznesowa aplikacji) iteracyjno-rozwojowy.
Prezentacja z przedmiotu „systemy wizyjne”
ST/PRM2-EU | April 2013 | © Robert Bosch GmbH All rights reserved, also regarding any disposal, exploitation, reproduction, editing, distribution,
Zend Framework Framework php Antonczak Lukasz. Dlaczego Zend Framework Zend Framework jest frameworkiem dla PHP5 rozwijanym przez społeczność użytkowników.
Podstawy licencjonowania Exchange, SharePoint oraz Lync.
Technologie tworzenia aplikacji internetowych
System Center Summit Poland Sponsorzy Złoty Sponsor Srebrni Sponsorzy.
Automatyzacja testów akceptacyjnych
Instalacja serwera WWW na komputerze lokalnym
J AK ZACZĄĆ PRACĘ Z ?. przed rejestracją Upewnij się, że posiadasz: aktywne konto zainstalowaną przeglądarkę Internet Explorer indywidualny studencki.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
KINECT – czyli z czym to się je?. Damian Zawada
BEZPIECZNY INTERNET. PRZEGLĄDANIE STRON INTERNETOWYCH.
PolGIS jako nowoczesny system do paszportyzacji sieci
Temat 5: Elementy meta.
Temat 4: Znaki diakrytyczne i definiowanie języka dokumentu
Grails - Reusable functionalities Jak zrobić dobre wrażenie Not Yet Another Conference Kraków,
Rozdział 3: Bezpieczeństwo w sieci opartej na systemie Windows 2000.
Cataloguing, retrieving and translating scholarly texts in English Semestr letni 2013/2014 Dr Monika Krakowska.
Erlang Web Scalable & Reliable web framework ErlLounge, Kraków Lipiec 2009 (wersja rozszerzona dla czytelników off-line;))
TROCHĘ HISTORII Marek Zając PO CO UŻYWAĆ OPENCL? Marek Zając.
1.
Piotr Czapiewski Wydział Informatyki ZUT.  Extensible Markup Language  Język znaczników  Human-readable and machine-readable  Niezależny od platformy.
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6.
Connecticut Core Standards for English Language Arts & Literacy
Zapis prezentacji:

Framework 2 oraz Scala Bartosz Jankiewicz Credit Suisse _ _ _ __ | | __ _ _ _| | | '_ \| |/ _' | || |_| | __/|_|\____|\__ (_) |_| |__/

Bartosz Jankiewicz Leader zespołu w Credit Suisse pracującegonad bazą danych marketingowych (MDS) Pasjonat języka Scala oraz Java Pracowałem także nad silnikiem gier społecznościowych w Picadilla oraz nad aplikacjami dla reklamy internetowej

Credit Suisse Od 2007 obecni w Polsce Od 2011 roku budujemy IT w Polsce Na placu Grunwaldzkim pracuje już prawie 300 programistów, a na całym świecie prawie 10tys. Tworzymy systemy na wewnętrzne potrzeby banku w używając.net, Java, C++ We Wrocławiu zatrudniamy już ponad 1700 osób

Play framework zasypuje przepaść między technologią JVM a językami skryptowymi w obszarze łatwości i szybkości wdrożenia. Jednocześnie dostarcza mechanizmy silnego typowania wykorzystując języki Java oraz Scala.

Jak? Architektura Play Framework o Powrót do źródeł o Bezstanowość o Przeładowywanie kodu o URL powinien być prosty o Dobrze jest wiedzieć co nie działa o Narzędzia Jak? Najlepiej pokazać!

Przeglądarka

Bezstanowość Nie ma sesji Działa przycisk Back Działa przycisk Reload Stan jest tam, gdzie to jest naturalne, czyli klient, cache, Cookie, baza danych

Co zyskujemy? URL jest tym, czego się spodziewamy Naturalne rozwiązanie dla architektury WEB Łatwość skalowania poziomego Prosta architektura całego rozwiązania

Piszesz i widzisz Bolączką frameworków J2EE jest procedura deploymentu na serwerze aplikacji Każda zmiana jest widoczna po przeładowaniu strony Prekompilacja wszystkich źródeł łącznie z szablonami HTML Informacje o błędach

URL jest ważny! To centralna część architektury HTTP Warto, aby był czytelny Zintegrowany z architekturą aplikacji

A jak coś nie działa?

Narzędzia Java JDK 1.6+ Ulubione IDE lub edytor tekstu. Polecam: o Eclipse + Scala-IDE Darmowe i dojżałe środowisko dla Scala + Działający debugger o IntelliJ Idea Bardzo dobre wsparcie dla Scala + Integracja z Play Framework + Inteligentne uzupełnianie kodu - wsparcie frameworka Play tylko w wersji Ultimate

Pierwsza aplikacja # play new play-with-scala > 1 scala module # cd play-with-scala [play-with-play] $ eclipse with-sources=true [play-with-play] $ run

Struktura katalogów app Application sources assets Compiled asset sources stylesheets Typically LESS CSS sources javascripts Typically CoffeeScript sources controllers Application controllers models Application business layer views Templates conf Configurations files and other non-compiled resources (on classpath) application.conf Main configuration file routes Routes definitionpublic Public assets stylesheets CSS files javascripts Javascript files images Image files project sbt configuration files build.properties Marker for sbt project Build.scala Application build script plugins.sbt sbt plugins lib Unmanaged libraries dependencies logs Standard logs folder application.log Default log file target Generated stuff scala cache classes Compiled class files classes_managed Managed class files (templates,...) resource_managed Managed resources (less,...) src_managed Generated sources (templates,...) test source folder for unit or functional tests

Konsola # play [play-with-play] $ help [play-with-play] $ console [play-with-play] $ compile [play-with-play] $ run [play-with-play] $ test

Pierwszy kontroler GET/course controllers.CourseController.index GET/course/enroll/:idcontrollers.CourseController.startEnroll(id: Int) PUT/course/enrollcontrollers.CourseController.saveEnroll

object LectureController extends Controller { def index = Action { Logger.info("Lista wykładów") Ok(views.html.lecture.list( Lecture.listAll )) } }

@lectures.map { } } Szablon

/conf/application.conf application.langs="en,en-US,fr" /conf/messages.localeeg. /conf/messages.pl play.api.Messages.apply(key: String, args: Any*)(implicit lang: Lang): Wielojęzyczność

Formularze val form: Form[Participant] = Form ( mapping( "name" -> text, "lectureId" -> number )(Participant.apply)(Participant.unapply) )

Walidacja val form: Form[Participant] = Form ( mapping( "name" -> nonEmptyText, "lectureId" -> number.verif )(Participant.apply)(Participant.unapply) )

Odczyt z formularza def fold[R]( hasErrors: Form[T] => R, success: T => R): R = value.map( success(_) ).getOrElse(hasErrors(this))

def saveEnroll(id: Int) = Action { implicit request => form.bindFromRequest.fold( errors => BadRequest(views.html.lecture.enroll( errors, Lecture.findById(id) )), succcess => Redirect(routes.LectureController.index)) }

Flash def saveEnroll(id: Int) = Action { implicit request => form.bindFromRequest.fold( errors => BadRequest(views.html.lecture.enroll( errors, Lecture.findById(id) )), succcess => Redirect(routes.LectureController.index).flashing( "message" -> "Nie zapomnij przyjść") ) }

Zapiszmy coś do bazy danych /conf/application.conf db.default.driver=org.h2.Driver db.default.url="jdbc:h2:mem:play"

Inicjalizowanie bazy danych /conf/evolutions/default/1.sql # Lectures schema # --- !Ups CREATE TABLE participant ( name varchar(255), varchar(255), lecture_id int ); # --- !Downs DROP TABLE participant;

Mapowanie wierszy // ~parser def simple: RowParser[Participant] = { str("participant.name") ~ str("participant. ") ~ int("participant.lecture_id") map { case name ~ ~ lectureId => Participant(name, , lectureId) }

Operacja zapisu def save(participant: Participant) { val sql = "insert into participant(name, , lecture_id) values({name}, { }, {lectureId})" Logger("sql").debug(sql) DB.withConnection( implicit connection => SQL(sql).on( 'name -> participant.name, ' -> participant. , 'lectureId -> participant.lectureId ).executeInsert() ) }

Odczyt z bazy def allParticipants( lectureId: Int) = { val sql = "select * from participant where lecture_id = {lectureId}" Logger("sql").debug(sql) DB.withConnection(implicit connection => SQL(sql).on('lectureId -> lectureId).as(simple *) ) } // simple * == ResultSetParser.list(simple) // Also: // simple.singleOpt - single optional result // simple.single - expected single result

Istotne adresy n/2.0/ProductionHeroku n/2.0/ProductionHeroku n/2.1.0/ScalaHome n/2.1.0/ScalaHome

Dziękuję i dobranoc!