Sunday

Javascript - Functions and Objects

Let's talk a little about javascript functions and objects. I'll use Atom text editor, you can find lots off tutorial about using Atom.

Named functions:
function multiply(a,b) {
  var result = a*b;
  return result;
}

var multiplied = multiply(3,4);
console.log(multiplied);
console output:

12

function multiply(a,b) {
  var result =  ["my result:", a*b];
  return result;
}

var multiplied = multiply(3,4);
console.log(multiplied);
console.log(multiplied[0] + " >>>> " + multiplied[1]);
console output:

[ 'my result:', 12 ]
my result: >>>> 12

Anonymous functions:
var a = 4;
var b = 3;

 //only execute if we call the variable as if it is a function
var multiplied = function() {
  var result =  a*b;
  console.log(result);
}

// which means inside multiplied variable there is a anonymous function, run it!
multiplied();
console output:

12

//only execute if we call the variable as if it is a function
var multiplied = function(a,b) {
  var result =  ["my result:", a*b];
  return result;
}

// which means inside multiplied variable there is a anonymous function, run it!
console.log(multiplied(4,5));
console.log(multiplied);
console output: 

[ 'my result:', 20 ]
[Function: multiplied]

Immediately invoked functional expressions:
//inside the variable, we have an immediately  invoked function expression
//run the function with below arguments
var multiplied = (function(a,b) {
  var result =  ["my result:", a*b];
  return result;
})(4,5) // arguments are here

console.log(multiplied);
console output:

[ 'my result:', 20 ]

//result is NaN, why i'm in trouble?
//the browser runs the function(immediately invoked expressions) when it is encountered
//so the variables should be before the function
var multiplied = (function(a,b) {
  var result =  ["my result:", a*b];
  return result;
})(a,b) // arguments are here

var a = 3;
var b = 4;

console.log(multiplied);

variables:
***For scope control, you should always declare your variables using the var prefix.
There is a difference between var a = 1 and a = 1.
var a = 1 --> declares the variable in the current scope which can be local or global.
a = 1 --> if the variable couldn't be found anywhere in the scope chain, it becomes global.
This usage is very bad practice!!!

***With ES2015 two new types could be used:
const (cannot be changed once defined)
let (block scope variable. smaller scope then var)
















const MYCONSTANT = 3;
console.log(MYCONSTANT);

MYCONSTANT = 4; // gets error
console output:

3
[stdin]:6
MYCONSTANT = 4;
           ^

TypeError: Assignment to constant variable.
    at [stdin]:6:12
    at Script.runInThisContext (vm.js:96:20)

function example() {
  var localVariable = 4;

  if(localVariable) {
    var localVariable = "different localVariable"; //changes local variable for entire scope, to resolve that problem we should use type of let
    console.log("nested localVariable: " + localVariable);
  }

  console.log("localVariable: " + localVariable);
}

example();
console output:

nested localVariable: different localVariable
localVariable: different localVariable

function example() {
  var localVariable = 4; // or let localVariable = 4;

  if(localVariable) {
    let localVariable = "different localVariable";
    console.log("nested localVariable: " + localVariable);
  }

  console.log("localVariable: " + localVariable);
}

example();
console output:

nested localVariable: different localVariable
localVariable: 4

objects:
var ltmc = new Object();

var ltmc = {
  description: "Less Talk More Code",
  year: "2018",
  //objects can also have function that uses or changes object's properties
  updateYears: function() {
    return ++ltmc.year;
  }
}

// or you can define as below:
// ltmc.description = "Less Talk More Code";
// ltmc.year = "2018";

console.log("all object: " + ltmc);
console.log("one property of object: " + ltmc.description);

ltmc.updateYears();
console.log("updated: " + ltmc.year);
console output:

all object: [object Object]
one property of object: Less Talk More Code
updated: 2019

//object constructor examples
function Ltmc(description, year) {
  this.description = description;
  this.year = year;
  this.updateYears = function() { //anonymous function
    return ++this.year;
  };
}

var ltmc01 = new Ltmc("Less Talk More Code", "2018");
var ltmc02 = new Ltmc("Less Talk More Code2", "2019");
console.log(ltmc01);
console.log("************");
console.log(ltmc02);

