Proxy settings can be changed in {{maven_installation_folder}}/conf/settings.xml
. Un-comment and change the values in proxies
section of the file. Changes to this file doesn’t require maven restart.
Deploy a NodeJS application using Git
Remote Repository on Deployment Server
Create two folders named project.git
and project.source
. Create a bare git repo in project.git
Authenticate REST APIs using JWT
Authentication vs Authorization
- Authentication: identifying the user who is accessing the resource
- Authorization: checking if the user has permission to perform an action on the resource (e.g updating the resource)
JWT for Authentication
JWT or JSON Web Token is a preferrable method for authenticating REST APIs because:
Custom Model Methods in Loopback
Loopback models can be extended by adding custom methods to them. A method can be:
Status of Indian Railway PNR on Facebook Messenger
Bhaina Bot
Bhaina is a facebook messenger based chat bot that helps you with current status of any Indian Railway PNR. You don’t have to install any extra application on your mobile to use this service.
Enable Destroy All API for a model in Loopback
Destroy All API (Model.destroyAll()
) is, by default, disabled to avoid accidental bulk deletion of data. However, it might be required for developmental purposes.
HackerRank Contest - Project Euler - Large Sum
Solution
- Use
BigInteger
to calculate the sum and print first 10 characters by converting to string.
/* Solution to HackerRank: Large Sum
* URL: https://www.hackerrank.com/contests/projecteuler/challenges/euler013
*/
import java.io.*;
import java.util.*;
import java.math.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
BigInteger sum = new BigInteger("0");
for(int t=0; t<N; t++){
sum = sum.add(new BigInteger(in.next()));
}
System.out.println(sum.toString().substring(0, 10));
}
}
HackerRank Contest - Project Euler - Power Digit Sum
Solution
- 2 to the power 1000 will be a huge number hence consider using
BigInteger
. - Recursively calculate the sum of all the digits.
/* Solution to HackerRank: Power Digit Sum
* URL: https://www.hackerrank.com/contests/projecteuler/challenges/euler016
*/
import java.io.*;
import java.util.*;
import java.math.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
for(int t=0; t<T; t++){
int N = in.nextInt();
BigInteger base = new BigInteger("2");
BigInteger pow = base.pow(N);
System.out.println(digitSum(pow));
}
}
public static BigInteger digitSum(BigInteger n){
BigInteger ten = new BigInteger("10");
if(n.compareTo(ten) == -1){
// if number is less than 10 then it is reduced to single digit, hence return the digit
return n;
}
else{
BigInteger r[] = n.divideAndRemainder(ten);
// r[0] is the quotient and r[1] is the remainder
return digitSum(r[0]).add(r[1]);
}
}
}
Deploy Hugo Website with Surge for Free
Surge is static web publishing for Web Developers, right from the CLI.
HackerEarth - Binary Tree
Solution
- Diameter of a binary tree is maximum of diameter of current node, its left and right child.
/* Solution to HackerEarth: Binary Tree
* URL: https://www.hackerearth.com/practice/data-structures/trees/binary-and-nary-trees/tutorial/
*/
import java.util.*;
class TestClass {
public static void main(String args[] ) throws Exception {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
int X = in.nextInt();
Node root = new Node(X);
for(int t=0; t < T-1; t++){
String path = in.next();
Node node = new Node(in.nextInt());
// add new node to the tree
add(root, path.toCharArray(), 0, node);
}
System.out.println(diameter(root));
}
public static void add(Node root, char[] path, int current, Node target){
if(path.length-1 == current){
if(path[current] == 'L'){
// update the value of temporary node or add the new node
if(root.left != null){
root.left.value = target.value;
}
else{
root.left = target;
}
}
else if(path[current] == 'R'){
// update the value of temporary node or add the new node
if(root.right != null){
root.right.value = target.value;
}
else{
root.right = target;
}
}
}
else{
if(path[current] == 'L'){
// add a temporary node if not added yet
if(root.left == null){
root.left = new Node(0);
}
add(root.left, path, current+1, target);
}
else if(path[current] == 'R'){
// add a temporary node if not added yet
if(root.right == null){
root.right = new Node(0);
}
add(root.right, path, current+1, target);
}
}
}
public static int height(Node root){
if(root == null){
return 0;
}
else{
return Math.max(height(root.left), height(root.right))+1;
}
}
public static int diameter(Node root){
if(root == null){
return 0;
}
else{
// diameter of current node
int diameter = height(root.left)+height(root.right)+1;
// return maximum of diameter of current node or left child or right child
return Math.max(diameter, Math.max(diameter(root.left),diameter(root.right)));
}
}
}
class Node{
public int value;
public Node left;
public Node right;
public Node(int value){
this.value = value;
}
}