Microservices in Spring

And so I was trying to learn microservices and since I'm from the JavaEE background it's given that I will first check: http://wildfly-swarm.io/tutorial. I found the code too complicated, how can I focus on the business problem if it's like that.

And so I shifted my attention to Spring Cloud, although I preferred understanding how things under, I would admit that having annotations to do things is a welcome change in my code.

And so here's the functional demo code I developed: https://github.com/czetsuya/Spring-Cloud-Eureka-Hystrix-Demo

PS: I'm too lazy to write a more detailed explanation :-) But importing the projects and running in the order I've mentioned should do the trick.

Install Java8 in Ubuntu

A set of commands to install Java8 on Ubuntu.


sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Now set JAVA_HOME in the environment variables.

sudo vi /etc/environment
// add
JAVA_HOME="/usr/lib/jvm/java-8-oracle"
// save

// reload
source /etc/environment

// check
echo $JAVA_HOME

Fantasiskapning

Et konsulentselskap lager fantasianslag på verdiskapningen til vindkraft for å få det til å se fornuftig ut.

Olje- og energidepartementet har tvunget Tromsø kommune til å ta imot Nord-Norges største vindpark. Turbinene er opp til et par hundre meter høye, og det skal reises sekstisyv stykker av dem nær et populært hytte- og turistområde.

Turbinene er uønsket både av lokalpolitikere og befolkningen. Bortsett fra en bagatellmessig økning i skatteinntekter og en rikere naturopplevelser for dem som liker store maskiner, har det vært vanskelig for lokalbefolkningen å se fordelene ved dette prosjektet.

Eieren, Prime Capital AG, bestilte derfor en rapport om prosjektets verdiskapning. Antakeligvis jobbet de etter hypotesen om at dersom opinionen er negativ, så er det fordi den ikke er tilstrekkelig feilinformert.

Rapporten, skrevet av Ny Analyse, er nemlig ikke faglig holdbar.

Verdiskapningen til et prosjekt er differansen mellom inntekter og kostnader. Om du for eksempel starter en bitte liten vindpark, installerer en turbin til ti millioner og selger strøm for elleve millioner, ja da har vindparken din skapt verdier for én million.

Men Ny Analyse er ikke enig. En slik definisjon av verdiskapning ville nemlig gitt triste tall for vindkraften. Vindkraft krever subsidier, og starter dermed i rødt når verdiskapningen skal regnes ut.

For i det hele tatt å få komme i pluss må vi derfor ta med inntekter som ikke fremkommer i det bedriftsøkonomiske regnskapet. For vindkraft er dette hovedsakelig at dagens vindparker bidrar til forskning på mer effektive turbiner i fremtiden. På minussiden kommer skader på lokale naturperler. Om vindkraft til slutt kommer i pluss eller minus er vanskelig å si. Store beløp er det uansett ikke snakk om.

Så i stedet for å bruke den vanlige definisjonen på verdiskapning fra læreboken, har Ny Analyse valgt å bruke de samlede kostnadene som mål på verdiskapning. I følge denne logikken vil for eksempel statens kjempetap på SAS være ren verdiskapning. At selskapet har gått med underskudd i årevis har ingen betydning.

Dermed kan konsulentselskapet trylle frem at «Nordlys», som vindprosjektet heter, leverer en lokal «verdiskapning» på 471 millioner kroner. Går det an å være mot det da?

Ny Analyse sier egentlig at kostnadene til prosjektet ikke har noen som helst alternativ anvendelse. Bygningsarbeiderne som skal installere turbinene, ligger på sofaen og venter på brev fra Prime Capital AG. Byggemateriell som skal brukes ville ellers blitt destruert, eller kanskje forsvunnet i løse luften.

Konsulentene tar selvsagt helt feil. Det er ikke flust med ledige bygningsarbeidere, spesielt ikke i Tromsø. Byggemateriell ville blitt solgt til noen andre om ikke Prime Capital AG hadde kjøpt det.

Det er nettopp derfor verdiskapning for enkeltprosjekter er differansen mellom inntekter og kostnader. Prosjektets kostnader reflekterer hvilken verdi disse innkjøpene ville hatt om de ble anvendt av noen andre.

