Orangescrum Premium Plan is Live Today!

orangescrum_signup-300x147We are excited to announce that the Orangescrum Premium Plan is gone LIVE today. The beta testing is over successfully. Today, Orangescrum is open for individuals, small businesses and enterprises. It’s an efficient Project Collaboration Tool that gives you full visibility and control over your projects. It is an agile project management tool for perfect team collaboration, project tracking, document sharing and a discussion board for the team.

Inside Orangescrum:

Orangescrum offers all the basic features you need to smooth running of your project.

Here are some key highlights of Orangescrum:

  • Create/Assign/Track Tasks
  • Project & Team Collaboration
  • Secured File sharing using Google Drive and DropBox
  • Get conversations under single thread
  • Faster communication with Email Notification
  • Create & Track Milestones
  • Respond via email/mobile
  • Observe activities on a single page
  • Can be used as a Bug/Issue Tracker/Ticketing system

Pricing:

Orangescrum pricing is simple and flexible; pay-as-you-go and no long term obligations.
Orangescrum is available rightaway in Basic, Premium and Enterprise Editions. For more information visit Orangescrum at,

http://www.orangescrum.com/pricing

sign-up-btn

 

Things you must do after Apps development

mobile_marketing-large

Android and iOS both are the most lucrative mobile app development platform. Although Apple is the dominant player in US, Android has the widest customers around the world. Hence for business requirements, both iOS and Android is the most viable option. With over 850,000 applications in the Google Play and still counting Android has become the most versatile platform for the businesses as well as individuals to release any sort of apps in the market. Whereas App Store accounts for over 40 billion apps purchases and possesses around 775,000 apps ‘and still counting’.

After publishing the application to the App Store and Google Play, it is essential to promote those apps for generating revenue. Developers should popularize their apps over web to attract the attention of customers. Here are few ways to market and promote your applications on application stores.

Simultaneous App marketing and Development

Don’t wait till you finish developing your app; instead start marketing when the development process is ongoing. You could setup a website or a blog about the application you would be releasing in future. You could also promote the concept of your application through blog or social media websites. Developers should also write articles and reviews on topics and products related to the type of application they are willing to develop. This would help to gain visibility on the web as well as making people familiar about the idea of the applications. All the articles and app promotion through social media and blog posting has to be relevant.

Search optimize your Google Play and App Store Page

Every application released on the Google Play and App Store has its own page. Customers and users would come to this page through links in articles, blogs and social media updates. Developers will have just few seconds to persuade their possible customers through their page hence, the contents and information on the page has to be compelling. It would help if the app is named smartly i.e. the name should reflect the purpose of the application. Developers should also take utmost care while designing the app icons. It would be helpful if high resolution screenshots are also included in the Google Play and App Store page.

Involve your Friends, Family any one you can

The first few days of the release of the application to the application stores are the most crucial time which would decide the future of your apps promotion. Most users rely on the ratings given to the application before actually downloading it to their mobile device. Along with the rating, comments and reviews also matters. If the app gets a good number of downloads and has good ratings, there is a chance that it will be placed in the top list of best selling app or staff picks section.  Hence, ask your friends and family to give 5-star ratings to the applications, in fact ask as many people you know to give your application a 5-star rating and write impressive comments and reviews about the applications. Ensure a higher number of downloads by requesting trusted friends to download the app.

Support:

Offer continuous support to the users by addressing their queries and comments. If a user has raised an issue regarding app’s performance or functionality, address them by fixing the issue and then reply their comments by intimating them about the bug fixes. It facilitates developers to build a trust with their customers. Also watch out for negative feedback and bad reviews and remove any prevalent bugs that might be hampering your app’s reputation.

Android Application Development and iPhone application development are considered to be the best mobile app development platform for businesses. Because of its wider reach, it facilitates them to promote and market their application to a wider group of people.

The Best Practices for Rails App Development

“Rails” is an amazing framework to develop web applications quickly through its inbuilt helper libraries. However, there are certain best practices that you should follow to get your rails app perform better.

Conventional programming methods:

Most developers love to place the logic inside the controller and use the model for the “Active Record” operation only.

