Showing posts with label Ceylon. Show all posts
Showing posts with label Ceylon. Show all posts

Thursday, February 2, 2012

Mobile- und Cloud-Computing unter besonderer Betrachtung der Technologien der US amerikanischen Unternehmenen Google Inc. und Amazon.com Inc. und der deutschen SAP AG

Mobile- und Cloud-Computing unter besonderer Betrachtung der Technologien der US‑amerikanischen Unternehmen Google Inc. und Amazon.com Inc. und der deutschen SAP AG
--
Mobile- and Cloud-Computing with special regard to technologies of the American companies Google Inc. and Amazon.com Inc. and the German SAP AG

Download Book (PDF)
Publisher: BookBoon, ISBN 978-87-403-0264-6, 129 Pages

In dieser Projektarbeit werden die Themen Mobile-und Cloud-Computing unter spezieller Berücksichtigung der Technologien der Unternehmen Google Inc., im folgenden Google genannt, Amazon.com Inc., im folgenden Amazon genannt, und der SAP AG, im folgenden SAP genannt, evaluiert. Diese Evaluierung soll einem Unternehmen als Blueprint dienen, um so die Unternehmensprozesse mit den genannten Technologien umsetzen zu können. Das Unternehmen erhofft sich dadurch eine Effizenzsteigerung durch Automatisierung, Flexibilisierung, Skalierung und Benutzerfreundlichkeit. Der Autor verbindet in dieser Arbeit verschiedenste Technologien und gibt subjektive Empfehlungen für die Nutzung der jeweiligen Technologie ab. Die Themen Mobile Computing und Cloud Computing werden zunächst seperat dargestellt. Im Anschluss zeigt Kapitel 4 wie beide Welten zusammenwirken und welche Rolle etablierte Technologien spielen. Zudem wird auf das aktuelle Thema In-Memory Computing eingegangen und dargestellt wie es sich in das Mobile- und Cloud-Computing Ökosystem eingliedert.

This project assignment evaluates and presents the topics Mobile- and Cloud-Computing with special regard to the technologies of the companies Google Inc. (Google), Amazon.com Inc. (Amazon) and SAP AG (SAP). The evaluation should serve as a blueprint for a company to implement business processes with the mentioned technologies. By using these technologies the company tries to increase its efficiency via automation, flexibilisation, scaling and usability. The author of this paper combines different technologies and gives subjective advices regarding the use of a particular technology. First the topics Mobile Computing and Cloud Computing will be shown separately. Afterwards chapter 4 will show how both technologies interoperate and the meaning of legacy technologies. Furthermore, In-Memory Computing will be explained and how it fits in the ecosystem of Mobile- and Cloud-Computing.

Content:
Mobile Computing, Cloud Computing, In-Memory Computing, Google, Amazon, SAP, Android, iOS, BlackBerry BBX, NFC, LBS, Adobe, Flash, Flex, Windows Phone 7, WP7, Sybase, SUP, Sybase Unwired Platform, SAP NetWeaver Gateway, SAP NetWeaver Mobile, SAP ITSmobile, Mobile-WebApp, Hybrid-NativeApp, Purely-NativeApp, HTML5, JavaScript, CSS3, Dart, Coffeescript, jQueryMobile, jQM, jqMobi, jQTouch, sencha touch, iUI, iWebKit, Dojo Mobile, Jo, iScroll, Ajax, Comet, Streaming, Long-Polling, XHR, XHR2, Polling, Piggyback-Polling, WebSocket, Socket.IO, Athmosphere, CometD, Kaazing, Kaazing WebSocket Gateway, Native Frameworks, Briding Frameworks, PhoneGap, Titanium, Rhodes, IaaS, PaaS, DaaS, SaaS, FaaS, HuaaS, MoaaS, Virtualisierung, Skalierung, Scale-out, Scale-up, SOA, SOAP, REST, Messaging, SQS, SNS, AMQP, JMS, RabbitMQ, Qpid, ActiveMQ, HornetQ, CAP, ACID, BASE, Map, Reduce, BigTable, Dynamo, Wide-Column-Store, Row-oriented, Column-oriented, Key-Value-Store, Graph-Store, Document-Store, CouchDB, MongoDB, HBase, Cassandra, SimpleDB, Redis, Riak, Neo4J, Replizierung, Big Data, Schema-free, Sharding, MVCC, Consistent-Hashing, EC2, EBS, S3, ElastiCache, RDS, Cloud Front, Elastic Beanstalk, Cloud SQL, Cloud Storage, C2DM, App Engine, GAE, Page Speed Service, Akamai, River, OpenShift, NetSuite, Salesforce.com, Cloud Foundry, CloudBees, Heroku, Oracle Cloud Service, Oracle Public Cloud, Database Cloud Service, Java, Scala, Ceylon, Kotlin, Groovy, JSON, NoSQL, Node.js, Node, Asynchron, Event-Driven, Non-Blocking, NIO, Event-Loop, Nginx, Android-Couchbase, 2-Tier, 3-Tier, Java EE 5, Java EE 6, JSF, Ruby on Rails, Wicket, GWT, SanssouciDB, SAP HANA, OLTP, OLAP, IMDB

Big thanks to all the proof readers!
Your feedback is welcome!

Tuesday, October 25, 2011

((Ceylon vs. Kotlin) vs. Scala) vs. The Rest of the World

