Sunday, October 1, 2017

39. PZU Warsaw Marathon

Somehow 3 years had to pass since my last marathon in Lodz in 2014.

This time I registered in the marathon very spontaneously for several reasons:

1. I wanted to remind myself how is it to attend a marathon, feel the atmosphere and cheer of viewers and to race with others

2. Last 3 months I had off work and sedentary lifestyle and I wanted to verify if it brought any positive effects on me and how it would affect my score in a marathon. During these months I have run a lot and long distances (20-30km) so the effect should be visible.

Indeed, this brought positive results and I've beaten my last record by 20min and finished with net time of 04:05:36



The weather also helped a bit. It was perfect for running: not too cold, not too hot, cloudy and a bit pluvial.

Of course, I have tracked it.



My condition was so good that on the last meters I could push more. I remember the previous marathon when my legs failed more after 35km and I have almost crawled to the finish.

Below are some photos to commemorate that day.







Sunday, June 18, 2017

Confessions of a young father programmer



This is a first blog entry after a long absence.
A lot of stuff was happening recently. Let me explain a bit why it was difficult to force myself to write.

Mostly, this is due to my son who was born in June 2016.
Before my sun was born I heard from many other young fathers that this will completely turn my life upside down and i have to admit - nothing is as it used to be anymore, but that's completely fine. Having a child is as much rewarding as exhausting sometimes :)

Anyway, I'm trying to get myself together and keep up with all the new techs that came to my ear since then but I did not have time to learn more, such as non-blocking, async servers ( e.g. ratpack), JavaRX, JavaScript frameworks (like React), Big Data ( Spark, Flink, Flume, .. do we have any more "F"-like fancy names here?) and Spring ecosystem (Spring Boot and latest Spring 4 new features).

This is an instant fight with self-discipline, planning and.. changing plans when all depends on our "Little Chief".