This leads to a “Fat controller and skinny model” interface which eventually kills an app’s performance and looses the maintainability of the code. This way, application stops responding when the load is high.

What should be the best practices?

Below, I have mentioned some of the most essential and useful practices that should be followed by every Ruby on Rails developer.

Fat Model, Skinny Controller

Write all the non-response-related logics inside the model with nice and testable methods; and don’t forget to use comments.

You should follow the Ruby on Rails motto i.e. “Fat Model, Skinny Controller”. Because the “skinny” controller offers a nice interface between the view and model.

By moving any logic that isn’t about the response (for example, setting a flash message, or choosing whether to redirect or render a view) to the model instead of the controller, not only you can reuse the codes where

possible but you’ve also made it possible to test your code.

Reusable Scopes

A scope is a set of constraints on database interactions (such as a condition, limit, or offset) that are chainable and reusable.

Let’s see a simple example:

[sourcecode language=”plain”]
def index
@paid_users= User.where(“is_active=? AND is_paid=?”,true, true).order(“name”)
@unpaid_users= User.where(“is_active=? AND is_paid=?”, true, false).order(“name”)
[/sourcecode]

You can change it to this:

[sourcecode language=”plain”]
def index
@paid_users= User.paid.all
@unpaid_users= User.unpaid.all
end[/sourcecode]

Then, you can move the logic to your User model, where it might look like this:

[sourcecode language=”plain”]
scope :paid, lambda { where(“is_active=? AND is_paid=?”,true, true).order(“name”) }
scope :unpaid, lambda { where(“is_active=? AND is_paid=?”,true, false).order(“name”) }
[/sourcecode]

Using the methods User.paid.all and User.unpaid.all, we’ve not only made it simpler to test our code, but also made it possible to reuse that same set of conditions in another location.

You should avoid the use of default_scope because:

  1. You can’t override default scope
  2. default_scope will affect your model initialization

Package Your Code into Gems and Plugins

Writing a particular set code more than once for different applications is exhausting as well as redundant, hence, it is advisable to create a plugin or gem to use it further. It will save your development time and effort.

Manage Your Attribute Access

While creating or updating an object, Rails app usually assigns every attribute without checking the data. Validation only prevents the bad data but doesn’t exactly prevent it from overwriting an attribute that we don’t want to change.

To solve this issue, ActiveRecord is implemented which uses two methods: attr_protected and attr_accessibile.

Using attr_protected, you can declare a blacklist of variables you don’t want to be assigned and using attr_accessible, you can declare a list of variables that can be assigned.

By implementing above steps, you could prevent any mass assignment that could occur via your application’s forms; because if the form does not have the field for a given attribute, doesn’t mean a hacker can’t add it to the request.

From a security perspective, using attr_accessible and attr_protected forces you to think about what should be editable and how to protect the ways in which your class’s attributes are set.

Use Non-database-backed Models

In Rails app, Model is not restricted to associate with table. To organize application logic, write it down by creating a new model.

Virtual Attributes

If you are manipulating data before passing it to a model, use virtual attributes instead.

Virtual attributes are a simple own getter and setter methods.

For example
To set a user’s name:

[sourcecode language=”plain”]
@user = User.new(params[:user])
@user.first_name, @user.last_name = params[:user][:name].split(" ", 2)
[/sourcecode]

By using virtual method inside the model

[sourcecode language=”plain”]
def name=(value)
self.first_name, self.last_name = value.to_s.split(“ ”, 2)
end[/sourcecode]

Whenever you set the name attribute, your model will automatically set the first_name and last_name attributes for you, even though name doesn’t exist in the database.

Use Translations

Rails i18n framework makes it easy to declare the map of an abstract context to a string.

All you need to do is maintain a YAML file of translations, and use I18n.t / t in your code where there is data shown to the use.

I18n is useful to avail your app to more locales.

Using of after_commit callback

Use “after_commit” instead of using after_create/after_update/after_destroy callbacks to start background processes. Because, in relational database, several operations are wrapped in one unit and pass or fail of transaction depends upon all the operations.

If you use after_create/after_update/after_destroy in first model and if any error occurs in the second model then the background process will raise NotFoundError.

Use select in ActiveRecord association

