Feb
4
2020
During the summer, our team usually hires an intern. We find that the interns we hire are more than capable with the technical requirements but usually need some help on process. In order to help new team members adapt our process we’ve developed a number of useful checklists of some best practices. Here are some useful checklist to go through when working on new features.
Ticket Checklist
- Add clear and concise title and description
- Add reproducible steps
- Use realistic sample data
- Add specific acceptance criteria
- Add related tickets
Code Checklist
- Create your own feature branch
- Check code into your branch often
- Merge from master often
- Run test suites on your own branch
- Add and update test cases
- And and update wiki documentation
- Add comments to ticket
New Project Checklist
- Source
- Git Repository
- Dependency Management
- readme.md
- Wiki documentation
- Design Diagram
- API Documentation
- Common Configuration
- AWS Permissions
- Technical Specifications
- Sample log output
- Sample Splunk queries
- Splunk friendly logs
- Splunk Dashboards
- Splunk Alerts
- Test Cases
- Release Management
- Bamboo Plan
- Ansible Playbook
- Package
no comments | tags: docker, git, intern, maven, software development, Tools, unit testing, wiki | posted in Java, JavaScript, Programming, Startup, Team
Jan
6
2020
Every Java application has some sort of bean or Plain Old Java Object (POJO) to hold and manage state. Because of good Object Oriented Programming (OOP) principles we encapsulate field access with getter and setter methods. Most modern IDEs allow you to quickly create getters and getters. You can often find a Generate option under the Code menu from your favorite IDE. But generating getters and setters produces a lot of unnecessary boilerplate code.
With Project Lombok, you can reduce all that boilerplate getter and setter code with a few annotations.
The following bit of code will produce a Java class with the necessary getters and setters to access all the defined fields.
package com.juixe.core.pojo;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@ToString @EqualsAndHashCode
@Getter @Setter
public class Person {
private Long id;
private String firstName;
private String lastName;
}
Given the Person class above, you can start coding the following.
Person p = new Person();
p.setFirstName("Boingo");
p.setLastName("API");
p.setId(1000l);
The getter and setter methods are added to the bytecode for the Person class by Project Lombok through the annotations. If you remove one of the annotations, like the @Setter annotation, then the setters methods will be deleted.
We just saw how a few annotation can generate getters, setters, equals, hashCode, and toString methods for simple Java classes. If you want all these methods generated for you, automatically, you can just use the @Data annotation like the following.
package com.juixe.core.pojo;
import lombok.Data;
@Data
public class Person {
private Long id;
private String firstName;
private String lastName;
}
There is also a @Value annotation that is similar to @Data except that it is intended for immutable objects, so it doesn’t generate any setter methods.
no comments | tags: bytecode, code generation, lombok, oop, pojo | posted in Java, Programming, TechKnow
Jan
2
2020
JSON is a versatile format to define data. I read and write JSON all the time but as a subset of JavaScript, it has a few limitations, most notably the lack of support for comments. Enter HJSON, or Human JSON. HJSON makes quotes around object names optional, it makes quotes around strings optional as well, it adds support for multi-line strings, and allows you to add comments in a number of ways. The following is valid HJSON.
{
// use #, // or /**/ comments,
// omit quotes for keys
key: 1
// omit quotes for strings
contains: everything on this line
// omit commas at the end of a line
cool: {
foo: 1
bar: 2
}
// allow trailing commas
list: [
1,
2,
]
// and use multiline strings
realist:
'''
My half empty glass,
I will fill your empty half.
Now you are half full.
'''
}
There is an implementation of HJSON for most popular languages, like Java, Python, Go, Python, etc. I’ve used the hjson-java library to read HJSON file and converted it to JSON in a few lines.
no comments | tags: hjson, human json, json | posted in Java, JavaScript, Programming, TechKnow
Dec
27
2019
Here is a quick tutorial on how to create a local embedded HTTP server in Java to serve JSON data. The whole code in less than 30 lines on Java.
package com.juixe.json.server;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;
public class JSONServer implements HttpHandler {
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/data", new JSONServer());
server.setExecutor(null);
server.start();
}
@Override
public void handle(HttpExchange he) throws IOException {
String response = "{\"message\": \"Hello, HTTP Client\"}";
he.getResponseHeaders().set("Content-Type", "application/json;charset=UTF-8");
he.sendResponseHeaders(200, response.length());
he.getResponseBody().write(response.getBytes());
he.close();
}
}
The HttpServer and HttpHandler classes are part of the JRE, so no additional libraries are required. Java also includes a HttpsServer which supports SSL. In the HttpHandler, you can return any data but for this example we are returning a simple JSON response.
no comments | tags: http, Java, json, server, tutorial | posted in Java, Programming, TechKnow
Sep
25
2019
The following is a short list of tools, libraries, and projects that I found interesting at Oracle OpenWorld 2019.
- Oracle APEX – Rapid Application Development framework built on top of Oracle’s database. With little code, build CRUD application around database tables or even excel documents.
- Oracle Jet – Oracle’s JavaScript Extension Toolkit (JET) for building mobile and desktop web applications.
- WeaveWorks Sock Shop – Microservice sample app, like Java Pet Store.
- Micronaut – Full-stack polyglot framework for building microservice and serverless applications.
- Helidon – Collection of Java libraries for developing microservices.
- JHipster – Generate, develop, and deploy Spring Boot + Angular/React/Veue web applications and microservices
- OpenAPI – API description format for REST APIs. Formerly known as Swagger, used to help to design, build, document, and consume REST APIs.
- Moby Project – Open framework to assemble specialized container systems.
- Eclipse Vert.x – Reactive tool-kit
- Eclipse Theia – Cloud IDE platform, runs on Docker
- Eclipse Che – Kubernetes native IDE, allowing you to code, build, test and run applications exactly as they run on production from any machine.
- Eclipse MicroProfile – Specification to define a microservice application platform that is portable across multiple runtimes and vendors.
- Eclipse CodeWind – Container support in Eclipse IDE, Eclipse Che, and VS Code.
- Docker Kitematic – GUI application to run Docker containers.
no comments | tags: docker, helidon, jhipster, micronaut, openapi, oracle | posted in Conference, Java
May
29
2012
There are times when you need to format a integer or double value into a String, with the comma for values larger than a thousand. If you need to format a numeric value correctly based on the local formatting rules for numbers use the NumberFormat class. Different locales have different formatting rules, for example in France they use the comma as a decimal point where in the United States the comma is used for delimiting large numbers.
double val = 123456.78;
System.out.println(val); // 123456.78
// Use default locale to format string
String localFormat = NumberFormat.getNumberInstance().format(val);
System.out.println(localFormat); // 123,456.78
String frenchFormat = NumberFormat.getNumberInstance(Locale.FRANCE).format(val);
System.out.println(frenchFormat); // 123Â 456,78
no comments | tags: formatting, Java, NumberFormat, numeral | posted in Java, Programming