Produkcja aplikacji internetowych

Post on 02-Dec-2014

399 views 0 download

description

O zagadnieniu: Czy następuje taki moment w życiu programisty, kiedy może on stwierdzić, że jego warsztat jest już doskonały? Nie, jeżeli pracuje w technologiach internetowych. Ta dziedzina informatyki rozwija się w niesamowicie szybkim tempie, a stworzone wczoraj rozwiązania warto stosować już dziś! Cel i korzyści spotkania: Podczas spotkania słuchacze poznają aktualnie wykorzystywane technologie oraz kluczowe umiejętności w produkcji aplikacji internetowych, jak również metody programowania ekstremalnego i techniki zwinnego wytwarzania oprogramowania. Osobom, które dopiero zaczynają swoją przygodę z web development, zostanie przedstawiona propozycja działań, których sumienne podjęcie się gwarantuje odniesienie sukcesu zawodowego.

Transcript of Produkcja aplikacji internetowych

Produkcja aplikacji internetowychwykorzystywane technologie

mgr inż. Tomasz Borowski, 2014-03-22 Cieszyn

mgr inż. Tomasz Borowski

edukacja: BWS im. Tyszkiewicza, Uniwersytet Jagielońskipraca: Selleo, tbprojectsdoświadczenie: w webdevelopmencie: 7 latprojekty w Php: ~15projekty Ruby: ~10projekty w JS: ~5technologie: Ruby on Rails, SQL, Sencha Touch,

Ember.js, Coffeescript, HAML, Rspec.

Kilka słów o wykładowcy

Szeroki wybór

aplikacje mobilne

sterowniki

sieci komputerowe

aplikacje desktopowe

aplikacje internetowe

symulacje

gry wideo

część 1: Aplikacje Internetowe

Dlaczego właśnie web development?

Mogę stworzyć własna stronę z recenzjami filmów! ;)

Dlaczego właśnie web development?

Jest duże zapotrzebowanie - mogę na tym zarobić!

Dlaczego właśnie web development?

Cały czas się zmieniają technologie,a ja mogę uczyć się nowych rzeczy!

Dlaczego właśnie web development?

Mogę poznać inspirujących ludzi i razem tworzyć open source’owe rozwiązania!

Dlaczego właśnie web development?

Wszystko zmierza do internetu...

Cechy dobrego web developera

Cechy dobrego web developera

Wszechstronność umiejętności

admin. serwera

kodowanie server-side

kodowanie client-side

stylowanie + ux

Full Stack Developer

Cechy dobrego web developera

Wszechstronność komunikacja

z współpracownikami

z klientem

pisemna i głosowa

ciągła i elastyczna

obsługa przypadków brzegowych

Cechy dobrego web developera

Profesjonalizm jakość rozwiązania

stabilność

intuicyjność

krótkie, zrozumiałe metody oraz klasy

Cechy dobrego web developera

Profesjonalizm jakość kodu

brak nadmiarowego kodu

testy automatyczne

Cechy dobrego web developera

Otwartość

dystans do swego kodu

chęć otrzymania konstruktywnej krytyki

chęć dawania konstruktywnej krytyki

Cechy dobrego web developera

Cierpliwość

dziel i zwyciężaj zadania

poznawanie rozwiązań wymaga czasu

porażki to część procesu uczenia się

Jak zacząć?

Jak zacząć?

Dać się czymś zainspirować i zacząć drążyć temat

czym jest grywalizacja?

jakie mogą być jej zastosowania?

jakie są istniejące rozwiązania?

jakich błędów nie popełniać?

Jak zacząć?

Wymyślić sobie konkretny projekt do realizacji

jak ma wyglądać?

jakie technologie chcę poznać?

jakie warunki ukończenia?

Jak zacząć?

Poświęcić swój czas i zacząć działać

ile godzin... dziennie?

kiedy gotowa pierwsza wersja?

a może potrzebuję pomocy?

Jak zacząć?

Zbierz konstruktywny feedback i udoskonalaj

czy kierunek jest dobry?

jakie zmiany są najważniejsze?

To działa!

Eksperyment

Grywalizacja bywa ciekawa i pożyteczna

Eksperyment

Grywalizacja pracy może rozwiązać problemy