Use select with has_many and belongs_to on Active Record Associations to speed up the query.

For example:

[sourcecode language=”plain”]
class Patient < ActiveRecord::Base
belongs_to :physician, :select => ‘id,name, surname’
end

class Physician < ActiveRecord::Base
has_many :patients, :select => ‘id,name, physician_id’
end
[/sourcecode]

Fix N+1 Queries

N+1 Queries is a serious database performance problem. Use “Bullet” gem to avoid N+1 query problem

Conclusion:

Employing the above mentioned Rails best practices would keep the code cleaner and reusable.

The application performance would increases tremendously and the maintenance of the code will be easier.

How to Install & Configure Redis-Server on Centos/Fedora Server

‘Redis’ is an Open source key-value data store, shared by multiple processes, multiple applications, or multiple Servers. Key values are more complex types like Hashes, Lists, Sets or Sorted Sets.

Let’s have a quick look on the installation steps of “Redis

Here we go…

Step – 1

First of all we need to switch to superuser & install dependencies:

[code language=”html”]
su
yum install make gcc wget tcl
[/code]

Step-2
Download Redis Packages & Unzip. This guide is based on installing Redis 2.8.3:

[code language=”html”]
wget http://download.redis.io/releases/redis-2.8.3.tar.gz
tar xzvf redis-2.8.3.tar.gz
[/code]

Step-3
Compiling and Installing Redis from the source:

[code language=”html”]
cd redis-2.8.3
make
make install
[/code]

Step- 4

Starting Redis server by executing the following command without any argument:

[code language=”html”]
redis-server
[/code]

Step-5

Check if Redis is working. To check, send a PING command using redis-cli. This will return ‘PONG’ if everything is fine.

[code language=”html”]
redis-cli ping
PONG
[/code]

Step-6

Add Redis-server to init script. Create a directory to store your Redis config files & data:

[code language=”html”]
mkdir -p /etc/redis
mkdir -p /var/redis
[/code]

Also we need to create a directory inside “/var/redis” that works as data &  a working directory for this Redis instance.

[code language=”html”]
mkdir /var/redis/redis
[/code]

Step-7

Copy the template configuration file you’ll find in the root directory of Redis distribution into /etc/redis/

[code language=”html”]
cp redis.conf /etc/redis/redis.conf
[/code]

Edit the configuration file, make sure to perform the following changes:

  • Set daemonize to yes (by default it’s set to ‘No’).
  • Set the pidfile to /var/run/redis.pid
  • Set your preferred loglevel
  • Set the logfile to /var/log/redis.log
  • Set the dir to /var/redis/redis
  • Save and exit from the editor

Step-8 
Add the Redis init script.

[code language=”html”]
vi /etc/init.d/redis
[/code]

And paste the following codes to it

[code language=”html”]
#!/bin/sh
#
# chkconfig: 345 20 80
# description: Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and message broker.

# Source function library.
. /etc/init.d/functions

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis.pid
CONF="/etc/redis/redis.conf"

case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server…"
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping …"
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown …"
sleep 1
done
echo "Redis stopped"
fi
;;
restart)
stop
start
;;
*)
echo "Please use start or stop as first argument"
;;
esac
exit 0
[/code]

Save the file and exit from the editor.

Step-9
Give appropriate permission to the init script

[code language=”html”]
chmod u+x /etc/init.d/redis
[/code]

Step-10
To run the Redis server at startup we need to add it to the chkconfig list.

[code language=”html”]
chkconfig –add redis
chkconfig –level 345 redis on
[/code]

Step-11
Finally we are ready to start the Redis Server.

[code language=”html”]
/etc/init.d/redis start
[/code]

The redis server will start automatically on system boot.

Conclusion:

‘Redis’ also supports datatypes such as Transitions, Publish and Subscribe. ‘Redis’ is considered more powerful than ‘Memcache’. It would be smart to bring ‘Redis’ into practice and put ‘Memcache’ down for a while.

We provide one-stop solution by utilizing Redis server with Rails , PHP applications and deploy in cloud services such as AWS to make sure that the application is fully scalable.

You can also check the compression of Memcached vs Redis, to know more information on which one to pick for Large web apps?

