Sadek Drobi’s Blog

December 15, 2008

RefX :: Innovation is often not at your expectations or knowledge level !

Filed under: Architecture, Conferences, D90, LinQ, QCon, Security, Volta, ajax, gwt, microsoft, web 2.0 — Sadache @ 12:08 am

DSC_2064

 DSC_2073 DSC_2065  DSC_2071 DSC_2068

@QCon SF, I attended a presentation of Erik Meijer in which he talked about research projects he is involved in, including the Volta project. He talked about an interesting problem that is ignored when we talk about Ajax application and especially when we talk about solutions like GWT that make you feel home while programming for the web. In such an experience, and before splitting your application and deploying it on the web, you feel quite secured. Anyway, often, it is not so important to look for securing inner computer guts communication when there is no network involved. Evil shows up when it is time to go live, to the clouds. There you are not communicating through inner channels but rather through public Internet network.

(more…)

November 10, 2008

RefX:: ORMs, Relational Data, Mismatch, LinQ and DSLs

Raw00078 Raw00170 DSC_0191

Having worked with several Object-Relational mapping frameworks in the last few years, I got to a point where I couldn’t justify their complexity in my project. We often talk about the mismatch between the database and the object worlds, and that is where ORMs are often stated and referenced for “bridging the gap”!

Well I prefer to call it lifting the gap, or highering the gap, to have it now between DAOs and the rest of the code than having it between database and code.But I wouldn’t call this in any way reducing the gap.

(more…)

November 2, 2008

Code Safety and Correctness is a matter of Mindset Cultured by the Language

Filed under: Agile Programming, Architecture, C#, D90, Decipline, Haskell, video-portrait — Sadache @ 10:27 pm

In my trip through Haskell programming I keep discovering how clean and enjoyable the language is. By the end I am someone that loves doing abstractions and I guess I’ve found my world.

I discussed with some colleagues lately how a programming language creates a whole culture around it. This culture inherits from language properties and shapes the language programming style.

(more…)

October 31, 2008

REFX :: Event Stream Processing: Scalable Alternative to Data Warehouses?

Filed under: Architecture, InfoQ — Sadache @ 8:50 pm

Dan Pritchett suggests that analyzing streams of events using Event Stream Processor could be an interesting alternative solution to data warehousing applications, which have, in his opinion, important downsides in terms of cost, scalability and reactivity.

(more…)

October 11, 2008

More languages on top of Erlang virtual machine

Filed under: Architecture, Functional Programming, InfoQ, Polyglot Programming — Sadache @ 9:49 am

Erlang virtual machine – BEAM – hosts an increasing number of languages. Reia, a Python/Ruby like scripting language and Lisp Flavoured Erlang have recently been released. Debasish Ghosh reflects on this trend while other authors try to outline other possible language variants inspired by Ruby or Haskell.

(more…)

September 12, 2008

Architecture Life Span:Implications on your Business and how to build more Long-lasting Architecture

Filed under: Architecture, InfoQ, Refactoring — Sadache @ 9:35 pm

Introducing the concept of architectural shelf life, Dan Pritchett defines the average duration of an architectural life span. Stressing that failing to evolve the architecture at the end of its life span may have important business implications, he provides some advices that aim at facilitating architecture update with new technologies and patterns, thus making architectures last longer.

(more…)

June 7, 2008

Designing for Spam: A Challenge for the web?

Filed under: Architecture, Business Architecture, InfoQ, Threat-Driven-Modeling — Sadache @ 1:55 am

The increasing activity and hostility of spammers and the sophistication of their spamming tools are a constantly growing concern for the web. The recent spam attack on Craigslist triggered many reactions in the blogosphere seeking to analyze spammers’ techniques and possible remedies and to consider the implications that the spam’s spread may have on architecture.

(more…)

June 1, 2008

And you get all the VM libraries for free! Is it actually what I want when I switch languages?

DSC_0459 So it is getting more and more interesting. A vast number of languages available. And they are even available on your favorite platform. So you may not need anymore to beg for a process of changing a deployment environment to change your programming tools. It is all changing, and you may now start thinking about what language or paradigm suits best the domain or even the sub domain you are trying to model.

Everyday we hear about languages implementations on the JVM or the CLR. Every language has its own taste and semantics. All of these implementations try the best to satisfy an important second promise which is leveraging the preexisting platform libraries and giving an easy access to them from within that language. So on the CLR you get a promise of an easy access to all the .NET framework, and from Java, well, to the J2EE enormous libraries.

Well designed .Net libraries might be bad designed F# libraries