var ltmcList = [
  new Ltmc("Less Talk More Code3", "2020"),
  new Ltmc("Less Talk More Code4", "2021"),
];

console.log("************");
console.log(ltmcList);
console output:

Ltmc {
  description: 'Less Talk More Code',
  year: '2018',
  updateYears: [Function] }
************
Ltmc {
  description: 'Less Talk More Code2',
  year: '2019',
  updateYears: [Function] }
************
[ Ltmc {
    description: 'Less Talk More Code3',
    year: '2020',
    updateYears: [Function] },
  Ltmc {
    description: 'Less Talk More Code4',
    year: '2021',
    updateYears: [Function] } ]

// ltmc01["year"]  -->  bracket notation example
//  ltmc01.year    and    ltmc01["year"]  are same

function Ltmc(description, year) {
  this.description = description;
  this.year = year;
}

var ltmc01 = new Ltmc("Less Talk More Code", "2018");

console.log(ltmc01["year"]);

I'll mention about closures in an another post.
(much more examples:  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures )

Tuesday

Sort multiple variables with Java 8 stream

I'll try to sort my data as following rules using java 8 stream.
Student.Address.CountryName = B or C is previous  >>
    then Student.StudentDetail.StudentScore descending (nulls  appear at the end) >>
       then Student.StudentDetail.RegistrationTime ascending

Example data:

The following code snippet makes sorting: 
 studentList.stream().sorted(
               Comparator.comparing((Student s)-> !Arrays.stream(priorityCountryName).anyMatch(s.address.getCountryName()::equals))
               .thenComparing(Comparator.comparing(s-> s.studentDetail.getStudentScore(), Comparator.nullsLast(Comparator.reverseOrder())))
               .thenComparing((s1) -> s1.studentDetail.getRegistrationTime())
)

Full example:
import java.io.Serializable;

public class Student implements Serializable {
    
    public final Address address;
    public final StudentDetail studentDetail;
    
    public Student(Address address, StudentDetail studentDetail) {
        this.address = address;
        this.studentDetail = studentDetail;
    }
}
import java.io.Serializable;

public class Address implements Serializable {
    
    private String countryName;
    
    public Address() {
    }

    public String getCountryName() {
        return countryName;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

}
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;

public class StudentDetail implements Serializable {

    private int studentNumber;
    private BigDecimal studentScore;
    private Timestamp registrationTime;
    
    public StudentDetail(){
    }

    public BigDecimal getStudentScore() {
        return studentScore;
    }

    public void setStudentScore(BigDecimal studentScore) {
        this.studentScore = studentScore;
    }

    public Timestamp getRegistrationTime() {
        return registrationTime;
    }

    public void setRegistrationTime(Timestamp registrationTime) {
        this.registrationTime = registrationTime;
    }