The blog title sounds a bit like buzzword bingo, doesn't it? Damn, I forgot to mention Gosu.

There are quite many new brand-new-must-have-technologies these days.
There are Android, HTML5, PhoneGap, CoffeeScript, node.js, Websockets, Flex, Adobe Air, REST, JSON, BSON, AMQP, RabbitMQ, JEE6/7, Cloud (you know, everything is in the cloud today), NoSQL, SaaS/PaaS/IaaS, and of course, Ceylon, Kotlin, Gosu, Clojure, Scala, Groovy, JRuby and all the other JVM based programming languages.
So, how should look a really, really cool application? Android Mobile Frontend written in Scala, REST Interface to get some data from a server which is written in Ceylon which access a NoSQL HBase Database via Map/Reduce to read&write Big Data. Our server is hosted on AWS (plain Tomcat, Glassfish or JBoss AS on AWS or should we use OpenShift from RedHat rather than Amazon?), of course. Oops, I forgot a non-smart-phone client. Ok, web-based client written in... hmmm... JSF? GWT? Wicket? JavaFX 2.0? Flex? Silverlight? or just plain HTML5 with a ass kickin' Websocket connection to our server? Ok we pick HTML5. But when I wanna pick HTML5 and I do not wanna write so much JavaScript by myself (even if the new JavaScript API is pretty cool in HTML5) I am gonna need a full-fledged JavaScript Library/Toolkit. No problem at all. What do you want? jQuery, dojo, ExJS, MooTools, scriptaculous or YUI? Whatever... just pick jQuery as everybody does... (BTW I did not mention AJAX because it is not buzzword-noteworthy anymore. Even Comet/Bayeux got the kiss of death from Websockets...)

Puhhh, buzzword scrabble finished and application architecture defined. Nope. We have made a mistake. There isn't a compiler for Ceylon yet. Someone told me Ceylon is a vaporware until now. Ok, replace Ceylon with Kotlin. Ops, there isn't a compiler for Kotlin as well. Doesn't matter let's assume that I can run my Ceylon/Kotlin code (instead of just write them down on some slides). What should we choose? Ceylon or Kotlin? In the following you will find a short feature comparison. It is a non-offical and subjective comparison from my point of view. It relies on the information which is available until now. Found any mistakes? Just leave a comment!

Enough said. Here is the comparison. BTW I did not include Scala because it is "to academic/function/not functional enough/..." ;-)

Comparison is not finished yet. I will update it from time to time.


Ceylon
Kotlin
Source Code organization (Java's packages)
derived from the file path of the source code file e.g. Class Person in package org.j4fry.mypkg must be in directory org/j4fry/mypkg/Person.ceylon
import org.j4fry.mypkg { Person }
uses namespaces e.g.
namespace org.j4fry.Person
with import statement
import org.j4fry.Person
Semicolons
mandatory
optional
Return types (Java's void)
uses void keyword which is, in fact, a return type named Void
shared abstract class Void() of Object|Nothing {}
uses Unit
Unit is a tuple of zero components (Tuple0) e.g.
fun myFunc( ) : Unit {… }
String interpolation
shared variable Natural c := 10
writeLine("Value of c " c "!");
var c = 10
print("Value of c ${c} !")
Using types and type inference
like Java
String s = "Ceylon"
With type inference
local s = "Ceylon"
Like Scala:
val c : Int
With type inference
val c = 10
Mutable and Immutable
Mutable: local, variable (with := assignment)
class C { shared variable Natural c := 10 }
Immutable: without variable
class C { shared Natural c = 10; }
Mutable: var
public class C(){private var c : Int = 0;}
Immutable: val
public class C(){private val c : Int = 0;}
Fields and Properties (Java's Getter&Setter Freak-Show)
Actually there are only properties (like in C#)
public class C() {
public val mutable_name : String
public var immutable_name : String
get() = …
set(value) { $immutable_name = value }
}
Accessability, Visibility & Modifiers (Java's public, protected, private and default scope)
Doesn't know the usual modifiers. Uses instead the shared keyword which controls the visibility of attributes, methods, classes, etc. depending on the context e.g.
non-shared class à class only visible to classes in the same package
shared class à class visible to other packages
shared class C( ) { … }
Uses Java's access modifiers private, protected and public. Additionally internal modifier. Probably internal works like the C# internal modifier e.g. visible in same namespace?
Enums (Java's enum)
Not included. Use of clause (mention subtypes in the base-class signature) in combination with anonymous classes.
Like Java enums on steroids. You can subclass enums in Kotlin and there are some other enum features in Kotlin e.g. member overriding, enum pattern-matchin, etc.
Inheritance
Uses the extends clause in class signature but different annotations to declare overridable and overridden methods.
class Base( ) {
shared default String doSth() {…}
}
class Subclass() extends Base() {
shared actual String doSth() {…}
}
Overloading
Not supported. Use optional parameters instead. Comment of Kotlin FAQ: "Ceylon is Java-incompatible, because it does not support overloading"
Interfaces


There are some heated discussions about Ceylon and Kotline already.

Pro Ceylon

Contra Ceylon


On the following websites you could find the resources which I have used to create the above mentioned comparison:

Resources Ceylon

Resources Kotlin

Hopefully you have learnt to understand the irony and sarcasm at the beginning of this blog post. It doesn't matter which programming language you choose. It is only important to try out new things because "Standstill".means("Falling Behind")

cheers Alex