Technoligeies

Tips for a more productive offshore java development

Posted on Updated on

Outsourcing seems to be the best and the cheapest solution for IT companies. These companies have to always look out for ways to save as much money as possible and hiring expensive personnel increases a lot of costs. They always try to look for ways by which they can get program writers for cheap. Offshore java development has become a very common practice among software service vendors. That way they don’t need to spend much on employees or development. Some countries have labor cheaper than the others. A lot of money is saved by companies in the US by outsourcing their work to people in Asian countries, who charge way lesser than the US employees. They have offshore companies that supply the labor and deliver the work to the big companies. While it is lucrative there can be problems as well. So in the following article we will discuss how to make your offshore java development productive.

Tips for a more productive offshore java development

  1. Define scope and plan: Lot of times there’s confusion between what the employer wants and what the service provider delivers. It is because of miscommunication. From the very start make it clear to the provider about what you want, the scope of your java development project. Lay down your requirements, how you want it to be done and the desired results. That way everyone is clear about the work and it’ll be easier to get price quotes. Make sure the provider knows when to finish it by and the principles by which the work should be done.
  2. Maintaining standards: One thing you should be strict about is the quality of the work that is delivered. The clients you are giving them to should not realize that this java development had been outsourced. Outsourcing can only be profitable if the result delivered is similar to the one being delivered in the home country. A good way to ensure that would be to define certain parameters like which framework or database had to be used or which server, etc.
  3. Search for skills: It is important that you take the help of an expert when making the choice about which provider you should outsource your java development projects to. You can’t make the mistake of being completely ignorant and choosing the provider with the cheapest offer. See that the outsourced partner has experience; make an expert look at the work they do, talk to people who’ve hired them, etc to ensure that you are in good hands. The people working there should be professional and skilled, to ensure that they deliver the best. Check if the developers are java certified as that assures quality.
  4. Pay in installments: Here two mistakes can be made, either paying at the start or paying all at the end. The best method to employ is to pay in installments. Set marks, like 20% development, 50% development. Scrutinize the work and then make the payment.

To ensure that your offshore java development yields the best products, you’ve to be crystal clear with your provider as well as keep a hawk eye on them.

Build Automation using Jenkins

Posted on Updated on

Technology: Jenkins is the most powerful and most preferred to use application for continuous integration, and continuous delivery of projects. As Jenkins is web application download and deploy Jenkins on any web/application server, and it can run on any platform independent of operating system. Integrate Jenkins with majority build tools like Ant, Maven, and Gradle. Jenkins provides plugin to interact with version control systems like Git, SVN, and Mercurial etc…

Importance of Jenkins:
Jenkins tool is used for continuous integration, Jenkins will prepares build whenever a developer commits to code to shared repository, and the latest build can handover to testing team for Quality Analysis. This will remove the problem of finding later occurrence of issues in build life-cycle. The common practice is that whenever a developer commits the code, Jenkins will start the build process.

The workflow will like below:

0

Setup Jenkins:

Either download war file from Jenkins site (https://updates.jenkins-ci.org/latest/jenkins.war) or Install exe file for windows from location (http://ftp-chi.osuosl.org/pub/jenkins/windows/jenkins-2.59.zip), Extract and install executable file.

It will create a windows service for serving Jenkins application.

If we download war file, start the Jenkins using java –jar jenkins.war command. After the command is run, different program will run, one of which is the withdrawal of the war file which is complete by an embedded webserver called winstone.

After successful message browse the link http://localhost:8080 to access Jenkins.

The default password will be stored in initialAdminPassword which is in secrets folder of Jenkins installation directory. Modify the password after login.

Installing Plugins for Jenkins:

Navigate to http://localhost:8080/pluginManager/available to see all default available plugins for Jenkins.

Select the plugins to install.

1

After the successful installation we see the below screen:

3

We need to setup the JDK and Maven in Jenkins: Navigate to Configure Tool Page:
http://localhost:8080/configureTools/

4

Similarly Install “GIT server Plugin” plugin and using configuration tool page configure the Git.
Automated Deployment to Application Servers: they are many plugins available to move the build to application server deployment location, for example we can use Deploy to container Plugin to do automatic deployments.

5

The plugin takes war/jar/ear file from build and deploys to running instance of the application server.
Jenkins –Setup Build Jobs:
From Jenkins Home page, create jobs, after clicking create new job it will navigate to below page.

6

Where we can specify Job name and select type of the project for example Maven Project.
After clicking on ok button, we see the below screen. Where we can configure the Git Repository details.

7

And Build steps, choose Invoke top-level Maven targets and specify the maven goal for project.
After entering all the details save job.

8

Click Build Now in left side Menu to trigger the build.

9

Build History Job instance is created and monitor the progress of the job.
Once the build is completed, a status of the build will show if the build was successful or not. This case, the instruction developed has been executed successfully. Click on the #1 in the Build history to bring up the details of the build.

10

By clicking on Console Output link to see the details of the build.

11

Distributed Builds: Some times more than one build machines are required for heavier and larger project build on regular projects, running on all jobs on same node is not best option. We can configure the Slave machines which will take load from master node so that load on master node will be reduced.

Sometimes we need several different environments to test builds, in this we can create a slave for each environment. Some jobs may need to run the multiple nested jobs to complete job, if nested jobs are independent like running on job on windows, Ubuntu etc… then we can run each nested job on different slave parallel so that build time can be minimized.

A slave computer is set up to take offload build projects from master node, once setup is completed distribution is automatic. Add label to each slave server, based on setup stick to one slave server and pick a slave server from label.
Since each serf runs a particular program called a “slave agent” there is no need to install the full Jenkins (package or compiled binaries) on a slave. There are various ways to start slave agents, but in the end the slave agent and Jenkins master needs to establish a bi-directional communication link (for example a TCP/IP socket.) in order to operate.

1) We need to navigate to Manage Jenkins Section.