Do you have anything to add here? Share your thoughts with comments.

It’s always pleasure to hear from you and for5 any assistance and support on AWS you can write us at info@andolasoft.com.

Mastering J2EE Design Patterns and Navigating Through the Tiers

Design pattern is in general-a repeatable solution to a commonly occurring issue in software designs. These patterns can also be considered as a finished design which can be used directly into the code or a template for how to solve a particular issue.

Object oriented design patterns typically show relationships and interactions between objects or classes, without specifying the final application classes or objects that are involved.

Whereas, algorithms do not offer any details of design patterns, since they resolve computational problems rather than design issues.

On the other hand, pattern specifies a solid solution to a recurring design issues, placing particular process on the context and the surrounding problem as well as the consequences and impact of solution.

This provides a collection of patterns which you can use in the context of designing Java 2 Platform and Enterprise Edition (J2EE) applications.

Core J2EE Patterns provides more detail on J2EE patterns and is an excellent resource that can be integrated on the website. Developing and designing patterns leverages the developer community’s collective experience by sharing issues and solutions.

A design pattern must capture a problem’s overview and context, a possible option and the solution simultaneously.
In the J2EE application architecture, we can split up design patterns into two categories: general software development patterns and those patterns that overlook specific J2EE challenges.

J2EE- design pattern verifies lesser known issues which solid application architecture should resolve.

Reasons to implement Patterns:

  • Patterns reflect the knowledge, experience and insights of developers who have smoothly used these patterns in their own work.
  •  Patterns provide a rough solution as necessary that can be adapted to different problems.
  • Patterns provide a generic vocabulary of solutions that can express heavy solutions succinctly.

Understanding J2EE Design Patterns

J2EE Design Patterns are tried-and-tested solutions to recurring design problems encountered in enterprise application development.

These patterns provide a structured approach to solving specific challenges and promote code reusability, modularity, and maintainability. Some common J2EE design patterns include:

  • MVC (Model-View-Controller):
    Separates the application into three components—Model (data logic), View (user interface), and Controller (flow control)—enhancing maintainability and flexibility.
  • DAO (Data Access Object):
    Abstracts the interaction with databases, providing a centralized and consistent way to manage data access.
  • Singleton:
    Ensures that a class has only one instance and provides a global point of access to it, beneficial for managing shared resources.
  • Facade:
    Provides a unified interface to a set of interfaces in a subsystem, simplifying complex systems for clients.
  • Observer:
    Defines a dependency between objects, ensuring that when one object changes state, its dependents are notified and updated automatically.

Deciphering the Multi-Tier Architecture

Enterprise applications are often complex and require a structured architecture for effective development and management.

The multi-tier architecture, also known as n-tier architecture, divides an application into distinct layers or tiers, each responsible for a specific aspect of functionality. The common tiers include:

  • Presentation Tier:
    Also known as the client tier, this layer focuses on user interface interactions. It handles user requests, displays information, and captures user input.
  • Business Logic Tier:
    This tier contains the application’s business logic and rules. It processes user input, interacts with databases through the data access layer, and implements the core functionalities of the application.
  • Integration Tier:
    Also known as the middleware tier, this layer handles communication between the presentation tier and the business logic tier. It often involves components like Enterprise JavaBeans (EJB) for managing distributed transactions and messaging.
  • Resource Tier:
    This tier represents the data storage and management layer. It includes databases, file systems, and other resources that store and manage application data.

Benefits and Best Practices

Mastering J2EE design patterns and understanding the multi-tier architecture yields several benefits, including:

  • Scalability:
    The modular nature of tiers and the reusable solutions of design patterns make scaling applications more manageable.
  • Maintenance:
    The separation of concerns and code reuse simplify maintenance and updates.
  • Performance:
    Efficient data flow and reduced network overhead contribute to optimal application performance.
  • Team Collaboration:
    J2EE patterns and tier architecture facilitate teamwork by offering a common vocabulary and structured approach.

