advertisement

Complex Distributed Systems Software Architecture

50 %
50 %
advertisement
Information about Complex Distributed Systems Software Architecture

Published on December 30, 2007

Author: elfuchs

Source: slideshare.net

advertisement

!quot; # !$ quot;% &( ' )* quot; quot; , (+ *-

. / & (0( + quot;, ' *quot; * 1 + 2% , 2% , 3 2% 3 2% 1 3 ( , 2 $3 2% quot; %+ , 3 2% !3 quot; ) - 4 ) - 1 %

/ & ( 0( + quot;, ' *quot; * 5 / & (0( + quot;, ' *quot; * + )+ - quot;* quot; % quot; ' ,

6 / & (0( + quot;, ' *quot; * + * + quot; * 77 quot; 74 8 * * 8 7quot; , !

9 / & (0( + quot;, ' *quot; * + & : 0: ; :: : 4 $ < , ), - + => .> 0

/ & ( 0( + quot;, ' *quot; * ? / & (0( + quot;, ' *quot; * + )+ - quot;* quot; % quot; ' ,

@ / & (0( + quot;, ' *quot; * quot;*

A / & (0( + quot;, ' *quot; * quot;* , ) - 4 quot;quot; ) - ) - quot;& , ) - ) - < )+ - 27 2 ) -9 > .> > 9> 9> > . 6, quot; =>.>

: / & (0( + quot;, ' *quot; * * quot;* quot;% ATC Internet Supervisory Recording Radar Front Radar Data Flight Plan Simulator Control Supervisory Replay Processing Processing Recording Processing Radar Front Radar Data Flight Plan Simulator Control Replay Processing Processing Processing Intranet controller controller controller controller Working Working Working Working Position Position Position Position

/ & ( 0( + quot;, ' *quot; * => / & (0( + quot;, ' *quot; * + )+ - quot;* quot; % quot; ' ,

== / & (0( + quot;, ' *quot; *

=. / & (0( + quot;, ' *quot; *

=5 / & (0( + quot;, ' *quot; * 7

=6 / & (0( + quot;, ' *quot; * 7

=9 / & (0( + quot;, ' *quot; * 7

=? / & (0( + quot;, ' *quot; * 7

=@ / & (0( + quot;, ' *quot; * %

=A / & (0( + quot;, ' *quot; * %

=: / & (0( + quot;, ' *quot; *

.> / & (0( + quot;, ' *quot; *

.= / & (0( + quot;, ' *quot; * %

.. / & (0( + quot;, ' *quot; * %

.5 / & (0( + quot;, ' *quot; * %

/ & ( 0( + quot;, ' *quot; * .6 / & (0( + quot;, ' *quot; * + )+ - quot;* quot; % quot; ' ,

.9 / & (0( + quot;, ' *quot; * % quot; % 0 % % 0 % % <7% % 0 % 0 *% % % % % % % % % % % %% 0 ! , % ) < -0

/ & ( 0( + quot;, ' *quot; * .? / & (0( + quot;, ' *quot; * + )+ - quot;* quot; % quot; ' ,

.@ / & (0( + quot;, ' *quot; * 1 , Functional upgrade Cost Functional upgrade Code Size Complexity Complexity avalanche effect System Complexity Functional Changes Cost Functional Changes Code Size Time

.A / & (0( + quot;, ' *quot; * 1 , Functional upgrade Cost Functional Functional upgrade Code Size Changes Cost Complexity Complexity avalanche effect System Complexity Functional Changes Code Size Time

/ & ( 0( + quot;, ' *quot; * .: / & (0( + quot;, ' *quot; * + )+ - quot;* quot; % quot; ' ,

5> / & (0( + quot;, ' *quot; * , Complexity System Complexity Code Size

5= / & (0( + quot;, ' *quot; * , Complexity System Complexity Decreases Complexity Increases Abstraction Level Decreases Code Size Code Size

5. / & (0( + quot;, ' *quot; * , Complexity System Complexity Decreases Complexity Increases Abstraction Level Decreases Code Size Code Size

/ & ( 0( + quot;, ' *quot; * 55 / & (0( + quot;, ' *quot; * + )+ - quot;* quot; % quot; ' ,

56 / & (0( + quot;, ' *quot; * %, ,

59 / & (0( + quot;, ' *quot; * %

5? / & (0( + quot;, ' *quot; * %

5@ / & (0( + quot;, ' *quot; * 1 + 2% , 2% , 3 2% 3 2% 1 3 ( , 2 $3 2% quot; %+ , 3 2% !3 quot; ) - 4 ) - 1 %

/ & ( 0( + quot;, ' *quot; * 5A / & (0( + quot;, ' *quot; * quot; %, 2% , 3 * quot; *% + 8 8 , % + & $ 1 B

5: / & (0( + quot;, ' *quot; *

6> / & (0( + quot;, ' *quot; * quot; quot; # ! quot;

6= / & (0( + quot;, ' *quot; * quot; $ % ! quot;

6. / & (0( + quot;, ' *quot; * quot; * &' () ! quot;

65 / & (0( + quot;, ' *quot; * quot; + ! * ! quot;

66 / & (0( + quot;, ' *quot; * quot; + ! * ! quot;

69 / & (0( + quot;, ' *quot; * quot; + ! * ! quot;

6? / & (0( + quot;, ' *quot; * quot; + ! * ! quot;

/ & ( 0( + quot;, ' *quot; * 6@ / & (0( + quot;, ' *quot; * quot; %, 2% , 3 * quot; *% + 8 8 , % + & $ 1 B

6A / & (0( + quot;, ' *quot; *

6: / & (0( + quot;, ' *quot; * quot; ! quot;

9> / & (0( + quot;, ' *quot; * quot; ! quot;

9= / & (0( + quot;, ' *quot; * quot; ! quot;

9. / & (0( + quot;, ' *quot; * quot; + ! ! quot;

95 / & (0( + quot;, ' *quot; * quot; + ! ! quot;

/ & ( 0( + quot;, ' *quot; * 96 / & (0( + quot;, ' *quot; * quot; %, 2% , 3 * quot; *% + 8 8 , % + & $ 1 B

99 / & (0( + quot;, ' *quot; * , quot; quot; ( ( 4 $ 4 $

9? / & (0( + quot;, ' *quot; * , quot; quot; ( ( 4 $ 4 $

9@ / & (0( + quot;, ' *quot; * , quot; quot; quot; quot; ( ( ( ( 4 $ 4 $ 4 $ 4 $

9A / & (0( + quot;, ' *quot; * , quot; quot; quot; quot; ( ( ( ( 4 $ 4 $ 4 $ 4 $

/ & ( 0( + quot;, ' *quot; * 9: / & (0( + quot;, ' *quot; * quot; %, 2% , 3 * quot; *% + 8 8 , % + & $ 1 B

?> / & (0( + quot;, ' *quot; * quot; quot; quot;

?= / & (0( + quot;, ' *quot; * quot; # quot; quot;

?. / & (0( + quot;, ' *quot; * quot; quot;, # quot; quot;

?5 / & (0( + quot;, ' *quot; * quot; quot;, # quot; quot;

?6 / & (0( + quot;, ' *quot; * quot; + quot;, # quot; quot;

/ & ( 0( + quot;, ' *quot; * ?9 / & (0( + quot;, ' *quot; * quot; %, 2% , 3 * quot; *% + 8 8 , % + & $ 1 B

?? / & (0( + quot;, ' *quot; * quot; , quot; C +

?@ / & (0( + quot;, ' *quot; * quot; , quot; C + ( %+ ,

/ & ( 0( + quot;, ' *quot; * ?A / & (0( + quot;, ' *quot; * quot; %, 2% , 3 * quot; *% + 8 8 , % + & $ 1 B

?: / & (0( + quot;, ' *quot; * , $ + %, $ + ! * !

@> / & (0( + quot;, ' *quot; * , $ + %, $ $ ! * + ! * !

/ & ( 0( + quot;, ' *quot; * @= / & (0( + quot;, ' *quot; * quot; %, 2% , 3 * quot; *% + 8 8 , % + & $ 1 B

@. / & (0( + quot;, ' *quot; * , $ + %, $ $ ! * + ! * ! !

/ & ( 0( + quot;, ' *quot; * @5 / & (0( + quot;, ' *quot; * quot; %, 2% , 3 * quot; *% + 8 8 , % + & $ 1 B

@6 / & (0( + quot;, ' *quot; * , $ + %, $ $ ! * + ! * ! ! quot; quot;

@9 / & (0( + quot;, ' *quot; * 1 + 2% , 2% , 3 2% 3 2% 1 3 ( , 2 $3 2% quot; %+ , 3 2% !3 quot; ) - 4 ) - 1 %

/ & ( 0( + quot;, ' *quot; * @? / & (0( + quot;, ' *quot; * 1 1 1 % 1 1 1 + 1 %

/ & ( 0( + quot;, ' *quot; * @@ / & (0( + quot;, ' *quot; * 1 1 1 % 1 1 1 + 1 %

@A / & (0( + quot;, ' *quot; * 2% D D

@: / & (0( + quot;, ' *quot; * + 1 %#

A> / & (0( + quot;, ' *quot; * , # quot; quot; ( ( 4 $ 4 $

A= / & (0( + quot;, ' *quot; * , $ % quot; quot; !# !# ( ( 4 $ 4 $

A. / & (0( + quot;, ' *quot; * , + , 1 % 1 * *

/ & ( 0( + quot;, ' *quot; * A5 / & (0( + quot;, ' *quot; * 1 1 1 % 1 1 1 + 1 %

A6 / & (0( + quot;, ' *quot; * 0 0 % 0 1 %0 ) - % 0

/ & ( 0( + quot;, ' *quot; * A9 / & (0( + quot;, ' *quot; * 1 1 1 % 1 1 1 + 1 %

A? / & (0( + quot;, ' *quot; * % 0 Initial Request 1 Day ! After 1 Week $ After

A@ / & (0( + quot;, ' *quot; * % 0 Initial Request Evolution Request 1 Day ! After Few Weeks Later 1 Day 1 Week $ After After

AA / & (0( + quot;, ' *quot; * % # 2% % 2 % *% 1 quot; 2 %* $ 2+ ' %1 2 % % %E 1 4

/ & ( 0( + quot;, ' *quot; * A: / & (0( + quot;, ' *quot; * 1 1 1 % 1 1 1 + 1 %

:> / & (0( + quot;, ' *quot; * 1 F G

:= / & (0( + quot;, ' *quot; * 1 F G ! & ' &OLHQW Point # int x # int y +print()

:. / & (0( + quot;, ' *quot; * & ! & ' &OLHQW Point # int x # int y +print() (

:5 / & (0( + quot;, ' *quot; * & ! & ' &OLHQW Point # int x # int y +print() (

:6 / & (0( + quot;, ' *quot; * 1 F & G ! & ' &OLHQW Point # int x # int y +print() ( 3DPoint # int z + print()

:9 / & (0( + quot;, ' *quot; * 1 F & G ! & ' &OLHQW Point # int x # int y +print() ( ρ 3DPoint θ # int z + print()

:? / & (0( + quot;, ' *quot; * 1 F & G ! & ' <<Interface>> &OLHQW Point +print() ( ρ 3DPoint θ + print()

:@ / & (0( + quot;, ' *quot; * % % ! & ' &OLHQW Point +print() 1DPoint + print()

:A / & (0( + quot;, ' *quot; * % % ! & ' &OLHQW Point +print() 1DPoint 2DPoint + print() + print()

:: / & (0( + quot;, ' *quot; * % % ! & ' &OLHQW Point +print() 1DPoint 2DPoint 3DPoint + print() + print() + print()

=> > / & (0( + quot;, ' *quot; * % % ! & ' &OLHQW Point +print() NDPoint 1DPoint 2DPoint 3DPoint + print() + print() + print() + print()

== > / & (0( + quot;, ' *quot; * % % ! & ' <<Interface>> &OLHQW Point +print() NDPoint 1DPoint 2DPoint 3DPoint + print() + print() + print() + print()

/ & ( 0( + quot;, ' *quot; * =. > / & (0( + quot;, ' *quot; * 1 1 1 % 1 1 1 + 1 %

=5 > / & (0( + quot;, ' *quot; * . / - / ! * 0 * ! - -

=6 > / & (0( + quot;, ' *quot; * . / - / ! * 0 * ! - -

=9 > / & (0( + quot;, ' *quot; * . 1 quot;# - 1 &) &) &) 2 2 &)

=? > / & (0( + quot;, ' *quot; * . 1 quot;# - 1 &) &) &) 2 2 quot;

=@ > / & (0( + quot;, ' *quot; * %

=A > / & (0( + quot;, ' *quot; * 1 %

=: > / & (0( + quot;, ' *quot; * 8 % - & - ) &quot; )

=> = / & (0( + quot;, ' *quot; * 8 %

== = / & (0( + quot;, ' *quot; * % % ! & ' &OLHQW Point +print() NDPoint 1DPoint 2DPoint 3DPoint + print() + print() + print() + print()

=. = / & (0( + quot;, ' *quot; * % % ! & ' <<Interface>> &OLHQW Point +print() NDPoint 1DPoint 2DPoint 3DPoint + print() + print() + print() + print()

/ & ( 0( + quot;, ' *quot; * =5 = / & (0( + quot;, ' *quot; * 1 1 1 % 1 1 1 + 1 %

=6 = / & (0( + quot;, ' *quot; * %

=9 = / & (0( + quot;, ' *quot; * % )

=? = / & (0( + quot;, ' *quot; * % ) )

=@ = / & (0( + quot;, ' *quot; * % ) )

=A = / & (0( + quot;, ' *quot; * % % )

=: = / & (0( + quot;, ' *quot; * % % $ % )

=> . / & (0( + quot;, ' *quot; * 1 + 2% , 2% , 3 2% 3 2% 1 3 ( , 2 $3 2% quot; %+ , 3 2% !3 quot; ) - 4 ) - 1 %

/ & ( 0( + quot;, ' *quot; * == . / & (0( + quot;, ' *quot; * 1 1 '# $ 1 , % , 1 , + , 4 ( ( *

=. . / & (0( + quot;, ' *quot; * 1 3 Stat1 A B State2 State4

/ & ( 0( + quot;, ' *quot; * =5 . / & (0( + quot;, ' *quot; * 1 1 '# $ 1 , % , 1 , + , 4 ( ( *

=6 . / & (0( + quot;, ' *quot; * +$ 3 *' A B Stat1 State2 State4

/ & ( 0( + quot;, ' *quot; * =9 . / & (0( + quot;, ' *quot; * 1 1 '# $ 1 , % , 1 , + , 4 ( ( *

=? . / & (0( + quot;, ' *quot; * 4 $) % - 3 Task A Task B A B Stat1 State2 State4

/ & ( 0( + quot;, ' *quot; * =@ . / & (0( + quot;, ' *quot; * 1 1 '# $ 1 , % , 1 , + , 4 ( ( *

=A . / & (0( + quot;, ' *quot; * 4 3 A B 3 Stat1 State2 State4

/ & ( 0( + quot;, ' *quot; * =: . / & (0( + quot;, ' *quot; * 1 1 '# $ 1 , % , 1 , + , 4 ( ( *

=> 5 / & (0( + quot;, ' *quot; * 4 + 3 44 A B 3 Stat1 State2 State4

/ & ( 0( + quot;, ' *quot; * == 5 / & (0( + quot;, ' *quot; * 1 1 '# $ 1 , % , 1 , + , 4 ( ( *

=. 5 / & (0( + quot;, ' *quot; * 4 4 ) < - 3 A B 3 Stat1 State2 State4

/ & ( 0( + quot;, ' *quot; * =5 5 / & (0( + quot;, ' *quot; * 1 1 '# $ 1 , % , 1 , + , 4 ( ( *

=6 5 / & (0( + quot;, ' *quot; * 4 % 3 3 A B Stat1 State2 State4

/ & ( 0( + quot;, ' *quot; * =9 5 / & (0( + quot;, ' *quot; * 1 1 '# $ 1 , % , 1 , + , 4 ( ( *

=? 5 / & (0( + quot;, ' *quot; * * A B -- 5 -- ! -- -- # 5 5 3

=@ 5 / & (0( + quot;, ' *quot; * * 5 3 5 B A 5 3 5

=A 5 / & (0( + quot;, ' *quot; * 1 + 2% , 2% , 3 2% 3 2% 1 3 ( , 2 $3 2% quot; %+ , 3 2% !3 quot; ) - 4 ) - 1 %

/ & ( 0( + quot;, ' *quot; * =: 5 / & (0( + quot;, ' *quot; * , $ 1 1 1 1 '+ , + 1 ,

=> 6 / & (0( + quot;, ' *quot; * 1 1 ) % B&- GoF stand for Gang of Four. It refers to the famous books of Vlisside and Co. Design Patterns: Elements of Reusable Object-Oriented Software.

/ & ( 0( + quot;, ' *quot; * == 6 / & (0( + quot;, ' *quot; * , $ 1 1 1 1 '+ , + 1 ,

=. 6 / & (0( + quot;, ' *quot; * 1 )' + ,- ,QWHUIDFH!! & O L HQW 6 X E M HFW * &' 3 UR [ 5 HDO 6 X E M HFW * &' * &'

=65 / & (0( + quot;, ' *quot; * ), - '+ ,QWHUIDFH!! & O L HQW 6 X E M HFW * &' 3 UR [ 5 HDO 6 X E M HFW * &' * &' # + # , %

=66 / & (0( + quot;, ' *quot; * ), - '+ ¦ ¡ £     © © ¢ ¤ ¥ § ¨¤ ! £ ¤ ¢   £ ¤ ¨  Request()      £ ¥ ¤ § ¤ ¨   Request() Request() ! ,

=69 / & (0( + quot;, ' *quot; * ), - '+ ¦ ¡ £     © © ¢ ¤ ¥ § ¨¤ ! £ ¤ ¢   £ ¤ ¨  Request()      £ ¥ ¤ § ¤ ¨   Request() Request() 5 5 3 ! ,

/ & ( 0( + quot;, ' *quot; * =6? / & (0( + quot;, ' *quot; * , $ 1 1 1 1 '+ , + 1 ,

=6@ / & (0( + quot;, ' *quot; * ) - . # #

=6A / & (0( + quot;, ' *quot; * ) - ,QWHUIDFH!! 6 HUY L FH . # & # '

=6: / & (0( + quot;, ' *quot; * ) - , ! ! % !# -!

=9> / & (0( + quot;, ' *quot; * ) - , ! ! % !# -!

=9= / & (0( + quot;, ' *quot; * ) - , ! ! ! % !# -! !. !

=9. // & & 0 ( * quot;quot; , * ' ( ( 0+ +* quot; , ' * quot;( , $ 1 1 1 1 '+ , + 1 ,

=95 / & (0( + quot;, ' *quot; * ) % B&

-;=96 / & (0( + quot;, ' *quot; * # !

=99 / & (0( + quot;, ' *quot; * # 5 5 3 !

=9? / & (0( + quot;, ' *quot; * # 5 5 3 ! % %

/ & ( 0( + quot;, ' *quot; * =9@ / & (0( + quot;, ' *quot; * , $ 1 1 1 1 '+ , + 1 ,

=9A / & (0( + quot;, ' *quot; * + 8 3 .

=9: / & (0( + quot;, ' *quot; * * a b

=?> / & (0( + quot;, ' *quot; * * , 3 + !

=?= / & (0( + quot;, ' *quot; * , 1 . 3 quot;

=?. / & (0( + quot;, ' *quot; * , 1 . . + ! 3 ( ( Server Client quot; Proxy Proxy

=?5 / & (0( + quot;, ' *quot; * , 1 . . + ! 3 ( ( Server Client quot; Proxy Proxy

=?6 / & (0( + quot;, ' *quot; * 1 + 2% , 2% , 3 2% 3 2% 1 3 ( , 2 $3 2% quot; %+ , 3 2% !3 quot; ) - 4 ) - 1 %

/ & ( 0( + quot;, ' *quot; * =?9 / & (0( + quot;, ' *quot; * ++ , ,, , , 4 1 4 1 8 % 1 1 1 1 ! 11 1 $ ,, 1 ,

=?? / & (0( + quot;, ' *quot; * 4 1 , 1 / / / / / # 0 # 0 # 0 # 0 # 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 / # 0 1 2 3 4

=?@ / & (0( + quot;, ' *quot; * 4 1 , 1 / / / / / # 0 # 0 # 0 # 0 # 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 / # 0 1 2 3 4

=?A / & (0( + quot;, ' *quot; * 4 1 , 1 / / / / / # 0 # 0 # 0 # 0 # 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 55 6, / # 0 1 2 3 4

=?: / & (0( + quot;, ' *quot; * 4 1 , 1 / / / / / # 0 # 0 # 0 # 0 # 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 55 6, / / 0100110110 # 0 # 0 1100111010 1 1 7 0101011111 2 2 3 3 100111... 4 4

/ & ( 0( + quot;, ' *quot; * =@> / & (0( + quot;, ' *quot; * ++ , ,, , , 4 1 4 1 8 % 1 1 1 1 ! 11 1 $ ,, 1 ,

=@= / & (0( + quot;, ' *quot; * 4 1 Point +print()

=@. / & (0( + quot;, ' *quot; * , 1 % < )% 1- A B 3 Send Message ( Request ) Waiting Loop Send Message ( Reply )

/ & ( 0( + quot;, ' *quot; * =@5 / & (0( + quot;, ' *quot; * + + , ,, , , 4 1 4 1 8 % 1 1 1 1 ! 11 1 $ ,, 1 ,

=@6 / & (0( + quot;, ' *quot; * % 1 5 quot; +#

=@9 / & (0( + quot;, ' *quot; * % 1 quot; 5 +#

=@? / & (0( + quot;, ' *quot; * % 1 quot; 5 +#

=@@ / & (0( + quot;, ' *quot; * % 1 quot; 5 +#

/ & ( 0( + quot;, ' *quot; * =@A / & (0( + quot;, ' *quot; * ++ , ,, , , 4 1 4 1 8 % 1 1 1 1 ! 11 1 $ ,, 1 ,

=@: / & (0( + quot;, ' *quot; * 1 3 .

=A> / & (0( + quot;, ' *quot; * H 3 Client : O1 Server : 02 Request Client request server services . . .& ) 6# 6# ! - .

/ & ( 0( + quot;, ' *quot; * =A= / & (0( + quot;, ' *quot; * + + , ,, , , 4 1 4 1 8 % 1 1 1 1 ! 11 1 $ ,, 1 ,

=A. / & (0( + quot;, ' *quot; * 1 43 . 8 #&%3) + + quot; %4 3% # # # &(% ) # &(% ) # 3 + 7 ' # . 7 8 I )I -

=A5 / & (0( + quot;, ' *quot; * Servers 1 Unix Process + + Operations DATA and Operations Implementatio n Operations Operations DATA DATA and and Operations Operations Implementatio Implementation n quot; quot; Operations Operations Operations DATA DATA DATA and and and Operations Operations Operations Implementatio Implementatio Implementation n n Operations Operations DATA DATA and and

Add a comment

Related pages

Distributed computing - Wikipedia, the free encyclopedia

Various hardware and software ... Another basic aspect of distributed computing architecture is the ... Sukumar (2007), Distributed Systems ...
Read more

Architectural Patterns for Distributed Computing

Distributed systems architecture has ... · DCS Software factory ... which is considered the most complex distributed-computing ...
Read more

The Application of Software Tools to Complex Distributed ...

The Application of Software Tools to Complex Distributed Systems: ... types of complex distributed systems emphasizes ... the architecture of a ...
Read more

Software Architecture Patterns for Distributed Machine ...

Software Architecture Patterns for Distributed ... complex, the software architecture of these systems plays a crucial ... distributed control systems.
Read more

Software Engineering - Computer Science at CCSU

Software Engineering Distributed Systems ... distributed systems are more complex than centralised ... • In a distributed object architecture, ...
Read more

Distributed Systems Architectures - Systems, software and ...

Distributed Systems Architectures ... Distributed software engineering is therefore ... distributed systems are more complex than
Read more

Distributed systems | Article about distributed systems by ...

Explanation of distributed systems. ... software from the underlying architecture, ... looking to deploy complex distributed systems in a ...
Read more

Interoperability in Complex Distributed Systems - Springer

Interoperability in Complex Distributed Systems. ... Architecture and specification Version 2.0. ... Journal of Systems and Software, ...
Read more

Control of complex distributed systems with distributed ...

Control of complex distributed systems with distributed intelligent agents Eric Tatara, Ali C¸ınar *, Fouad Teymour Department of Chemical and ...
Read more