Tuesday, August 13, 2019

Create a new branch with git from command line

Working with git from a terminal is more efficient, so here are some basic commands:

1. Get up to date:
git pull

2. Create a new branch locally from dev branch (this is just an example, can be any other branch, like master, etc.)
git checkout -b AI-Task123 dev

(where AI are my initials so we know who owns the branch and Task123 is the task number for tracking)

3. Push branch on github:
git push origin AI-Task123

4. Commit your code:
git commit -m "Your message"

5. Push the code:
git push

Other useful commands:

6. Delete a branch
git branch -D AI-Task123

Reference: https://github.com/Kunena/Kunena-Forum/wiki/Create-a-new-branch-with-git-and-manage-branches
https://stackoverflow.com/questions/4470523/create-a-branch-in-git-from-another-branch

Tuesday, July 30, 2019

Kubernetes - how to get container logs inside a pod

A pod can have multiple containers inside. If you want to see the logs there are 2 simple commands to run:

1. kubectl describe po pod-name-1234
This will display information about the pod. Here you will find container name/s.

2. kubectl logs pod-name-1234 -c container-name
This will show logs from container inside the pod.





Friday, July 19, 2019

Installing Create React App with Typescript

I have found the following very interesting tutorial:

https://medium.com/@rossbulat/how-to-use-typescript-with-react-and-redux-a118b1e02b76

Here are some things that did not work at first.

1. Installing Create React App with Typescript
I had an older version of create-react-app, so it did not install typescript.
So i had to uninstall the global version and reinstall so that npx always takes the latest version:
npm uninstall -g create-react-app
npx create-react-app app_name --typescript

As described: https://facebook.github.io/create-react-app/docs/getting-started

2. Installing TSLint-React
I am using VSCode and when i run tslint --init i got this error:
tslint : The term 'tslint' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or 
if a path was included, verify that the path is correct and try again.
I had to install like this:
npm install -g tslint typescript tslint-react
tslint --init


Saturday, June 29, 2019

Start with Django on Windows

1. Install Python:
Download and install from here: https://www.python.org/downloads/
Check python is install by running following command in a CMD.
python -V
should display something like:
Python 3.7.3