Common uses of Design Patterns:

  1.  Front Controller is a container to hold common processing logic that occurs within the ‘presentation’ tier and which may otherwise be inaccurately put in the ‘View’.
    A controller handles requests and manages content retrieval, view management, security, navigation, delegating to a Dispatcher component to dispatch to a View.
  2. Business Delegate reduces coupling between remote tiers and provides an entry point for accessing remote services in the ‘Model’.
    A Business Delegate might also cache details data as required to improve performance. A Business Delegate encapsulates a ‘Session Façade’ and manages to one-to-one relationship with that ‘Session Façade’. A Business Delegate invokes a ‘Session Façade’ for An Application Services.
  3.  Service Locator encapsulates the implementation mechanisms for looking up business service details. A Service Locator used by a ‘Business Delegate’ connects to a ‘Session Façade’. Other services like web services and business-tier services can use a Service Locator.
  4. Session Façade provides coarse-grained services to the clients by hiding the complexities of the business service interactions. A ‘Session Façade’ might call several Application Service implementations or Business Objects. A ‘Session Façade’ can also encapsulate a Value List Handler.
  5. Business Object implements your conceptual domain model using an object model. Business Objects differentiates business logic and data into a separate layer in the application. Business Objects programmatically represents persistent objects and can be transparently continued using Domain Store.
  6. Data Access Object enables loose coupling between the resources and business tiers. ‘Data Access Object’ covers all the data access logic into CRUD data from a persistent store. ‘Data Access Object’ does work on ‘Transfer Object’ to send and receive data.

Conclusion:

These design patterns captures potential problems when using the various J2EE-specified technologies and supports developers to construct application architecture’s requirements. For example-The locality Front Controller design pattern, transforms unstructured servlet codes into a controller of the refined graphical user interface.

 

Related Questions

What are J2EE Design Patterns and why are they important in enterprise application development?

J2EE Design Patterns are reusable solutions to common design problems encountered in enterprise application development.

They promote code reusability, modularity, and maintainability by offering structured approaches to solving challenges. J2EE Design Patterns ensure that developers follow best practices, resulting in more robust and scalable applications.

How do J2EE Design Patterns enhance the efficiency of different tiers in the multi-tier architecture?

J2EE Design Patterns seamlessly complement the multi-tier architecture. For example, patterns like MVC enhance user interface management in the presentation tier, while patterns like Business Delegate optimize communication between the presentation and business logic tiers. T

hese patterns ensure that each tier is well-structured, efficient, and interacts seamlessly with other tiers.

What is the significance of the multi-tier architecture in enterprise application development?

The multi-tier architecture divides an application into distinct layers, each with specific responsibilities. This structure enhances scalability, maintainability, and performance.

The presentation tier focuses on user interface, the business logic tier handles core functionalities, the integration tier manages communication, and the resource tier deals with data storage and management.

How do J2EE Design Patterns contribute to the scalability of enterprise applications?

J2EE Design Patterns promote modular and reusable code, which simplifies scaling. With patterns like Singleton and Data Access Object (DAO), developers can efficiently manage shared resources and data access, ensuring that as the application grows, it can be scaled without sacrificing performance or complexity.

Can you provide an example of how a J2EE Design Pattern enhances a specific tier in the multi-tier architecture?

Certainly. Consider the MVC pattern. In the presentation tier, the Model-View-Controller (MVC) pattern separates data (Model), user interface (View), and control flow (Controller). This separation enhances maintainability as changes in one component don’t affect the others.

The Controller manages user interactions, the Model handles data logic, and the View renders information. This clear separation simplifies development and updates in the presentation tier.

4 Simple Steps To Implement “Delayed Job” In Rails

Here in this article, I going to tell you the best way to implement “delayed job” in rails

“delayed_job” is a ruby gem used to execute tasks as a background process in Rails environment, increasing page rendering speed.

Delayed::Job (or DJ) allows you to move jobs into the background for asynchronous processing.

Why you need a background process and is it really that important!

Let’s consider a scenario where a mailing application needs to send emails to a huge list of recipients. In such cases it is obvious that the processing time is too long, annoying the users.

Here are some of key points to consider:

  • Incredibly quick & easy to get rolling
  • No addition to your “stack”, runs just fine with Active Record
  • Good choice for beginners while migrating code from foreground to the background