Invoicing Module

TODO:

Some Task

Some Task

Backlog In Progress Done

Some Task

Some Task

Eksperyment

Chciałbym poznać nowe technologie

Eksperyment

Eksperyment

Jakie jest zdanie potencjalnych użytkowników

+150exp

+520exp

+330exp

+120exp

+480exp

+90exp

Eksperyment

Eksperyment

Opowiedzieć innym o zebranym doświadczeniu

część 2: Technologie Webowez punktu widzenia Ruby on Rails developera

Technology Stack

Back-endkod aplikacji, biblioteki, serwer aplikacji

Usługibaza danych, mailing, monitoring aplikacji

Front-endHTML, Javascript (biblioteki), CSS (stylowanie)

Front-endwybrane języki

HTML HyperText Markup Language

Hipertekstowy język znaczników,definiuje co ma być wyświetlane

<html>

<head>

<title>Awesome strona!</title>

</head>

<body>

<div class=”pink”> Strona o kucykach </div>

</body>

</html>

HAML HTML abstraction markup language

Hipertekstowy język znaczników,definiuje co ma być wyświetlane

%html

%head

%title Awesome strona!

%body

.pink Strona o kucykach

CSS Cascading Style Sheets

Kaskadowe arkusze stylów,definiuje jak ma być wyświetlane

div {

font-size: 14px;

font-color: black;

}

div.pink {

font- color: pink;

}

SASS Syntactically Awesome Stylesheets

Kaskadowe arkusze stylów,definiuje jak ma być wyświetlane

div

font-size: 14px

font-color: black

&.pink

font- color: pink

JavaScript

Skryptowy język programowania,definiuje jak ma się zachowywać

var Person;

Person = (function() {

function Person(name) {

this.name = name;

}

Person.prototype.sayHi = function() {

return alert("Hi, I am " + this.name);

};

return Person;

})();

CoffeeScript

Skryptowy język programowania,kompilowany do JavaScriptu

class Person

constructor: (name) ->

@name = name

sayHi: ->

alert "Hi, I am #{@name}"

Frond-endwybrane biblioteki i frameworki

jQuery

Biblioteka dla języka JavaScript

- manipulacje na drzewie DOM- obsługa wydarzeń- obsługa animacji- obsługa zapytań AJAX

jQuery('body').css('color', 'pink');

jQuery('div.pink').append('Awesome!');

Bootstrap

Framework CSS, JavaScript

- możliwość wykorzystania gotowych szablonów- responsywne stylowanie- komponenty HTML / JavaScript

EmberJS

Framework MVC Javascript

- budowa aplikacji jednostronicowych- zarządzanie danymi po stronie klienta- dynamiczne szablony Handlebars

Back-endwybrane języki

PHP PHP Hypertext Preprocessor

Skryptowy język programowaniaclass Person {

var $name;

function Person($name)

{

$this->name = $name;

}

function sayHi()

{

return 'Hi, I am '.$this->name;

}

}

Ruby

Skryptowy język programowaniaclass Person

def initialize(name)

@name = name

end

def say_hi

"Hi, I am #{@name}"

end

end

Python

Skryptowy język programowaniaclass Person:

def __init__(name):

self.name = name

def say_hi:

"Hi, I am %s" % self.name

Back-endwybrane frameworki

Frameworki MVCMVC to wzorzec architektoniczny służący do organizowania struktury aplikacji posiadających graficzne interfejsy użytkownika.

MVC zakłada podział aplikacji na trzy główne części:● Model: jest reprezentacją problemu bądź logiki aplikacji.

● Widok: opisuje, jak wyświetlić pewną część modelu w ramach interfejsu użytkownika.

● Kontroler: przyjmuje dane wejściowe od użytkownika i reaguje na jego poczynania, zarządzając aktualizacje modelu oraz odświeżenie widoków.

Wikipedia

Frameworki MVC

Frameworks

Ruby on Rails

Dlaczego

- mało konfigurowania, mało kodu- przyjemny w kodowaniu i czytaniu- łatwość w instalacji gemów (pakietów)- duże i bardzo aktywne community- wsparcie dla różnorodnych baz danych- szybkie prototypowanie dzięki generatorom kodu- ...

