Também já não tenho feito novas funcionalidades com Flex-Flash há muito
tempo.
Apenas tenho 2 soluções nesta vertente e mantenho a tek para manutenção.

Gostaria de um dia rescrever ambas as soluções com HTML5 mas só se for em
tempo disponível para tal.

Curioso, o PHP é a tek que não muda e comum a todos :)
Uma excelente tek para backed e muito rápida.


2014-09-04 17:01 GMT+01:00 APintex Gmail <[email protected]>:

> de momento só estou a utilizar o AIR e PHP
>
> António Pinto
> [email protected]
>
>
>
> No dia 04/09/2014, às 16:58, Hugo Ferreira <[email protected]>
> escreveu:
>
> É como eu. Na realidade acredito que a maioria esteja no mesmo barco. Para
> coisas a sério ainda não.
> Quem já trabalha à anos com Objective-C, irá continuar mesmo após o Swift
> se tornar uma realidade viável.
>
> Terminei o meu primeiro projecto HTML5 e correu muito bem. No final
> demorei muito menos tempo do que previa e já tenho agora uma base para
> fazer o próximo mais rapidamente.
>
> Quando houver tempo irei recriar um projecto em Flex com HTML5 e mais
> tarde outro (se isto algum dia vier a acontecer) e depois disso acho que
> não voltarei a usar o Flash !
>
> O AIR vou continuar a usar e abusar e também muito código nativo com
> Android.
>
> Também acho que o Swift será uma realidade para mim só para o ano que vem !
>
>
> 2014-09-04 16:48 GMT+01:00 Apintex <[email protected]>:
>
>> Hugo, para já é pura curiosidade no Swift. Instalei o Xcode 6 beta e nem
>> o abri. :(
>> Vou vendo alguns exemplos para ir aprendendo alguma coisa e partilho com
>> vocês os que acho importantes.
>> Estou a terminar um projecto (MoneyEX Pro) e só no início do próximo ano
>> começarei a trabalhar com o Swift.
>>
>> Att,
>>
>> António Pinto
>>
>> No dia 04/09/2014, às 16:10, Hugo Ferreira <[email protected]>
>> escreveu:
>>
>> APintex,
>>
>> Acabei à pouco tempo de ler 2 bons livros de desenvolvimento Android.
>> Já desenvolvi diversas ANE's para Android e já me sinto suficientemente
>> confortável para desenvolver qualquer app para Android ou mesmo ANE.
>>
>> Em breve gostaria de entrar no desenvolvimento nativo para iOS (tanto
>> apps como ANE's) e aqui ficam algumas dúvidas:
>> 1. Não faz sentido nesta altura do campeonato investigar em Objective-C
>> (thank you god);
>> 2. Será que não vale a pena esperar por um bom livro que seja uma
>> compilação do desenvolvimento Swift (de preferência em PT). Ainda não vi
>> nenhum na Fnac;
>> 3. Será que irá ser possível desenvolver ANE's com swift. Penso que aqui
>> a única coisa que falta é a lib que actualmente é para Objective-C (para
>> alguém transcrever tem de saber bem Objective-C) ou será possível usar a
>> actual ?
>>
>> As minhas expectativas são:
>> - Dentro de 1 ano o iOS8 tenha mais de 80% de market share para valer a
>> pena;
>> - Existam bons livros e exemplos;
>> - Exista um lib para Swift (a Adobe tem de fazer) ou ser possível usar a
>> actual (não sei);
>> - Exista uma framework para Bluetooth LE (para mim é importante) tal como
>> já existe com Objective-C ou se possa usar as actuais.
>>
>>
>>
>> 2014-09-04 15:58 GMT+01:00 APintex Gmail <[email protected]>:
>>
>>>
>>>  António Pinto
>>> [email protected]
>>>
>>>
>>>
>>> http://realm.io/news/swift-enums-pattern-matching-generics/
>>>
>>> Sign up to be notified of future videos
>>>
>>> We won't email you for any other reason, ever.
>>>  ------------------------------
>>> Enums (0:40)
>>>
>>> Enums are a kind of abstraction that allow you to give a variable one
>>> value among several related values. For example, when building a state
>>> machine you could have an enum that describes the state of an object from a
>>> set number of states. There are three types of enums in Swift.
>>> Basic Enum (1:12)
>>>
>>> The most basic Swift enum simply has a bunch of cases and is declared
>>> using the enum key word. In this example, the enum is called Direction and
>>> can only be one of the four provided cases. To declare an enum, you use the
>>> enum name, followed by a dot and then one of the possible values. Unlike in
>>> Objective-C or C, enums are not typedefs of aliases for integers.
>>>
>>> enum Direction {
>>>   case North
>>>   case South
>>>   case East
>>>   case West }
>>> let myDirection = Direction.North
>>>
>>> Raw Value Enum (2:00)
>>>
>>> The second type of Swift enum is a "raw value" enum, which is the same
>>> as the basic enum but has additional raw values associated with each case.
>>> In this enum Title, each case has an associated string that is the name for
>>> the title. Important to note is that the raw value and the enum itself are
>>> not interchangeable. The toRaw and fromRaw methods help to go between the
>>> value and the enum.
>>>
>>> enum Title : String {
>>>   case CEO = "Chief Executive Officer"
>>>   case CTO = "Chief Technical Officer"
>>>   case CFO = "Chief Financial Officer"}
>>> let myTitle = Title.CEO let myString : String = Title.CEO.toRaw() let 
>>> anotherTitle : Title =
>>>   Title.fromRaw("Chief Executive Officer")!
>>>
>>> For integer type raw enums, integer numbering remains implicit if you do
>>> not specify values. Swift automatically counts up from the last provided
>>> explicit value. This can be seen in the following example:
>>>
>>> enum Planet : Int {
>>>   case Mercury = 1
>>>   case Venus, Earth, Mars // 2, 3, 4
>>>   case Jupiter = 100
>>>   case Saturn, Uranus, Neptune // 101, 102, 103 }
>>>
>>> Associated Value Enum (3:52)
>>>
>>> The third type of enum is one with associated values. Each case in the
>>> enum can carry associated data. In this example from the Swift book, the
>>> bar code enum allows you to associate different QR codes with different
>>> strings.
>>>
>>> enum Barcode {
>>>   case UPCA(sys: Int, data: Int, check: Int)
>>>   case QRCode(String) }
>>> let myUPC =
>>>   Barcode.UPCA(sys: 0, data: 27917_01919, check: 2) let myQRCode =
>>>   Barcode.QRCode("http://example.com";)
>>>
>>> Associated values are especially useful in handling JSON, because arrays
>>> and dictionaries are actually types. Thus, you can create an enum to
>>> represent a JSON structure as a tree, with JSON nodes wrapping different
>>> types.
>>>
>>> enum JSONNode {
>>>   case NullNode
>>>   case StringNode(String)
>>>   case NumberNode(Float)
>>>   case BoolNode(Bool)
>>>   case ArrayNode([JSONNode])
>>>   case ObjectNode([String:JSONNode]) }
>>> let x : JSONNode = .ArrayNode(
>>>   [.NumberNode(10.0),
>>>   .StringNode("hello"),
>>>   .BoolNode(false)])
>>>
>>> Switch Statements (Pattern Matching) (6:17)
>>>
>>> Switch statements is where most of the pattern matching functionality in
>>> Swift comes from. A basic switch statement looks very similar to an
>>> Objective-C switch statement, where there is a clause followed by cases.
>>> Two things to note: Swift switches don't have breaks, so for old style
>>> fallthrough behaviour, your code must have an explicit use of the keyword
>>> fallthrough. Switch statements must also be comprehensive, so default cases
>>> are required, which may help prevent errors.
>>>
>>> let value = 10switch value { case 10: println("ten") case 20: 
>>> println("twenty") case 30: println("thirty") default: println("another 
>>> number") }
>>>
>>> Ranges (8:35)
>>>
>>> In Swift, you can also pattern match on anything that's comparable. You
>>> can even match strings now to a case (and printout emojis for a fun parlor
>>> trick!). Anything that can be compared with the double equals operator can
>>> be matched. Swift also allows matching on ranges, where ranges can be the
>>> pattern inside a switch state.
>>>
>>> let v: UInt = 10switch v { case 0...9: println("Single digit") case 
>>> 10...99: println("Double digits") case 100...999: println("Triple digits") 
>>> default: println("4 or more digits") }
>>>
>>> Tuples (9:00)
>>>
>>> Tuples are composite data types - they contain multiple elements that
>>> can all be of different types. A tuple is then represented by the types of
>>> its elements. In this tuple-based switch statement, a tuple is the input.
>>> Each element in the pattern tuple is actually a sub-pattern, so you can
>>> match against patterns in each element. The underscore represents a "I
>>> don't care" value. In this example, the last case functions as a default
>>> because the (_, _) says the same thing as a default - none of the other
>>> cases match, and we don't care about other possible values.
>>>
>>> let person = ("Helen", 25) switch person { case ("Helen", let age):
>>>   println("Your name is Helen, and you are \(age)" + " years old") case (_, 
>>> 13...19):
>>>   println("You are a teenager") case ("Bob", _):
>>>   println("You are not a teenager, but your name" + " is Bob.") case (_, _):
>>>   println("no comment") }
>>>
>>> Binding in Cases (10:56)
>>>
>>> If you have case statements, there may be associated data that needs to
>>> be used in the case statement body. The let binding is how you can do that.
>>> The first two cases in this example take the tuple elements and create the
>>> bindings X and Y to represent those elements.
>>>
>>> let myTuple = ("abcd", 1234) switch myTuple { case let (x, y):
>>>   "The string in 'x' is \(x); " + "the integer in 'y' is \(y)"case (let x, 
>>> let y):
>>>   "Another way to do the exact same thing"case (_, let y):
>>>   "We don't care about the string in 'x', " + "but the integer in 'y' is 
>>> \(y)"}
>>>
>>> Enums (12:22)
>>>
>>> You can also switch on enums, but for enums with values wrapped inside,
>>> switch statements are the only way you can access those values. The
>>> following switch statement uses let to bind each case and use the value.
>>>
>>> enum ParseResult {
>>>   case NumericValue(Int)
>>>   case Error(String) }
>>> let a = ParseResult.NumericValue(1) switch a { case let .NumericValue(v):
>>>   "Success; numeric value is \(v)"case .Error(let err):
>>>   "Failed; error message is \(err)"}
>>>
>>> Types (13:20)
>>>
>>> The main type of switch is the type/sub-class pattern. If your switch
>>> conditional in this clause is a class, then class will have sub- or
>>> superclasses. In this example, the UIView is matched against the different
>>> possible types of views: UIImageView, UILabel, and UITableView. The "as"
>>> keyword differs from the "is" keyword in that "as" allows you to use the
>>> let binding and do something with myView, while "is" is used simply to
>>> check the type.
>>>
>>> let myView : UIView = getView() switch myView { case is UIImageView:
>>>   println("It's an image view")case let lbl as UILabel:
>>>   println("It's a label, with text \(lbl.text)") case let tv as UITableView:
>>>   println("It's a table view, with"+ " \(tv.numberOfSections()) sections") 
>>> default:
>>>   println("It's some other type of view") }
>>>
>>> where clause (14:33)
>>>
>>> Another important thing about switch statements is the where cause. This
>>> clause can be added to any case and acts as a boolean expression that
>>> returns true or false. The case is then taken only if this where clause
>>> returns true. This switch example relies not on pattern matching but
>>> instead on these where clauses, following through with the case if myView
>>> is of a certain size or other characteristic.
>>>
>>> let myView : UIView = getView() switch myView { case _ where 
>>> myView.frame.size.height < 50:
>>>   println("Your view is shorter than 50 units") case _ where 
>>> myView.frame.size.width > 20:
>>>   println("Your view is at least 50 units tall," + " and is more than 20 
>>> units wide") case _ where
>>>   myView.backgroundColor == UIColor.greenColor():
>>>   println("Your view is at least 50 units tall," + " at most 20 units wide, 
>>> and is green.") default:
>>>   println("I can't describe your view.") }
>>>
>>> Expression Operator (15:28)
>>>
>>> A final important feature in Swift is the expression operator.
>>>
>>> func ~=(pattern: Type1, value: Type2) -> Bool
>>>
>>> This operator takes the pattern and the value, and then uses pattern
>>> matching to return true or false. It can be overloaded as well to implement
>>> custom matching behaviour. The following piece of code is Swift pseudo-code
>>> to demonstrate what you could build. In an array four elements long, you
>>> could create cases that matched any combination of the elements.
>>>
>>> let myArray = [1, 2, 4, 3]switch myArray { case [..., 0, 0, 0]:
>>>   doSomething()case [4, ...]:
>>>   doSomething() case [_, 2, _, 4]:
>>>   doSomething() case [_, _, 3, _]:
>>>   doSomething() case [_, _, _, 3]:
>>>   doSomething() default:
>>>   doDefault() }
>>>
>>> Expression Patterns (17:42)
>>>
>>> The following extended example is a custom implementation of the pattern
>>> match operator. This custom operator turns the elements of an array into
>>> the enum values.
>>>
>>> enum WCEnum {
>>>   case Wildcard
>>>   case FromBeginning
>>>   case ToEnd
>>>   case Literal(Int) }
>>> func ~=(pattern: [WCEnum], value: [Int]) -> Bool {
>>>   var ctr = 0
>>>   for currentPattern in pattern {
>>>     if ctr >= value.count || ctr < 0 { return false }
>>>     let currentValue = value[ctr]
>>>     switch currentPattern {
>>>     case .Wildcard: ctr++
>>>     case .FromBeginning where ctr == 0:
>>>       ctr = (value.count - pattern.count + 1)
>>>     case .FromBeginning: return false
>>>     case .ToEnd: return true
>>>     case .Literal(let v):
>>>       if v != currentValue { return false }
>>>       else { ctr++ }
>>>     }
>>>   }
>>>   return true}
>>>
>>> Protocols (21:06)
>>>
>>> In order to understand generics, you have to understand protocols, which
>>> are something that existed in Objective-C as well. Protocols are basically
>>> a contract that can define nothing at all or any number of methods and
>>> properties. However, protocols can't have any implementation details - they
>>> can only have method signatures and property names. MyProtocol in this code
>>> defines just one property as requiring a getter and setter, as well as one
>>> method.
>>>
>>> protocol MyProtocol {
>>>   var someProperty : Int { get set }
>>>   func barFunc (x: Int, y: Int) -> String}
>>>
>>> Types can conform to none, one, or multiple protocols. Protocols can
>>> also inherit from other protocols, thereby getting all the parent
>>> protocol's methods and properties.
>>> Conformance (23:18)
>>>
>>> With protocols, you can make classes, structs, and enums conform to
>>> them. By making a type conform to a protocol, you are telling the compiler
>>> that your type will match the definitions set in the protocol. MyClass
>>> conforms to MyProtocol in providing implementations that match.
>>>
>>> class MyClass {
>>>   // Nothing here...
>>>   // This won't compile!}
>>> class MyClass : MyProtocol {
>>>   var myProperty : Int = 0
>>>   // Property conformance
>>>   func barFunc (x: Int, y: Int) -> String {
>>>     return "\(x) + \(y) = \(x + y)"
>>>   }
>>>   var someProperty : Int {
>>>   get {
>>>     return myProperty
>>>   }
>>>   set {
>>>     myProperty = newValue
>>>   }
>>>   } }
>>>
>>> Uses (24:06)
>>>
>>> There are a few reasons you may want to use protocols. The first reason
>>> is parent-child relationships, where you don't want all the children to
>>> have a specific class of a parent. For example, UITableView comes with
>>> Cocoa and is a list of objects that specifies the number and content of
>>> cells. For the delegate to provide that information, it just has to
>>> implement the protocol which has methods for the cells. This way, you can
>>> avoid specifying the delegate as a sub-class of a class.
>>>
>>> A second major use for protocols can be seen in the Swift Standard
>>> Library, where they add functionality to a type, piece by piece. Equatable,
>>> LogicValue, and AbsoluteValuable are all protocols that are implemented by
>>> different types in the library. The LogicValue protocol has a method that
>>> takes an object and turns it into true or false, so if you create a custom
>>> type and implement this protocol, you can use that type in an if
>>> statement's clause.
>>>
>>> One final use for protocols is to allow different types to be described
>>> by the same generic type parameter. For example, if you wanted to put
>>> different types into an array, you could give the objects a protocol and
>>> then declare the array with the protocol. You then have an array of
>>> equatables and anything that conforms to the equatable in that array can be
>>> added.
>>>
>>> protocol JSONType { } extension String : JSONType { } extension Float : 
>>> JSONType { } extension Bool : JSONType { } extension Array : JSONType { } 
>>> extension Dictionary : JSONType { }
>>> let b : Array<JSONType> = [10.1, 10.2, "foo"] let a : Array<JSONType> = 
>>> [10.0, "bar", false, b]
>>>
>>>  Generics (28:36)
>>>
>>> Generics did not exist in Objective-C. THey are basically the statically
>>> typed languages' answer to the flexibility of dynamically typed languages.
>>> Generics are used to allow you to use the same code for different types.
>>> The type parameter  allows you to do this generically.
>>>
>>> func swapItems<T>(inout this: T, inout that: T) {
>>>  let tempThis = this
>>>  this = that
>>>  that = tempThis }
>>>
>>> With generics, you can also enforce more constraints, as in the
>>> following example. The ": Equatable" allows you to constrain T to any type
>>> that conforms to Equatable, or is valid with the double equals operator.
>>>
>>> func firstAndLastAreEqual<T : Equatable>
>>>  (someArray: Array<T>) -> Bool {
>>>  let first = someArray[0]
>>>  let last = someArray[someArray.count - 1]
>>>  return first == last }
>>>
>>> You can also use generics for either functions or type declarations.
>>> Type information is available at runtime, which is helpful. The compiler
>>> can optimize by creating specific versions for each type that's being used
>>> (like C++ templates), but it can also fall back to the generic
>>> implementation.
>>> Extended Example (33:56)
>>>
>>> In the extended example, the goal was to create a function that was
>>> typesafe and could handle every case that involved the following types:
>>> Array, Dictionary, SquareMatrix, TreeNode. The function was to take a
>>> collection of one of the above types, take an array, and append the items
>>> in that collection to the array.
>>>
>>> A protocol was defined to specify that a type can give back all of the
>>> elements inside of it. You have containers that can implement
>>> "AllElements". On a generic level, you might need to know the type of the
>>> elements inside the collection, and so a wildcard is called "ElementType".
>>> And so, you specify the element type when you implement the function
>>> itself.
>>>
>>> protocol AllElements {
>>>   typealias ElementType
>>>   // Return an array containing all the objects
>>>   // in the collection
>>>   func allElements() -> Array<ElementType> }
>>>
>>> Another thing you can use is the NilLiteral protocol, the point of which
>>> is to take nil and turn it into something equivalent to nil in that type.
>>> For an int, it would return 0, or maybe for a string, it would return "".
>>> In the following example, you would want it to return something of type
>>> self.
>>>
>>> protocol NilLiteralConvertible {
>>>   class func convertFromNilLiteral() -> Self}
>>>
>>> Extensions then add methods, computed properties, and protocol
>>> conformance to existing types. Array and SquareMatrix are both fairly
>>> straightforward - you just return the arrays themselves. For the
>>> Dictionary, you iterate through all the elements, create a buffer, and
>>> return it with the elements inside. Finally, for the tree, you go through
>>> the tree in a recursive traversal and again add the elements to a buffer.
>>>
>>> Put together, the final function appendToArray calls AllElements and
>>> gives "a", which is an array with all the elements on the source. Then each
>>> of those elements is just added to the array in "dest". This works because
>>> the generic argument "T" has to implement AllElements, and U has been
>>> constrained to the same type as T. The where clause is included in case you
>>> want to do more than have this type implement one protocol. Before the
>>> where, you declare type arguments, which can conform to either one or none
>>> protocols. If you want T to conform to 2+ protocols, add a "where" clause
>>> to constrain. You can then constrain any free type arguments you declared
>>> earlier and any associated types associated with the type arguments via
>>> protocols (e.g. T.SomeType).
>>>
>>> func appendToArray
>>>   <T: AllElements, U where U == T.ElementType>
>>>   (source: T, inout dest: Array<U>) {
>>>
>>>   let a = source.allElements()
>>>   for element in a {
>>>     dest.append(element)
>>>   } }
>>> var buffer = ["a", "b", "c"] appendToArray([1: "foo", 2: "bar"], &buffer)
>>>
>>> Now you've created five methods for this one process. In actuality, you
>>> would have your containers implement Sequence and use a for-in loop to go
>>> through all the elements. This requires knowledge of Generators,
>>> EnumerateGenerators, and other material.
>>> Q&A (46:05)
>>>
>>> *Q: In the extension example, are we extending all arrays of anything?*
>>> Austin: Yes, which is why this is a bad idea in practice. You can't
>>> actually say that you only want arrays with JSON type objects to also
>>> implement JSON array, which is needed to ensure that you have valid JSON.
>>>
>>> *Q: Is the type T built-in? Where does it come from?*
>>> Austin: T is actually coming from the declaration of array. If you
>>> command-click an array in XCode, the declaration of the array shows that it
>>> declares a generic argument T that has some constraints.
>>>
>>> *Q: Is there any kind of trace for generics and the way it works? Is it
>>> traceable to an existing language or is it brand-new?*
>>> Austin: I don't know the answer, but I'm sure there are precedents.
>>> Generics in Swift kind of de-emphasize object oriented programming because
>>> they're built more around protocols than around class hierarchies. You
>>> might get a closer procedent if you looked at Haskell.
>>>
>>> *Q: What is the exclamation point used for?*
>>> Austin: The exclamation mark is for optionals. Everything in Swift is
>>> non-nilable by default, so if you want to set something to nil, it must be
>>> declared as an optional. The question mark after the type signifies this.
>>> Then, the exclamation mark, or bang, takes the value out of the optional so
>>> you can use it.
>>>
>>> *Q: Is there something like value template parameters in Swift? Or
>>> should we just type in, type template?*
>>> Austin: I don't think so, I don't think Swift generics are as powerful.
>>>
>>> *Q: Can you explain let? It seemed like it would sometimes check the
>>> case and othertimes it would set it to the constant.*
>>> Austin: A let pattern kind of matches everything, but also takes a value
>>> and puts it in the constant for later use. When we use "as", it both checks
>>> the type and also puts it in the constant.
>>> ------------------------------
>>>  Sign up to be notified of future videos
>>>
>>> We won't email you for any other reason, ever.
>>>
>>>
>>> --
>>> Recebeu esta mensagem porque subscreveu ao grupo "Mailing List da
>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" do
>>> Grupos do Google.
>>> Para anular a subscrição deste grupo e parar de receber emails do mesmo,
>>> envie um email para [email protected].
>>> Para publicar uma mensagem neste grupo, envie um email para
>>> [email protected].
>>> Visite este grupo em http://groups.google.com/group/riapt.
>>> Para mais opções, visite https://groups.google.com/d/optout.
>>>
>>
>>
>> --
>> Recebeu esta mensagem porque subscreveu ao grupo "Mailing List da
>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" do
>> Grupos do Google.
>> Para anular a subscrição deste grupo e parar de receber emails do mesmo,
>> envie um email para [email protected].
>> Para publicar uma mensagem neste grupo, envie um email para
>> [email protected].
>> Visite este grupo em http://groups.google.com/group/riapt.
>> Para mais opções, visite https://groups.google.com/d/optout.
>>
>>
>> --
>> Recebeu esta mensagem porque subscreveu ao grupo "Mailing List da
>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" do
>> Grupos do Google.
>> Para anular a subscrição deste grupo e parar de receber emails do mesmo,
>> envie um email para [email protected].
>> Para publicar uma mensagem neste grupo, envie um email para
>> [email protected].
>> Visite este grupo em http://groups.google.com/group/riapt.
>> Para mais opções, visite https://groups.google.com/d/optout.
>>
>
>
> --
> Recebeu esta mensagem porque subscreveu ao grupo "Mailing List da
> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" do
> Grupos do Google.
> Para anular a subscrição deste grupo e parar de receber emails do mesmo,
> envie um email para [email protected].
> Para publicar uma mensagem neste grupo, envie um email para
> [email protected].
> Visite este grupo em http://groups.google.com/group/riapt.
> Para mais opções, visite https://groups.google.com/d/optout.
>
>
>  --
> Recebeu esta mensagem porque subscreveu ao grupo "Mailing List da
> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" do
> Grupos do Google.
> Para anular a subscrição deste grupo e parar de receber emails do mesmo,
> envie um email para [email protected].
> Para publicar uma mensagem neste grupo, envie um email para
> [email protected].
> Visite este grupo em http://groups.google.com/group/riapt.
> Para mais opções, visite https://groups.google.com/d/optout.
>

-- 
Recebeu esta mensagem porque está inscrito no grupo "Mailing List da Comunidade 
Portuguesa de Rich Internet Applications - www.riapt.org" dos Grupos do Google.

Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie 
um email para [email protected].
Para publicar uma mensagem neste grupo, envie um e-mail para 
[email protected].
Visite este grupo em http://groups.google.com/group/riapt.
Para mais opções, consulte https://groups.google.com/d/optout.

Responder a