Ny Analyse begrunner sitt metodevalg med at det er slik landets samlede verdiskapning regnes ut. Bruttonasjonalprodukt er totalt salg til sluttbruker, altså samfunnets totale kostnad. Men det er jo fordi totalt salg summerer hver enkelt bedrifts bidrag i verdikjeden.

Prisen på et brød er for eksempel summen av verdiskapningen til bonden, bakeren og butikken. Butikkens verdiskapning er likevel fortsatt differansen mellom utsalgspris og betaling til bakeriet.

Enten så har Ny Analyse vært klar over at metoden de har brukt ikke er god, eller så har de bare begått en tabbe. Jeg er usikker på hva som er verst.

Men det er klart, for at vindkraft skal fremstå som fornuftig, er det nødvendig med denne type triks. Siden vindkraft fortsatt krever subsidier, så er i utgangspunktet kostnadene høyere enn inntektene. Verdiskapningen er derfor i beste fall helt marginal.

Og, joda, realiseringen av vindkraftprosjekter øker nok forskningen på mer effektive turbiner. Men om vi først skal velge å subsidiere utvikling av fremtidig energiteknologi, kan vi jo vurdere å vri dem over på noe som ikke ødelegger naturperler.







What is the yield curve forecasting?

It's well-known that in the United States, recessions are often preceded by an inversion of the yield curve. Is there any economic rationale for why this should be the case? 

Most yield curve analysis makes reference to nominal interest rates. Economic theory, however, stresses the relevance of real (inflation-adjusted) interest rates. (The distinction does not matter much for the U.S in recent decades, as inflation has remained low and stable). According to standard asset-pricing theory (which, unfortunately for present purposes, abstracts from liquidity premia), the real interest rate measures the rate at which consumption (a broad measure of material living standards) is expected to grow over a given horizon. A high 1-year yield signals that growth is expected to be high over a one-year horizon. A high 10-year yield signals that annual growth is expected, on average, to be high over a ten-year horizon. If the difference in the 10-year and 1-year yield is positive, then growth is expected to accelerate. If the difference is negative--i.e., if the real yield curve inverts--then growth is expected to decelerate.

What is the economic intuition for these claims? One way to think about this is in terms of Friedman’s Permanent Income Hypothesis, which states that an individual’s desired consumption expenditure today should depend not only on current income, but the likely path of his/her income over the foreseeable future. The logic of this argument follows from the assumption that people are willing and able to smooth their consumption over time, given their expectations over how their incomes are likely to evolve over time. For example, if people expect their income to be higher in the future, then they will want to consume more today in order to smooth out their consumption. They can attempt to do so by saving less (or borrowing more). If a community is collectively “bullish” in this sense, desired consumer spending should rise in the aggregate, and desired saving should fall, leading to upward pressure on the real interest rate.

Alternatively, suppose that firms suddenly turn bullish on the likely returns to capital spending. Then the resulting increase in the demand for investment financing should drive real interest rates upward. In this case as well, a higher real interest rate signals the expectation of a higher rate of economic growth. If individual expectations over future prospects are correct more often they are incorrect, then higher real interest rates today should be correlated with higher future growth rates.


So, in theory at least, an inverted yield curve does not forecast recessions--it forecasts growth slowdowns. Nevertheless, there is a sense in which an inverted (or even flat) yield curve can, in some circumstances, suggest that recession is more likely. Here's the basic idea.

Consider an economy that grows over time, but where growth occurs unevenly (i.e., the economy alternates between high- and low-growth regimes). Imagine, as well, that the economy is occasionally buffeted by negative “shocks”—adverse events that occur at unpredictable moments in time (an oil price spike, a stock market collapse, etc.). It seems clear enough that in such an economy, recessions are more likely to occur when a shock of a given size occurs in a low-growth state as opposed to a high-growth state.

Now, as explained above, suppose that an inverted yield curve forecasts a deceleration in growth. Then the deceleration will entail moving from a higher growth state to lower growth state. Suppose this lower growth state is near zero. In this state, growth is now more likely to turn negative in the event of a shock. In this way, an inverted yield curve does not forecast recession; instead, it forecasts the economic conditions that make recession more likely.