2. Create virtual environment.
Create a new folder for your project:
mkdir myproject
Go to the newly created folder:
cd myproject
Run following command (the . at the end means you want to use current directory for virtualenv installation, so don't foget about it):
virtualenv .
Check virtualenv was installed by running the following command:
dir
You should see something like this:








3. Activate virtual environment
Scripts\activate
You will see the name of your virtual environment (myproject) in our case in front of every line in the terminal.
To deactivate you can simply run:
Scripts\deactivate

4. Install Django in this isolated virtual environment:
Make sure the virtual environment is activated and run:
pip install django

5. Check django was installed in your virtual environment:
pip freeze
you should see something like this:





If you see more things installed it means your virtual environment was not activated before installing django, and you have installed it locally on your PC not on the virtual environment.

6. Create new project.
Create a scr folder and move inside it:
mkdir src
cd src

run the following command to start the project (again . means current directory):
django-admin startproject trydjango .

run dir command to see what happened, you should see a folder structure like this:







run following command to run your server:
python manage.py runserver

you should see something like this:


7. Open it in your browser: http://localhost:8000/


















8. Connect a db:
python manage.py migrate

9. Create superuser:
python manage.py createsuperuser
Connect to http://localhost:8000/admin with your new user and password.

10. Split your app into components. Create first component:
python manage.py startapp products

11. Create Products model:

from django.db import models

# Create your models here.
class Product(models.Model):
title = models.TextField()
description = models.TextField()
price = models.TextField()

12. Update db. This is done everytime you change something:
python manage.py makemigrations
python manage.py migrate

If you go to http://localhost:8000/admin you will see a new sction Products.

13. Work with python shell:
python manage.py shell

14. Meaning of blank and null:
models.TextField(blank=True, null=True)
'blank=False' means field is required while 'blank=True' means field is not required
'null=True' means the field can be empty/null in the database while 'null=False' means the field cannot be empty/null in the database.

15. Create a view:
in views.py
def home_view(*args, **kwargs):
return HttpResponse("<h1>Hello world!</h1>")

in urls.py
from pages.views import home_view

urlpatterns = [
path('admin/', admin.site.urls),
path('', home_view, name='home'),
]

16. Create templates:
Create a folder templates and inside it a home.html with some html, then change views.py like this:

def home_view(request, *args, **kwargs):
return render(request, "home.html", {})

17. Inheritance.
Create base.html
<!DOCTYPE html>
<html>
<head>
<title>TryDjango</title>
</head>
<body>
<h1>Nav bar</h1>
{% block content %}
replace me
{% endblock %}
</body>
</html>

make it appear in all pages. home.html example:
{% extends 'base.html' %}

{% block content %}
<h1> Hello world!</h1>
{{ request.user }}
{{ request.user.is_authenticated }}
{% endblock %}

18. Include something on every page:
{% include 'navbar.html' %}

19. Adding and working with context:
in views.py
def about_view(request, *args, **kwargs):
my_context = {
"my_text": "This is about me",
"this_is_true": True,
"my_number": 123,
"my_list": [123, 456, 789, "abc"]
}
return render(request, "about.html", my_context)

in about.html
<ul>
{% for my_sub_item in my_list %}
{% if my_sub_item == 456 %}
<li>{{ forloop.counter }} - {{ my_sub_item|add:22 }}</li>
{% elif my_sub_item == "abc" %}
<li>This is not ok</li>
{% else %}
<li>{{ forloop.counter }} - {{ my_sub_item }}</li>
{% endif %}
<li>{{ forloop.counter }} - {{ my_sub_item }}</li>
{% endfor %}
</ul>

20. Working with forms:
create forms.py
from django import forms

from .models import Product

class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = [
'title',
'description',
'price'
]

in products/views.py
def product_create_view(request):
form = ProductForm(request.POST or None)
if form.is_valid():
form.save()
form.ProductForm()
context = {
'form': form
}
return render(request, "products/product_create.html", context)

in products/templates/products/product_create.html
{% extends 'base.html' %}

{% block content %}
<form method='POST'> {% csrf_token %}
{{ form.as_p }}
<input type='submit' value='Save' />
</form>
{% endblock %}

21. Class based views:
blog/views.py
from django.shortcuts import render, get_object_or_404

from django.views.generic import (
CreateView,
DetailView,
ListView,
UpdateView,
DeleteView
)

from .models import Article

# Create your views here.

class ArticleListView(ListView):
template_name = 'articles/article_list.html'
queryset = Article.objects.all() # <blog>/<modelname>_list.html

class ArticleDetailView(DetailView):
template_name = 'articles/article_detail.html'
# queryset = Article.objects.all()

def get_object(self):
id_ = self.kwargs.get("id")
return get_object_or_404(Article, id=id_)

Reference: https://www.youtube.com/watch?v=F5mRW0jo-U4

Wednesday, March 14, 2018

Spring Boot - Redirect ?wsdl to .wsdl

1. Create urlrewrite.xml under: /src/main/resources

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE urlrewrite
        PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite3.0.dtd">

<urlrewrite>

    <rule>
        <from>/ws/services?wsdl</from>
        <to>/ws/services.wsdl</to>
    </rule>

</urlrewrite>

2. Add to your @Configuration file.

 @Bean
    public FilterRegistrationBean tuckeyRegistrationBean() {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();

        registrationBean.setFilter(new UrlRewriteFilter());
        registrationBean.addInitParameter("confPath", "urlrewrite.xml");

        return registrationBean;
    }



3. Run the application and test it works bu accessing: 
http://localhost:8080/rewrite-status

Tuesday, February 6, 2018

Selenium - debug your tests in docker container

Do you have UI selenium tests running in a docker container? And if something fails, how easy it is to find the problem?

Here is something that works nicely:

1. I am using VirtualBox and I have an Ubuntu Linux machine with UI with docker and docker-compose installed.
2. Create a docker-compose.yml file:

version: '2'
services:
  hub:
    image: selenium/hub:3.8.1
    ports:
      - "4444:4444"

  firefox:
    image: selenium/node-firefox-debug:3.8.1
    volumes:
      - /dev/shm:/dev/shm
    privileged: true
    dns:
      - <your dns IP>
    environment:
      - TZ=DE
      - HUB_PORT_4444_TCP_ADDR=hub
      - HUB_PORT_4444_TCP_PORT=4444
    depends_on:
      - hub
    ports:

      - 5900

3. Open a terminal at the location of your docker-compose.yml file and deploy the selenium hub and firefox node locally, using following command:
docker-compose up


4. Check the Selenium hub and the Firefox node have started:
docker ps -a


5. Go to the VirtualBox VM Settings -> Network -> Advanced -> Port Forwarding -> and create a new rule so that you can access the container ports highlighted in green in previous image ()both Firefox node and Selenium Hub.


6. Install VNC Viewer:

7. Go to Chrome apps and start it: chrome://apps/

8. Enter localhost:5900 -> Connect -> Password is: secret


9. Here is your container.


10. Last thing you have to do is add this line to your testng.xml (I am using testng). On your local machine project in IntelliJ.

<parameter name="hubUrl" value="http://localhost:4444/wd/hub"/>


From here on you can run and debug your tests inside a local container and see what is happening.

I got this hint from a colleague and it was really helpful. I hope it helps you too :)