12

2)  Click on New Node.

13

3) Enter Name and select the checkbox.

14

15

4) By default the newly created machine will be in Offline initially, once it validate the fields which we enter previously, if validation is success it will come to online state, but user can move slave machine to offline.

16

Jenkins also provide Code coverage plugin which will collect information Source Code Analysis reports like CheckStyle, Find Bugs, and PMD etc…
Source Code Analysis Collector is Jenkins plugin which will combines the individual results of these plugins into a single trend graph and view.
The plugins can provide information such as

  • The total number of warnings in a job
  • A showing of the new and fixed warnings of a build
  • Trend Reports showing the number of warnings per build
  • Overview of the found warnings per module, package, category, or type
  • Detailed reports of the found warnings optionally filtered by severity (or new and fixed)

Conclusion: Jenkins is Continuous Integration tool, using which we can automate build process, deployments, code analysis, etc.., Jenkins have large number of variety plugins for each of the operation, and we also monitor the status of Jobs. If project contains many modules we also creates nodes for Jenkins for load distributions, it is one of the J2EE application and Java Software Development Company, we can deploy on any application server on any environment.

 

Top enterprise mobile security tips to ward off phishing and ransomware attacks

Posted on Updated on

enterprise mobile security strategy tips

With enterprise applications becoming a standard norm across almost all industry areas, hackers are having a field day stealing data from business entities rather than individual consumers (who were their initial targets).

Highly customized techniques are being devised to attack confidential enterprise data through phishing, spearfishing, CEO Frauds, and BEC (Business Email Compromise) – to name a few.

Enterprises are falling short of effectively preventing and countering these security breaches because of lack of a comprehensive policy that covers all types of devices that have access to their data – PCs, smartphones, and tablets.

This article is written to illustrate what are the major causes of security concerns and how they should be addressed in the enterprise’s mobile security strategy.

The level of Security Awareness within the workforce is an indicator of the vulnerability of the enterprise.

Most enterprises do not give adequate importance to security awareness programs within the company, reducing them to a mere formality of attending a training session annually. This is the first indicator how the enterprise will fare on the security rating scale.

The results of regular training sessions are effective only when surprise employee testing sessions are conducted by intentionally subjecting their emails to planned phishing scams/other forms of security threats. The number of employees reporting suspicious account activities gives an idea of the security awareness level of the enterprise.

It is important to note that the employees who fail to recognize these dummy threats should not be pressurized to maintain healthy atmosphere that will encourage them to report any subsequent security threats.

ROI (Return-on-investment) depends on mobile security strategy

It is a surprising fact that majority of enterprises do not have any mobile workspace solution to handle the security needs across devices. The implementation of a consistent security strategy is a must to ensure that the enterprise data is protected even when the workforce logs in using personal devices and from unknown networks.
This requires a comprehensive workspace solution that provides tools such as virtual desktops, data loss prevention, asset management, centralized data store, etc. through a combination of MAM (Mobile Application Management) and MDM (Mobile Device Management). There are several MEAPs (Mobile Enterprise Application Platforms) that provide this solution and help implement policies like consistent enterprise file sync and share, single sign-on, VPN and other development and deployment features.

If a mobile security strategy is implemented correctly, the enterprise will see an overall increase in productivity and application quality leading to an increase in application downloads. Thus, mobile security strategy and ROI go hand-in-hand for enterprises.

4 security practices

    • BYOD policy implementation

Work from home has become an accepted norm be it an employee staying in for the day or being out of town for some meeting. In such cases, there may be instances of employees using their personal devices to access enterprise data and applications.

Although enterprises have accepted the fact that they cannot force users to use company devices at all times (and allowed usage of personal devices for office work), most of them still undermine the security breaches that can take place because of this. Hence, every enterprise requires a BYOD (bring-your-own-device) policy that provides more protection than just having secure passwords. Applications like PIN Genie Vault provide decoy passwords, and snap pictures if someone tries to forcefully access the device.

    • Cloud Storage

Cloud migration is predicted to be number one enterprise mobility trend in 2017. The data stored on cloud (as well as critical on-premises hosting solutions) should be closely monitored through role-based access. It should not be stored as-is, but encrypted before being saved to the database.

The cloud-based security implementation should be able to segregate data dispensation based on roles, in addition to allowing remote retrievals, redaction, and wiping of device data. It should also take regular automatic backups of system data, to ensure data availability in case of ransomware attacks.

    • Two layered authentication

