Aplikacje webowe z wykorzystaniem. Scala i Lift. Opracował: Mikołaj Sochacki



Podobne dokumenty
Scala - programowanie obiektowo-funkcyjne

Programowanie obiektowe

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Język programowania Scala + aktorzy Akka

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Ruby on Rails. Supersilnik WWW. Łukasz Włodarczyk

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Java jako język programowania

WICKET VS. DJANGO. Leszek Gawron vs. Michał Leszczyński

Ruby i Ruby on Rails. Mateusz Drożdżyński

Scala. Obiektowo-funkcyjny język programowania. Zbyszek Skowron

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Java w Internecie - czy to ma sens? ;)

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

JAX-RS czyli REST w Javie. Adam Kędziora

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Programowanie obiektowe

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Scala. Wprowadzenie do języka.

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Porównanie zrębów : Ruby on Rails i Lift

Szczegółowy opis zamówienia:

Co jeszcze mogą nam dać adnotacje? Adam Warski

PRZEWODNIK PO PRZEDMIOCIE

Internetowa ogólnopolska baza informatycznych projektów badawczych otwartej innowacji Platforma współpracy SPINACZ 1/46

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Wykład 0 Informacje Podstawowe

Czym jest Ruby on Rails?

Django : praktyczne tworzenie aplikacji sieciowych / Antonio Mele. Gliwice, cop Spis treści

Słowa kluczowe jak góry lodowe

Programowanie obiektowe - 1.

Programowanie w Javie 2. Płock, 26 luty 2014 r.

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

Flex 3. Piotr Strzelczyk Wydział EAIiE Katedra Automatyki. Kraków, 2008

Aplikacje Internetowe, Servlety, JSP i JDBC

Programowanie obiektowe zastosowanie języka Java SE

Imię, nazwisko i tytuł/stopień KOORDYNATORA (-ÓW) kursu/przedmiotu zatwierdzającego protokoły w systemie USOS Dr Adam Naumowicz

Programowanie Komponentowe WebAPI

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie obiektowe Object programming. Elektrotechnika II stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny)

Zrąb Grails. Bartosz Bekier

IT Camp Junior Java Developer. Cel kursu

Google Web Toolkit Michał Węgorek ZPO 2009

Jak okiełznać frontend w Django? Piotr Maliński

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

EPI: Interfejs Graficzny Wykład nr 4 Podstawy frameworku Rails

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Program szkolenia: Tworzenie aplikacji w Ruby on Rails z wykorzystaniem zwinnych metodyk

Dziedziczenie. dr Jarosław Skaruz

Wprowadzenie do narzędzia MAVEN

OpenLaszlo. OpenLaszlo

Środowisko NetBeans. Paweł Boguszewski

Multimedia JAVA. Historia

Technologia Programowania 2016/2017 Wykład 4

Programowanie MorphX Ax

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

KARTA PRZEDMIOTU. Warsztaty z Ruby on Rails. Ruby on Rails Workshop

Programowanie obiektowe

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

JavaScript - korzenie

Definicja. Not Only SQL

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Programowanie RAD Delphi

REACT NATIVE. Anna Maziejuk Kamil Jankowski

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Grails. v 1.1 Web Framework

Język Java i technologie Web - opis przedmiotu

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

CouchDB. Michał Nowikowski

Program szkolenia: REST i Microservices w PHP

Klasy abstrakcyjne, interfejsy i polimorfizm

Javadoc. Piotr Dąbrowiecki Sławomir Pawlewicz Alan Pilawa Joanna Sobczyk Alina Strachocka

Klasy abstrakcyjne i interfejsy

Tworzenie oprogramowania

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Programowanie poprzez testy z wykorzystaniem JUnit

Java EE produkcja oprogramowania

Programowanie obiektowe

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie internetowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Transkrypt:

Aplikacje webowe z wykorzystaniem Scala i Lift Opracował: Mikołaj Sochacki