    public int getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(int studentNumber) {
        this.studentNumber = studentNumber;
    }
    
}
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class Test {

    public static void main(String[] args) {
       String[] priorityCountryName = {"B", "C"};
 
       List<Student> studentList = addStudents();
       logStudentList("********studentList mix order**********", studentList);

       List<Student> orderedStudentList = studentList.stream().sorted(
               Comparator.comparing((Student s)-> !Arrays.stream(priorityCountryName).anyMatch(s.address.getCountryName()::equals))
               .thenComparing(Comparator.comparing(s-> s.studentDetail.getStudentScore(), Comparator.nullsLast(Comparator.reverseOrder())))
               .thenComparing((s1) -> s1.studentDetail.getRegistrationTime())
           ).collect(Collectors.toList());;
 
       logStudentList("********studentList ordered**********", orderedStudentList);
    }
    
    
    private static List<Student> addStudents() {
       List<Student> studentList = new ArrayList<Student>();
 
       Student student8 = new Student(new Address(), new StudentDetail());
       student8.address.setCountryName("D");
       student8.studentDetail.setStudentScore(new BigDecimal(5.0).setScale(2, BigDecimal.ROUND_HALF_EVEN));
       student8.studentDetail.setRegistrationTime(Timestamp.valueOf("2024-12-31 09:30:00"));
       student8.studentDetail.setStudentNumber(8);
       studentList.add(student8);
 
       Student student3 = new Student(new Address(), new StudentDetail());
       student3.address.setCountryName("B");
       student3.studentDetail.setStudentScore(new BigDecimal(0.1).setScale(2, BigDecimal.ROUND_HALF_EVEN));
       student3.studentDetail.setRegistrationTime(Timestamp.valueOf("2019-12-31 09:30:00"));
       student3.studentDetail.setStudentNumber(3);
       studentList.add(student3);
 
       Student student5 = new Student(new Address(), new StudentDetail());
       student5.address.setCountryName("B");
       student5.studentDetail.setStudentScore(null);
       student5.studentDetail.setRegistrationTime(Timestamp.valueOf("2018-12-31 09:30:00"));
       student5.studentDetail.setStudentNumber(5);
       studentList.add(student5);
 
       Student student2 = new Student(new Address(), new StudentDetail());
       student2.address.setCountryName("C");
       student2.studentDetail.setStudentScore(new BigDecimal(2.0).setScale(2, BigDecimal.ROUND_HALF_EVEN));
       student2.studentDetail.setRegistrationTime(Timestamp.valueOf("2021-12-31 09:30:00"));
       student2.studentDetail.setStudentNumber(2);
       studentList.add(student2);
 
       Student student7 = new Student(new Address(), new StudentDetail());
       student7.address.setCountryName("D");
       student7.studentDetail.setStudentScore(new BigDecimal(5.0).setScale(2, BigDecimal.ROUND_HALF_EVEN));
       student7.studentDetail.setRegistrationTime(Timestamp.valueOf("2023-12-31 09:30:00"));
       student7.studentDetail.setStudentNumber(7);
       studentList.add(student7);
 
       Student student4 = new Student(new Address(), new StudentDetail());
       student4.address.setCountryName("B");
       student4.studentDetail.setStudentScore(new BigDecimal(0.1).setScale(2, BigDecimal.ROUND_HALF_EVEN));
       student4.studentDetail.setRegistrationTime(Timestamp.valueOf("2020-12-31 09:30:00"));
       student4.studentDetail.setStudentNumber(4);
       studentList.add(student4);
 
       Student student9 = new Student(new Address(), new StudentDetail());
       student9.address.setCountryName("D");
       student9.studentDetail.setStudentScore(new BigDecimal(4.0).setScale(2, BigDecimal.ROUND_HALF_EVEN));
       student9.studentDetail.setRegistrationTime(Timestamp.valueOf("2025-12-31 09:30:00"));
       student9.studentDetail.setStudentNumber(9);
       studentList.add(student9);
 
       Student student1 = new Student(new Address(), new StudentDetail());
       student1.address.setCountryName("B");
       student1.studentDetail.setStudentScore(new BigDecimal(6.0).setScale(2, BigDecimal.ROUND_HALF_EVEN));
       student1.studentDetail.setRegistrationTime(Timestamp.valueOf("2022-12-31 09:30:00"));
       student1.studentDetail.setStudentNumber(1);
       studentList.add(student1);
 
       Student student10 = new Student(new Address(), new StudentDetail());
       student10.address.setCountryName("D");
       student10.studentDetail.setStudentScore(null);
       student10.studentDetail.setRegistrationTime(Timestamp.valueOf("2018-11-12 09:30:00"));
       student10.studentDetail.setStudentNumber(10);
       studentList.add(student10);
 
       Student student6 = new Student(new Address(), new StudentDetail());
       student6.address.setCountryName("E");
       student6.studentDetail.setStudentScore(new BigDecimal(5.0).setScale(2, BigDecimal.ROUND_HALF_EVEN));
       student6.studentDetail.setRegistrationTime(Timestamp.valueOf("2023-12-01 09:30:00"));
       student6.studentDetail.setStudentNumber(6);
       studentList.add(student6);
 
       return studentList;
    }
    
    private static void logStudentList(String firstMessage, List<Student> studentList) {
       System.out.println(firstMessage);
 
       for(Student student : studentList) {
          StringBuilder studentBuilder = new StringBuilder();
        
          studentBuilder.append("countryname: ");
          studentBuilder.append(student.address.getCountryName());
          studentBuilder.append(" studentNumber: ");
          studentBuilder.append(student.studentDetail.getStudentNumber());
          studentBuilder.append(" studentScore: ");
          studentBuilder.append(student.studentDetail.getStudentScore());
          studentBuilder.append(" registrationTime: ");
          studentBuilder.append(student.studentDetail.getRegistrationTime());
        
          System.out.println(studentBuilder.toString());
       }
    }

}

//CONSOLE OUTPUT:
********studentList mix order**********
countryname: D studentNumber: 8 studentScore: 5.00 registrationTime: 2024-12-31 09:30:00.0
countryname: B studentNumber: 3 studentScore: 0.10 registrationTime: 2019-12-31 09:30:00.0
countryname: B studentNumber: 5 studentScore: null registrationTime: 2018-12-31 09:30:00.0
countryname: C studentNumber: 2 studentScore: 2.00 registrationTime: 2021-12-31 09:30:00.0
countryname: D studentNumber: 7 studentScore: 5.00 registrationTime: 2023-12-31 09:30:00.0
countryname: B studentNumber: 4 studentScore: 0.10 registrationTime: 2020-12-31 09:30:00.0
countryname: D studentNumber: 9 studentScore: 4.00 registrationTime: 2025-12-31 09:30:00.0
countryname: B studentNumber: 1 studentScore: 6.00 registrationTime: 2022-12-31 09:30:00.0
countryname: D studentNumber: 10 studentScore: null registrationTime: 2018-11-12 09:30:00.0
countryname: E studentNumber: 6 studentScore: 5.00 registrationTime: 2023-12-01 09:30:00.0
********studentList ordered**********
countryname: B studentNumber: 1 studentScore: 6.00 registrationTime: 2022-12-31 09:30:00.0
countryname: C studentNumber: 2 studentScore: 2.00 registrationTime: 2021-12-31 09:30:00.0
countryname: B studentNumber: 3 studentScore: 0.10 registrationTime: 2019-12-31 09:30:00.0
countryname: B studentNumber: 4 studentScore: 0.10 registrationTime: 2020-12-31 09:30:00.0
countryname: B studentNumber: 5 studentScore: null registrationTime: 2018-12-31 09:30:00.0
countryname: E studentNumber: 6 studentScore: 5.00 registrationTime: 2023-12-01 09:30:00.0
countryname: D studentNumber: 7 studentScore: 5.00 registrationTime: 2023-12-31 09:30:00.0
countryname: D studentNumber: 8 studentScore: 5.00 registrationTime: 2024-12-31 09:30:00.0
countryname: D studentNumber: 9 studentScore: 4.00 registrationTime: 2025-12-31 09:30:00.0
countryname: D studentNumber: 10 studentScore: null registrationTime: 2018-11-12 09:30:00.0

Friday

Gradle - Installation

1. Download gradle zip file from  https://gradle.org/releases/








2. Extract files from zip to a location.
3. Go to enviroment variables >> system variables >> new































4. Go to enviroment variables >> system variables >> Edit 'path' >> add '%GRADLE_HOME%/bin'




















5. cmd >> gradle -v

Thursday

How to install and configure Git(2.19.0) and GitHub on Windows

Install git on your desktop:
1. Go  https://git-scm.com/  >> click Downloads >> click for windows.
2. Run the downloaded file.
3. Click next, select below components, then click next.
























































































































































































Create repository on GitHub:
1. Create an account for GitHub. https://github.com/
2. Sign in to GitHub with your user.
3. Click to new repository:































































You can select language from >> 'add .gitignore' section


























































































Then click 'Create repository.'








































































You can find the link for your repository as follow:



















































Configure  git and github:
1. Create a folder named as 'git'. C:\git
2. Then open git bash.
3. Lets pass to out folder directory.
 'cd /C'







































































































'cd git/'



































git config --global user.name "Your github name"
































git config --global user.email "your email adress"
































git clone (your repository adress - i show you up how to copy it)































TestGit folder has been copied to our folder:

























How to upload files to GitHub:




1.Create  a file:































2. Write something to file then save.



























































3.
git add (file names)
























































4.
git commit - m "(committed message)" filename


































5.
git push -u origin master
>> at first time it will ask github user-password.












































6. Go to github then refresh page.
































































Change file and upload again:
1. Change text in the file and save it.














2.
git status










































3.
git commit - m "(committed message)" filename






























4.
git push -u origin master












































5. Go to your github page.