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

Programowanie w Ruby

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

Programowanie obiektowe

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

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#

Serwery Statefull i Stateless

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

Wykład 8: klasy cz. 4

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

Wykład 4: Klasy i Metody

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

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.

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.

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

Programowanie Komputerów

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ę

Zaawansowane programowanie obiektowe - wykład 5

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

Programowanie komponentowe 5

Programowanie Obiektowe i C++

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

Programowanie Systemów Wbudowanych

Transkrypt:

Programowanie w Ruby Wykład 7 Marcin Młotkowski 2 grudnia 2016

Plan wykładu Jak zajrzeć do środka 1 Jak zajrzeć do środka 2 3 Marcin Młotkowski Programowanie w Ruby 2 / 28

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

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

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

Zmienne obiektu Jak zajrzeć do środka class Klasa def initialize @a = 1; @b = 2 end end Marcin Młotkowski Programowanie w Ruby 5 / 28

Zmienne obiektu Jak zajrzeć do środka class Klasa def initialize @a = 1; @b = 2 end end Klasa.new.instance variables Wynik [ @a, @b ] Marcin Młotkowski Programowanie w Ruby 5 / 28

Metody obiektu Jak zajrzeć do środka 3.14.methods Marcin Młotkowski Programowanie w Ruby 6 / 28

Metody obiektu Jak zajrzeć do środka 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 6 / 28

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 7 / 28

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 8 / 28

Implementacja Jak zajrzeć do środka 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 9 / 28

Plan wykładu Jak zajrzeć do środka 1 Jak zajrzeć do środka 2 3 Marcin Młotkowski Programowanie w Ruby 10 / 28

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 11 / 28

Zadanie serwera Jak zajrzeć do środka Serwer logów Implementacja metody save(str), która zapisuje str w pliku; nazwa pliku powinna odzwierciedlać czas Marcin Młotkowski Programowanie w Ruby 12 / 28

Zadanie serwera Jak zajrzeć do środka 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 12 / 28

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 13 / 28

Uruchomienie serwera LogSerwer.run Marcin Młotkowski Programowanie w Ruby 14 / 28

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 15 / 28

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

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

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 17 / 28

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 18 / 28

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 19 / 28

Problemy Jak zajrzeć do środka Można obejść mechanizm zabezpieczeń, więc nie należy używać w środowiskach niezaufanych. Marcin Młotkowski Programowanie w Ruby 20 / 28

Zabezpieczenie Jak zajrzeć do środka 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 21 / 28

Zabezpieczenie Jak zajrzeć do środka 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 21 / 28

Plan wykładu Jak zajrzeć do środka 1 Jak zajrzeć do środka 2 3 Marcin Młotkowski Programowanie w Ruby 22 / 28

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

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 23 / 28

Realizacja Jak zajrzeć do środka Polecenia systemowe są wywoływane funkcją Kernel.system Zamiast funkcji Kernel.system wstawimy własną funkcję Marcin Młotkowski Programowanie w Ruby 24 / 28

Implementacja Jak zajrzeć do środka 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 25 / 28

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 26 / 28

Ś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 27 / 28

Debugger Jak zajrzeć do środka ruby -r debugger plik.rb Marcin Młotkowski Programowanie w Ruby 28 / 28