Jaki język będzie dla mnie najlepszy? Dynamiczny + szybkość pisania + krótki czas potrzebny na opanowanie - więcej pisania testów - więcej trudnych do wykrycia błędów - trudniej znaleźć typ parametru Statyczny + dużo błędów wyłapywanych na etapie kompilacji + mniej pisania testów - czas oczekiwania na kompilację - wolniejsze tworzenie kodu

Ewolucja C++ Perl C# fajny język, ale brak wygodnego frameworka do tworzenia stron internetowych (Wt?) słaba czytelność kodu zamknięta technologia (.NET), słabe Mono Python co przyjmuje parametr funkcji? brak znaku końca zakresu, mała szybkość działania programu Scala

Dlaczego Scala? w pełni obiektowy imperatywno funkcyjny ładna składnia inferencja typów przeładowanie operatorów - jakich operatorów? ;) bezpośredni dostęp do bibliotek i technologii Java bez użycia ubogiego języka Java możliwość pisania dla.net interpreter pythono-podobny inne: DSL, XML, skalowalność

Martin Odersky główny projektant Scali profesor EPFL w Lozanie - obecnie główny projektant generics w Java inżynier JVM i kompilatora w Sun Microsystems twórca języka Pizza pierwowzoru Scala

Obiekty Wszystko (oprócz metod) jest obiektem: 3.toString Metody mogą mieć prawie dowolne nazwy, nie ma pojęcia operatora: (1).+(2) // w skrócie 1 + 2 Nie ma pól statycznych w zamian wykorzystuje się wzorzec Singleton każda klasa może mieć obiekt o tej samej nazwie będący singletonem: obiect MyClass { def witaj = "Witaj Scala } MyClass.witaj

Obiekty - c.d. Funkcje anonimowe jako obiekty: val myfunct = (x:int,y:int) => x*y myfunct(34,64) Dziedziczenie jednobazowe, ale można użyć traits: class MyClass extends Parent with MyTrait Przy nadpisaniu metod w dziecku obowiązkowe override override def tostring = "Nic Generics wygodna składnia, możliwość definiowania własnych szablonów: case class myclass[a](var in:a)

Funkcyjnie czy imperatywnie? Funkcyjnie: (1 to 10).foreach(println) Imperatywnie: for (i <- 1 to 10) println(i) Zazwyczaj i tak uzyskujemy ten sam bytecode Używanie niezmiennych referencji (immutable): val i = 255 //niezmienna referencja var j = 255 //zmienna referencja Ważna rola wbudowanych kolekcji val list = List('h','e','l','l','o') val list2 = list.map(x => x.tobyte)

Biblioteki Java Pełen dostęp do bibliotek napisanych w Java: import java.io._ val in = new BufferedReader( new FileReader("plik.txt")) val s = in.read() Korzystanie z kodu Scali w Javie tylko pod warunkiem nie używania specyficznych własności języka: def ++(list:list[string]):list[string] = {... } //nie da rady :) Specyficzne nazwy klas i funkcji w kodzie Java: object App == public static final class App$