Hence, it’s only wise to move the long running tasks as a background process by using “delayed_job” gem.

Detailed steps to integrate delayed job in a Rails application

Step# 1

  • Add gem to the Gemfile
  • “delayed_job” supports multiple back-ends for storing the job queue
  • To use “delayed_job” with Active Record, use gem ‘delayed_job_active_record’
  • To use “delayed_job” with Mongoid, use gem ‘delayed_job_mongoid’

Example

/Gemfile.rb

  • gem ‘delayed_job_active_record’, ‘4.0.3’
  • Run “bundle install” to install the “delayed_job” gem

Step# 2

  • Generate the related file for the Job run
  • Generate related files required to run the background job by running the following command
    • rails g delayed_job:active_record

It adds following files to the application

  • A Script named “delayed_job” inside “/bin” folder to run the jobs which are in queue.
  • Migration file to create a table to store the job with other information such as priority, attempts, handler, last_error, run_at, locked_at, failed_at, locked_by, queue.

Run the migration file by using the following command

  • rails db:migrate

Set the queue_adapter in config/application.rb

  • config.active_job.queue_adapter = :delayed_job

If you are using the protected_attributes gem, it must appear before delayed_job in your gemfile. If your jobs are failing with:

  • Setup Delayed::Job config in an initializer (config/initializers/delayed_job_config.rb)
    • Delayed::Worker.destroy_failed_jobs = false
    • Delayed::Worker.sleep_delay = 60
    • Delayed::Worker.max_attempts = 3
    • Delayed::Worker.max_run_time = 5.minutes
    • Delayed::Worker.read_ahead = 10
    • Delayed::Worker.default_queue_name = ‘default’
    • Delayed::Worker.delay_jobs = !Rails.env.test?
    • Delayed::Worker.raise_signal_exceptions = :term
    • Delayed::Worker.logger = Logger.new(File.join(Rails.root, ‘log’, ‘delayed_job.log’))

Step# 3

  • Replace script/delayed_job with bin/delayed_job
  • Start up the jobs process

There are two ways to do this.

  • If application is in development mode, we would use the below rake task instead.
    • rake jobs:work
  • If application is in production mode, then it is preferred to use the “delayed_job” script. This demonizes the job process and allows multiple background processes to be spawned.

To use this, pursue the following steps

  • Add gem “daemons” to your Gemfile
  • Run bundle install
  • Make sure you’ve run rails generate delayed_job
  • If you want to just run all available jobs and exit you can use rake jobs:workoff
  • Work off queues by setting the QUEUE or QUEUES environment variable.
    • QUEUE=tracking rake jobs:work
    • QUEUES=mailers,tasks rake jobs:work

Step# 4

  • Add task to run in background
  • In Controller just call .delay.method(params) on any object and it will be processed in the background.

Example:

UsersController before adding to background job

[code language=”html”]
class UsersController < ApplicationController
def send_email
User.find_each(is_subscribed: true) do |user|
NewsMailer.newsletter_mail(user).deliver
flash[:notice] = "Mail delivered"
redirect_to root_path
end
end
end
[/code]

 
UsersController after adding to background job

[code language=”html”]
class UsersController < ApplicationController
def send_email
User.find_each(is_subscribed: true) do |user|
# add .delay method to add it to background process. In case of mail sending remove the .deliver method to make it work.
NewsMailer.delay.newsletter_mail(user)
flash[:notice] = "Mail delivered"
redirect_to root_path
end
end
end
[/code]

Advantages of implementing above steps:

  • No more waiting for a response, after clicking a link to do a big stuff.
  • Just call .delay.method(params) on any object and it processes in the background.
  • Job objects are serialized to yaml and stored in the delayed_jobs table, so they can be restored by the job runner later.
  • It automatically retries on failure. If a method throws an exception it’s caught and the method reruns later. The method retries up to 25 times at increasingly longer intervals until it passes.
  • “delayed_job” gem maintains log by creating a log file “/log/delayed_job.log”

I am sure this article will give you a clear idea about the way to implement “delayed job” in rails. You can share your thoughts with comments if I have missed anything or if you want to know more.

Do you work on or use Ruby on Rails? Let’s Discuss!