Although a multi-layer authentication is desirable, it is too complex to implement (with OTPs, USB tokens, smart cards, etc.). A two-layer authentication is enough (and essential) to validate that the user accessing the data is indeed an authorized employee, and not an impostor who has broken in to the employee’s device. This implementation asks for an indicator like OTP or secret question when the user tries to access sensitive data.

    • Email Security

Even normal email providers use two-layer authentication, which is an industry level security mechanism. Hackers mostly aim to accomplish identity thefts through phishing attacks, while the more sinister of them would aim to infiltrate the internal system of the enterprise to steal confidential data. This makes it necessary to have measures in place to encrypt sensitive emails and educate the top management level employees about CEO Phishing.

Conclusion

As technology advances, the enterprise applications become more prone to security breaches and threats as the hackers leverage the same technology advances to develop ‘better’ phishing scams and ransomware attacks. So much so that Ransomware-as-a-Service has become lucrative business. Hackers now focus on business entities, as individual user data supply has become abundant in the underground market and very few people pay for buying it. Instead, they hold entire enterprises to ransom by stealing huge chunks of database files. Hence, change management to keep upgrading security at the same speed as technology upgrades is the need of the hour along with the basic mobile security strategy implementation.

So, hire Java developers to develop robust client driven applications, easy to use ecommerce or online shopping apps, various web application and enterprise security application with minimal scope for redundancies.

Java and .NET: Competitors or Allies?

Posted on

You would have read plenty of material comparing Java and .NET and also advising you on which one to choose. The fact is that both Java and .NET perform similar functions. There is no doubt that they are competitors, but, unlike how some bloggers project them as opponents with diverse interest, these are competitors with same interest.

In this blog, I will attempt to touch the common points between the two and leave the selection decision on you without maneuvering facts and making one look better than other.

Java and .Net

Understanding Java
Java is a programming language and just when you start relating to it as a language, you will encounter the Java Framework, the Java Platform, and a lot of Java everywhere. Although, all of these are linked with a thin line of difference, but, for a beginner with no prior knowledge, it might be confusing at first. In this blog, we are talking about the Java Platform that use Java as the core programming language.

Understanding .NET
.NET is a Microsoft-powered framework. The primary languages are C# and VB.NET. It has been in existence for close to two decades and has emerged as a tough competitor to Java which had a kind of a monopoly before .NET was launched. This is sometimes confused with ASP.NET which is an application framework whereas .NET is a programming framework.

Common Points
The basic purpose of both Java and .NET is same. The commonalities can be broadly classified on the basis of the purpose and convenience. Let’s look at each of these in detail.

  • The Purpose Is to Develop Applications :- Both Java and .NET are used for developing server-wide applications. These are often referred to as object-oriented languages that involves using classes which can later be used for incorporating similar functions in different applications. Again, to emphasize for Java Platform, the language for writing codes in Java and in .NET it is primarily C#. Java and .NET can be used to create applications for different platforms. There are reservations here like .NET being preferred to Windows applications but then nothing like a hard and fast rule.

    You can easily get started with the development by either employing a Java or .NET developer or by collaborating with a .NET or Java Software development company.

  • The Aim Is to Avoid Rework :- You guessed it right, this is about modularity. While this is something not to boast about because almost all the application building platforms are now modular, it does add to the convenience aspect that a developer gets by being able to reuse classes and use plugins from external sources. The comfort of a developer is a prime point in determining which language will be chosen. And, therefore, the companies focus on this aspect.

This also involves the availability of help resources. Many a times, Java developers advocate for Java being a better choice because it is easy to find a Java Software development company. But, this is not true. There are almost the same resources available for help irrespective of which platform you choose.

Conclusion
Java and .NET are indeed competitors but another point of looking at them is to consider them as allies that motivate each other to develop something more innovative which gives one edge over the other. If either of these is eliminated from the equation, it would be a one-sided battle (not literally) without any motivation for the other. Both have their set of pros and cons, lovers and haters, which encourage the platforms to go strong against each other. Let us know which one you choose.

How to Deploying Micro services using Kubernetes in Java

Posted on

Technology: Kubernetes is the open source cluster management tool designed by Google, and donated to cloud native computing foundation. It mainly used to automate the deployment process, scaling of the application, operations on application hosted containers across the cluster nodes. It usually works with Docker container, co-ordinates with wide range of Docker running cluster hosts.