I know if I wanted to do them all I would do none, so I just thought to concentrate on a single thing first. Just by chance I heard about a contest called "Get Noticed!" (explanation in Polish: http://devstyle.pl/daj-sie-poznac/).
The rule is simple. Each participant has to blog at least twice a week during 3 moths. Every week at least one post should be about the progress in open source project which author should contribute to on Github.
I decided to give it a try and started a brand new blog: https://cloudly.tech where I'm going to write about Cloud related topics and describe my pet project - Servlerless Reservation System.


As I am working from home for over 1.5 year already, it is sometimes hard to sit down and concentrate when all the attention is dragged by a baby screaming in the second room or my wife dragged to tears by him and seeking help from me. What makes it ever worse is the kind of remote work I do which is very demanding (in CrossOver with a very special model of work, more about it in separate blogpost)
The new remote job is also another reason of why I can hardly find some spare time off-work to write anything.
In addition other non-programming projects has taken all my free time. That's it, enough of excuses :)

I wonder how other young fathers programmers went through this first period and keep on going, self-organize and stay productive.
I'm working on the best model now. When I find the silver bullet I will definitely write about it. Hopefully it would help other fathers like me.
I would also read with pleasure experiences and tips from others.
So far I came into the following things that seem to work, but I have problems to turn them into habits:

1. Get up at 6-7 am yet before the kid gets up and starts "catching in the rye". My kid usually wakes up around 9-10. That gives me 2-3h of undisturbed working. After that we usually play and go for a walk until 12.00 and then eat lunch.

2. Listen to podcasts
When we walk I usually listen to some podcasts on my mobile when my boy usually takes a nap, the same when I run.

3. I get back to work at about 1pm (after lunch) or sometimes I run before lunch, then eat a bit later and get back to work at about 2-3pm

4. I try to split my 40h work into 6h * 6 + 4h. It means I have to work on Saturdays and sometimes Sundays, but I noticed that working over 8h a day influences my motivation and clear thinking very much.

* 8h means real hours of work, no coffee, chats, lunch, playing ping-pong, etc.

5. Do sport
As I already mentioned, I run 5-6km twice a week + 1h swimming once a week.
Spreading it every second day in a week looks like a good proportion to cure myself from back and arm pains. It may be first symptoms of RSI but I need to find time to visit a doctor finally to look at it.
I found keeping to this plan very important. I used to have weeks without any move at all, but this only resulted in bad mood, nervousness, pains in body, deprived sleep.

6. Sleep
At least 6-7h of sleep is a minimum to sustain for me. Without it I'm depressed, slow-thinking and physically exhausted.
I've noticed that it is important to go to sleep and get  up in regular hours.
Before I was a night-awl. Recently I have an impression that I'm more productive if I go to bed earlier and wake up earlier.

However, I will repeat again, this plan is extremely hard to make it a habit so far. Sometimes it's enough to stay overnight on an important task to ruin whole week plan.
If I stay late, I cannot wake up early, then I start work later and stay late again (because there are always so many urgent tasks to complete that day) and go to bad late again.. and the circle goes on.

I know everyone has own tricks to stay productive and keep the right work-life balance. Please share yours in comments if you like.











Monday, June 1, 2015

Devoxx4Kids PL

Another edition of devoxx4kids has just passed in Warsaw and again great thanks to organizers. I was just a volunteer and felt some exhaustion but the effort of organizers must have been amazing.



Last year i was taking care of 8-years-old group but this year i wanted a difference and became a teacher of blockly (similar to scratch) for 10-years-old group.


It was quite fun to see the difference of approaches and progress among children. When the rest of the group was in the beginning of exercise, 2 girls were clearly ahead and finishing it. As they confessed later, they already learned scratch before and this clearly shows a need for events like this. Not every school reserves sufficient amount of time for IT education and programming so important in the times we live, even less interest i observe among girls. This results later on in how many women land in IT jobs (very little).

My lecture took only 2 hours so i had rest of the day to see around the other groups and workshops and i come to the conclussion that the most hard groups are the youngest. They very easily loose patience, get tired and run they own path of doing things far away from what the teachers wanted them to learn. But this is not always bad. After all they came here to have some fun and as long as they try some programming, even not according to the teacher‘s plan, i think it‘s good.

The 12-years-old were the most quite and concentrated on what teacher told them to do. Isn‘t it the effect of education system over years that teaches this passiveness and taking what teacher says for granted and staying away from self-exploratory? I hope this is not the case. Thanks to such events children have chance to try their own ideas and noone shold tell them to wander away from the plan.

Seeing a few different lectures like Lego Mindstorms, 3D printers, Scratch, App Inventory  i must say the teachers did realy good job, even if some have mostly technical background and luck experience in working witch children (me included) the way they leaded was very professional.

I know from a back-stage conversations with ordanizers that the whole project of devoxx4kids started as a group of friends who wanted to make a workshop for their own kids last year but since then the event got so much interest that people from other cities than warsaw came in touch with them to organize an event in their town.

I though myself to start it in Lodz. Afer some observations this year and with some help from organizers in Warsaw i think the project has chance to succeed.
Stay tuned..








And some movies:



Wednesday, May 20, 2015

Atmosphere Conference, Cracow 18-19 May 2015



This is my brain dump from Atmosphere Conference in Cracow 18-19 May 2015
Only most important terms to memorize and google about.




JAMIE WINSORBuilding And Releasing A Massively Multiplayer Online Game A nice talk about caveats of game server internals and road of choosing right technology for online platform which is Erlang (elixir to be  precise), a video of the presentation is online http://www.youtube.com/watch?v=_i6n-eWiVn4
Dump:
Elixir
Terraform
https://github.com/undeadlabs/discovery

DUNCAN DAVIDSONWhat we've learned from writing dozens of polyglot micro services
Wunderlist jungle of polyglot micro services
Dump:
Json over Http2
Json over amqp
Spot instances aws

MILEN DYANKOVMicroservices and Modularity or the difference between treatment and cure!
Great presentation of refactoring Oracle demo EJB application into modular according to Uncle Bob`s "clean architecture" principles

Dump:
Jdepend

PIOTR STAPP, MARCIN PRZEKOPDevOps in mBank - lesson learned 
Dump:
Wcf connection (client-server)
Nuget CI
Splunk for log mgmt.


























Demo:



LEV POPOVService Operations Evolution at Spotify












KONRAD MALAWSKINeed for Async: In pursuit of scalable internet-scale applications
Dump:
Concurrent 《 lock free 《 block free
CAS compare and set Blocked Queue lock free
ConcurrentLinkedQueue wait free

C10k 10000 concurrent connection problem of scalability - epool function in linux

Distributed systems:
- latency enhancement by backup requests
- avoided duplicate load by combined requests

 ANDRZEJ GRZESIKThe path to repeatable builds

Dump:

TOMASZ NURKIEWICZHystrix – managing failures in distributed systems


Dump:
Hystrix dashboard
Turbine for multiple instances monitoring and aggregating to single stream


KASZ SZYDLOEnabling Continuous Delivery    Book worth reading: http://www.growing-object-oriented-software.com/

MARCIN BAZYDLOStrongly Typed Logs - Journeyman's story 


Dump: 
Kafka, Redis + ELS stack
Semantic logs
Elastic search depends on Lucene schema, version is important in the logs cause db supports many versions of the app throught lifespan
Zipco for distributed request tracing
Emaze - presentation editor

SETH VARGOThe 10 Myths of DevOps 
Google's April Fool's Day spot: Google Actual Cloud


   

Monday, July 14, 2014

Copy Android Kindle books to PC

In my previous post I explained how to use ADB utility to copy files from Android phone to PC.
If you happened to use Kindle eBook reader on Android and wondered where it stores books bought in Amazon, then it's here:

/sdcard/Android/data/com.amazon.kindle/files

File extension used by Amazon books is .prc
You can copy the file to PC using command like:

adb pull /sdcard/Android/data/com.amazon.kindle/files/B00FOT936Y_EBOK.prc /tmp/

You can also push .prc books to Android similar way:

adb push /tmp/mybook.prc /sdcard/Android/data/com.amazon.kindle/files/mybook.prc

If you bought the book from Amazon then it will be secured with DRM. This is easy to remove, some people do it even though illegal.




Backup Android photos with ADB

During my vacation a few days ago my Android phone (Samsung Galaxy S1) crashed unexpectedly.
I can only imagine that the reason was too little free sdcard space, but I'm not sure.
It happened to me already the second time and the first time I fixed it so that I rebooted the phone in recovery mode (reboot with pressing POWER + VOLUME UP + MENU buttons) and did factory reset, obviously loosing all data which was not backed up on the phone.
I think it could work as well this time, but the problem is I had plenty of nice picks done on vacation on my phone and would like to rescue them :)

This is what I did:

  1. Reboot phone in recovery mode (as described previously)
  2. Connect phone to PC with USB
  3. Run adb tool to restore photos to PC


I am using Ubuntu on my PC but the following would work similar on other OS. The only thing you will probably need to change is path to the temp folder on PC.


  • Run adb as root so that you can mount your sdcard in next steps


# adb root


  • Mount sdcard. Maybe you don't' need this step and your sdcard is already mounted. Mine was not.


# adb shell

then in shell type:

# mount /sdcard

Now you can list content of sdcard

# ls /sdcard

Among files on the list I could see folder DCIM
This is where camera photos and films are saved so I grab this to my temp folder.


  • Copy photos and videos to temp folder on PC


First exit shell:

# exit

Then copy:

# adb pull /sdcard/DCIM /tmp

This can take some of your drive space so be prepared otherwise the command will exit with message:
"No space left on device"





Thursday, June 5, 2014

RaspBMC Remote Desktop

First of all, although possible to connect to setup remote desktop on RaspBMC it works awfully slow and probably does not bring a other usability than navigating through UI.
Video simply hangs so it's impossible to watch any.

These are the steps to set it up:
1.  Open your favorite text editor and save the script,

e.g. command : nano vncserver
and paste this script:

!/bin/sh

case $1 in
  start)
    if [ -f /var/run/vnc.pid ] ; then
      echo "VNC server is already running"
    else
      initctl stop xbmc
      sudo vnc_dispmanx 2>/dev/null &
      echo $! | sudo dd of=/var/run/vnc.pid
      initctl start xbmc
    fi
    ;;
  stop)
    if [ -f /var/run/vnc.pid ] ; then
      sudo kill -TERM $(cat /var/run/vnc.pid)
      sudo rm /var/run/vnc.pid
    else
      echo "VNC server is not running"
    fi
    ;;
  *)
    echo "Usage $0 start|stop"
    ;;
esac

2. chmod +x vncserver

3. sudo mv vncserver /usr/local/sbin

4. vncserver start
If you want to check if it's running, check if vnc_dispmanx has the default VNC port open (5900)
pi@raspbmc:~$ sudo netstat -lnptu |grep vnc
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      3687/vnc_dispmanx

tcp6       0      0 :::5900                 :::*                    LISTEN      3687/vnc_dispmanx

5. When you're done, you should turn it off, as it's quite CPU hungry: 

vncserver stop

Connecting with VNC viewerFrom Ubuntu you can use vncviewer:

sudo apt-get install vncviewer

vncviewer 192.168.1.101:5900


Tuesday, January 7, 2014

Arduino LM35 termometer

In my previous post I described how to measure temperature with DS18B20 sensor. In this post I will show an alternative with LM35.


The source code with comments looks like this:
And the circuit like this (image borrowed from other interesting blog)

Additional explanation can be found in Arduino blog.
 

Arduino ds18b20 termometer


Waterproof DS18B20 Digital temperature sensor + extras

Recently I bought DS18B20 senson in waterproof sonda like that.
The purpose of it is to be able to measure water temerature in aquarium.
In broader scope I'd like to build in future a remote aquarium management kit with Arduino and Raspberry Pi, that would measure water parameters, record them and expose online, as well as manage light, feading, etc. remotely.

How to use DS18B20?

First you need to install 3rd party library of Dallas Temperature.
Download the zip from GitHub and extract in Arduino lib folder -
libraries can be installed as described here.
So i got:

~/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp
~/sketchbook/libraries/DallasTemperature/DallasTemperature.h

I restart Arduino IDE and save program source:
Now lets connect circuit

The pullup resistor in most of tutorials is 4.7 KOhm but any from 2k to 5k should work. I tested my circuit with 4.9kOhm.

Sunday, December 29, 2013

GitLab SSH

GitLab HELP instructions on how to connect GitLab with SSH seems not to be 100% complete.
What it mentions is:

SSH Keys

SSH key allows you to establish a secure connection between your computer and GitLab
To generate a new SSH key just open your terminal and use code below. 

ssh-keygen -t rsa -C "user@example.com"
# Creates a new ssh key using the provided email
# Generating public/private rsa key pair...
 
Next just use code below to dump your public key and add to GitLab SSH Keys 

cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
 
When I tried this and uploaded public RSA key to my GitLab profile i still got error when trying 'git push':

Agent admitted failure to sign using the key.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

So i read somewhere that missing part is to execute:

ssh-add ~/.ssh/id_rsa

Now SSH connection works fine.

Sunday, December 22, 2013

Raspbmc home media center

Most of recent TV sets are already packed with bunch of hi-tech stuff that change the way we perceive watching TV. In the past we were bound to a range of channels, even though having satelite at home gave us quite a wide rande of it - counted in hundreds. The Internet added completely new possibilities. Almost every TV available today  has internet connectivity. We do not any longer have to stick to what is beeing broadcasted but we choose ourselves what to watch and when.

What if you have an old TV without RJ45 socket or WiFi? Do you have to buy special subscription or decoders to access a large entertainment centers?
No, you can have it all for free with Raspberry Pi.

All you need to do is download Raspbmc Linux image and put it on SD card, which you then insert to Raspberry Pi.
Then you plug Raspberry Pi to internet - Raspbmc has DHCP configured by default so it will boot and start setup automatically after you tun it on.
Then you also plug it to TV with HDMI cable and watch things happen.


Now..hm... I don't have a keyboard, how to steer my new media centre?
XBMC offers a few possibilities of remote control.
I found Yatse on my Andorid smart phone the easiest way.

You can then add audio and video plugins that allow you to watch or listen to various media channels, search through Youtube or Vimeo and many, many others...

Still don't forget you have a small computer on board so you can do other stuff with it, program, setup webserver, etc. If you'd like to connect to it even for such a prosaic thing as uploading some files, you can access it through SSH.

Here's a good tutorial how to do it.

E.g. to upload file to /tmp folder on Pi:
scp file.mp4 pi@192.168.1.105:/tmp

The default pi password is raspberry

If you want you can configure WiFi on Raspbmc like this.

You can also play with XBMC and try extending it with new features. Have a look at development tutorials here.

If you'd like to have access to media channels in your local language, like me in Polish, you'd probably find some plugins for your language in the web. I found some for mine.

Have fun !

Wednesday, November 13, 2013

Amazon AWS Change Instance Type

Changing instance type is quick with Amazon AWS CLI tools.
First download tools from http://aws.amazon.com/cli/
Then setup env. variables for easy use of tools:

1. Set EC2_HOME as path to your unzipped archive
2. Add EC2_HOME/bin to your PATH variable
3. Set env. variables with your access key and secret key which you can get from https://console.aws.amazon.com/iam/home?#security_credential
e.g.:
AWS_ACCESS_KEY_ID = AKIAIOSFODNN7EXAMPLEAWS_SECRET_ACCESS_KEY = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Follow the steps here for more guidance.
You can also check how to install it on Ubuntu here.

3. Test it, type from command line:
ec2-describe-instances

You should get response with info about your AWS instances.

Then when you already have instance running, let's say of type m1.small and you want upgrade it to m1.medium follow the below steps (supposing you have instance with ID = i-a57e31dc):

NOTE: After you change type your public DNS of instance will change. You must have EBS boot instance (not instance-store or S3-based AMI).

1. c2-stop-instances i-a57e31dc

2. Optionally, create a snapshot of old instance for future use - see ec2-create-image


3. ec2-modify-instance-attribute --instance-type m1.medium i-a57e31dc

4. ec2-start-instances i-a57e31dc

Friday, November 1, 2013

Rapspberry Pi Webcam

Next trial with RP, this time setting up a webcam over HTTP.

I followed the steps:

1. Connect webcam to USB port, check device is recognized


lsusb
I got:

Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 046d:0802 Logitech, Inc. Webcam C200
Bus 001 Device 005: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter


2. Install Motion



sudo apt-get install motion
3. configure Motion



sudo nano /etc/motion/motion.conf
This is my file:

daemon=on
norm=3
input=8
auto_brightness=on
framerate=2
height=480
width=640
jpeg_filename=motion/%Y%m%d/%v-%H%M%S-%q
noise_tune=on
output_all=off
output_motion=off
output_normal=on
quality=100
snapshot_interval=300
target_dir=/home/pi
text_left=(c) Nestcam
text_right=%d %b %Y\n%k:%M:%S
threshold=500
v4l2_palette=6
videodevice=/dev/video0
webcam_localhost=off
webcam_maxrate=2
webcam_port=8080
wecam_quality=100

sudo nano /etc/default/motion
It should be:

start_motion_daemon=yes

4. Start motion daemon:

sudo /etc/init.d/motion start

Check logfile for any errors:

tail -f /var/log/syslog

If all is fine open in browser http://<your Raspberry Pi IP address>:8080



Raspberry magic

Long time since I've written last time on my English blog page. Time to switch a bit from Polish piczkowskipl.blogspot.com to this one.

Some time ago I met Raspberry Pi for the first time. I had a chance to play with it and went as far as setting it in headless mode.

Today I got it back from dust and gave it next chance.
My aim was to set it up as small home server and media center.

At home I have a dynamic IP which updates more-less every 24 hours. I know solutions like DynDNS. I even used it but it was not perfect. Very often the IP stored in cloud service was not refreshed with new IP of my rooter at home.

My idea was to create a daemon program that would run in background periodically and check if external IP of the router changed. Then it should send me an email with new IP.
As genial as simple :) I could then easily use this IP to connect with remote desktop to my home server.
Surely it would not be useful if I want to setup web page and release it in the Internet to public because still the IP will change but this is not my purpose. My aim is to connect with home server by IP and use it for many purposes like monitoring what's going on at home (smart house) or working on my home machine (upload/download/program/watch a movie?? whatever comes to my mind).

Raspberry Pi seems to be interesting in this context.

Today I will explain how I set up virtual desktop connection with TightVNC.

1. Install TightVNC Server on Raspberry Pi

sudo apt-get install xrdp

2. Start remote desktop server


/usr/bin/tightvncserver
you will be asked for password, type password and do not ser view-only password when you will be asked for this.

3. Check ports on which xtightvncserver is running

sudo netstat -tulpn
Then you will have to setup your router to forward ports, e.g:


192.168.1.107 is the IP of Raspberry Pi in home network behind the router.

On your machine from where you want to connect to Raspberry Pi install TightVNC Viewer, on Ubuntu you can do this with command:

sudo apt-get install xtightvncviewer
Then connect to Raspberry Pi

xtightvncviewer 83.29.84.77:5901

83.29.84.77 is my router external IP, the one that I would like to email myself from PI whenever it changes.

How to email anything from Raspberry Pi?
Very easy with Python:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import smtplib
 
# Specifying the from and to addresses
 
fromaddr = 'fromuser@gmail.com'
toaddrs  = 'touser@gmail.com'
 
# Writing the message (this message will appear in the email)
 
msg = 'Enter you message here'
 
# Gmail Login
 
username = 'username'
password = 'password'
 
# Sending the mail 
 
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

How to check your external IP address?
Very easy with service like http://ifconfig.me/


curl -s http://ifconfig.me
Putting it all together. Python script below gets IP address and compares it with address saved in local file. If for any reason IP is empty or same as the IP in local file then no email is sent. Otherwise an email is sent with new IP and the IP is saved in local file (dyndns.txt)

#!/usr/bin/env python

import smtplib
import subprocess
import sys

def send(ip):    # send mail
 # Specifying the from and to addresses
 fromaddr = 'change_me'
 toaddrs  = 'change_me'
  
 # Writing the message (this message will appear in the email)
  
 msg = "Your IP is  "+ip 
  
  
 # Sending the mail  
  
 server = smtplib.SMTP('smtp.gmail.com:587')
 server.starttls()
 server.login('marcin.piczkowski','mypassword')
 server.sendmail(fromaddr, toaddrs, msg)
 server.quit()

proc = subprocess.Popen(["curl","-s","http://ifconfig.me"], stdout=subprocess.PIPE)
(out,err)=proc.communicate()
ip = out.strip()
print "IP is " + ip

if ip == "": 
 raise SystemExit
else:
 txtf = open("dyndns.txt","rw")
 lines = txtf.readlines()
 oldip = lines[0].strip()
 txtf.close()
 
 if oldip != ip:
  print "Sending ip " + ip
  txtf = open("dyndns.txt","w")
  txtf.write(ip)
  send(ip)
  txtf.close()
 else:
  print "IPs are the same"
  txtf.close()
  raise SystemExit
The script must be given execution rights and dyndns.txt file read/write access

sudo chmod +x myscript.py
sudo chmod 666 dyndns.txt
Then you can schedule with cron to execute this script every 15 minutes:
sudo crontab -e
Add this line at the end of the file

*/15 * * * * python /etc/init.d/myscript.py >> /var/log/dyndns.log 2>&1 &
Above line is correct when you have your script placed in /etc/init.d/
It will store logs in /var/logs/dyndns.log but first you need to create such file and give it read/write access:
sudo touch /var/log/dyndns.log
sudo chmod 666 /var/log/dyndns.log

You can check your cron logs with

grep CRON /var/log/syslog

Now you should get mail with IP in 15 minutes. Let's verify quickly that you really can connect to Raspberry Pi on this IP.
We will start HTTP server on Pi with python, type this in console:

python -m SimpleHTTPServer
Server would listen on port 8000 so you need to forward this port in rooter configuration.
Then type in browser: http://<IP from email>:8000
Server should response with content of folder in which you started SimpleHTTPServer.

In future post we will have a look at how we can run Node.js on Raspberry Pi. Stay tuned!!

Used resources:
[1] http://programmaticponderings.wordpress.com/2012/12/26/installing-tightvnc-on-the-raspberry-pi/
[2] http://www.pythonforbeginners.com/systems-programming/sending-emails-using-google/
[3] http://www.linuxjournal.com/content/tech-tip-really-simple-http-server-python