How does this idea match up the data? Here is a plot of the 10-1 real yield spread in the United States from 1985-2018 (blue line) along with the year-over-year growth rate of real per capita consumption--nondurables plus services (orange line).
Well, it's not perfect, but as is clear from the figure, the real yield curve flattened and inverted prior to each of the past three recessions. Consistent with the theory, note that consumption growth tends to decelerate as the yield curve flattens. This is true even in non-recessionary episodes. In particular, the consumption growth deceleration of 1985-85, 1988-89, and 2006-07 were each associated or preceded by a flattening or inverted yield curve. Each of the three recessions occurred when consumption was growing at a moderate to low pace.

Were the recessions that occurred following yield curve inversion forecastable? The proximate cause of the 1990 recession was the Iraqi invasion of Kuwait and the associated spike in world oil prices. Is it plausible to believe that bond market participants knew well in advance Saddam Hussein’s plans of invasion? The proximate cause of the two most recent recessions were asset price collapses (some blame Fed tightening, but theoretically gradual tightening should only cause a slowdown in growth, not a sharp collapse). While many people may have had a sense of impending doom, it seems unlikely that anyone knew years in advance the exact date of collapse. According to the interpretation here, the severity of the Great Recession was in part due to the fact that the economy was already growing slowly at the time of the collapse in real estate prices. While consumption growth did slow prior to the collapse of the “dot com” asset price bubble in 2000, it grew at a moderate rate entering that recession. Accordingly, the recession of 2000-2001 is one of the mildest ever recorded.

Does the recent flattening of the yield curve portend recession? Not necessarily. The flattening of the real yield curve may simply reflect the fact that real consumption growth is not expected to accelerate or decelerate from the present growth rate of about 1% per annum. On the other hand, a 1% growth rate is substantially lower than the historical average of 2% in the United States. Because of this, the risk that a negative shock (of comparable magnitude to past shocks) sends the economy into technical recession is increased. While the exact date at which the shock arrives is itself is unpredictable, the likelihood of recession is higher relative to a high real interest rate, high growth economy.

Social Login using REST FB


This is an implementation tutorial on how we can use REST FB to enable facebook social login on our web application.

Basically, it's a project created from javaee7-war template.

To run this app you need to set up a Facebook application with callback url=/oath_callback

pom.xml - we need to define the rest fb dependency which is a java library for logging in facebook.
<dependency>
<groupId>com.restfb</groupId>
<artifactId>restfb</artifactId>
<version>2.9.0</version>
</dependency>

<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
<version>1.0.2.Final</version>
</dependency>

Callback Servlet -
package com.broodcamp.restfb.servlet;

import java.io.IOException;

import javax.inject.Inject;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.broodcamp.restfb.provider.FacebookProvider;
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.Parameter;
import com.restfb.Version;
import com.restfb.types.User;

@WebServlet("/oath_callback")
public class OauthCallbackServlet extends HttpServlet {

private static final long serialVersionUID = 4400146595698418400L;

private static Logger log = LoggerFactory.getLogger(OauthCallbackServlet.class);

@Inject
private FacebookProvider facebookProvider;

private String code;

@Override
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
code = req.getParameter("code");
if (code == null || code.equals("")) {
throw new RuntimeException("ERROR: Didn't get code parameter in callback.");
}
String accessToken = facebookProvider.obtainAccessToken(code);
FacebookClient facebookClient = new DefaultFacebookClient(accessToken, Version.LATEST);
User facebookUser = facebookClient.fetchObject("me", User.class, Parameter.with("fields", "email,first_name,last_name,birthday"));
log.debug("FB User firstName={}, lastName={}, email={}, birthday={}", facebookUser.getFirstName(), facebookUser.getLastName(), facebookUser.getEmail(),
facebookUser.getBirthday());

RequestDispatcher dispatcher = req.getRequestDispatcher("account.jsf?accessToken=" + accessToken);
dispatcher.forward(req, res);
}
}

Facebook Provider - Provider class for initializing the facebook api.
package com.broodcamp.restfb.provider;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;

import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.FacebookClient.AccessToken;
import com.restfb.Version;
import com.restfb.scope.FacebookPermissions;
import com.restfb.scope.ScopeBuilder;

