Programowanie w Ruby

Podobne dokumenty
Programowanie w Ruby

Programowanie w Ruby

Programowanie obiektowe

Programowanie w Ruby

Metaprogramowanie w Ruby

Programowanie w Ruby

Programowanie w Ruby

Programowanie w Ruby

Wywoływanie metod zdalnych

Programowanie obiektowe

Programowanie obiektowe

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wywoływanie metod zdalnych

Programowanie obiektowe w VB cz 2

Programowanie w Ruby

Programowanie obiektowe

Programowanie w Ruby

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Programowanie w Ruby

Programowanie w Ruby

Serwer SAMBA UDOSTĘPNIANIE UDZIAŁÓW SIECIOWYCH PIOTR KANIA

Programowanie obiektowe

Programowanie w Ruby

Programowanie w Ruby

Programowanie w Ruby

Aplikacje RMI

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Hosting WWW Bezpieczeństwo hostingu WWW. Dr Michał Tanaś (

Aplikacje RMI Lab4

Remote Method Invocation 17 listopada 2010

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do budowy systemów rozproszonych

NFS jest protokołem zdalnego wywoływania procedur (RPC)

Systemy Rozproszone Technologia ICE

Programowanie w Ruby

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Komunikator internetowy w C#

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

System operacyjny MACH

Programowanie obiektowe

Technologia Programowania 2016/2017 Wykład 4

W poprzednim odcinku poznaliśmy: W poprzednim odcinku, cd.: W dzisiejszym odcinku. Apache serwer WWW (część 2)

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie obiektowe

Ada-95. Dariusz Wawrzyniak

Apache serwer WWW (część 2) Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Programowanie Obiektowe i C++

Dokumentacja techniczna API systemu SimPay.pl

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wybrane działy Informatyki Stosowanej

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Wykład 2: Budowanie sieci lokalnych. A. Kisiel, Budowanie sieci lokalnych

Cele. Definiowanie wyzwalaczy

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Platformy Programistyczne Zagadnienia sieciowe i wątki

Zaawansowany kurs języka Python

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Wykład 4: Klasy i Metody

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Testowanie aplikacji. Kurs języka Ruby

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Administracja i programowanie pod Microsoft SQL Server 2000

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

Bezpieczeństwo systemów informatycznych

Kurs WWW. Paweł Rajba.

Serwery Statefull i Stateless

Programowanie w Ruby

EPI: Interfejs Graficzny 2011/2012 Laboratorium nr 2 Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

Administracja i programowanie pod Microsoft SQL Server 2000

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE

Kurs języka Python. Wątki

MONITOROWANIE WINDOWS Z NETCRUNCHEM 7 P A G E 1

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

Programowanie Komputerów

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

DBPLUS Data Replicator Subtitle dla Microsoft SQL Server. dbplus.tech

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

Konfiguracja serwera OPC/DDE KEPSServerEX oraz środowiska Wonderware InTouch jako klienta DDE do wymiany danych

Wstęp. Ale po co? Implementacja

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Należy ściągnąć oprogramowanie Apache na platformę

Architektura środowiska rozproszonego. Środowisko komunikacyjne Oracle*Net. Weryfikacja instalacji protokołu u sieciowego

Zaawansowane programowanie obiektowe - wykład 5

Programowanie komponentowe 5

Programowanie Obiektowe i C++

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Wykład 8: klasy cz. 4

Programowanie Systemów Wbudowanych

Transkrypt:

Programowanie w Ruby Wykład 7 Marcin Młotkowski 26 listopada 2018

Plan wykładu 1 2 3 Marcin Młotkowski Programowanie w Ruby 199 / 436

Refleksje (introspekcje) Przegląd zaimplementowanych metod Przegląd stanu obiektu I inne... Marcin Młotkowski Programowanie w Ruby 200 / 436

Analiza stanu obiektu Metoda inspect [ 1, 2, 3..4, five ].inspect Marcin Młotkowski Programowanie w Ruby 201 / 436

Analiza stanu obiektu Metoda inspect [ 1, 2, 3..4, five ].inspect wynik [1, 2, 3..4, \ five\ ] Marcin Młotkowski Programowanie w Ruby 201 / 436

Zmienne obiektu class Klasa def initialize @a = 1; @b = 2 end end Marcin Młotkowski Programowanie w Ruby 202 / 436

Zmienne obiektu class Klasa def initialize @a = 1; @b = 2 end end Klasa.new.instance variables Wynik [ @a, @b ] Marcin Młotkowski Programowanie w Ruby 202 / 436

Metody obiektu 3.14.methods Marcin Młotkowski Programowanie w Ruby 203 / 436

Metody obiektu 3.14.methods [ %, inspect, singleton method added, clone, round, method, public methods, instance variable defined?, divmod, nan?, equal?, freeze, integer?, *, +, to i, methods, respond to?, -,... untaint, is a? ] Marcin Młotkowski Programowanie w Ruby 203 / 436

Przykład zastosowania Zrzut stanu programu zrzut stanu wszystkich obiektów dane są prezentowane w formie stringu ze znacznikami html Marcin Młotkowski Programowanie w Ruby 204 / 436

Specyfikacja zadania Każdy obiekt powinien mieć metodę to html, która zwraca stan obiektu w formie html Jeśli obiekt nie ma własnej metody to korzystamy z metody to s Marcin Młotkowski Programowanie w Ruby 205 / 436

Implementacja html = <html><body> ObjectSpace.each object(object) do o if o.respond to?( to html ) html += o.to html else html += <div> + o.to s + </div> end end Marcin Młotkowski Programowanie w Ruby 206 / 436

Plan wykładu 1 2 3 Marcin Młotkowski Programowanie w Ruby 207 / 436

hostom Potrzebny jest serwer, który będzie działał na ustalonym porcie, np. 9000 Klient powinien znać adres serwera i port Marcin Młotkowski Programowanie w Ruby 208 / 436

Zadanie serwera Serwer logów Implementacja metody save(str), która zapisuje str w pliku; nazwa pliku powinna odzwierciedlać czas Marcin Młotkowski Programowanie w Ruby 209 / 436

Zadanie serwera Serwer logów Implementacja metody save(str), która zapisuje str w pliku; nazwa pliku powinna odzwierciedlać czas Rozwiązanie Drb: Distributed Ruby, distributed object system Marcin Młotkowski Programowanie w Ruby 209 / 436

Implementacja: serwer drb require drb class LogSerwer def save(str) fn = Time.new.to s open(fn, w ) { f f << str } end def LogSerwer.Run @@server = LogSerwer.new DRb.start service( druby://localhost:9000, @@server) DRb.thread.join end end Marcin Młotkowski Programowanie w Ruby 210 / 436

Uruchomienie serwera LogSerwer.run Marcin Młotkowski Programowanie w Ruby 211 / 436

Implementacja klienta obj = DRbObject.new with uri( druby://localhost:9000 ) if obj.respond to?( save ) obj.save(html) end Marcin Młotkowski Programowanie w Ruby 212 / 436

A jak ktoś nam zrobi kawał def save(str) system(str) end Marcin Młotkowski Programowanie w Ruby 213 / 436

A jak ktoś nam zrobi kawał def save(str) system(str) end obj.save( rm -rf * ) Marcin Młotkowski Programowanie w Ruby 213 / 436

System bezpieczeństwa Podział obiektów w Ruby: Obiekty zaufane Obiekty niezaufane: pochodzące z sieci, plików etc. Marcin Młotkowski Programowanie w Ruby 214 / 436

Kontrola zaufania Object#tainted? sprawdzenie czy obiekt jest zaufany Object#taint ustawienie obiektu na niezaufany Object#untaint usunięcie braku zaufanie z obiektu (nie zawsze działa) Marcin Młotkowski Programowanie w Ruby 215 / 436

Poziomy zabezpieczeń Wartości zmiennej $SAFE 0 brak kontroli (domyślne) 1 m.in. zabrania wywoływań eval dla niepewnych stringów 2 m.in. nie można usuwać i tworzyć katalogów oraz wykonywać pewnych operacji z modułu Kernel 3 nie można wywołać untain 4 nie można modyfikować bezpiecznych obiektów Marcin Młotkowski Programowanie w Ruby 216 / 436

Problemy Można obejść mechanizm zabezpieczeń, więc nie należy używać w środowiskach niezaufanych. Marcin Młotkowski Programowanie w Ruby 217 / 436

Zabezpieczenie Użycie ACL (Access Control Lists) Klasa ACL list = %w[ deny all allow 192.168.1.1 allow ::ffff:192.168.1.2 allow 192.168.1.3 ] acl = ACL.new(list, ACL::DENY_ALLOW) Marcin Młotkowski Programowanie w Ruby 218 / 436

Zabezpieczenie Użycie ACL (Access Control Lists) Klasa ACL list = %w[ deny all allow 192.168.1.1 allow ::ffff:192.168.1.2 allow 192.168.1.3 ] acl = ACL.new(list, ACL::DENY_ALLOW) DRb.install acl(acl) Marcin Młotkowski Programowanie w Ruby 218 / 436

Plan wykładu 1 2 3 Marcin Młotkowski Programowanie w Ruby 219 / 436

Systemowe punkty zaczepienia Procedury uruchamiane przy okazji wywołania wybranej funkcji czy metody Marcin Młotkowski Programowanie w Ruby 220 / 436

Systemowe punkty zaczepienia Procedury uruchamiane przy okazji wywołania wybranej funkcji czy metody Przykład punktu zaczepienia Jakie są wywoływane polecenia systemowe (rm, ls, mkdir etc.) podczas biegu programu? Marcin Młotkowski Programowanie w Ruby 220 / 436

Realizacja Polecenia systemowe są wywoływane funkcją Kernel.system Zamiast funkcji Kernel.system wstawimy własną funkcję Marcin Młotkowski Programowanie w Ruby 221 / 436

Implementacja module Kernel alias method :old system, :system def system(*args) puts system(#{args.join(, )}) old system(args) end end Marcin Młotkowski Programowanie w Ruby 222 / 436

Inspekcja biegu programu caller zwraca stos wywołań w postaci tablicy set func proc pozwala na wywołanie bloku dla każdej instrukcji global variables tablica nazw zmiennych globalnych local variables Marcin Młotkowski Programowanie w Ruby 223 / 436

Śledzenie zmian zmiennych trace var(symbol, blok) śledzi przypisywanie wartości zmiennej untrace var(symbol) usunięcie śledzenia zmiennej Marcin Młotkowski Programowanie w Ruby 224 / 436

Debugger ruby -r debugger plik.rb Marcin Młotkowski Programowanie w Ruby 225 / 436