Some days ago I was trying to solve a small problem using F# (a new member to the .Net family). The reason I chose F# for this problem is the functional paradigm, my specific problem was easier to model using functional paradigm than any other paradigm. What I noticed while using F# is how easy it was to access the large .Net libraries, but I also noticed how can that potentially affect my way of programming. As I already mentioned the reason I chose F# was its semantics, I realized that .Net don’t talk F# and to access it I had to program with its semantics: imperatively, with a command like style almost dropping the expression oriented style that was one of the reasons I chose the language for!

Worse, this drew my attention to how this promise of 100% integrity with the preexisting libraries can affect the language design and implementation. Looking at implementations of popular languages like Ruby and Python on the JVM/CLR one can notice concepts that have almost forced in the languages (like attributes and signatures) . I guess these additions add noise to the language and to the code written with them, but that leads to an important question: How languages should communicate in a multilingual project? And what and where should be the seams when communicating between them?

Some libraries and frameworks are not even necessary for other languages, some just don’t fit, and some need to be wrapped and adapted for the new language

Before trying to think how to communicate between languages, I need to think about what is the kind of libraries I need for the new language. I mean of course it might be technically possible to use Spring and Hibernate when programming JRuby. But in case it is your first choice then, I guess you might be missing the point. There are a lot of frameworks and libraries that have been constructed because of limitations of the language. That is why you need to think twice before just accessing a foreign library because it might be supported natively by your language of choice or its supporting libraries.

Nonetheless , there are some necessary libraries that just don’t exist in your language of choice, and it would be kind of nice to have the painless access to them. But on the other hand, and as stated previously, these libraries don’t talk your language. It is somehow senseless, for instance, to specify type parameters while accessing strongly typed APIs from a dynamic language like Ruby, or say implementing strategies or writing 10 lines of imperative code for configuring a mutable object from a functional programming language like F#.

Some of these necessary APIs can be adapted for the target language. So in this case our issue is solvable by wrapping these well thought mature APIs to make them fit better in the target language paradigm. This can be done using abstractions while leaving other unnecessary details behind like state or type casting. This makes them less intrusive on your paradigm or language. Some libraries’s paradigm, however, is impossible to hide, and in this case you either need an equivalent library for your language, or you need to think carefully about your modules and boundaries to be able to use different libraries with different paradigms without one module being intrusive on another.

Understanding properties and semantics of each used language is the key to a better integration and communication

Each programming language is built and designed based on some theories, principles and concepts. Understanding these does not only help you in your decision of language choice, but this also helps you identifying where and how languages should be communicating. So for example modules written with functional programming languages can be imagined as stateless services that take an input and yield an output, modules written using OOP as holding the state, and modules written with configuration languages place some global, most probably immutable, variables into the environment. This thinking also helps defining barriers between modules to identify when the scope of one language ends for the starting edge of another.

Finally

In this post I tried to draw attention to a hairy, in my view, promise we get from language specification implementers of a seamless integration with existing libraries and frameworks. I guess in the no-fit case, the seam will be in your code and it will obscure it and add noise to your language rather than nicely being abstracted behind a foreign API wrapper. Proper design is instrumental for a non intrusive integration. Properties of each of the used language and frameworks should be considered.

May 12, 2008

Why Haskell Matters -> Abstraction :: Multi Inheritance, Interfaces, Extension Methods and Type Classes

Filed under: Architecture, Functional Programming — Sadache @ 2:52 pm

Motivated by my recent interest in Haskell, I thought it might be a good idea to share my experience and my thoughts about the programming language. So I decided to write a series of posts that represent my personal observations about why I think that Haskell can be a good fit for enterprise applications development. I’ll try in these posts to present my ideas on different levels (enterprise, architecture and software modules). The aim is not to criticize any of the mainstream programming language but rather to do an enterprisey introduction of why Haskell is good for enterprise development.

In this post I’ll try to dive a bit into abstraction tools available in programming languages. I’ll try to observe the effect that these abstraction constructs have on the overall design and architecture.

(more…)

May 9, 2008

Crosswords :: Should Architecture Rewrite be Avoided?

Filed under: Architecture, Refactoring — Sadache @ 7:08 pm

As it gets more and more difficult to adapt software to new demands, the temptation to rebuild it in order to update the architecture grows stronger. For this risky undertaking it is essential to choose the right strategy. Several authors provide insights into advantages and disadvantages of different possible options in terms of cost, technical complexity and potential commercial risk.

(more…)

« Newer PostsOlder Posts »

Powered by WordPress