@Singleton
@Startup
public class FacebookProvider {

private String appId = "xxx";
private String appSecret = "yyy";
private String redirectUrl = "http://localhost:8080/restfb-demo/oauth_callback";
private String loginDialogUrlString;

@PostConstruct
private void init() {
ScopeBuilder scopeBuilder = new ScopeBuilder();
scopeBuilder = scopeBuilder.addPermission(FacebookPermissions.EMAIL);
scopeBuilder = scopeBuilder.addPermission(FacebookPermissions.PUBLIC_PROFILE);

FacebookClient client = new DefaultFacebookClient(Version.LATEST);
loginDialogUrlString = client.getLoginDialogUrl(appId, redirectUrl, scopeBuilder);
}

public String getAuthUrl() {
return loginDialogUrlString;
}

public String obtainAccessToken(String verificationCode) {
FacebookClient client = new DefaultFacebookClient(Version.LATEST);
AccessToken accessToken = client.obtainUserAccessToken(appId, appSecret, redirectUrl, verificationCode);

return accessToken.getAccessToken();
}
}

Repository is available at: https://github.com/czetsuya/RESTFB-Demohttps://github.com/czetsuya/RESTFB-Demo

Beregning av potensiell gevinst ved å kutte ut oljeaksjer fra oljefondet

I innlegget «Dårlige argumenter for å beholde oljeaksjene» skrev jeg at fondet potensielt kunne ha økt avkastningen med fem basispunkt om fondet hadde kuttet ut olje. Jeg er blitt anmodet om å vise hvordan jeg kommer frem til det, og det skal jeg nå forklare.

Oljeindeksen har omtrent 35% mer volatilitet enn indeksen. Jeg antok at tre prosent av oljefondet var investert i oljeaksjer (realiteten er antakeligvis nærmere fire), slik at fondets volatilitet er 1,1% høyere med oljeaksjer enn uten. Det siste krever naturligvis en antakelse om at det ikke er noen diversifiseringsgevinst ved å inkludere oljeaksjer.

Dersom vi i stedet økte risikoen i fondet ved å øke systematisk risiko med sammen faktor, så ville det gitt samme økning i meravkastningen. Meravkastningen til indeksen siden oppstart har vært 4,5 prosent med tre prosent risikofri rente. Den risikofrie renten er antakeligvis lavere (data fra Ken French viser at den har vært ca. 1,7%), men på den annen side kan vi ikke vente samme avkastning i fremtiden som den vi har sett historisk, så 4,5% kan være et rimelig anslag.

1,1% x 4.5%=0.05%, altså fem basispunkt. Dette tilsvarer ca. 415 millioner per år med dagens markedsverdi.

Utregningene kan du ser her.

Docker Swarm Commands

This tutorial requires connection to the internet as swarm creation and management needs Docker Hub.

Requirements


  • Windows
  • Docker CE
  • VirtualBox
*Needless to say, a docker for windows must be running.


docker run swarm create
--Download the swarm image locally. Returns a unique id that is required to create a cluster. Example: TOKEN_ID.

docker-machine create -d hyperv --swarm --swarm-master --swarm-discovery token://TOKEN_ID swarm-master
--Create the swarm. controller.

docker-machine create -d hyperv --swarm --swarm-discovery token://TOKEN_ID swarm-node-01
docker-machine create -d hyperv --swarm --swarm-discovery token://TOKEN_ID swarm-node-02
--Add swarm nodes

Use --virtualbox-no-vtx-check, if you're going to use virtualbox

--List all the running machines
docker-machine ls
docker run swarm list token://TOKEN_ID

--Remove from the swarm
docker node rm swarm-node-01

--Demote a swarm master so it can be deleted
docker node demote swarm-master

--Remove the node docker machine
docker-machine rm swarm-node-01

--connect to the master node
docker-machine ssh swarm-master

--must be executed on master node
--creates a swarm
docker swarm init --advertise-addr <SWARM-MASTER-IP>

--login to swarm-node-01 and swarm-node-02 and perform the join command below
--join a machine as a node to the swarm
docker swarm join --token TOKEN_ID <swarm-master-ip>:2377

--what if we forgot the token for joining the swarm?
docker swarm join-token worker

--displays the information about the swarm
docker node ls

Reference

  • https://docs.docker.com/engine/swarm/stack-deploy/#push-the-generated-image-to-the-registry

Dårlige argumenter for å beholde oljeaksjene

Det største problemet med energiaksjeutvalgets rapport er ikke at de anbefaler å beholde oljeaksjene i oljefondet, men at argumentene er så dårlige.

