Today, I had to create twenty-six directories each corresponding to an English alphabet. I wrote a simple bash script that uses for loop with mkdir to do it as shown below.
for alphabet in {a..z}; do mkdir $alphabet done
Today, I had to create twenty-six directories each corresponding to an English alphabet. I wrote a simple bash script that uses for loop with mkdir to do it as shown below.
for alphabet in {a..z}; do mkdir $alphabet done
Today, I encountered an issue while running tests for one of my Scala SBT projects. Each time, ran sbt test command hang. After running jvisualvm, I discovered that it is due to thread deadlock. I couldn’t figure out why deadlock is happening. Test cases worked fine when ran individually. To work through this issue, I disabled parallel execution of tests.
From command-line, you can use following command to disable parallel execution of test:
$ sbt 'set parallelExecution in Test := false' test
You can also set this setting in your build.sbt to avoid setting this setting manually.In your build.sbt , add the following line.
parallelExecution := false
Today, I was building a REST client for one of the REST server applications using Python. I decided to use Python requests library for writing my REST API client. Requests is a very easy to use library that you can use to quickly bootstrap your REST API client. Writing REST client for REST endpoints was a matter of an hour. This REST API client will be used from our custom Jython(JVM implementation of Python) REPL. REST API has only two endpoints that return JSON objects. Response of first endpoint was fed to the second endpoint. I was returning the JSON response as Python dictionary. User can change values of the first response and pass it to the second API call. In Python, you work with dictionary as shown below. Continue reading “Python json object_hook”
Let me start with the confession that I am not an expert Python developer so this might not be a surprise for some of you. Yesterday, I was working on a Python REST API client using awesome requests
library for one of my server application. To quickly hack my client, I created a Python virtual environment using virtualenv
and installed required libraries using pip
. I was ready to play with Python(again). I created a new file abc.py
and added a method. For demonstration, let’s suppose our method is called hello
, as shown below. Continue reading “Python abc.py Puzzle”
Today, I had to parse an ISO 8601 date that was returned as part of a JSON response from a REST service. With default settings GSON can’t parse the date like 2015-09-22T17:21:32.70856998Z
. To make it work, use the code shown below.
Gson gson = new GsonBuilder() .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") .setPrettyPrinting() .create();
Jackson has a very useful annotation @JsonProperty
that gives developer the option to provide a name that will be used to map data from JSON to the value object. This is very useful when REST API you are interacting with does not follow conventions like some fields are caps, some camel case, and other using underscore. Today, I had a similar need but I was working with GSON library instead of Jackson. The solution in Gson is a similar annotation called @SerializedName
that you can use to provide names that match the source JSON. A simple example is shown below.
public class Message{ @SerializedName("ID") private String id; @SerializedName("NFd") private int fileDescriptors; }
Today, I was trying to use a Gradle plugin that was currently not published to Bintray or any other public repository. I performed following actions to use that plugin in my project.
Clone the gradle plugin to your local machine and run the following command to publish plugin to your local Maven repository.
$ ./gradlew clean build $ ./gradlew publishToMavenLocal
Once you have published your plugin to local Maven repository then you need to add the plugin to your project so that you can execute it. Add the following to your build.gradle
.
apply plugin: 'my-demo-plugin' buildscript{ repositories { mavenLocal() dependencies{ classpath 'io.shekhar.gradle.plugins:my-demo-plugin:0.1-SNAPSHOT' } } }
In the build.gradle
shown above we are applying our plugin my-demo-plugin
using the apply plugin
command. Then we used buildscript
method to add our plugin to classpath. Also, we used local maven repo using mavenLocal()
Gradle function.
Today, while write a client for a REST API I had the need to use a different field naming strategy than the default one. By default, when Gson tries to convert a JSON String to an object it expects field names in JSON to be same as field name in the converting object. For example, you can convert following JSON String to Message object as shown below.
{ "message": "hello world!" }
public class Message{ private String message; // setters and getters }
To convert to message JSON to Message
object you can use following code.
// String json Message message = new Gson().fromJson(json, Message.class);
This will not work if JSON has different naming policy(first letter upper case) as shown below.
{ "Message": "hello world!" }
To make it work, you can use GsonBuilder
to create Gson
with UPPER_CAMEL_CASE
as field naming policy. This is shown below.
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create(); Message message = gson.fromJson(json, Message.class);