Posts

Showing posts from 2016

How to install Android N ( Version 7) on Nexus 5

You can install Android N (AOSP) build on your Nexus 5 and use the functionality such as multi windows support, quick notification reply on your Nexus 5 as well. 

Before going ahead, I would remind you that by following this method will void your device warranty/guaranty. There are chances that your device may get bricked (unusable). So make sure you follow the steps correctly and do not stop the process in between.

Requirements:

Working android SDK platform tools ( fastboot and dab)Updated USB driver for your device installed on computer.USB debugging enabled on device. Check this for how to enable USB debugging on mobile.Download recovery from TWRPDownload latest Android N (AOSP) image from xda-dev forum, you can choose any other image shared on forum.
Unlocking Bootloader

Once you have enabled USB debugging on device and connected device to computer execute below command on command prompt or terminaladb reboot bootloaderOnce your device restarted, check if the device is in fastboot by e…

How to enable USB debugging on Android devices

USB debugging has a number of uses on Android devices. To enable USB debugging you should first enable Developer options. Developer options have some setting relevant ro advanced users and developers.

Developer options is hidden by default, and can be activated with the following steps:

From Settings, select About phone (or About tablet).Tap the Build number entry seven times. On the seventh tap, you will be notified that "You are now a developer."Return to Settings. Developer options should now be visible just above the About phone ( or About tablet).Now to enable USB debugging click on the Developer options -> USB debugging (Android debugging). Some devices might require Developer options to be on before clicking on USB debugging.

Design an Parking lot system

Let's consider below are the requirements for parking lot. Based on these requirements we will have to design a parking lot.
Requirements The parking lot has multiple slots.The parking lot can park motorcycles, cars, and buses.The parking lot has small slots, compact slots, and large slots.A motorcycle can park in any slot.A car can park in either a single compact slot or a single large slot.A bus can park only in a single large slot.
We can devise below use cases from above requirement.
Use cases Any vehicle enters and asks for free parking slot ID.If any appropriate parking slot is available, vehicle will get assigned parking slot and that parking slot will be blocked for parking till vehicle leaves the slot.Any vehicle when leaves the parking slot, the same slot will be free for parking other vehicles.If appropriate parking slot (to fit the vehicle) is not available, parking lot will return parking full message.
Lets brea…

Elevator system design

Let's first start with the use cases or requirements of the elevator. There are multiple modules/ systems involved in complete elevator system. We will break down the uses cases as per the individual system.

High Level Requirements:

User should able to request the elevator from the floor.Once elevator reaches the requested floor, User should get in and should able to choose destination floor.Once destination is chosen by user, elevator should move to destination floor. Once elevator reaches destination floor, user leaves elevator.

User
Presses the button on particular floor to request the elevator. Inside elevator cabin (referred as Cabin here after) user presses the required floor button.Leaves the cabin once elevator reaches particular floor.Floor Floor has ID which indicates which floor it is.Floor has buttons to request the elevator.Floor has a display which indicates current location of the lift.Buttons Button get illuminated when pressed indicating the action is performed.Button s…

Installing MariaDB 10.1 on CentOS 6

Inorder to install MariaDB 10.1 you nned to have your MariaDB.repo entry. So create a file "/etc/yum.repos.d/MariaDB.repo" under "/etc/yum.repos.d/" directory.
Update the MariaDB.repo file with below text for 64bit OS

