Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
45 38 32 26 20 14 10 04
April 2015
Contents
Healthy Code
April - 2015
Healthy Code
April - 2015
Healthy Code
April - 2015
Article
Charath Ranganathan
Healthy Code
April - 2015
What is UART?
Healthy Code
April - 2015
Identification
Example
Units
Description
Header
$GPGGA
UTC Time
170425.000
hhmmss.sss
17:04:25.000 UTC
Latitude
N/S Indicator
3407.8142
N
ddmm.mmmm
N or S
Longitude
11803.1425
dddmm.mmmm
E/W Indicator
E or W
West
0 = Fix not available, 1 = GPS Fix, 2
=Differential GPS Fix
Satellites Used
HDOP
1.40
Altitude
184.3
Altitude Unit
Geoidal Separation
-33.2
metres
Age of Differential
Correction
0000
seconds
Checksum
6F
Healthy Code
April - 2015
import com.pi4j.io.serial.SerialPortException;
public class GpsTutorial {
public static void main(String args[]) throws
InterruptedException {
System.out.println("=== INITIALIZING
SERIAL " +
"COMMUNICATION ===");
final Serial gps = SerialFactory.
createInstance();
GpsListener gpsListener = new
GpsListener();
gps.addListener(gpsListener);
try {
gps.open(Serial.DEFAULT_COM_PORT, 9600);
for (; ; ) {
// Loop endlessly. That is our lot in life!
}
} catch (SerialPortException ex) {
System.out.println("*** SERIAL SETUP FAILED: "
+ ex.getMessage());
}
}
The Listener
As you can see from the listing of the main class, the
GpsListener class is where most of the work is done. Let's
examine how that works.
package org.pfactor;
import com.pi4j.io.serial.SerialDataEvent;
import com.pi4j.io.serial.SerialDataListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
public class GpsListener implements
SerialDataListener {
Healthy Code
April - 2015
Healthy Code
April - 2015
The Wrap-Up
This article demonstrates basic interfacing of the RPi with
a serial device - in this case, a GPS receiver. We examined
how Pi4J provides a simple event-driven mechanism to
process the received data, and a simple regular-expression
based pattern matcher to validate the received data.
Obviously, we could add significant functionality to
this simple application such as having a threadpool that
processes the GPS data, live plots to Google Maps, etc.
Pragmatic
Programmer Quote
The real danger is not that computers will begin to think like
men, but that men will begin to think like computers.
- Sydney J. Harris
There are three kinds of death in this world. Theres heart death,
theres brain death, and theres being off the network.
- Guy Almes
Healthy Code
April - 2015
Article
Code
Jugalbandi
In 2013,Dhaval Dalalwas inspired byJugalbandi, an Indian classical music
form in which musicians have an improvised musical conversation, each using a
different instrument, while exploring a shared musical theme together akin to Jazz
in some ways. Dhaval thought, What if we could have a conversation about some
programming concepts in this way? Instead of musical instruments, what if we use
different programming languages?
Code
10 Healthy
April - 2015
De-structuring
BRAMHA: In FP, we favour simple data structures over
classes, e.g. instead of a collection ofpeopleobjects, we might
have a collection of person tuples, and containing only the
fields were interested in:
//Tuple with 2 elements - name and age
type Person = (String, Int)
val p = ("alan", 30)
Healthy Code
April - 2015
11
Pattern Matching
BRAMHA: So far weve just talked about picking apart the
structure of things, but we can generalize de-structuring into
something even more powerful: Pattern Matching(not to be
confused with string pattern matching)
BRAMHA: Lets explore this by example. Say we have a
journal with some fields.
case class Journal(op: String, amt: Double)
Code
12 Healthy
April - 2015
(save-j debit-journal)
(save-j credit-journal)
Reflections
KRISHNA: There is a difference between De-structuring
and Pattern Matching. In pattern matching, were not
only matching on relative position of elements in the data
structure, were trying to dispatch to different functions
based on a value inside the data structure! This dispatch is
a kind of conditional construct, while with de-structuring
there is nothing conditional about it.
Pragmatic
Programmer Quote
Healthy Code
April - 2015
13
Article
Naresha
Groovy
Code
14 Healthy
April - 2015
1]
Healthy Code
April - 2015
15
numbers.each(printNumber) numbers.eachWithIndex
(printNumberWithIndex)
Merging collections
Javas Collection interface declares a method addAll, which
accepts aCollectionobject as an argument. Groovy improves
on this by providing three additional flavours of addAll,
which accept an instance ofjava.lang.Iterable,java.util.Iterator,
and array of objectz respectively.
def numbers = [1, 2, 3]
numbers.addAll([4,5])
println numbers // [1, 2, 3, 4, 5]
def moreNumbers = [6, 7] as Integer[]
numbers.addAll(moreNumbers)
println numbers // [1, 2, 3, 4, 5, 6, 7]
Code
16 Healthy
April - 2015
Map operations
Groovy provides a method namedcollect for performing
map operations. The collect method applies the specified
transformation operation on each of the items in the
collection and produces a new collection.
def numbers = [3, 2, 1, 4]
println numbers.collect { it + 1 } // [4, 3, 2,
5]
def multiplyBy2 = { number ->
number * 2
}
println numbers.collect(multiplyBy2)
// [6, 4, 2, 8]
Reduce Operations
Groovy supports the most common reduce operations such
assum,min,maxout of the box. Let us see them in action.
def numbers = [3, 2, 1, 4]
println numbers.sum() // 10
println numbers.min() // 1
println numbers.max() // 4
Stack operations
Groovy providespushandpopmethods on a List out of the
box.
def numbers = []
numbers.push(10)
numbers.push(20)
println numbers // [10, 20]
println numbers.pop() // 20
println numbers // [10]
Accessing elements
Note that when you specify the keys, you dont have to
enclose them in quotes.
println capitals.get('India')
println capitals['India']
println capitals.India
Add elements
capitals.put('Nepal', 'Kathmandu')
capitals['Singapore'] = 'Singapore'
capitals.UAE = 'Abu Dhabi'
Healthy Code
April - 2015
17
Map Iteration
Healthy Code
April 2015
Vol 2 | Issue 1
Publisher:
T. Sivasubramanian
Editor:
S. Prabhu
Production:
Shweta Gandhi
Summary
Publication Address:
Disclaimer:
The articles and contents of the Healthy Code magazine
are sourced directly from the authors with their
permission. Healthy Code doesnt assume responsibility
for violation of any copyright issues by an author in
their respective article. We have made sure to the best
of our knowledge that the articles and code presented
here are without any errors. However, we cant be held
liable for any damage or loss that may arise from using
these.
- Publisher
Healthy Code
April - 2015
19
Article
Debashish Ghosh
Dependency
Injection
The Functional Way
Code
20 Healthy
April - 2015
Dependency Injection
Separation of concerns is one of the primary goals in
software engineering in general, and modularization of
software, in particular. When we develop a piece of software,
we try to organize the various functionalities into modules.
Each module represents a coherent set of behaviours of the
domain that the software is supposed to model. A module
is composed of a number of artefacts. Some of the artefacts
are intrinsic parts of the module whose lifetimes need to be
controlled entirely within the module itself. But very often
a module may need to interact with some components or
services whose lifetimes are controlled elsewhere. For
example, when the billing module of your domain model
has to interact with a payment gateway service, theres no
way you can control the lifecycle of that service from within
your module.
Its, of course, a recommended approach to keep such
dependencies as decoupled as possible from the core
modules of your application. Dependency injection is a
technique thats often used to achieve such decoupling. The
basic idea is that such dependencies are kept as part of the
environment instead of having them as part of the module
itself.
As has been said of OO design patterns[3], dependency
injection is yet another pattern thats subsumed within the
Healthy Code
April - 2015
21
Code
22 Healthy
April - 2015
Healthy Code
April - 2015
23
Code
24 Healthy
April - 2015
makes testing quite easy. Since you defer the injection of the
actual repository just before the evaluation stage, you can
supply an alternate implementation for unit testing. May
be your actual repository is based on an enterprise backend
database. But you can swap it out and plug in a simple inmemory implementation for unit testing your services.
References
The Spring Framework -http://projects.spring.io/springframework/
Guice -https://github.com/google/guice
Design Pattern in Dynamic Languages - http://norvig.
com/design-patterns/
Evans Eric, 2003. Domain Driven Design: Tackling
Complexity in the Heart of Software, Addison Wesley.
Scala http://www.scala-lang.org
The complete source code for this articles examples can
be found inhttps://github.com/debasishg/di-article
DebasishGhoshis an independent
software consultant specializing in
functional programming, domain-specific
languages and BigData technologies. A
senior member of ACM and a speaker
in conferences like QCon, CodeMeshIO
and FunctionalConf, Debasish is the
author of DSLs In Action (http://www.
manning.com/ghosh) and is working
on his second book Functional and
Reactive Domain Modeling (http://
manning.com/ghosh2). Debasish pens his
thoughts on programming and related
technologies in his blogRuminations of a
Programmer (http://debasishg.blogspot.
com) and can be reached atdghosh@acm.
org.
Healthy Code
April - 2015
25
Interview
with
Viral Shah
Co-founder of the Julia Language
Code
26 Healthy
April - 2015
Ref: http://julialang.org/
Did you start Julia as a fun project or did you have
a clear agenda in mind?
It is a mixture of both.
The motivation did come from having used all other
things that were incredibly annoying and not living up
to the mark. Its like, why cant I have good productivity
Healthy Code
April - 2015
27
for
sophisticated
code
Code
28 Healthy
April - 2015
Healthy Code
April - 2015
29
You have the Western Ghats with all the species. What
happens is that suddenly a town starts growing in the
middle, and so the species lose the connectivity in terms
of their movement.
It so happens that for the wildlife population you need
a large connected landscape for genetic dispersal. Or
if food or water run out in one part, they need to move
to another place where they can find food or escape a
particular disease or find a breeding environment.
Circuitscape uses sophisticated graph theory. If there
is congestion between a place that is good for them and
not good for them, the place gets disconnected and you
lose out all the species. You also lose diversity. The
premise is that in your conservation efforts, how do
you identify what tracks of land the animals are likely
to take. How can one create some sort of highways for
them?
Then they can migrate without clashing with the
humans.
For example, if you see the whole elephant issue
in Karnataka, the elephant migration corridors are
completely taken over by human beings. As the cities
are growing, the elephants run through them and you
get a clash between conservation and development.
Circuitscape takes satellite data and simulates a
landscape. It is like an electrical circuit. It takes every
cell from the image and assigns it a value based on color.
Water and urban areas get high resistance, whereas
vegetation will get low resistance. Thus, you build a
resistive network with millions of resistors.
My colleague Brad showed high correlation between
how current flows through a circuit with mapping
corridors for conservation. And it works incredibly
well compared to many other approaches.
WOW! Extremely interesting!
Ref: http://www.circuitscape.org/_/rsrc/
1360176996173/about-the-authors/SB_surf.jpg
For all the work you have done, dont you think
the environment is very conducive in the US?
How do you compare that with Bangalore?
Interestingly, with email, Github and internet, you can
do all these from anywhere. It is as good as being there.
In fact, all the four co-inventors of Julia had not met
each other for the first two years. You will be surprised
to know that many contributions to Julia come from
Bangalore.
People often like to simplify and say the best
programmers can be found only in Silicon Valley. But
that is not the case. We have contributions coming for
Julia from all timezones, 24 hours a day.
Pragmatic
Programmer Quote
Yes.
Academics, policy makers and researchers use it very
widely worldwide. The first version was in Java. It then
got written in Matlab and eventually in Python, which
is when it really took off. Users want to work with
billions of cells and we may have to rewrite it in Julia.
We hope to find the time sometime! It was an amazing
experience for me as well.
Viral, very curious to know, do you trek?
Outside of programming, I love outdoors, I love
trekking it was useful for Circuitscape, though I
havent trekked a lot after moving back to India. I did
however get a chance to do a one-week trek in the Great
Himalayan National Park, and that was a treat!
Code
30 Healthy
April - 2015
Technology Conferences
Bangalore:
J. N. Tata Auditorium
National Science Symposium
Complex (NSSC)
Sir C.V.Raman Avenue,
Bangalore, India.
Venue:
Hyderabad:
Hyderabad Marriott Hotel &
Convention Centre
Tank Bund Road
Opposite Hussain Sagar Lake,
Hyderabad, India.
Healthy Code
April - 2015
31
Article
Madhukara Phatak
Introduction to
Apache
Code
32 Healthy
April - 2015
Network Speed
In 2000s, most of the organizations had limited bandwidth
inside their data centers resulting in slower processing as it
was expensive to set up effective network.
With the advancement in hardware and software technology,
there was an increase in the network speed. In a latest stat,
Amazon said that it can sync between two datacenters over
the network faster than writing to a SSD (solid-state drive)
disk. Thats the speed we are talking about!
Multi-core environment
According to Moore's law the number of transistors in a
dense integrated circuit doubles approximately every two years.
In the 2000s, his prediction proved to be accurate. There
were systems driving clock speed of single core, which
went from 700hz machines to 1.5ghz and more. So, most of
the software and hardware stack was optimized for a single
core performance.
In the last decade, we stopped at 3.2ghz for a single core.
After that we saw an explosion of multi-core machines.
Multi-core machines usage became widespread. Even the
phone you carry around has more cores than the machine
in 2000s! So, the newer hardware and software stack has to
exploit the multiple cores available in the machine.
Software evolution
Hardware evolution
Healthy Code
April - 2015
33
Framework
development
for
distributed
system
Apache Spark
Apache Spark is a fast and general engine for large-scale
data processing system. It is a distributed processing
framework similar to Hadoop Map-Reduce. It uses HDFS
or its relative file systems as storage layer.
Code
34 Healthy
April - 2015
5. Prospering ecosystem
In Hadoop, ecosystem was an afterthought. The ecosystem
projects like Hive and Pig didnt have access to Map/
Reduce abstractions. All they can do was generate Map/
Reduce programs on the fly and run them on cluster. This
severely affected their performance.
With Spark, there was a plan for ecosystem from day
one. The ecosystem libraries like Pregel and MLLib were
developed side by side with core Spark. So, in Spark, all
libraries have access to the same level of abstraction as
the main API. This makes them first class citizens on the
platform.
Figure 3.0. Code-size comparison
3. Runs everywhere
Spark runs everywhere. It is designed to run on different
platforms and different distributed systems. It can run on
Hadoop 1.0, Hadoop 2.0, Apache Mesos or stand alone Spark
Healthy Code
April - 2015
35
Summary
I have given you a simple introduction to Apache Spark
that may ignite the interest in you. Spark has changed
the way we use big data. It allows companies across the
industries to run different kinds of analysis on a single
platform. With the future proof architecture and thriving
ecosystem, Spark is going to be the next milestone in the big
data development.
Madhukara is a big
data consultant. He has
trained more than 2000
people on Hadoop, Spark
and related technologies.
He is passionate about
technology and want to
build software products
to improve people's life.
Madhukara is an open
source enthusiast and
blogs actively at http://
madhukaraphatak.com/.
Code
36 Healthy
April - 2015
Pragmatic
Programmer Quote
Healthy Code
April - 2015
37
Article
Vasanth Gopal
Rea c ti v e
Progra m m ing
Code
38 Healthy
April - 2015
Healthy Code
April - 2015
39
with React, Meteor and Elm. I assume that the reader is well
versed with basics of HTML and Javascript.
React JS
React (http://facebook.github.io/react/) is intended to help
developers build large applications that use data that
changes over time. Its goal is to be simple, declarative and
composable. React only handles the user interface in an
app. It is considered to only be the Viewin the Model
ViewController (MVC) software pattern, and can be used
in conjunction with other Javascript libraries or larger MVC
frameworks.
Step 1
React views are defined using a render()method which
returns the HTML to display. HTML templates interpret
data objects and render them to DOM. The templates
areresponsive. Any change in the data objects automatically
updates the DOM.
Lets define aReactclass, which renders the container for the
list of Todo items.
// file name: "TodoApp.jsx"
var TodoApp = React.createClass({
render: function(){
return <div>
<header id="header">
<h1>todos</h1>
<input ref="newField" id="new-todo"
placeholder="What needs to be done?"
onKeyDown={this.handleNewTodoKeyDown}
autoFocus={true} />
</header>
<section id="main">
<ul id="todo-list">
{todoItems}
</ul>
</section>
</div>
}
})
Code
40 Healthy
April - 2015
Step 2
The React view is then rendered and inserted into the DOM
usingReact.render()method.
Render the created container into the body of the HTML
page.
//File name: "TodoApp.jsx"
React.render(<TodoApp />, document.getElementById
('body'));
Step 3
Define the Enter keydown event for the input to read and
save the new todo item. Therefsproperty has the all DOM
elements having thereffield. Functions register toeventsand
any application of the event automatically triggersthe
registered function. The function then propagates the
changes across the application.
// File name: TodoApp.jsx
handleNewTodoKeyDown: function (event) {
if (event.which !== ENTER_KEY) { return;}
event.preventDefault();
var val = this.refs.newField.getDOMNode().value.
trim();
if (val) {
// Set the value to model.
this.refs.newField.getDOMNode().value = '';
}
}
Step 4
Define aReactclass which for the individual Todo Item.
//File name: TodoItem.jsx
var TodoItem = React.createClass({
render: function () {
return (
<li>
<input className="toggle"
type="checkbox"
checked={this.props.todo.completed}
onChange={this.props.onToggle}/>
<label>
{this.props.todo.title}
</label>
<button className="destroy"
onClick={this.props.onDestroy} />
</li> );
}
});
Step 5
Implement toggle and destroy functionality for the todoitem
//File name: TodoApp.jsx
toggle: function (todoToToggle) {
//Toggle the completed state in model.
},
destroy: function (todo) {
//Delete the todo model.
}
Meteor
Meteor (https://www.meteor.com/) is an open-source realtime JavaScript web application framework written on top
of Node.js. It integrates tightly with MongoDBand uses
theDistributed Data Protocoland apublishsubscribepattern to
automatically propagate data changes to clients in real-time
without requiring the developer to write any synchronization
code. Meteors goal is to allow developers tobuild apps that
are a delight to use, faster than you ever thought possible
Step 1
Create a HTML template with nametodoappfor the header
and container of the app. It holds a sub-templatemainwhich
holds the list of Todo items. The individual Todo item
template with nametodois also defined. Here again, HTML
templates interpret data objects and render them to DOM.
The templates areresponsive, and any change in the data
objects automatically update the DOM.
todoapp.html
<template name="todoapp">
<header id="header">
<h1>todos</h1>
<input id="new-todo"
placeholder="What needs to be done?"
autofocus>
</header>
{{#if todos}}
{{> main}} {{/if}}
</template>
<template name="main">
<section id="main">
<ul id="todo-list">
{{#each todos}}
{{> todo}}
{{/each}}
</ul>
</section>
</template>
<template name="todo">
<li class="{{#if todo_completed}}completed{{/
if}}">
<div class="view">
<input class="toggle"
type="checkbox"
checked="{{#if todo_completed}}
checked{{/if}}">
<label>{{title}}</label>
<button class="destroy"></button>
</div>
</li>
</template>
Step 2
Include the container templatetodoapp in the body of the
HTML.
todoapp.html
<body>
<section id="todoapp" data-framework="meteor">
{{> todoapp}}
</section>
</body>
Step 3
Create a new Mongo collection for the list of todos. Any
Mongo DB operation can be directly performed on this
collection. Meteor goes one step ahead of React and makes
sure that the database, server and all clients maintain the
same state of data. This achieves instantresponsivenessand
every user stays updated.
//File name: todoapp.js
Todos = new Meteor.Collection('todos');
Healthy Code
April - 2015
41
Step 4
Bind enter keydown event to the input field to read and
save the new todo item. The events are binded within
theTemplate.<templatename>.events object. The entered value
gets directly inserted into Mongo using the Todos collection
insert option.
//File name: todoapp.js
Template.todoapp.events = {
'keydown #new-todo': function(event){
if (event.which !== ENTER_KEY) { return;}
var title = String(event.target.value || '');
Todos.insert({
title: $.trim(title),
completed: false,
created_at: new Date().getTime()});
}
}
Step 5
Define todos() function which reads and returns the list of
todos from Mongo. Just a single line of code is enough to
read contents from database and pass them to template
which auto renders that.
//File name: todoapp.js
Template.main.todos = function() {
return Todos.find({}, {sort: {created_at: 1}});
}
Step 6
Define toggle and destroy events for the todo item template.
//File name: todoapp.js
Template.todo.events = {
'click input.toggle': function() {
Todos.update(this._id, {$set: {completed: !
this.completed}});
},
'click button.destroy': function() {
Todos.remove(this._id);
}
};
Thats it!. The Meteor based Todo app is ready. To run the
app, you have to install meteor using
curl install.meteor.com | /bin/shRun the app with
keywordmeteor.
While React focuses only on the view part of the app, Meteor
is a complete package offering to keep every module in sync.
Code
42 Healthy
April - 2015
Elm
Elm (http://elm-lang.org/) is a functional programming
language for declaratively creating web browser based
graphical user interfaces. Elm uses the Functional Reactive
Programming style and functional graphical layout to build
user interface.
Elm application
An Elm application is broken up into four distinct parts: 1.
Model - a full description of the application as data 2. Update
- a way to update the model based on user actions 3. View
- a way to visualize our model with HTML 4. Inputs - the
signals necessary to manage events
Lets build the TODO app using Elm.
Step 1
Create a model which describes the full application as data.
Filename: Todo.elm
type alias Model =
{
tasks
: List Task.Model
field
: String
,
uid
: Int
}
Step 2
Create a HTML view for the todo container with list of todos.
Each of the DOM element is specified with comma separated
attributes and intended to follow the tree structure. The link
between the model and HTML is established here and any
changes to model, automatically updates the view, resulting
in instantresponsiveness.
Filename: Todo.elm
view : Model -> Html
view model = div
[
class
"todomvc-wrapper",
style [ ("visibility", "visible") ]
]
[ section
[ id "todoapp" ]
[ lazy taskEntry model.field
, lazy taskList model.tasks
]
]
ThetaskEntryis defined as:
taskEntry : String -> Html
taskEntry task =
header
[ id "header" ]
[ h1 [] [ text "todos" ]
, input
[ id "new-todo"
, placeholder "What needs to be done?"
, value task
, name "newTodo"
, Task.onFinish (Signal.send actions
Add) (Signal.send actions NoOp)
]
[]
]
And thetaskListis defined as:
taskList : List
Task.Model -> Html
taskList tasks =
section
[ id "main"
]
[ ul
[ id "todo-list" ]
(List.map (Task.view taskActions) (tasks))
]
13 -> Ok enterMessage
in
on "keydown" (Json.customDecoder keyCode select)
identity
Step 4
Define the view for the individual task. Two actions are
performed here: Thecompletedaction and thedestroyaction.
Events are triggered on user action, which sends signal to
update the dependent views and broadcasts the changes.
Filename: Task.elm
view : LC.LocalChannel (Int, Action) -> Model ->
Html
view channel task =
li
[ div
[ class "view" ]
[ input
[ class "toggle"
, type' "checkbox"
, checked task.completed
, onClick (LC.send channel (task.id,
Completed (not task.completed)))
]
[]
, label
[ text description ]
, button
[ class "destroy"
, onClick (LC.send channel (task.id,
Delete))
]
[]
]
]
Step 3
Step 5
The actions for the above view are defined here. Each action
calls the Todo models UpdateTask which is defined later
below.
Filename: Task.elm
onFinish : Signal.Message -> Signal.Message
Attribute
onFinish enterMessage escapeMessage =
let select key =
case key of
->
Filename: Task.elm
type Action
= Completed Bool
| Delete
Each action is implemented below.
update : Action -> Model -> Maybe Model
update update task =
case update of
Completed bool ->
Just { task | completed <- bool }
Delete ->
Nothing
Healthy Code
April - 2015
43
Step 6
Finally, define the type of actions which can be performed
on the model. The models are updated when the signals are
triggered. Note that the edge cases like empty descriptions
are handled here.
Filename: Todo.elm
type Action
= NoOp
| UpdateField String
| Add
| UpdateTask (Int, Task.Action)
Each action definition is implemented below.
update : Action -> Model -> Model
update action model =
case action of
NoOp -> model
UpdateField str ->
{ model | field <- str }
Add ->
let description = String.trim model.field in
if String.isEmpty description then model else
{ model |
uid <- model.uid + 1,
field <- "",
tasks <- model.tasks ++
[Task.init description model.
uid]
}
UpdateTask (id, taskAction) ->
let updateTask t =
if t.id == id then
Task.update taskAction t
else
Just t
in
{ model | tasks < L i s t . f i l t e r M a p
updateTask model.tasks
}
Conclusion
We learned how React, Meteor and Elm provide instant
responsiveness. Modularity helps in better code and makes
it easier to handle errors within the modules. Immutable
components help to scale systems on demand and being
reactive to messages and events make the whole system
responsive, thus providing a seamless user experience.
Code
44 Healthy
April - 2015
Interview
with
Healthy Code
April - 2015
45
Code
46 Healthy
April - 2015
Healthy Code
April - 2015
47
Interview with
Fred George
Fred George, who has worked
with more than 70 programming
languages and a proponent of
Microservices Architecture, talks
to Healthy Code on a number of
topics.
RubyConf 2015
- Anisha Narang
Anisha brings you coverage
of the Ruby conference in Goa
this month.
Owned and Published by T. Sivasubramanian. Published from 11/6, First floor, Fourth street, Padmanabha Nagar, Adyar, Chennai 600020 and printed by K. Elumalai, at Sakthi Scanners (P) Ltd, 7, Dams Road, Chindadripet, Chennai - 600002. Editor: S.Prabhu.
Code
48 Healthy
April - 2015