Sunday, January 28, 2018

"gem install jekyll" fails on Windows 10


Getting this error when trying to install jekyll on Windows?

gem install jekyll
Building native extensions.  This could take a while...
ERROR:  Error installing jekyll:
        ERROR: Failed to build gem native extension.

Here is a solution that worked for me:

1. Download Ruby 2.3 (not going to work with higher version) according to your OS architecture 32 or 64 bit.
https://rubyinstaller.org/downloads/

2. Run the installer to install ruby. After the installer finishes you will have something like this: C:\Ruby23-x64
You can also check the installation by opening a cammand prompt window and typing:

ruby -v

3. From the same site download DevKit.
4. Double-click on the DevKit archive and extract it to something like C:\DevKit.

5. Open a command prompt and navigate to C:\DevKit.

6. Check your C:\DevKit\config.yml file contains reference to your ruby installation.


7. Run ruby dk.rb init followed by ruby dk.rb install

8. Test DevKit installation by running:
gem install json --platform=ruby. JSON 

should install correctly and you should see with native extensions in the screen messages.
Next run
ruby -rubygems -e "require 'json'; puts JSON.load('[42]').inspect"
to confirm that the json gem is working

9. Install jekyll:
gem install jekyll

10. test jekyll installation:
jekyll -v

Source: https://davesquared.net/2010/08/building-native-extensions-for-ruby.html

Wednesday, January 24, 2018

Find out linux version and x32 or x64

linux version:
lsb_release -a

architecture:
uname -m

where:
i686 = 32 bit
x86_64 = 64 bit


Wednesday, September 13, 2017

Certificates does not conform to algorithm constraints

I have a test that makes a simple REST call with java. I was getting this error:

Certificates does not conform to algorithm constraints

The solution was to run with the following:

-Djdk.tls.client.protocols="TLSv1,TLSv1.1"

Source: https://stackoverflow.com/questions/14149545/java-security-cert-certificateexception-certificates-does-not-conform-to-algori

Monday, August 28, 2017

Change the git repository you are working on

When you need to change the git repository you connect to, here is what you can do:

1. See current repository
git remote -v
you will get something like this:
origin  https://github.com/<your-name>/<repo-name>.git (fetch)
origin  https://github.com/<your-name>/<repo-name>.git (push)
2. Remove current repository
git remote rm origin
Optionally you can run the command at step 1, to see you don't have any repository connection.
3. Connect to new repository
git remote add origin https://github.com/<your-name>/<new-repo-name>.git
If the new repository is empty you can push everything:
git push -u origin master
for other things you can execute:
git status
and continue from there.


Monday, August 21, 2017

'git push heroku master' is still asking for authentication

Even if I executed heroku longin and entered username and password, I keep getting failed login error.

When asked for git heroku credentials enter the following:

username: <leave empty>
password: heroku auth token

Note: the heroku auth token can be retrieved using the following command:
heroku auth:token

Source: https://stackoverflow.com/questions/27810419/git-push-heroku-master-is-still-asking-for-authentication

Friday, August 18, 2017

Change Git Username in Terminal

It can happen you do a "git pull" and notice another user account is logged into git.
In this case this is what you can do to change the url, to use your user and continue working:

See current git url:
git config --get remote.origin.url

Change the git url with your user:
git remote set-url origin https://{new url with username replaced}

Source: https://stackoverflow.com/questions/22844806/change-git-username-in-terminal

Error when running webpack

I had the following code:

webpack.config.js
module.exports = {
entry: './public/app.jsx',
output: {
path: __dirname,
filename: './public/bundle.js'
},
resolve: {
extensions: ['','.js','.jsx']
},
module: {
loaders: [
{
loader: 'babel-loader',
query: {
presets: ['react', 'es2015']
},
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/
}
]
}
};

package.json
{
"name": "hello-react",
"version": "1.0.0",
"description": "Simple react app",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Alina",
"license": "MIT",
"dependencies": {
"express": "^4.15.4",
"react": "^0.14.7",
"react-dom": "^0.14.7"
},
"devDependencies": {
"babel-core": "^6.26.0",
"babel-loader": "^7.1.1",
"babel-preset-es2015": "^6.5.0",
"babel-preset-react": "^6.5.0",
"webpack": "^1.12.13"
}
}


When running webpack in command line I was getting this error

Version: webpack 1.12.13
Time: 1394ms
    + 1 hidden modules

ERROR in ./public/app.jsx
Module build failed: Error: Plugin 19 specified in "D:\\Projects\\HelloReact\\node_modules\\babel-preset-es2015\\index.js" provided an invalid property of "name"
    at Plugin.init (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\plugin.js:127:13)
    at Function.normalisePlugin (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:176:12)
    at D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:210:30
    at Array.map (native)
    at Function.normalisePlugins (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:182:20)
    at OptionManager.mergeOptions (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:298:36)
    at D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:370:14
    at D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:390:24
    at Array.map (native)
    at OptionManager.resolvePresets (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:385:20)
    at OptionManager.mergePresets (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:369:10)
    at OptionManager.mergeOptions (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:328:14)
    at OptionManager.init (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\options\option-manager.js:481:10)
    at File.initOptions (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\index.js:211:75)
    at new File (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\file\index.js:129:22)
    at Pipeline.transform (D:\Projects\HelloReact\node_modules\babel-core\lib\transformation\pipeline.js:48:16)
    at transpile (D:\Projects\HelloReact\node_modules\babel-loader\index.js:14:22)
    at Object.module.exports (D:\Projects\HelloReact\node_modules\babel-loader\index.js:88:12)

Solution(that worked for me): Upgrade babel-core and babel-loader

npm install --save babel-core@latest babel-loader@latest

Running webpack went smoothly after that.

Source: https://stackoverflow.com/questions/35395881/plugin-0-specified-in-babel-preset-es2015-provided-an-invalid-property-of-c

Thursday, August 17, 2017

Download certificate from command line using openssl and import it in your JVM truststore

When you need to download a certificate from a site you have 2 options:

1. Hit F12 in Browser and go to Security Tab -> View Certificate and download it from there.
(this option doesn't seem to work every time, because the option to download is disabled)
or,

2. Use openssl
- download and istall openssl (http://gnuwin32.sourceforge.net/packages/openssl.htm)
- add path to environment variables (PATH=C:\Program Files (x86)\GnuWin32\bin)
- open Command Prompt window and run:

openssl s_client -connect HOST:PORT > "C:\Users\...\mycert.cert"

The mycert.cert file will be saved in the specified location.

Then if you want to import this certificate in java trusted store, run the following command:

"<JAVA_HOME>\bin\keytool" -import -v -trustcacerts -alias server-alias -file "C:\Users\...\mycert.cert" -keystore cacerts.jks -keypass changeit -storepass changeit

Note: to find JAVA_HOME run:
echo $JAVA_HOME
on Linux or
echo %JAVA_HOME%
on Windows

Source: https://serverfault.com/questions/139728/how-to-download-the-ssl-certificate-from-a-website
https://stackoverflow.com/questions/2893819/accept-servers-self-signed-ssl-certificate-in-java-client

Tuesday, July 18, 2017

Git - Find branch creator

When working with branches, and you are in a big team, you end up having a lot of them and you don't know which are still necessary or not.

If you want to do a cleanup, you need to know who created the branches so you can ask them if they can be deleted:

Here is a commad that lists remote git branches by author sorted by committer date:

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n

Source: https://stackoverflow.com/questions/12055198/find-out-git-branch-creator/19135644

Thursday, January 5, 2017

Resolve Bitbucket Pull Request Conflict

Open cmd in your local repository and execute the following commands:
git checkout destination-branch
git pull origin destination-branch
git checkout source-branch
git pull origin source-branch
git merge destination-branch
=> conflicts that need to be solved
 - open file in notepad++ and modify, then save.
git add file_that_was_modified
git commit -m "fixed file_that_was_modified conflict"
git push origin source-branch
done

Monday, November 23, 2015

DUNE Series

The DUNE series written by Frank Herbert and the continued by his son Brian Herbert and science fiction author Kevin J. Anderson were another big and interesting read.

As you probably figured it out by your self I read the books chronologically, because I prefer to do so.

Hunting Harkonnens
The Butlerian Jihad
Whipping Mek
The Machine Crusade
The Faces of a Martyr
The Battle of Corrin
Sisterhood of Dune
House Atreides
House Harkonnen
House Corrino
Paul of Dune
Wedding Silk
The Winds of Dune
A Whisper of Caladan Seas
Dune
The Winds of Dune
The Road to Dune
Dune Messiah
Children of Dune
God Emperor of Dune
Heretics of Dune
Sea Child
Chapterhouse
Hunters of Dune
Treasure in the Sand
Sandworms of Dune

They don't call it the greatest SF novel of all time for nothing. I have to admit this was the biggest journey into imagination that I ever took. The world Frank Herbert created is amazing, the ideas, mind blowing.

It all begins on Earth, when people begun to be too lazy to do chores for them selves, so they had robots and computers to do this. Sounds familiar?

Anyway, a group of humans were disgusted of what humanity became and decided to become superior human beings and rule the world. So they moved their brains into machines to have the best of the two worlds. And so appeared the Titans, in front with their leader Agamemnon.
They have used the computer Omnius and his sidekick, the robot Erasmus to enslave humanity, but they ended up enslaved together with humanity.

In the initial battle during the Butlerian Jihad, humanity barely survived, Earth was destroyed and computers or any kind of thinking machines were forever banned.

Some factions evolved from this. The Bene Gesserit, the Mentats, the Suk Doctors, the Spacing Guild and the Navigators.

The Bene Gesserit were very powerful women. They had overwhelming mental capabilities, they could cure themselves from diseases, transmit memories from one to another and fight very good. They take as their responsibility the continuity of the human race and begin a complex breeding program to achieve the perfect human, the Kwisatz Haderach.

The Mentats were people trained to think like a computer. They were able to remember impressive amounts of data and make projections depending on the available information.They were in hight demand after the computers were banned, and all noble families had a Mentat as adviser.

The Suk Doctors were very competent professionals, highly regarded for their skills in medicine.

The Spacing Guild was a group that handled interplanetary transport. They were using the Navigators to fold space and travel long distances very fast.

The Navigators were initially humans, exposed to large quantities of melange (spice) that enriched their mental capabilities making them able to direct ships safely through space. At the same time, their body was transformed and minimized. They spent their life in melange filled tanks and their addiction was so strong that they died if there was no more spice.

Then we have the great families that fight for supremacy. The most important were the Atreides (the good guys) and the Harkonnens (the bad guys mostly).

And some extra characters like the Ixians that lived on planet X and were responsible for all the technological breakthroughs. And the Tleilaxu, small revolting creatures that were handling biological research and cloning.

It is interesting how all these factions interact until the day the common enemy reappears.

Also the entire story around the desert planet Dune (also called Arrakis) where the creatures that produced spice lived. And how they evolved from sand-trout, an organism that was able to terraform planets to make them livable for the worms. The powerful drug called spice that enhanced the mind and the body but produced a fatal addiction, with the secondary effect that it gave a strong blue color to the eyes.

And many, many other interesting characters and stories.

Also it is interesting to see how closely Frank Herbert studied the Muslim culture and the Arabic world. Many terms come from this culture and the way he describes the people of the desert is so respectful and attentive.

Again the motif of religious war and what people would do for religion is sadly and painfully similar to what is happening now in the world...

I haven't finished the last novel "Sandworms of Dune" but I look forward to what will happen next.

What can I say, the DUNE Saga it's definitively a must read.

Sunday, November 22, 2015

Ender's Game series

Ender's Game is a serie written by Orson Scott Card that has won may SF literature awards and in my opinion no movie was yet made to be better than the book.

I have read the following novels in chronological order,  and loved every bit of it:
Earth Unaware
Earth Afire
Earth Awakens
Ender's Game
Ender's Shadow
A War of Gifts
Shadow of the Hegemon
Shadow Puppets
Shadow of the Giant
Ender in Exile
Shadows in Flight
First Meetings
Speaker for the Dead
Xenocide
Children of the Mind

4 more books are forthcoming.

The universe that Orson Scott Card created is so wonderful and complex it makes you dizzy. The most popular book is of course Ender's Game, but this is the simplest and easiest of them all. It tells how Ender grew up, about his family, about his training and how he was able to defeat the formics, by understanding them.

But if you read only this, it's like never leaving the house, never going into an adventure, a holiday or even the neighbor city. My personal favorites were Speaker for the Dead and Xenocide. They talk about how humans colonized a planet where some strange beings were living. They called them "piggies" and tried to communicate with them.

I had a lot of food for thought in these books. The piggies were interesting life forms. They had several development levels. The females were very small and gave birth to some kind of larvae, then died. The ones who were not fertile were called "mothers" and took care of the larvae. The males developed to maturity and they were the "workers". The most brave and respected were granted the honor to be killed and berried into the ground. From here they grew into a tree that could communicate with the others, a symbol of wisdom. This final state of evolution was called "thinkers" and it was only for the most worthy. The female larvae were put on the tree branches and this is how they were fecundated, and the circle of life continued.

What I thought it was interesting is how amazed they were that humans were born as "workers" in their understanding, and died and all was over.

It made me stop and think. We also have workers and thinkers. We have the opportunity to be both workers and thinkers in our life. So we should stop and think from time to time:
- Who are we?
- Do we like what we are?
- Can we change something for the better?

Also interesting were the political conspiracies done by world powers that used Ender's colleagues as weapons, the religious wars and the details and specifics that Orson Scott Card created for each country. It was interesting to read this book now and make a parallel with what is happening in the world. It is scarily close...



Game of Thrones

Game of Thrones - aka A Song of Ice and Fire is a series written by George R R Martin, and probably one of the most popular at the moment.

I have read the first 5 novels:
A Game of Thrones
A Clash of Kings
A Storm of Swords
A Feast for Crows
A Dance with Dragons

Two more are forthcoming.

I have read all the books, after the First season played on HBO. Then looking at the movie the rest of the seasons was a torment. The episodes were happening so fast. Each episode was like 200 or 300 hundred pages in the book...

Anyway, an interesting thing happened. You know when you read a book (without seeing the movie first) your imagination builds the characters. They all become distinct individuals, and most of the time they are very different from the actors. What happened now is that I got corrupted.. Because of the movie, some of the characters could not be changed. For example Cersei Lanister, or Aria and Sansa Stark, John Snow, The Hound, The Mountain, Tyrion Lanister, and Daenerys were built the same way in my imagination, to the very small details. While Bran for example looks completely different. Maybe the fact that they changed the character, and I did not get very accustomed to him. Who knows?

So the plot is actually pretty simple, I am amazed why it is so popular actually. George R R Martin must have eaten something when he was little to get so lucky as to get produced by HBO.
You have some families that own some lands and they are fighting for territory. Then the weird shit comes in. Dragons exist and giants and of course the white walkers, aka frozen zombies. Nobody froze zombies before, from what I know. So let's say there is some innovation involved. But really it's like a fairy tale for grownups.

Things that were interesting in this book? I liked Aria's training for the many faced god, and I liked some of the dialogs Tyrion had with other characters.

To be continued...

Project "Series"

Ok guys, I know I haven't written anything for a long time. I apologize, but that doesn't mean I stopped reading.

I have actually upgraded to reading on a Kindle Paperwhite. It is incredible. Saves trees, much easier to read than a book, can read with lights off, and it constantly tells you about your progress (eg: you have 4 min left in the chapter, or 11 hours to finish the book, and you are at 20%).

So here is what I've been up to:
I got a little bored of the "Nobel Prize Books" project I started. I will continue it at some point, but right now I had a little fantasy and SF break.

Since last time I have written a post about books, I have read:
1. Game of Thrones (the first 5 volumes) waiting for the rest
2. Ender's Game (the existing 15 volumes) waiting for the rest
3. DUNE (the existing 25 or 26 volumes, I lost the count) and yes there is more, not published yet.

I will tell you a little bit about them, in the next posts. Currently I am at the last volume of DUNE "Sandworms of Dune", 30% through... I'll keep you posted :)

After this, project "Series" will also go on Hold, and I will see what I feel like reading next.