[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Update the MariaDB.repo file with below text for 32bit OS
`
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos6-x86 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Now run below command just to check if the repo is set correctly.

#sudo yum search Mariadb 

Now install MariaDB using below command

# yum install MariaDB-server MariaDB*engine MariaDB-client

Error : class_name is not mapped, Hibernate

You may get this error while using Hibernate with Java. There could be multiple reasons why this can happen

You haven't really mapped the class name in config.The class name ( Entity) is case sensitive, meaning you should specify the entity name as is in the query. Your entity name may differ than table  name in DB, but still you will have to refer to exact case of entity name. 

Exception handling with RestTemplate

Spring framework offers RestTemplate for consuming RESTful services. Recently I used RestTemplate for consuming one of the third party RESTful service.

RestTemplate offers 'ResponseErrorHandler'; which you can extend to decide which are errors for you and how to handle those error. You can override hasError and handleError methods of ResponseErrorHandler.
In handleError you can throw customException if you want, as outlined in below code.

import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; import org.springframework.web.client.ResponseErrorHandler; import java.io.IOException; public class RestTemplateErrorHandler implements ResponseErrorHandler { @Override public void handleError(ClientHttpResponse response) throws IOException { throw new MyCustomException(response.getStatusText(), response.getStatusCode()); } @Override public boolean hasError(ClientHttpResponse response) throws IOException …

Exception handling for RESTful service in Spring framework

In last couple of posts we have seen how to create RESTful service using Spring framework. Here we will see how can we handle error conditions and return appropriate status code and message.


Use @ResponseStatus on custom exception
In case of error, throw custom exception annotate with @ResponseStatus. Code below shows how to define CustomException. 


@ResponseStatus(value = HttpStatus.SERVICE_UNAVAILABLE, reason = "The service is unavailable") class CustomException extends RuntimeException{ //... }

Return ResponseEntity<> with appropriate error code
ResponseEntity can be used as below.


@RestController public class HelloController { @RequestMapping("/hello") public ResponseEntity sayHello(@RequestParam(value="name", required = false, defaultValue = "World") String name) { try { return new ResponseEntity<>(String.format("Hello %s with Spring Boot !!!", name), HttpStatus.OK); }catch (RuntimeEx…

Path variable with Spring Boot

In the last post "Query parameter handling with Spring Boot"  we have seen how to provide the query parameter . I will be using same project and extending HelloController for this.

For RESTful service to access specific resource via their Id/name we would also need path variable so that those can be accessed with specific path like "hello/{id}".

This can be achieved with @ PathVariable annotation. Replace the HelloController.java with below code.

package hello; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping("/hello/{id}") public String sayHello(@PathVariable("id") String id) { return String.format("Hello world with Spring Boot !!! Id used here %s", id); } } Run the application and hit http://localhost:8080/hello/myId

Query parameter handling with Spring Boot

In last post, Hello World with Spring Boot we have seen how to create REST service with Spring Boot. Now we will extend the same HelloController to work on query parameters.

Here we will get the "name" as query parameter, and respond with updated message. Update HelloController.java file with below code. 

package hello; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping("/hello") public String sayHello(@RequestParam(value="name") String name) { return String.format("Hello %s with Spring Boot !!!", name); } }
We have added @RequestParam annotation which will assign value of query parameter 'name' to variable name. Now run you application and hit "http://localhost:8080/hello?name=XYZ" on browser. You should get…

Hello World REST Service with Spring boot

Recently I tried creating RESTful service with Spring Boot.  Its very easy to create RESTful service using Spring Boot, and also it removes lots of boilerplate code.
I will be walking through creating a simple hello world service. I have used Intellij Idea 15 and Java SDK 1.8, Maven 4.0.0 to build and run the project.
Lets start by creating a maven based project in Intellij. Specified required  SDK, groupId, artifactId and project name.

Now create a directory named "hello" under src->main->java.  Create a new Java class named HelloController (under directory 'hello'). Add below code to HelloController.Java
package hello; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping("/hello") public String sayHello() { return "Hello World with Spring Boot !!!"; } } Your hello REST controller is ready…

Error : java.lang.SecurityException: Can not initialize cryptographic mechanism

During certificate import using InstallCert.Java, I faced this issue. This can cause if you don't have required restriction policy file or the key size is greater than the once deployed by Java by default which is 128 bit. 

This can be solved by downloading the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files from Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files  and copying them in your JRE.

Error : unable to find valid certification path to requested target

I was trying to run Java application, which was using REST Template to implement rest client. The application was connecting to REST service (REST API's) over SSL. The certificate used for SSL was self signed certificate.

The self signed certificate was causing error "unable to find valid certification path to requested target" every time I tried to connect to REST Service. 

In order to resolve this error, I had to add the certificate to the JVM key store. I tried multiple steps, even corrupted the keystore but finally was able to run application successfully. 

You would need InstallCert.Java to successfully import the certificate which can be found at InstallCert.Java

Above git repo has ReadMe which details out all steps required for importing the certificate. 
If you happen to corrupt the keystore you can follow below link to restore it.

http://architecturalatrocities.com/post/19073788679/fixing-the-trustanchors-problem-when-running


Error: Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Image
If you are trying to start docker first time, you might get an error "Cannot connect to the Docker daemon. Is the docker daemon running on this host?"

This might happen because of multiple reasons.
1. You might not have permissions to to access docker
You should grant permission to use docker for specific user if he is not  root user.
In order to grant permission execute below command:
$ sudo usermod -aG docker <username>
replace <username> with actual user name. Also make sure you log off/restart machine before using docker, after executing above command.
2. Docker service might not be running
In order to re-start the docker service execute below commands
$ sudo service docker stop $ sudo service docker start
Now you should be able to use docker.