Ruby on Rails

Przykładowa aplikacja - otoTeamAplikacja Ruby on Rails do zapraszania znajomych na spotkania z wykorzystaniem kolejki zaproszeń.

Aplikacja jest tworzona podczas warsztatów Ruby on Rails organizowanych przez fundację Mikstura IT.

Repozytoriumhttps://github.com/miksturait/ototeam

Onlinehttp://ototeam-mikstura.herokuapp.com

Usługiwybrane aplikacje

Heroku

Hosting w platformie chmurowej

- darmowy dla prostych aplikacji- duża skalowalność- proste w instalacji dodatki- nie wymaga wiedzy z administracji serwerami

Amazon S3 Simple Storage Service

Hosting plików w chmurze

- darmowy do 1GB wychodzącego transferu miesięcznie- zarządzanie zezwoleniami- usługa niezbędna przy korzystaniu z Heroku

PostgreSQL

Relacyjna baza danych SQL

- darmowa (open source)- bardzo wydajna- możliwość definiowania funkcji i widoków- dodatkowe typy danych np. array, hstore

Mailgun

API do wysyłania i przekazywania maili

- darmowy do 10 000 maili miesięcznie- tracking wysyłanych maili- przekierowywanie maili

New Relic

Monitorowanie aplikacji

- analiza obciążenia serwera- analiza zapytań SQL- analiza ruchu w aplikacji- monitorowanie wydajności aplikacji

Narzędzia do developmentuwybrane aplikacje

Travis-CI

Wykonywanie testów na zdalnym serwerze

- testy uruchamiane przy każdej aktualizacji repozytorium- opcjonalne contiuous deployment- darmowe dla projektów open source

Code Climate

Analiza statyczna kodu

- detekcja powtórzeń kodu- detekcja skomplikowanych metod / klas- obliczanie pokrycia kodu testami- darmowa dla projektów open source

Gemnasium

Analiza wersji wykorzystywanych bibliotek

- powiadomienia o nowych wersjach bibliotek- ostrzeżenia przed dziurami bezpieczeństwa- listowanie zmian w danej bibliotece

część 3: Agilezwinne techniki wytwarzania oprogramowania

Samozarządzający się zespół

Po co nam Project Manager?

- odpowiedzialni ludzie, wszyscy są równi- każdy może komunikować się z klientem

Standup

15 minut dziennie na omówienie “taktyki”

- omówienie postępów z ostatnich 24h- detekcja problemów

Sprint

Bo milestone trwa zbyt długo

- krótkie iteracje (np. 2-tygodniowe), częste planowanie- specyfikacja długoterminowa nie ma sensu

Interakcja z klientem

Ciągła gotowość na zmiany

- klient jest źródłem informacji- feedback dostarczany regularnie- wspólne planowanie sprintów

Test Driven Development

Zanim zaimplementujesz, przetestuj

- kod powinien być automatycznie testowany- testy niezbędne podczas refaktoringu- testy “gwarantem” stabilności aplikacji

Pair Programming

Wspólne rozwiązywanie problemu - jedna osoba koduje, druga weryfikuje oraz wyznacza cel- dobra metoda dzielenia się wiedzą- programowanie z “kaczuszką”- częste zmiany roli

Code Review

Jakość kodu przede wszystkim - wzajemne analizowanie kodu- detekcja potencjalnych problemów- poznawanie ciekawych rozwiązań

Continuous Deployments

Częsta aktualizowanie aplikacji - jeśli wszystkie testy przechodzą, to automatyczny deploy- kilkanaście aktualizacji dziennie

repozytorium serwer integracyjny web serwer

push web hook deploy

nowy kod

Retrospektywy

Wyciągajmy wnioski i usprawniajmy - po każdy sprincie analiza “jak poszło”- detekcja problemów i propozycje rozwiązań

“Na ogół sprawa nie rozbija się o wpadki, o których tak lubią mówić różni spece, lecz o złe wykonanie. Proste jak drut: nie wystarczy wymyślić co i jak, trzeba jeszcze to zrobić, a raczej dopilnować, żeby inni zrobili”

Ram Charan (“Fortune”, 1999)

@TomaszBorowski

tomaszborowski.com

Dziękuję za uwagę