Kubernetes Concepts:

  • Cluster: A cluster is a set of virtual machines used by kubernetes to deploy/run our applications.
  • Pod: A pod is set of one or more containers (Docker containers) that share the storage and holds the options to how to run the containers. Pods are co-located and co-scheduled and run in the shared context.
  • Node: A Node is worker machine in kubernetes. It may be VM or a physical machine depending on the cluster. Each node must contain list of services like Docker, Kubelet and kube-proxy to run pods and managed by master components.
  • Label: Labels are key/value pairs attached to objects such as pods, which are used to identify the attributes of objects meaningful and relevant to users, but these will not directly imply core semantics. Labels can be used to organize and to select subsets of objects. These can be used to attach to objects at creation time, later can be modified at any time.
  • Selector: A selector is an expression that matches label to identify related resources such as which pods are targeted by a load balancer.
  • Replication Controller: A ReplicationController verifies that a defined number of pod “replicas” are operating at any time. It makes sure that a pod or similar set of pods are always up and available. If there are many pods available, it will kill some. If there are too less, the ReplicationController will start more. Unlike manually developed pods, the pods maintained by a ReplicationController are automatically replaced if they fail, get deleted, or are terminated.
  • Service: A service is middle layer between front-end and back end, service is an abstraction which defines a set logical pods, and policy by which to access them. Service will target a set of pods using label selector.
    Volume: Volume is directory on file system with some data in it, which is accessible to containers. As Kubernetes volumes are built on top of Docker Container volumes, and providing the additional features compared to Docker volumes.
  • Secrets: A Secret is an object that store the sensitive information like passwords, authentication tokens etc… this information can be put in either in image file or pod specific volume. A secret can be used at pod in two ways:
    • As files mounted one or more container volume.
    • Used by kubelet pulling image.
  • Name: All objects in the Kubernetes REST API are unambiguously identified by a Name and a UID. UID`s are generated by kubernetes internally.
  • Name Space: Name spaces will be used in environment with many users, multiple teams involved. If you are familiar with spring framework, it provides one separate name space for each of its module.
  • Annotation: A key/value pair that holds arbitrary non-identifying metadata for retrieval API by tools, libraries etc… This information may be human readable format, it may be structured, or unstructured, and it may include characters which are not allowed in labels. Efficient filtering by annotation value is not supported.

Installing Kubernetes:
Kubernetes are development on top of Docker, so we need to install Docker to run Kubernetes.

Installing Docker:

  1. Windows: we can download InstallDocker.msi (https://download.docker.com/win/stable/InstallDocker.msi) and we can install msi file, by default it will create VM. We can run Docker Quick Start Terminal. We can verify the docker installation by running docker –version command.
  2. Ubuntu: we can install Docker in two ways:
    • We can download deb package, install it manually and we need to manage upgrades manually (sudo dpkg -i docker-engine.deb).
    • We can setup Docker repository and we can install from added repository.
      • Repository setup:
        • Execute the below commands in terminal to add the repository.
        • sudo apt-get install apt-transport-https ca-certificates
        • curl -fsSL https://yum.dockerproject.org/gpg | sudo apt-key add –
        • apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D
        • sudo add-apt-repository “deb https://apt.dockerproject.org/repo/ ubuntu-$(lsb_release -cs) main”
      • Installing:
      • Execute the below commands to install docker:
      • sudo apt-get update
      • sudo apt-get -y install docker-engine
      • By default it will always install latest version from repository, if we want to install specific version then we can execute the below command instead of above command.
      • To get the list of versions in repository we can run the below command:
      • apt-cache madison docker-engine

Minikube is the tool, using which kubernetes will run locally, and also it will setup the single node cluster in our dev machines.
Minikube supports Kubernetes features such as:

  1. DNS
  2. NodePorts
  3. ConfigMaps and Secrets
  4. Dashboards
  5. Container Runtime: Docker, and rkt
  6. Enabling CNI (Container Network Interface).

Installing MiniKube in windows:

Download the minikube from https://storage.googleapis.com/minikube-builds/101/minikube-windows-amd64.exe

And go to saved folder and invoke command in command prompt to install minikukbe.

minikube-windows-amd64 start

And we need to download kubectl.exe from https://storage.googleapis.com/kubernetes-release//v0.18.0/bin/windows/amd64/kubectl.exe

And add to path (environment variable).

Creating Docker image for our application:

Build tools like Maven, Gradle provides plugin for creating docker image.

If we are using maven as build tool then we need to add the below docker plugin:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<imageName>${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

dockerDirectory refers to folder where docker file present.
directory: refers to build directory.
We can run mvn clean package docker: build to create docker image.
If we are using continuous integration tools like Jenkins we need to push image after the build successful, we can push the image using docker:push goal.
We can also tag the image using imageTags in configuration.
Pushing Docker images to private repository:
We can use registry docker image to start the private repository.
docker run -d -p 5000:5000 –restart=always –name registry registry:2
and change image name specified in docker maven plugin to “<imageName>localhost:5000/hello-world</imageName>”.

And run the mvn clean package docker:build it will build the image file.
Deploying docker image into Kubernetes:
We need to push the above docker image into registry, and we need to execute the below command:
kubectl run hello-world –image=localhost:5000/hello-world:v1 –port=8080
It will deploy our docker image into kubectl cluster, we can also configure under which port our application want to run using port parameter.
We can run the kubectl get deployments to know the deployment status of our application.
View our app: by default all our application will also accessible in kubectl cluster.
For accessing our application we can do in two ways:

  1. We can create kubectl proxy between terminal and kubectl cluster.
    For this we need to run kubctl proxy command to create proxy.
  2. We can expose our application using kubectl expose command.
    kubectl expose deployment/hello-world –type=”NodePort” –port 8080
    We can run kubectl services to check the service is exposed to public or not.
    To get the details about our application service we can run the below command:
    kubectl describe services/hello-world
    Describe output will provide nodePort of the service, we need to use this port for accessing our application.

Updating Docker Image:
We can build latest docker image and we can update deployment path for application to update the application in kubernates.
kubectl set image deployments/hello-world hello-world=localhost:5000/hello-world:v2

Conclusion: Kubernetes is the tool for creating cluster for docker like containers, we can easily scale the cluster size, and we can easily deploy our docker image in all of the configured cluster using kubernets easily.

For more information check out on :- Java development India

Java outsourcing services provider introducing command pattern for Java development

Posted on Updated on

In this post, java outsourcing experts explain the use of command pattern for app development. Understand command pattern well and implement a call back functionality in java app. Code shared in this post are for reference purpose only

Introduction

In Java, to make the code more reliable we should design our code efficiently that can be done by applying design methodologies such as OOPs, OOAD, design principles and patterns into applications.

Command pattern is a behavioral design pattern which actually help us to implement a call back functionality in Java. I.e. it encapsulate the request and sends to invoker who holds the command that is need to be executed.
GOF states that – “Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations”

command-pattern

Command – Interface to executing a command
Concrete Command – Holds a receiver, Implements command interface and execute the operation on the receiver and it actually creates the link between receiver and the action.
Receiver – Has the knowledge of the command and knows how to perform the operation
Invoker – has a command to execute.
Client – uses invoker thru concrete commands

e.g.
java.lang.Runnable is implemented followed by command pattern
In the real world, we can think of any examples

Buying or Selling a share in ShareMarket

  • Command
  • ConcreteCommand – BuyCommand, SellCommand (executes the command on the receiver)
  • Receiver – Share Market (has the knowledge of shares that companies(ICICI, SBI, TATA, etc.) holding and knows how to perform all the share operations will execute shares)
  • Invoker – Broker or Agent who holds the command
  • Client – creates either buy or sell command basis on their requirement and invokes it thru invoker

Commanding/Operating a TV(Television)

  • Command
  • ConcreteCommand – SwichOn, SwitchOff, ChangeChannel, MuteSound etc.,
  • Receiver – TV (knowledge of how to execute the command operations)
  • Invoker – TVRemote (holds the commands to be executed)
  • Client – Creates the command either switchon or off or change channel and invokes it thru invoker

//Command interface
public interface TVCommand {
void execute();
}

//Concrete Command class SwitchOn
public class SwitchOn implements TVCommand {

// holds a receiver who knows how to perform command operations
private TV tv;

public void execute() {
tv.switchOn();
}
}

//Concrete Command class SwitchOff
public class SwitchOff implements TVCommand {

// holds a receiver who knows how to perform command operations
private TV tv;

public void execute() {
tv.switchOff();
}
}

//Receiver – who knows how to perform operations
public class TV {

public void switchOn() {} // switch on operation

public void switchOff() {} // switch off operation

// more methods or operations like muteSound, changeChannel etc.,
}
//Invoker class TVRemote
public class TVRemote {

// holds a command that needs to be executed
private TVCommand tvCommand;

public void setTVCommand(TVCommand tvCommand) {
this.tvCommand = tvCommand;
}

public void pressButton() {
tvCommand.execute();
}
}

//Client
public class Client {

// creates commands and invoke the commands thru an invoker TVRemote
TVCommand on = new SwitchOn();
TVCommand off = new SwitchOn();

TVRemote tvRemote = new TVRemote();

tvRemote.setCommand(on); // on command
tvRemote.pressButton();

tvRemote.setCommand(off); //off command
tvRemote.pressButton();

}

Java outsourcing services providers have explained the command pattern use for app development. If you think you need assistance of professionals to perform this project, outsource java development services today.

Conclusion

It actually help us to implement a call back functionality and command supports to do undo and redo operations since it is maintaining state with the receiver. And it makes the code more maintainable and adaptable i.e. we can add a new command like change-channel, mute-sound etc. without affecting the existing implementation

Why to use asp.net for complex business projects – Quick discuss by Asp.net Developers India

Posted on Updated on

Asp.net has become widely popular during last few years and most complex applications are based on .net framework. The main reason for popularity of asp.net framework is open source code. Today, it is considered most amazing platform to create complex business projects in define time frame only. Here, we will discuss why asp.net can always be used to build apps and computer software programs.

Where should you use asp.net?

One of the best things about asp.net framework is flexibility and it helps in designing most beautiful frameworks than you have ever imagined earlier. This is just wonderful from hardware and software point of view. There are .net wizards or IDEs that help you in writing better software programs as you needed.

Which type of applications can be made with .net?

Web apps are best implementation of .net framework. They just work great for different type of projects from designing internal simulation system to internal systems for car. Initially it was not possible to write or execute .net apps on Linux or OS X platform. Today with the invention of .net core, .net apps can be run over almost on any operation system.

Asp.net is across development platform compatible with multiple programming languages and interactive IDE Visual Studio has become integral tool for asp.net developers in India and worldwide.

Asp.net Performance and scalability

Generally, developers take time when they have to decide on right technology. The final decision is based on either performance of programming language or scalability. Initially, .net was not so popular due to its performance but .net core is making waves.

Today, .net is outperforming and complete package to design most complex business apps in your budget only. It helps you in processing millions of requests together almost every second as per project needs or requirements

Open Source

.net was close source for plenty of years and Java was ruling the programming world due to open sourcing parts. Now .net core has also become open source and this is easy to make modifications in final code. They are able to work with user requests, pull requests or discussing issues etc. The .net core is wonderful example how open source framework works actually.

One of the best things about .net framework is its documentation capabilities and how it helps in managing multiple e-books or content together. You can also use the framework for blogs, tutorials etc. You are free to create your own games with .net core framework.

Best tools or techniques for 

.Net core has best tools available to use. You can use any of the tools and develop apps on different framework using multiple programming languages like C sharp, C++, VB, F# etc. Dot Net framework is compatible with more than 35 languages and you can create or design apps using your favorite programming language.

Additionally, Microsoft invests heavily to innovative .net services and attracts more users worldwide. To take most benefits from language, hire asp.net programmers or developers in India and get your complex project requirements completed right away.

How to get the most out of website development with the help of Java J2ee technology

Posted on Updated on

Developing a website involves loads of planning and technical expertise. Web designers use digital media, interactive elements, images and various texts to make a page that we see when we browse the sites. The web design services consist of the planning, conceptualization, post-production, producing, advertising and research. Web development refers to the work that develops a website. The website can provide information about an individual, company or any other institution. The Java J2ee Development company can be managed by a small group or even by a large group of professionals.

In order to get the max out of website design, website development team needs to take care of many other aspects such as SEO techniques which comprise of Keyword Phrasing, research tools, CMS etc.

The Website development Services is professionally designed and meets the exact needs of the website and business. It enables the website to get a better ranking in the search engines. Popular search engine placement plan and the marketing, helps in link building process. The search engine optimization process helps to generate the traffic towards a relevant website.

Java J2ee Development

Synergy between various techniques

Keyword Phrasing – When choosing the keyword, we have to keep it short and simple. It should have a general approach so that when people use them in search engines, they will be able to find the brand or company.
Tools of Research – Keyword helps in doing the online research. The search engine optimization, adopts this technique of application of keywords.
Web content management services – collection of certain methods of managing of a particular’s website’s content. Web CMS Development package consists of the basket of programming tasks such as Administration Management; Customer Management; Add, edit, or delete pages; Add, edit, or delete albums; add, edit, or delete articles.

Java J2ee Development for small, middle and large e-commerce websites

Java J2ee Development offers services in three folds. For the large scale websites, like the large e-commerce websites, the content management systems, in streaming the video and audio system helps the business to take a leap as the next leader in field. There are medium scale websites, which calls for more interaction by its site visitors. There are features like forums, polls, calendar of events, designing of shopping carts; all takes the business to a higher level facilitating a greater customer interaction. They are easy to use for the users as well as for business. Whenever companies establish itself for the first time, it relies on the development of small-scale website. They are only of a few pages and consist of limited information. These website are quite affordable for that business that is just in its nascent stage but surely would grow in the coming times. Java J2ee Development helps all kind of companies whether a start-up or an established firm.

With the help of various tools and techniques Java technology has come a long way and has been making website perform better. New and advanced ways and techniques are providing versatile solutions which have made eCommerce more customer friendly and easier to use.

Display Bold, Italic, Strike out fonts in SWT table/tree

Posted on Updated on

SWT(Software Widget toolkit). It’s a java based framework to develop GUI(standalone) applications. This framework is like Java Swings, AWT. SWT has rich set of widgets like tree, tables, groups, sahsforms, composites etc.

Usecase: Let’s say user has some valid data which is going to change dynamically some new data is added, some data is edited, deleted and some unchanged. If user wants to have keep track of which data is changed, deleted, added, etc. then the following technical blog is helpful.

Well, SWT is derived from the Java web development they are related to each other but further you should have SWT jar files if you want to execute this code.

SWT has given direct support to show the font styles, but its up to you how you want to show them.
In this blog we are showing four types of styles

  1.  Bold
  2. Bold and italic
  3. Strike out
  4. No style

SWT Table or tree

Enum:
/**
* The Enum FontStyleStatus.
This ENUM is used to provide the different styles to text
Based on the status
*/
public enum FontStyleStatus
{
UNCHANGED,
ADDED,
RENAMED,
DELETED
}

Codes Snippet to create table:

Display display = new Display();
Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setText(“Styled text example”);
shell.setLayout(new FillLayout());

Composite container = new Composite(shell, SWT.NONE);
container.setLayout(new FormLayout());
final FormData containerFd = new FormData();
containerFd.top = new FormAttachment(0, 30);
containerFd.left = new FormAttachment(0, 4);
containerFd.right = new FormAttachment(100, -5);
containerFd.bottom = new FormAttachment(100, 0);
container.setLayoutData(containerFd);

tableViewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
tableViewer.setContentProvider(new ContentProvider());
ColumnViewerToolTipSupport.enableFor(tableViewer, ToolTip.RECREATE);

table = tableViewer.getTable();
final FormData fdFroTable = new FormData();
fdFroTable.top = new FormAttachment(0, 5);
fdFroTable.left = new FormAttachment(0, 4);
fdFroTable.right = new FormAttachment(100, -15);
fdFroTable.bottom = new FormAttachment(100, -35);
table.setLayoutData(fdFroTable);
table.setLinesVisible(true);
table.setHeaderVisible(true);

shell.setSize(400, 400);
shell.open();

final MyStyledLabelProvider labelProvider2 = new MyStyledLabelProvider();
final TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
final TableColumn tableColumn = tableViewerColumn.getColumn();
tableColumn.setWidth(100);
tableViewerColumn.setLabelProvider(new MyStyledLabelProvider2(tableViewer, 0, labelProvider2));
tableColumn.setText(“Column1”);

final TableViewerColumn tableViewerColumn2 = new TableViewerColumn(tableViewer, SWT.NONE);
tableViewerColumn2.setLabelProvider(new MyStyledLabelProvider2(tableViewer, 1, labelProvider2));
final TableColumn tableColumn2 = tableViewerColumn2.getColumn();
tableColumn2.setWidth(100);
tableColumn2.setText(“Column2″);

Collection<ValuObject> valuObjects = new ArrayList<>();
for (int i = 0; i < 20; i++)

{
ValuObject valuObject = new ValuObject();
valuObject.setValue1(” Value ” + i);
valuObject.setValue2(” Value” + i);
if (i % 2 == 0)

{
valuObject.setFontStatus(FontStyleStatus.ADDED);
}

else if (i % 3 == 0)

{
valuObject.setFontStatus(FontStyleStatus.DELETED);
}

else if (i % 5 == 0)

{
valuObject.setValue1(” 1 Before edit Value , After edit “);
valuObject.setValue2(” 2 Before edit Value , After edit”);
valuObject.setFontStatus(FontStyleStatus.RENAMED);
}
valuObjects.add(valuObject);
}

tableViewer.setInput(valuObjects);

while (!shell.isDisposed())

{
if (!display.readAndDispatch())
display.sleep();
}

display.dispose();

Value Holder or Value Object to populate table

private class ValuObject
{
private String value1;
private String value2;
private FontStyleStatus fontStatus;
public String getValue1()
{
return value1;
}
public void setValue1(String value1)
{
this.value1 = value1;
}
public String getValue2()
{
return value2;
}
public void setValue2(String value2)
{
this.value2 = value2;
}
public FontStyleStatus getFontStatus()
{
return fontStatus;
}
public void setFontStatus(FontStyleStatus fontStatus)
{
this.fontStatus = fontStatus;
}
}

 

  • While setting the input values itself set the corresponding style you want to display so that from the label provider we can display
  • For the table viewer columns set styled label provider and this should extend StyledCellLabelProvider otherwise we can’t get the styles.
  • As this class is from the Framework it has update method, we have to override this method to get our desired styles.
  • This label provider will be called for each and every column and each and every cell.

Code snippet for StyledLabelProvider:

public static class MyStyledLabelProvider2 extends StyledCellLabelProvider
{
private MyStyledLabelProvider myStyledLabelProvider;
private int index;
public MyStyledLabelProvider2(Viewer treeViewer, int index, MyStyledLabelProvider myStyledLabelProvider)
{
this.myStyledLabelProvider = myStyledLabelProvider;
this.index = index;
}
/**
* {@inheritDoc}
*/
@Override
public void update(ViewerCell cell)
{
final StyledString styledString = myStyledLabelProvider.getStyledString(cell, index);
if (styledString != null)
{
cell.setText(styledString.toString());
cell.setStyleRanges(styledString.getStyleRanges());
}
super.update(cell);
}
}

As we have override update method, this label provider actually sets the styles to the table cells, from this label provider we need to get the actual styles that’s the reason we passed one more label provider with the corresponding column index.

StyleRange, StyledString are the framework classes to provide styling for the text.
You can have a plentt of tutorials about them.

Code snippet to get actual style

Styler is the framework class which provides the styles for the text like bold, strike out etc.
We have to define the required styles. We have some predefined styles also.

/** The strike out styler. */
private Styler strikeOutStyler = new Styler()
{
@Override
public void applyStyles(TextStyle textStyle)
{
textStyle.strikeout = true;
}
};
/** The bold italic styler. */
private Styler boldItalicStyler = new Styler()
{
@Override
public void applyStyles(TextStyle textStyle)
{
textStyle.font = FontStyles.getBoldItalicFont();
}
};
/**
* Instantiates a new my styled label provider.
*/
public MyStyledLabelProvider()
{
}
public StyledString getStyledString(final ViewerCell cell, int columnIndex)
{
final Object element = cell.getElement();
final StyledString styledString = getStyledString(element, columnIndex);
return styledString;
}
private StyledString getStyledString(final Object element, final int columnIndex)
{
StyledString styledString = null;
switch (columnIndex)
{
case 0:
ValuObject value = (ValuObject) element;
styledString = new StyledString(value.getValue1(), boldItalicStyler);
if (value.getFontStatus() == null ||value.getFontStatus().equals(FontStyleStatus.UNCHANGED))
{
styledString = new StyledString(value.getValue1());
}
else if (value.getFontStatus().equals(FontStyleStatus.DELETED))
{
styledString = new StyledString(value.getValue1(),strikeOutStyler);
}
else if (value.getFontStatus().equals(FontStyleStatus.ADDED))
{
styledString = new StyledString(value.getValue1(),
boldItalicStyler);
}
else if (value.getFontStatus().equals(FontStyleStatus.RENAMED))
{
final String[] strings = value.getValue1().split(“,”);
StyledString styledString2 = new StyledString(strings[1]);
styledString = new StyledString(strings[0], strikeOutStyler);
styledString.append(styledString2);
}
break;
case 1:
ValuObject value2 = (ValuObject) element;
if (value2.getFontStatus() == null ||value2.getFontStatus().equals(FontStyleStatus.UNCHANGED))
{
styledString = new StyledString(value2.getValue2());
}
else if (value2.getFontStatus().equals(FontStyleStatus.DELETED))
{
styledString = new StyledString(value2.getValue2(),
strikeOutStyler);
}
else if (value2.getFontStatus().equals(FontStyleStatus.ADDED))
{
styledString = new StyledString(value2.getValue2(),
boldItalicStyler);
}
else if (value2.getFontStatus().equals(FontStyleStatus.RENAMED))
{
final String[] strings = value2.getValue2().split(“,”);
StyledString styledString2 = new StyledString(strings[1]);
styledString = new StyledString(strings[0], strikeOutStyler);
styledString.append(styledString2);
}
break;
default:
break;
}
return styledString;
}
}
Font Data:
public final static class FontStyles
{
private static FontData[] italicValues;
private static FontData[] boldItalicValues;
public static FontData[] getItalicFontData() {
return italicValues;
}
public static Font getBoldItalicFont()
{
if (getItalicFontData() == null)
{
final Font originalFont = Display.getCurrent().getSystemFont();
boldItalicValues = originalFont.getFontData();
for (int i = 0; i < boldItalicValues.length; i++)
{
boldItalicValues[i].setStyle(boldItalicValues[i].getStyle() |SWT.ITALIC | SWT.BOLD);
}
}
return new Font(Display.getCurrent(), boldItalicValues);
}

}

Snapshot before applying styles:

SWT table

If you observe the above screenshot the there is no styles inside the cells.

Snapshot after applying the styles:

SWT table1

You can observe the text inside the cells are bold, bold-italic, strike out, strike out and normal and normal the various styles are displayed. Even we can change the background, font color also.

Conclusion:

This article discuss about you how to display the text font inside the table or tree with styles by sing styled text, styles and styles label provider class as these are from framework.
This blog has 3 parts:

  1. Table/tree creation.
  2. Creating the table data and while creating data itself we have to specify the style you want to display. It’s just a simulation real time it depends on the functionality.
  3. Setting the styled label provider and overriding the update method. This is very important step, from this method we have to get the actual styles. This method displays actual styles.

Hope this blog is helpful.

Considering iOS App Development as a Freelance Activity

Posted on Updated on

iOS app development is in a very good form in the markets of software making. In fact it is the time someone very much interested in iOS app development takes a step forward and become a full fledged app developer and takes up the opportunity to showcase your extraordinary programming skills. iOS app development is under a great demand in the Apple store too. The popularity of iOS is increasing day by day, but the number of iOS apps is not. This is clearly creating a great demand for the iOS app development enthusiasts.

IOS app development as a freelance activity

One has 2 options when he wants to get into a full time career of iOS app development. He either works for a firm that is into iOS app making or he becomes a freelancer and starts to develop and deploy his own applications. Freelancing is always a better option if you have a little entrepreneurial approach and independent character. There are a few things to be considered while choosing the freelancing approach. Some common mistakes are generally found to be done by freelancer app makers. Let us go through them for a better understanding.

Firstly, spending enough time on research and ideation is important. No app will be a success without a perfect idea that can find an audience of its own. iOS app development is not just about coding. Making a perfect work schedule and dividing the app development process into convenient parts like pre-production, coding and post-production can help in organizing the process in a much better way.

Making a totally free application is a blunder while considering iOS app development. Even if you are launching your first every iOS application and you want to deploy it on the store, don’t make it a completely free app. A good way will be releasing a free version with limited access and features and then upgrading it to a paid version of full edition. This will not only fetch you money in your initial stages but also will tell you clearly an audience opinion on your app through the free versions status of success or failure. Also, consider the fact that iOS devices are costly and no iOS user will value any freely available app even if it is the best of its kind.

iOS app development has seen a lot of progress in the recent times. We have got automated platforms and IDEs for developing applications in iOS. You need not develop everything from scratch. Make use of the tools available in a perfect fashion. Take advantage of available packages wherever possible. No user really cares about how its’ made, everyone only concentrates on what it can do.

With all these considerations in mind, go for iOS app development for a bright career and opportunities.

Recommended :