Syntactic sugar lazy valuses: lazy val x = {println("inicjacja ); Napis } tuples: val pair = (19, Napis ) funkcje anonimowe: (s:string) => s.split(",") wzorce: match, try catch: val s = x match { case 12 => "Jest dwanaście" case x:int => "Jest " + x.tostring } domknięcia partially applied function tail recursion parametry domyślne i wiele innych...

Praca z XML węzeł jako wartość: val link = "http://brosbit4u.net def toxml = <a href={link}>kliknij link</a> prosta serializacja (j.w.) wyciąganie informacji z XML: val xml = <wezel atr="wartosc"> <wewn>text </wewn> </wezel> val str = xml \ @atr //daje "wartosc" val w = xml \ "wewn" //daje <wewn>text</wewn> val t = w.text //daje "Text" <a><b><c>a</c><b></a> \\ "c" //daje <c>a</c> prosta deserializacja (j.w.)

Actors - wątki wykorzystanie modelu aktorów z Erlanga val echoaktor = actor { loop { react { case msg => println("otrzymałem: " + msg) } } } echoaktor! "Witaj!" brak współdzielenia danych wysyłamy tylko stałe nie ma zakleszczeń zawsze można korzystać bezpośrednio z wątków Java :)

Scala frameworki webowe Lift wzorowany na Wicket, Django, Rails, Seaside SweetScala wzorowany nieco na GAE i Django Scalatra - wzorowany na Sinatra Pinky wykorzystuje Guice Servlet wszystkie frameworki Javy

David Pollack programuje zawodowo od 1977 roku od 1996 roku zajmuje się prawie wyłącznie programowaniem webowym przez wiele lat używał Ruby on Rails fan i propagator języka Scala w 2007 roku rozpoczął pracę nad Liftem (nazwa robocza Scala with Sails)

Manifest Lifta prosty i szybki CRUD oraz użycie MVC ORM bez konieczności użycia SQL wbudowany AJAX i Comet komponenty utrzymywanie komponentów w pamięci bezpieczeństwo wielowątkowość zintegrowany framework do testów łatwe wdrożenie i uaktualnienie aplikacji

Szablony i snippety szablon: <lift:surround with="default" at="content"> <lift:nazwasnippetu.metoda form= POST > <h1>kod xhtml</h1> <znacznik:znacznik2 /> </lift:surround> snippet: class NazwaSnippetu { def metoda(node:nodeseq):nodeseq = { var str = "" bind( node, "znacznik, Shtml.text(str = _),atrbut -> "atr" ) } cechy: wielokrotne przetwarzanie XML, kod AJAX w bind, views, embed, tagi i snippety Comet, stacjonarne snippety

ORM mapper dla baz SQL record dla baz NoSQL (docelowo podstawowy model) dodatkowy kod przetwarzania w obiektach modelu konfiguracja bazy w klasie konfiguracyjnej aplikacji ProtoUser trait obsługa użytkownika operacje na bazie bez SQL dodatkowe typy danych jak adres e-mail itp. równoczesna obsługa wielu baz danych

Technologie elementy formatek wbudowane w obiekty frameworka LiftActor obsługa wątków (głównie Comet) użycie ścisłego XHTML i możliwość zmiany na HTML5 bogaty system zarządzania URL zarządzanie sesją hierarchiczny system uwierzytelniania skrypty JS pisane klasami Lifta, obsługa JSON proste i szybkie budowanie aplikacji z Comet możliwość integracji z JPA integracja usługami: PayPal, XMPP, Facebook, AMQP, OpenID widgety

Wdrożenie edytory: Eclipse, NetBeans, IntelliJ IDEA, inne (tylko podświetlanie składni) kompilacja: Maven, Ant, SBT, Gradle (dla Mavena polecenie deploy) testowanie: konsola (mvn, sbt), scalatest, S.notice serwer: Tomcat, Jetty, Glassfish, Jboss (najczęściej stosowany Tomcat + Nginx) hosting: Amazon.com (stax.net), GAE (tylko JPA), każdy obsługujący wymienione serwery, dedyk, własny serwer :)

Podsumowanie ZALETY: wygoda i szybkość pisania i duże możliwości (+Scala) szybkość i wydajność aplikacji (nie ma konieczności łączenia z C/C++) bogactwo narzędzi i bibliotek Java bezpieczeństwo aplikacji zastosowanie dla instytucji finansowych WADY: mniejsza ilość źródeł wiedzy (młody framework) słaby hosting w Polsce problemy z narzędziami (np wtyczka Eclipse choroby wieku dziecięcego :) )

Linki Oficjalna strona Scali: http://www.scala-lang.org/ Oficjalna strona Lift: http://www.liftweb.net/ Wiki: http://scalatutorial.com/ http://scala.sygneca.com/ http://www.simplyscala.com/ - interpreter http://www.assembla.com/wiki/show/liftweb/

Dziękuję za uwagę! def Pytania_?(s:String):String