I sitt svar til kritikken av Energiaksjeutvalgets rapport (DN 3. september), lar utvalget være å svare den mest grunnleggende kritikken; hvorfor vi umiddelbart skal godta at spotprisen på olje skal ha så enorm betydning på verdien av oljereservene når den nesten ikke påvirker verdien av oljeselskaper.

Denne svakheten med rapporten er ikke bare en intuisjon, slik utvalget skriver. Det er et faktum at dagens spotpris på olje ikke kan si noe særlig om fremtidige overskudd i oljesektoren.

Verdien til både reserver og oljeselskaper er basert på forventningene til selskapenes fremtidige overskudd, henholdsvis før og etter skatt. Spotprisen, prisen oljen omsettes for i dag, påvirkes veldig lite av slike forventninger. I stedet burde utvalget brukt det beste målet på verdien av selskapenes fremtidige overskudd; aksjeverdien.

Men utvalget mener internasjonale oljeselskaper er noe helt annet enn inntekter fra norsk sokkel. En enkel regresjon viser at det er feil. De siste ti årene har det vært en én til én sammenheng mellom største operatør på norsk sokkel, Equinor, og S&P Global Oil Index.

Dette har stor betydning. Utvalget mener at om verdien av reservene faller med tjue prosent, så faller verdien av oljeaksjene med bare fire prosent, og tapet blir bare 13 milliarder. Om oljereserver og aksjer faller like mye, blir tapet fem ganger større, altså 65 milliarder. Det er penger det også.

I rapporten er det gjort et forsøk på å kompensere for manglende forventninger i spotprisen ved å putte den inn i en avansert statistisk modell. Men dette blir litt som å lappe på en råtten sykkelslange. Når utgangspunktet er dårlig nytter det ikke selv med prima lappesaker.

Én versjon av den avanserte modellen viser for eksempel en negativ sammenheng mellom kontantstrøm og oljeprisen. Høyere oljepris skal altså gi lavere overskudd i oljeselskapene. Det virker ikke veldig intuitivt for en energisektor som hovedsakelig produserer olje.

At finansdepartementet har bedt om at rapporten skal vurdere hele energisektoren, og ikke bare oljeselskaper, gjør ikke saken bedre. Analysen burde vært begrenset til for eksempel selskapene i S&P Global Oil Index.

Oljeaksjer utgjør en begrenset sektor av markedet, og svinger derfor også mye mer. Risikoen til oljeaksjer har vært 35 prosent høyere enn for markedet generelt siste ti år. En vanlig investor bør selvsagt ikke ta ut slike aksjer fra porteføljen. Enhver sektor har større risiko enn markedet som helhet.

Norge er imidlertid allerede er så grundig eksponert for svingninger i oljesektoren at vi ikke får noen som helst spredningsgevinst ved å beholde oljeaksjene. Disse 35 prosentene i ekstra risiko er dermed rent tap, selv om de gjelder en liten andel av aksjene.

At mesteparten av nasjonalformuen er humankapital endrer lite. Også en stor del av humankapitalen vil være relatert til oljeindustrien.

Hadde fondet tatt ut disse aksjene og i stedet økt fondets risiko tilsvarende, ville det gitt en årlig meravkastning for fondet på rundt fem basispunkter. I en finansindustri der noen hundredels prosent meravkastning feires med champagne, er det dumt å avfeie en slik gevinst som for liten.

Utvalgets svar på dette er at oljefondet da blir mer konsentrert og mer risikabelt. Men poenget med utvalget var vel nettopp at de ikke skulle se på oljefondet isolert? Når risikoen for den smale oljesektoren er så høy, så er det ganske opplagt at risikoen for landets samlede formue vil bli lavere og ikke høyere uten slike aksjer i fondet. At oljefondet isolert får litt større risiko betyr jo ingen ting som helst, så lenge vi vet hva grunnen er.

Utvalget mener også å vite at å utelukke oljeaksjer vil gi lavere avkastning eller høyere risiko – en slags forsikringskostnad. Men oljeaksjer prises på akkurat samme måte som alle andre aksjer i markedet, med omtrent akkurat samme forhold mellom risiko og avkastning. Det meste av empirisk forskning støtter at aksjemarkedet er svært velfungerende. Da er det lite poeng i å bruke plass i en offentlig rapport på å bevise det motsatte.

Gevinsten ved å kaste ut oljeaksjene er ikke kjempe stor, men det er vanskelig å se noen god grunn til å la være.